Ethereum / Solidity 在 geth 控制台中获取智能合约事件

Ethereum / Solidity getting smartcontract events in the geth console

所以我尝试检索我的智能合约生成的事件

var abi = [{
  "constant": false,
  "inputs": [{
    "name": "_value",
    "type": "int32"
  }],
  "name": "changeLowerTrigger",
  "outputs": [],
  "payable": false,
  "type": "function"
}, {
  "constant": true,
  "inputs": [],
  "name": "metric",
  "outputs": [{
    "name": "name",
    "type": "string",
    "value": "place_holder_metric_name_to_be_autogenerated"
  }, {
    "name": "value",
    "type": "int32",
    "value": "7"
  }],
  "payable": false,
  "type": "function"
}, {
  "constant": false,
  "inputs": [{
    "name": "_value",
    "type": "int32"
  }],
  "name": "changeUpperTrigger",
  "outputs": [],
  "payable": false,
  "type": "function"
}, {
  "constant": false,
  "inputs": [{
    "name": "_value",
    "type": "int32"
  }],
  "name": "update",
  "outputs": [],
  "payable": false,
  "type": "function"
}, {
  "anonymous": false,
  "inputs": [{
    "indexed": false,
    "name": "_value",
    "type": "int32"
  }],
  "name": "ValueChanged",
  "type": "event"
}, {
  "anonymous": false,
  "inputs": [{
    "indexed": false,
    "name": "_alarm",
    "type": "string"
  }, {
    "indexed": false,
    "name": "_value",
    "type": "int32"
  }],
  "name": "Alarm",
  "type": "event"
}]
var MyContract = web3.eth.contract(abi);

var myContractInstance = MyContract.at(
  '0x3B03c46Dfc878FeF9fAe8de4E32a6718f2E250e9');

var events = myContractInstance.allEvents();

// watch for changes
events.watch(function(error, event) {
  if (!error)
    console.log(event);
});

// Or pass a callback to start watching immediately
var events = myContractInstance.allEvents(function(error, log) {
  console.log(err, log);
});

但它仅 returns:

> events
{
  callbacks: [function(error, log)],
  filterId: "0xd6af6f5a7273fe21452f00c4682456",
  getLogsCallbacks: [],
  implementation: {
    getLogs: function(),
    newFilter: function(),
    poll: function(),
    uninstallFilter: function()
  },
  options: {
    address: "0x3B03c46Dfc878FeF9fAe8de4E32a6718f2E250e9",
    from: undefined,
    fromBlock: undefined,
    to: undefined,
    toBlock: undefined,
    topics: []
  },
  pollFilters: [],
  requestManager: {
    polls: {
      0xd6af6f5a7273fe21452f00c4682456: {
        data: {...},
        id: "0xd6af6f5a7273fe21452f00c4682456",
        callback: function(error, messages),
        uninstall: function()
      }
    },
    provider: {
      newAccount: function(),
      send: function github.com/ethereum/go-ethereum/console.(*bridge).Send-fm(),
      sendAsync: function github.com/ethereum/go-ethereum/console.(*bridge).Send-fm(),
      sign: function(),
      unlockAccount: function()
    },
    timeout: {},
    poll: function(),
    reset: function(keepIsSyncing),
    send: function(data),
    sendAsync: function(data, callback),
    sendBatch: function(data, callback),
    setProvider: function(p),
    startPolling: function(data, pollId, callback, uninstall),
    stopPolling: function(pollId)
  },
  formatter: function(),
  get: function(callback),
  stopWatching: function(callback),
  watch: function(callback)
}

但我想要的是下图中最底部显示的事件(e.g.Value 已更改 value:7):

既然事件显示在 ETH 钱包中,应该有办法。我只是想要一种在 geth 控制台(或类似的东西)中获取最新事件的方法。 感谢您的帮助,我有点迷路了,并且遇到了我一生中最糟糕的谷歌搜索。

您需要做的就是调用 get() 您获得并发布在答案中的结果对象。它在官方文档中有描述,可以在 here

中找到