Go-Ethereum

交易收據中只有一個事件日誌的主題參數可見,而不是預期的三個

  • May 3, 2018

我有一個 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 個主題。

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