Blockchain 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

我很难理解智能合约及其在网络上的工作方式。我将以ERC20代币智能合约为例:

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堆栈、加载/存储内存、加载/存储存储、调用另一个契约、自杀等等)

    资料来源:


    这是否意味着智能合约只运行一次,然后就存在于区块链上。

    网络中的每个节点都会为您调用的每个事务执行智能合约代码。所以,每次调用智能合约并更改其状态时,智能合约都会运行。 每个节点都必须验证调用智能合约的事务的结果。结果是,至少每个完整节点都将执行代码

    请参阅以太坊开发教程: