代码之家  ›  专栏  ›  技术社区  ›  Ferit

如何在测试solidity契约时从javascript初始化结构?

  •  2
  • Ferit  · 技术社区  · 6 年前

    如何初始化 Item 构造并赋给变量?

    contract ArbitrableBlacklist {
    
        enum ItemStatus {
            Absent,                     
            Cleared,                      
        }
    
        struct Item {
            ItemStatus status;       
            uint lastAction;         
    
        }
    }
    

    上面的测试(简化为问题)使用松露契约,但我找不到初始化 项目 结构。

    我试过:

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

    并且得到

    类型错误:可仲裁黑名单。项不是函数

    编辑:忘了说,我在用javascript编写测试 .

    1 回复  |  直到 6 年前
        1
  •  1
  •   KitKarson    6 年前

    检查此示例以在协定中创建结构的实例。

    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等