我希望能够查看以太坊合约的状态/存储,并知道例如何时满足某些条件。例如,一个账户值大于 200,另一张地图有 30 多个键,等等。
我可以为此使用什么?是否有可用于此目的的 SaaS 平台?
编辑:我忘了提到我不是合同的所有者。我只是想看别人的合同。
我希望能够查看以太坊合约的状态/存储,并知道例如何时满足某些条件。例如,一个账户值大于 200,另一张地图有 30 多个键,等等。
我可以为此使用什么?是否有可用于此目的的 SaaS 平台?
编辑:我忘了提到我不是合同的所有者。我只是想看别人的合同。
为此目的支持事件。
例子:
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);
编辑:更新客户端代码以监听所有事件,而不仅仅是单个触发事件。
简短的回答是,您必须自己探测 EVM 才能实现这一点,然后在您可以监控的网络上运行您自己的节点。我找不到可以执行此操作的公共项目,并且 RPC api 没有提供任何方法来完成它。我使用了一个修改后的 Geth 二进制文件,其中包含自定义事务过滤器和 mailgun,以便在满足我的条件时向我发送电子邮件。
事件不会解决您的问题,因为事件必须在创建时包含在合同中。