Blockchain 如何在以太坊智能合约上触发事件时获得通知
当有人从我的帐户转账时,事件将获取触发器名称Blockchain 如何在以太坊智能合约上触发事件时获得通知,blockchain,ethereum,solidity,smartcontracts,web3js,Blockchain,Ethereum,Solidity,Smartcontracts,Web3js,当有人从我的帐户转账时,事件将获取触发器名称 event Transfer(address indexed from, address indexed to, uint to) 现在,我希望在智能合约上发生此事件时得到通知。我尝试了不同的东西,如过滤器,手表,订阅等,但没有根据需要工作 我还有一个问题 过滤、订阅和观看到底做什么。我总是混淆这些术语。有人能给出一个清晰的想法吗 注意:我使用的是WEB3JS 1.0.0.26版本。下面是一个关于WEB3JS 1.0.0.beta*的简单示例: f
event Transfer(address indexed from, address indexed to, uint to)
现在,我希望在智能合约上发生此事件时得到通知。我尝试了不同的东西,如过滤器,手表,订阅等,但没有根据需要工作
我还有一个问题
过滤、订阅和观看到底做什么。我总是混淆这些术语。有人能给出一个清晰的想法吗
注意:我使用的是WEB3JS 1.0.0.26版本。下面是一个关于
WEB3JS 1.0.0.beta*的简单示例:
function handler (event) {
console.log(event.returnValues);
}
function errorCallback (err) {
console.error(err);
}
let subscription = contractObj.events.TestEvent().subscription;
subscription.on('data', handler).on('error', errorCallback);
取消订阅:
subscription.unsubscribe(function (result) {
console.log(result)
});
课堂使用示例:
class Listener {
constructor(event, handler) {
this.subscription = event;
this.subscription.on('data', handler).on('error', this.errorCallback);
}
errorCallback(err) {
console.log(err);
}
}
class Test {
constructor(contractObj) {
this.contractObj = contractObj;
this.createListener();
}
createListener() {
let self = this;
this.listener = new Listener(this.contractObj.events.TestEvent(), function (event) {
self.returnValues = event.returnValues;
});
}
}
这是行不通的。订阅在1.0.0-beta.27上未定义@DmitryWorks fine for me
@Harshlet subscription=contractObj.events.TestEvent().subscription;你的这一行没有定义。在contractObj.events.TestEvent()之前,我得到一个订阅{},但是当我执行这一行contractObj.events.TestEvent().Subscription时;它正在变得不明确。甚至我也从订阅改为订阅,但它不起作用。合同是这样初始化的让contractObj=new web3.eth.contract(contractAbi,contractAddress)
并且TestEvent在ABI中声明了吗@HarshI已经看过了,是的,我在事件部分有转移事件,而且我已经按照你们上面写的方式初始化ContractObj。