观看以太坊合约国

时间:2017-11-09 15:39:30

标签: ethereum smartcontracts

我希望能够观察以太坊合约的状态/存储,并知道例如何时满足某些条件。例如,一个帐户值大于200,另一个帐户具有超过30个密钥等

我可以用它做什么?是否有可用于此目的的SaaS平台?

编辑:我忘了提到我不是合同的所有者。我只是想看别人的合同。

2 个答案:

答案 0 :(得分:0)

为此目的支持事件。

Event Documentation

示例:

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);

编辑:更新了客户端代码以收听所有事件,而不仅仅是一个被触发的事件。

答案 1 :(得分:0)

简短的回答是,您必须自己探测EVM才能实现此目的,然后在您可以监控的网络上运行您自己的节点。我找不到可以执行此操作的公共项目,RPC api无法提供任何方法来完成它。我使用了一个经过修改的Geth二进制文件,其中包含编码的自定义事务过滤器和mailgun,以便在满足条件时向我发送电子邮件。

事件无法解决您的问题,因为事件必须在创建时包含在合同中。