Go-Ethereum
交易收據中只有一個事件日誌的主題參數可見,而不是預期的三個
我有一個 Smart Contrat,其中有如下事件:
MyContract { event CustomerDataSendingToSeller(address _seller, string _hasheCustomerData, uint256 _orderSeq); function SigneCustomerDataToSell(string _hasheCustomerData) public { require(seller != msg.sender); customer = msg.sender; DataExchangeSeq++; DataExchanges[DataExchangeSeq] = DataExchange(customer,_hasheCustomerData,0,0,DataExchangeSeq,0,Buyer(0,"0x",false,false),false); emit CustomerDataSendingToSeller(seller,_hasheCustomerData, DataExchangeSeq); } }
然後我在部署後將我的智能合約功能作為交易傳遞,我檢查了交易收據,我看到智能合約中只有一個 args 而不是我的三個 args。
這裡是交易收據函式的輸出:
w3.eth.getTransactionReceipt(tx_hash)
AttributeDict({ 'transactionHash':HexBytes('0xee50268e0c525cdee61fa58b1459a74915d7ac25ca72ebdb06065c3bd03a8f73'), 'transactionIndex': 0, 'blockHash':HexBytes('0x2ddd79c415277e02dc51c649f3463085a8043b87bb7067e3da81062cf608357c'), 'blockNumber': 97, 'gasUsed': 93882, 'cumulativeGasUsed': 93882, 'contractAddress': None, 'logs': [AttributeDict({ 'logIndex': 0, 'transactionIndex': 0, 'transactionHash':0xee50268e0c525cdee61fa58b1459a74915d7ac25ca72ebdb06065c3bd03a8f73', 'blockHash':'0x2ddd79c415277e02dc51c649f3463085a8043b87bb7067e3da81062cf608357c', 'blockNumber': 97, 'address': '0xAAe858AE95DE4eA7acE44Bc58bBB27C331e6dc0d', 'data':'0x0000000000000000000000000db7fec9d38cb5a3e789228f93ac0b27cb25d24d00000000000000, 'topics': ['0xf9a97ac82c9d5863f1a327d99b2f678c53726ddea126435a5752717390af467b')], 'type': 'mined'})], 'status': 1, 'logsBloom':('0x0000000000004000000000000000000000000000000000000000000000000000000004')})
在
topics
我應該看到我的三個散列參數,但只有一個存在並且似乎是事件函式本身的散列,那麼為什麼看不到另一個呢?感謝幫助 :)
只有當它們被索引時,您的參數才會被添加為主題(請參閱 Solidity 中的索引關鍵字)。否則,參數將被放入數據欄位。
您看到的主題是事件的簽名。您最多可以添加 3 個索引參數,即與事件的簽名一起,您最多可以有 4 個主題。