Как инициализировать структуру из Javascript при тестировании контракта Solidity? - PullRequest
0 голосов
/ 07 июня 2018

Как я могу инициализировать структуру Item и присвоить переменной?

contract ArbitrableBlacklist {

    enum ItemStatus {
        Absent,                     
        Cleared,                      
    }

    struct Item {
        ItemStatus status;       
        uint lastAction;         

    }
}

Тестирование выше (упрощено для вопроса) контракт с использованием Truffle, но я не смог найтиспособ инициализации Item struct.

Я пытался:

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

И получил

TypeError: ArbitrableBlacklist.Item не является функцией

Редактировать: Забыл упомянуть, я пишу тесты из Javascript .

1 Ответ

0 голосов
/ 07 июня 2018

Проверьте этот пример, чтобы создать экземпляр структуры в контракте.

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 передайте индекс 0, 1 и т. Д. Из javascript

...