【问题标题】:How to initialize a struct from Javascript when testing a Solidity contract?测试 Solidity 合约时如何从 Javascript 初始化结构?
【发布时间】:2018-06-07 16:44:28
【问题描述】:

如何初始化Item 结构并分配给变量?

contract ArbitrableBlacklist {

    enum ItemStatus {
        Absent,                     
        Cleared,                      
    }

    struct Item {
        ItemStatus status;       
        uint lastAction;         

    }
}

使用 Truffle 测试上述(问题简化)合同,但我找不到初始化 Item 结构的方法。

我试过了:

let x = ArbitrableBlacklist.Item({
        status: 0,
        lastAction: 0
      });

得到了

TypeError: ArbitrableBlacklist.Item 不是函数

编辑:忘了说,我正在用 Javascript 编写测试。

【问题讨论】:

    标签: javascript testing struct solidity truffle


    【解决方案1】:

    查看此示例以在合同中创建结构的实例。

    pragma solidity ^0.4.22;
    
    contract ArbitrableBlacklist {
    
        enum ItemStatus {
            Absent,                     
            Cleared                    
        }
    
        struct Item {
            ItemStatus status;       
            uint lastAction;         
    
        }
    
    }
    
    contract test{
    
        ArbitrableBlacklist.Item public item;
    
        function create() public {
            item = ArbitrableBlacklist.Item({
               status: ArbitrableBlacklist.ItemStatus.Absent,
               lastAction: 0
            });
        }
    
    }
    

    如果您尝试从 javascript 初始化,那么它可能是不可能的 - 至少现在是这样。但是您可以将结构成员的值作为参数传递给函数并创建一个实例,如此处所示。

        function create(ArbitrableBlacklist.ItemStatus _status, uint _action) public {
            item = ArbitrableBlacklist.Item({
               status: _status,
               lastAction: _action
            });
        }
    

    对于 Enum,从 javascript 传递索引 0、1 等

    【讨论】:

    • 我正在用 Javascript 编写测试,所以是的,尝试从 javascript 初始化。很抱歉没有提到这一点。
    • @ferit,那么你不能直接传递结构对象,而是传递结构成员数据类型,如整数/字符串/布尔等..然后在使用参数的合同中,创建结构实例。跨度>
    • 所以我们需要一个函数来初始化合约中的结构体,以便能够通过在 Javascript 测试中调用该函数来初始化结构体,对吧?
    • @ferit,到目前为止是的。由于 Javascript 不知道您的结构
    猜你喜欢
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    相关资源
    最近更新 更多