如何在以太坊智能合约上触发事件时收到通知

时间:2018-03-19 10:03:34

标签: blockchain ethereum solidity smartcontracts web3js

如果有人从我的帐户转帐,则会有一个事件获得触发器名称

event Transfer(address indexed from, address indexed to, uint to)

现在我希望在智能合约上发生此事件时收到通知。我尝试了过滤,观看,订阅等不同的东西。但没有任何东西可以根据需要工作。

我还有另一个查询 过滤,订阅和观看的确切做法。我总是在这些条款之间混淆。有人可以给出一个清晰的想法。

注意:我使用的是WEB3JS 1.0.0.26版本。

1 个答案:

答案 0 :(得分:1)

以下是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;
    });
  }
}