Blockchain ERC20代币智能合约是如何工作的?
我很难理解智能合约及其在网络上的工作方式。我将以ERC20代币智能合约为例:Blockchain ERC20代币智能合约是如何工作的?,blockchain,ethereum,smartcontracts,ether,Blockchain,Ethereum,Smartcontracts,Ether,我很难理解智能合约及其在网络上的工作方式。我将以ERC20代币智能合约为例: contract EIP20 is EIP20Interface { uint256 constant private MAX_UINT256 = 2**256 - 1; mapping (address => uint256) public balances; mapping (address => mapping (address => uint256)) public a
contract EIP20 is EIP20Interface {
uint256 constant private MAX_UINT256 = 2**256 - 1;
mapping (address => uint256) public balances;
mapping (address => mapping (address => uint256)) public allowed;
string public name; //fancy name: eg Simon Bucks
uint8 public decimals; //How many decimals to show.
string public symbol; //An identifier: eg SBX
function EIP20(
uint256 _initialAmount,
string _tokenName,
uint8 _decimalUnits,
string _tokenSymbol
) public {
balances[msg.sender] = _initialAmount; // Give the creator all initial tokens
totalSupply = _initialAmount; // Update total supply
name = _tokenName; // Set the name for display purposes
decimals = _decimalUnits; // Amount of decimals for display purposes
symbol = _tokenSymbol; // Set the symbol for display purposes
}
我的问题是:
提前谢谢你 网络上部署的智能合约是谁?令牌是否类似于从该契约实例化的对象? 合同只是以太坊状态树中的一个帐户。每个帐户都有一个余额、一个nonce、字节码和存储树的根哈希。对于普通帐户,字节码和存储哈希为空。对于契约,字节码是契约的代码,存储哈希是契约存储中所有键值对的merkle根哈希。块中唯一包含的是事务本身,以及整个状态树的merkle根哈希。要成为完整节点tho,必须保留状态树(其中键是地址,值是序列化帐户)和每个合约帐户的存储树(其中键是存储位置,值是存储值)的所有键-值对 EVM内存是瞬态的。EVM并不是一个真正的虚拟机(VM对许多人来说都有很强的内涵)——它只是EVM汇编语言的一个解释器。在解释器运行时,它维护一个堆栈(其中每个元素为32字节)和一个内存字节数组,并可以访问契约的存储树。当执行完成时,堆栈和内存字节数组将被丢弃。但是,是的,每个节点都运行事务—在执行过程中的任何一点上,每个节点上的堆栈状态、内存字节数组、程序计数器和存储都应该相同 每个节点都为每个事务运行解释器。就像比特币一样。每个节点都运行一个小脚本,当您试图从以前未使用的输出(假设您了解比特币)中支出时,该脚本会执行。事务的散列在被填充到merkle树中之前是不相关的。在运行执行时,我们关心的只是气体量、传入的数据和调用的合同代码。当执行完成时,契约的存储树可能会更新,因此我们重新计算该树(以及该树可能调用的任何其他契约)的merkle根哈希 状态转换函数有一系列部分。有更新账户余额和非现金的部分(简单的部分),处理天然气和天然气退款的部分,执行EVM字节码的部分(这可能导致账户余额和存储值发生变化),以及为采矿区块和未清部分向矿工付款的部分。该“函数”在中详细定义,并在每个以太坊客户端(c++、go、python等)中独立实现。EVM,或者我称之为解释器的东西,通常只是一个for循环,它增加一个程序计数器,并有一个大的switch语句,告诉它在字节码中的每个操作应该做什么(pop/push堆栈、加载/存储内存、加载/存储存储、调用另一个契约、自杀等等) 资料来源:
这是否意味着智能合约只运行一次,然后就存在于区块链上。 网络中的每个节点都会为您调用的每个事务执行智能合约代码。所以,每次调用智能合约并更改其状态时,智能合约都会运行。 每个节点都必须验证调用智能合约的事务的结果。结果是,至少每个完整节点都将执行代码 请参阅以太坊开发教程: