查詢event log
從ethereum json-rpc文檔的文檔中找到一個(gè)同時(shí)指定多個(gè)事件以 OR
或者 AND
查詢的方法.以下是查詢 Approval 或 Transfer 事件的方法:
{
"jsonrpc":"2.0",
"method":"eth_getLogs",
"params":[{
"topics":[["0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]],
"address": "0xa7f6c9a5052a08a14ff0e3349094b6efbc591ea4",
"fromBlock": "0x499a",
"toBlock": "0x18999"
}],
"id":74
}
topics
字段中指定查詢條件的語(yǔ)法參考上面鏈接绿贞。
ERC20代幣交易詳情解析
通過getTransactionReceipt
在ropsten測(cè)試網(wǎng)上查詢到交易號(hào)為0x7e9eaf019928b7f8cf6f5fafa626a58d477f4800054f7101ffe941fda353abcb
的交易詳情
{
"jsonrpc": "2.0",
"id": 74,
"result": {
"blockHash": "0xbc4dfb56410f28476ac6dbdaf68513a4b01ac0084fb21cc81b6803bd956d6365",
"blockNumber": "0x81b4",
"contractAddress": null,
"cumulativeGasUsed": "0xca9d",
"from": "0xdb33dfd3d61308c33c63209845dad3e6bfb2c674",
"gasUsed": "0xca9d",
"logs": [
{
"address": "0xa7f6c9a5052a08a14ff0e3349094b6efbc591ea4",
"topics": [
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"0x000000000000000000000000db33dfd3d61308c33c63209845dad3e6bfb2c674",
"0x0000000000000000000000006f2a8ee9452ba7d336b3fba03cac27f7818aead6"
],
"data": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000",
"blockNumber": "0x81b4",
"transactionHash": "0x7e9eaf019928b7f8cf6f5fafa626a58d477f4800054f7101ffe941fda353abcb",
"transactionIndex": "0x0",
"blockHash": "0xbc4dfb56410f28476ac6dbdaf68513a4b01ac0084fb21cc81b6803bd956d6365",
"logIndex": "0x0",
"removed": false
}
],
"logsBloom": "0x0000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000008c000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000010000000000000000000001000000200000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000020002000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000",
"root": "0xb6824b5b1ff9cab405435d9735dfe3971755b78b955c957b96adfe96a0552217",
"to": "0xa7f6c9a5052a08a14ff0e3349094b6efbc591ea4",
"transactionHash": "0x7e9eaf019928b7f8cf6f5fafa626a58d477f4800054f7101ffe941fda353abcb",
"transactionIndex": "0x0"
}
}
這個(gè)交易從"from": "0xdb33dfd3d61308c33c63209845dad3e6bfb2c674"
發(fā)送到合約地址"to": "0xa7f6c9a5052a08a14ff0e3349094b6efbc591ea4"
.這個(gè)合約為ERC20代幣合約.從topics
的第一個(gè)元素可以看出合約中產(chǎn)生了Transfer
事件(topics第一個(gè)元素一定是事件的keccak哈希). topics
的第二個(gè)字段是轉(zhuǎn)出代幣的地址丝里,第三個(gè)字段是接收者地址.ERC20代幣Transfer
事件的簽名為
event Transfer(address indexed from, address indexed to, uint tokens);
我們注意到Transfer
事件的第一個(gè)和第二個(gè)參數(shù)被標(biāo)記為indexed
, 因此他們的值被放在 topics array 中. 由于tokens參數(shù)沒有標(biāo)記為indexed
, 所以他的值被放在data
字段. 如果事件中有多個(gè)字段未標(biāo)記為indexed
陈瘦, 那么他們的值都會(huì)被記錄在data
字段中技掏。