【问题标题】:Can Someone explain ENUM, EMIT, EVENT in solidity for me有人可以为我解释 ENUM、EMIT、EVENT
【发布时间】:2022-01-11 12:43:08
【问题描述】:
 enum Status{ Vacant, Occupied }
    Status currentStatus;

 event Occupy(address _occupant, uint _value);

【问题讨论】:

    标签: javascript ethereum solidity smartcontracts dapp


    【解决方案1】:

    与其他一些编程语言一样,enum (docs) 允许您将多个值聚合到一种数据类型,其中只有一个值处于活动状态。

    在您的情况下,currentStatus 可以是 Vacant(整数值 0),也可以是 Occupied(整数值 1)。但永远不能是“都不是”,也不能是“两者”,也不能是“其他任何东西”。

    pragma solidity ^0.8;
    
    contract MyContract {
        enum Status {
            Vacant,
            Occupied
        }
    
        Status currentStatus;
    
        // you can effectively pass `0` or `1` integer value here
        function setCurrentStatus(Status _currentStatus) external {
            currentStatus = _currentStatus;
        }
    
        function getCurrentStatusVerbose() external view returns (string memory) {
            if (currentStatus == Status.Vacant) {
                return "The current status is Vacant";
            } else if (currentStatus == Status.Occupied) {
                return "The current status is Occupied";
            }
        }
    }
    

    事件 (docs) 可以被链下应用读取,而不能被其他合约读取。通常,链下应用会监听这些发出的事件以在其结束时执行操作。

    pragma solidity ^0.8;
    
    contract MyContract {
        event Occupy(address _occupant, uint _value);
    
        enum Status {
            Vacant,
            Occupied
        }
    
        Status currentStatus;
    
        function setCurrentStatus(Status _currentStatus) external {
            currentStatus = _currentStatus;
            // emitting the `Occupy` event
            emit Occupy(msg.sender, uint(_currentStatus));
        }
    }
    

    链下应用:

    myContract.on('Occupy', async (event) => {
        updateOccupancyInExternalDB(event);
    });
    

    一个真实的例子是Transfer() 事件定义了ERC-20 令牌标准。当代币合约发出此事件时,表示发生了代币转移。区块链浏览器(例如 Etherscan)监听这些事件并更新他们自己数据库中的代币余额信息(从发送者余额中减去并增加他们自己数据库中的接收者余额)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多