"内置的智能合约"是指在区块链网络中预先存在的智能合约。这些合约通常由区块链的开发者编写,并在区块链网络创建时就已经部署。这些合约的功能通常包括处理基本的交易和账户管理等核心功能。
以太坊网络就有一种内置的智能合约,叫做 ERC-20 合约1。ERC-20 是一种代币标准,定义了一套接口,任何遵循这个标准的智能合约都可以在以太坊网络上作为代币使用1。以下是一个 ERC-20 合约的简单示例1:
pragma solidity ^0.8.7;contract ERC20Basic {string public constant name = "BasicToken";string public constant symbol = "BAS";uint8 public constant decimals = 18;event Approval(address indexed tokenOwner, address indexed spender, uint tokens);event Transfer(address indexed from, address indexed to, uint tokens);mapping(address => uint256) balances;mapping(address => mapping (address => uint256)) allowed;uint256 totalSupply_;constructor(uint256 total) {totalSupply_ = total;balances[msg.sender] = totalSupply_;}function totalSupply() public view returns (uint256) {return totalSupply_;}function balanceOf(address tokenOwner) public view returns (uint) {return balances[tokenOwner];}function transfer(address receiver, uint numTokens) public returns (bool) {require(numTokens <= balances[msg.sender]);balances[msg.sender] = balances[msg.sender] - numTokens;balances[receiver] = balances[receiver] + numTokens;emit Transfer(msg.sender, receiver, numTokens);return true;}function approve(address delegate, uint numTokens) public returns (bool) {allowed[msg.sender][delegate] = numTokens;emit Approval(msg.sender, delegate, numTokens);return true;}function allowance(address owner, address delegate) public view returns (uint) {return allowed[owner][delegate];}function transferFrom(address owner, address buyer, uint numTokens) public returns (bool) {require(numTokens <= balances[owner]);require(numTokens <= allowed[owner][msg.sender]);balances[owner] = balances[owner] - numTokens;allowed[owner][msg.sender] = allowed[owner][msg.sender] - numTokens;balances[buyer] = balances[buyer] + numTokens;emit Transfer(owner, buyer, numTokens);return true;}
}
这个合约定义了一种基础的 ERC-20 代币,包括了代币的名称、符号、小数位数,以及一些基本的函数,如转账(transfer)、批准(approve)和从其他地址转账(transferFrom)等
比特币(Bitcoin)的设计并没有像以太坊那样包含一个用于编写复杂智能合约的编程语言。然而,比特币确实有一种被称为比特币脚本(Bitcoin Script)的内置脚本语言1。这是一种堆栈式的、不完全图灵完备的语言,主要用于处理交易的输入和输出1。
以下是一个比特币脚本的例子,这是一个最常见的支付到比特币地址(Pay-to-Public-Key-Hash,P2PKH)的脚本1:
OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
这个脚本的工作原理如下1:
OP_DUP
:复制栈顶的元素。OP_HASH160
:弹出栈顶的元素,计算它的 RIPEMD160(SHA256()) 哈希,然后将结果压入栈顶。<pubKeyHash>
:这是公钥哈希,它被压入栈顶。OP_EQUALVERIFY
:弹出栈顶的两个元素,检查它们是否相等。如果不等,脚本执行失败。如果相等,脚本继续执行。OP_CHECKSIG
:弹出栈顶的两个元素,检查签名是否有效。如果有效,将true
压入栈顶。否则,将false
压入栈顶。
然而,比特币脚本的功能相对有限,不能像以太坊的 Solidity 那样编写复杂的逻辑1。因此,比特币主要用于处理简单的交易,而不是复杂的智能合约1。