Получите все контрактные транзакции Ethereum как экземпляры Truffle

Я пытаюсь создать веб-сервер, который ищет определенное значение данных в контракте Ethereum при совершении новых транзакций. Я хочу, чтобы он отслеживал новые транзакции, если эта транзакция относится к указанному типу контракта, а затем вызовите контракт, чтобы получить значение данных из контракта.

Я знаю, что могу получить все данные транзакции, выполнив следующие действия, но я не знаю, как сделать контрактный вызов, используя это, и данные в txInfo.input объединяются с несколькими значениями данных.

for (var i = startBlockNumber; i <= endBlockNumber; i++) {
    web3.eth.getBlock(i, function(err, blockInfo) {
      if (!blockInfo) {
        return;
      }
      for (var j = 0; j <blockInfo.transactions.length; j++) {
        var tx = blockInfo.transactions[j];
        web3.eth.getTransaction(tx, function(err, txInfo) {
          log(txInfo);
        });
      }
    });
}

Чтобы сделать контрактные звонки, я попытался использовать библиотеку трюфельных контрактов, но, похоже, я могу получить доступ только к последней транзакции, которая произошла. В следующем коде функция getMyValue в моем договоре о солидности возвращает значение из последней транзакции, но функциональность наблюдения allEvents никогда не вызывается, даже если она выполняется во время новой транзакции.

App.contracts.myContract.deployed().then(function(instance) {

  const allEvents = instance.allEvents({
    fromBlock: 0,
    toBlock: 'latest'
  });
  console.log(allEvents);
  allEvents.watch((err, res) => {
    console.log(err, res);
  });

  instance.getMyValue.call().then(function(result) {
    console.log(result);
  }).catch(function(err) {
    console.log(err);
  });
}).catch(function(err) {
  console.log(err.message);
});

Я запускаю это как сервер узлов с:

  • трюфель-контракт v3.0.4
  • web3 v0.20.1
  • экспресс v4.16.3

0 ответов

Другие вопросы по тегам