Web3js
使用 infura 獲取智能合約函式的發出事件
我在我的 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的東西。