Ожидание завершения транзакции для выполнения в Node.js / Solidity - PullRequest
0 голосов
/ 18 октября 2018

Я искал способ выполнить набор команд после завершения отправленной мной транзакции.

Короче говоря, я тестировал небольшие скрипты 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)')})
        })
    )
})
...