我正在尝试创建一个Web服务器,以便在进行新事务时查找以太坊合约的特定数据值。我希望它监视新的交易,如果该交易是指定的合约类型,那么进行合约调用以从合约中获取数据值。
我知道我可以通过执行以下操作来获取所有事务数据,但我不知道如何使用它来进行契约调用,并且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);
});
}
});
}
为了进行合同调用,我尝试使用松露合同库,但我似乎只能访问发生的最新事务。在下面的代码中,我的solidity契约中的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);
});
我将其作为节点服务器运行: