Наблюдение за состоянием контракта Ethereum

Я хочу иметь возможность наблюдать за состоянием/хранением контракта ethereum и знать, например, когда выполняются некоторые условия. Например, значение одной учетной записи больше 200, другая карта имеет более 30 ключей и т. д.

Что я могу использовать для этого? Существует ли платформа SaaS, которую можно использовать для этой цели?

РЕДАКТИРОВАТЬ: я забыл упомянуть, что я НЕ являюсь владельцем контракта. Я просто хочу посмотреть чей-то еще контракт.


person Klaus    schedule 09.11.2017    source источник


Ответы (2)


Для этой цели поддерживаются события.

Документация по мероприятию

Пример:

contract SomeContract {
  struct AccountData {
    address account;
    uint value;
  }

  ...
  event AccountValueChange(address account, uint value, bytes msg);
  ...

  function someAction() {
    AccountData accountData;

    // some activity with accountData...

    if (accountData.value > 200) {
      AccountValueChange(accountData.address, accountData.value, "Some message");
    }
  }
}

Вы можете прослушивать события в своем клиенте

const someContract = web3.eth.contract(abi).at(address);

myContract.events.AccountValueChange({
    filter: {//Optional event filters},
    fromBlock: 0
}, function(error, event){ console.log(event); })
.on('data', function(event){
    console.log(event);
})
.on('error', console.error);

РЕДАКТИРОВАТЬ: Обновлен клиентский код для прослушивания всех событий, а не только одного запущенного события.

person Adam Kipnis    schedule 09.11.2017
comment
Спасибо. Я добавил некоторые изменения в исходный пост. Я забыл упомянуть, что я не являюсь владельцем контракта. Я хочу посмотреть что-то, что было развернуто третьей стороной. - person Klaus; 10.11.2017
comment
Вам не нужно быть владельцем контракта, чтобы прослушивать его события. Все, что вам нужно, это ABI, адрес контракта и название мероприятия. Для фильтрации вы по-прежнему можете указать параметр фильтра, если данные, по которым вы хотите фильтровать, помечены как проиндексированные владельцем контракта. Если нет, вам придется слушать все события и фильтровать себя. - person Adam Kipnis; 14.11.2017

Короткий ответ заключается в том, что вам придется самостоятельно протестировать EVM, чтобы это произошло, а затем запустить свой собственный узел в сети, который вы можете отслеживать. Я не могу найти общедоступного проекта, который бы это делал, и API RPC не предоставляет никакого способа сделать это. Я использовал модифицированный двоичный файл Geth с закодированными пользовательскими фильтрами транзакций и почтовым пистолетом, чтобы отправлять мне электронные письма, когда мои условия были выполнены.

События не решат вашу проблему, потому что события должны быть включены в контракт во время создания.

person Dan Rice    schedule 07.01.2018