Web3js

使用 infura 獲取智能合約函式的發出事件

  • March 29, 2020

我在我的 App.js 中使用了 infura 來連接到 kovan 網路。然後我正在創建一個部署在該網路上的智能合約實例。然後我在那個發出事件的智能合約上呼叫一個函式。

這將返回一個交易雜湊,但我想訪問該智能合約函式發出的事件詳細資訊。我想我可能會在 kovan etherscan 網站上使用該事務雜湊並獲取發出的事件詳細資訊,但它不起作用。我如何訪問它們?

我已經通過 infura 發送了一個簽名的交易:

   const Tx = require('ethereumjs-tx').Transaction

   // connect to Infura node
   const web3 = new Web3(new Web3.providers.HttpProvider("//kovan infura key"));

   // the address that will send the test transaction
   const addressFrom = '//myaccountaddress'
   const privKey = '//my key'

   // the destination address
   const addressTo = '//contractaddress'

   function sendSigned(txData,cb) {
     const privateKey = new Buffer.from("privateKey", 'hex')
     const transaction = new Tx(txData)
     transaction.sign(privateKey)
     const serializedTx = transaction.serialize().toString('hex')
     web3.eth.sendSignedTransaction('0x' + serializedTx,cb)
   }

   const contract = new web3.eth.Contract(Contract.abi,Contract.address, {from: addressFrom,gasLimit: 3000000});
   const contractFunction = contract.methods.getDetails(0);

   const functionAbi = contractFunction.encodeABI();

   // get the number of transactions sent so far so we can create a fresh nonce
   web3.eth.getTransactionCount(addressFrom).then(txCount => {

     // construct the transaction data
     const txData = {
       nonce: web3.utils.toHex(txCount),
       gasLimit: web3.utils.toHex(25000),
       gasPrice: web3.utils.toHex(10e12), // 10 Gwei
       to: addressTo,
       from: addressFrom,
       data: functionAbi
     }

     // fire away!
      sendSigned(txData, function(err, result) {
     if (err) return console.log('error', err)
     console.log('sent', result)
   })

日誌包含在交易收據中。

除非您在合約周圍使用一些包裝器來獲取日誌,否則它們將被編碼。然後你將不得不使用類似web3.api.abi.decodeLog的東西。

引用自:https://ethereum.stackexchange.com/questions/81978