В квитанции о транзакции отображается только один аргумент темы для журналов событий вместо трех ожидаемых.

У меня есть 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);

        }

}

Затем я передал свою функцию смарт-контракта как транзакцию после развертывания, и я проверил получение транзакции, я увидел, что в смарт-контракте есть только один аргумент вместо трех моих аргументов.

Вот вывод функции получения транзакции: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я должен увидеть три моих хешированных аргумента, но присутствует только один и, кажется, хэш самой функции события, так почему бы не увидеть другой?

Спасибо за помощь :)

Какое значение вы ожидаете, будет возвращено для sellerиDataExchangeSeq

Ответы (1)

Ваши параметры добавляются как тема, только если они проиндексированы (см. ключевое слово indexed в Solidity). В противном случае параметры помещаются в поле данных.

Тема, которую вы видите, является сигнатурой события. Вы можете добавить до 3-х индексируемых параметров, т.е. вместе с подписью события можно иметь до 4-х тем.

Да, спасибо ! Мне просто нужно было правильно прочитать документацию ... спасибо за ответ :)