Я искал способ выполнить набор команд после завершения отправленной мной транзакции.
Короче говоря, я тестировал небольшие скрипты Node.js с Web3.js для отправки термометрапоказания к умному контракту и после того, как транзакция добыта, чтобы получить последние 5 опубликованных значений.
Я не нашел определенного метода Web3 для этого, поэтому я кодировал метод .on в Node.js.Сейчас я ищу более оптимизированные способы сделать это и вместе запросить, есть ли способ сделать это, используя любой из методов Web3.
PS - Я подавил умный контракт и части скрипта Node, чтобысэкономить место на почте.
Приветствия,
// Transaction
web3.eth.getTransactionCount(account1, (err, txCount) => {
const txObject = {
nonce: web3.utils.toHex(txCount),
gasLimit: web3.utils.toHex(100000),
gasPrice: web3.utils.toHex(web3.utils.toWei('1', 'gwei')),
to: contractAddress,
data: contract.methods.postTemperature((Date.now() / 1000 | 0), temp).encodeABI()
}
const tx = new Tx(txObject)
tx.sign(privateKey1)
const serializedTx = tx.serialize()
const raw = '0x' + serializedTx.toString('hex')
web3.eth.sendSignedTransaction(raw, (err, txHash) => {
txH = txHash;
console.log('err:', err, 'txHash:', txHash)
}).on('receipt', receipt =>
contract.methods.seeTemperatures().call((err, result) => {
const tempDisplay = 'The last five temperature submissions were: \n' +
(result[1].slice(-10))[8].toString() + 'ºC at ' + timeConverter((result[1].slice(-10))[9]).toString() + '\n' +
(result[1].slice(-10))[6].toString() + 'ºC at ' + timeConverter((result[1].slice(-10))[7]).toString() + '\n' +
(result[1].slice(-10))[4].toString() + 'ºC at ' + timeConverter((result[1].slice(-10))[5]).toString() + '\n' +
(result[1].slice(-10))[2].toString() + 'ºC at ' + timeConverter((result[1].slice(-10))[3]).toString() + '\n' +
(result[1].slice(-10))[0].toString() + 'ºC at ' + timeConverter((result[1].slice(-10))[1]).toString();
console.log(tempDisplay)
contract.methods.seeBill().call((err, result) => {console.log('Your current bill is at ' + result + ' (currency)')})
})
)
})