Получите все контрактные транзакции 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