У меня есть 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
я должен увидеть три моих хешированных аргумента, но присутствует только один и, кажется, хэш самой функции события, так почему бы не увидеть другой?
Спасибо за помощь :)
Ваши параметры добавляются как тема, только если они проиндексированы (см. ключевое слово indexed в Solidity). В противном случае параметры помещаются в поле данных.
Тема, которую вы видите, является сигнатурой события. Вы можете добавить до 3-х индексируемых параметров, т.е. вместе с подписью события можно иметь до 4-х тем.
Аникет
seller
иDataExchangeSeq