javascript - 测试 Solidity 合约时如何从 Javascript 初始化结构?

标签 javascript testing struct solidity truffle

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

contract ArbitrableBlacklist {

    enum ItemStatus {
        Absent,                     
        Cleared,                      
    }

    struct Item {
        ItemStatus status;       
        uint lastAction;         

    }
}

使用 Truffle 测试上面的契约(Contract)(针对问题进行了简化),但我找不到初始化 Item 结构的方法。

我试过:

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

得到了

TypeError: ArbitrableBlacklist.Item is not a function

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

最佳答案

检查此示例以在契约(Contract)中创建结构的实例。

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 - 测试 Solidity 合约时如何从 Javascript 初始化结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50746393/

相关文章:

sql-server - tSQLt 测试中的模拟和安全权限如何工作?

c++ - 如何使用未初始化的指针修复 C++ 中的 C4700 警告?

c - 错误: Parameter name omitted in C for structs

javascript - 仅在某些情况下 View 不更新

javascript - 将值传递给 ajax 函数

sql-server - 针对实时系统进行测试的策略

Java方法返回多个值

javascript - 我在哪里从库中获取变量的 typescript 类型

javascript - JS循环仅在匹配到数组中的最后一个元素时有效

javascript - 在 vue jest 中传递 propData 返回未定义