diff --git a/analyzer/queries/queries.go b/analyzer/queries/queries.go index dfee6df83..d80b646d7 100644 --- a/analyzer/queries/queries.go +++ b/analyzer/queries/queries.go @@ -342,8 +342,8 @@ var ( VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24)` RuntimeEventInsert = ` - INSERT INTO chain.runtime_events (runtime, round, tx_index, tx_hash, tx_eth_hash, type, body, related_accounts, evm_log_name, evm_log_params, evm_log_signature) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)` + INSERT INTO chain.runtime_events (runtime, round, tx_index, tx_hash, tx_eth_hash, timestamp, type, body, related_accounts, evm_log_name, evm_log_params, evm_log_signature) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)` RuntimeMintInsert = ` INSERT INTO chain.runtime_transfers (runtime, round, sender, receiver, symbol, amount) diff --git a/analyzer/runtime/runtime.go b/analyzer/runtime/runtime.go index 54f86b699..fec6475d0 100644 --- a/analyzer/runtime/runtime.go +++ b/analyzer/runtime/runtime.go @@ -269,6 +269,7 @@ func (m *processor) queueDbUpdates(batch *storage.QueryBatch, data *BlockData) { eventData.TxIndex, eventData.TxHash, eventData.TxEthHash, + data.Header.Timestamp, eventData.Type, eventData.Body, eventRelatedAddresses, diff --git a/api/spec/v1.yaml b/api/spec/v1.yaml index a3e253392..52e6fe565 100644 --- a/api/spec/v1.yaml +++ b/api/spec/v1.yaml @@ -1345,7 +1345,7 @@ components: type: string format: date-time description: | - The second-granular consensus time this tx's block, i.e. roughly when the + The second-granular consensus time of this tx's block, i.e. roughly when the [block was proposed](https://github.com/tendermint/tendermint/blob/v0.34.x/spec/core/data_structures.md#header). example: *iso_timestamp_3 hash: @@ -2060,7 +2060,7 @@ components: RuntimeEvent: type: object - required: [round, type, body] + required: [round, timestamp, type, body] properties: round: type: integer @@ -2085,6 +2085,12 @@ components: description: | Ethereum trasnsaction hash of this event's originating transaction. Absent if the event did not originate from an EVM transaction. + timestamp: + type: string + format: date-time + description: | + The second-granular consensus time of this event's block. + example: *iso_timestamp_1 type: description: The type of the event. $ref: '#/components/schemas/RuntimeEventType' @@ -2112,6 +2118,8 @@ components: The decoded `evm.log` event data. We currently support only two types of evm events, ERC20 `Transfer` and `Approve`. Absent if the event type is not `evm.log`. + evm_token: + $ref: '#/components/schemas/EvmEventToken' description: An event emitted by the runtime layer RuntimeEventType: @@ -2145,6 +2153,25 @@ components: Values of EVM type `bytes` and `bytes` are represented as base64 strings. Values of other EVM types (integer types, strings, arrays, etc.) are represented as their JSON counterpart. + EvmEventToken: + type: object + properties: + type: + $ref: '#/components/schemas/EvmTokenType' + symbol: + type: string + description: Symbol of the token, as provided by token contract's `symbol()` method. + example: USDT + decimals: + type: integer + description: | + The number of least significant digits in base units that should be displayed as + decimals when displaying tokens. `tokens = base_units / (10**decimals)`. + Affects display only. Often equals 18, to match ETH. + example: 18 + description: | + Details about the EVM token involved in the event, if any. + RuntimeEvmContract: type: object properties: diff --git a/storage/client/client.go b/storage/client/client.go index 3f3b0dcd5..e1b2d3fb1 100644 --- a/storage/client/client.go +++ b/storage/client/client.go @@ -1296,18 +1296,26 @@ func (c *StorageClient) RuntimeEvents(ctx context.Context, p apiTypes.GetRuntime } for res.rows.Next() { var e RuntimeEvent + var et apiTypes.EvmEventToken if err := res.rows.Scan( &e.Round, &e.TxIndex, &e.TxHash, &e.EthTxHash, + &e.Timestamp, &e.Type, &e.Body, &e.EvmLogName, &e.EvmLogParams, + &et.Symbol, + &et.Type, + &et.Decimals, ); err != nil { return nil, wrapError(err) } + if et != (apiTypes.EvmEventToken{}) { + e.EvmToken = &et + } es.Events = append(es.Events, e) } diff --git a/storage/client/queries/queries.go b/storage/client/queries/queries.go index 8698d1c7b..542736030 100644 --- a/storage/client/queries/queries.go +++ b/storage/client/queries/queries.go @@ -394,18 +394,40 @@ const ( ` RuntimeEvents = ` - SELECT evs.round, evs.tx_index, evs.tx_hash, evs.tx_eth_hash, evs.type, evs.body, evs.evm_log_name, evs.evm_log_params - FROM chain.runtime_events as evs - WHERE (evs.runtime = $1) AND - ($2::bigint IS NULL OR evs.round = $2::bigint) AND - ($3::integer IS NULL OR evs.tx_index = $3::integer) AND - ($4::text IS NULL OR evs.tx_hash = $4::text OR evs.tx_eth_hash = $4::text) AND - ($5::text IS NULL OR evs.type = $5::text) AND - ($6::bytea IS NULL OR evs.evm_log_signature = $6::bytea) AND - ($7::text IS NULL OR evs.related_accounts @> ARRAY[$7::text]) - ORDER BY evs.round DESC, evs.tx_index, evs.type, evs.body::text - LIMIT $8::bigint - OFFSET $9::bigint` + SELECT + evs.round, + evs.tx_index, + evs.tx_hash, + evs.tx_eth_hash, + evs.timestamp, + evs.type, + evs.body, + evs.evm_log_name, + evs.evm_log_params, + tokens.symbol, + CASE -- NOTE: There are three queries that use this CASE via copy-paste; edit both if changing. + WHEN tokens.token_type = 20 THEN 'ERC20' + WHEN tokens.token_type = 721 THEN 'ERC721' + ELSE NULL -- Our openapi spec doesn't allow us to output this, but better this than a null value (which causes nil dereference) + END AS token_type, + tokens.decimals + FROM chain.runtime_events as evs + LEFT JOIN chain.address_preimages AS preimages ON + DECODE(evs.body ->> 'address', 'base64')=preimages.address_data + LEFT JOIN chain.evm_tokens as tokens ON + (evs.runtime=tokens.runtime) AND + (preimages.address=tokens.token_address) + WHERE + (evs.runtime = $1) AND + ($2::bigint IS NULL OR evs.round = $2::bigint) AND + ($3::integer IS NULL OR evs.tx_index = $3::integer) AND + ($4::text IS NULL OR evs.tx_hash = $4::text OR evs.tx_eth_hash = $4::text) AND + ($5::text IS NULL OR evs.type = $5::text) AND + ($6::bytea IS NULL OR evs.evm_log_signature = $6::bytea) AND + ($7::text IS NULL OR evs.related_accounts @> ARRAY[$7::text]) + ORDER BY evs.round DESC, evs.tx_index, evs.type, evs.body::text + LIMIT $8::bigint + OFFSET $9::bigint` RuntimeEvmContract = ` SELECT @@ -420,7 +442,6 @@ const ( compilation_metadata, source_files FROM chain.evm_contracts - WHERE (runtime = $1) AND (contract_address = $2::text)` AddressPreimage = ` @@ -455,7 +476,7 @@ const ( tokens.symbol, tokens.decimals, tokens.total_supply, - CASE -- NOTE: There are two queries that use this CASE via copy-paste; edit both if changing. + CASE -- NOTE: There are three queries that use this CASE via copy-paste; edit both if changing. WHEN tokens.token_type = 20 THEN 'ERC20' WHEN tokens.token_type = 721 THEN 'ERC721' ELSE 'unexpected_other_type' -- Our openapi spec doesn't allow us to output this, but better this than a null value (which causes nil dereference) @@ -506,7 +527,7 @@ const ( balances.token_address AS token_address, tokens.symbol AS token_symbol, tokens.token_name AS token_name, - CASE -- NOTE: There are two queries that use this CASE via copy-paste; edit both if changing. + CASE -- NOTE: There are three queries that use this CASE via copy-paste; edit both if changing. WHEN tokens.token_type = 20 THEN 'ERC20' WHEN tokens.token_type = 721 THEN 'ERC721' ELSE 'unexpected_other_type' -- Our openapi spec doesn't allow us to output this, but better this than a null value (which causes nil dereference) diff --git a/storage/migrations/02_runtimes.up.sql b/storage/migrations/02_runtimes.up.sql index bc65e4bd4..b0fb71fe4 100644 --- a/storage/migrations/02_runtimes.up.sql +++ b/storage/migrations/02_runtimes.up.sql @@ -111,6 +111,9 @@ CREATE TABLE chain.runtime_events tx_hash HEX64, tx_eth_hash HEX64, + -- Added in 08_runtime_events_timestamp.up.sql + -- timestamp TIMESTAMP WITH TIME ZONE NOT NULL, + -- TODO: add link to openapi spec section with runtime event types. type TEXT NOT NULL, -- The raw event, as returned by the oasis-sdk runtime client. diff --git a/storage/migrations/08_runtime_events_timestamp.up.sql b/storage/migrations/08_runtime_events_timestamp.up.sql new file mode 100644 index 000000000..bb6a38cd2 --- /dev/null +++ b/storage/migrations/08_runtime_events_timestamp.up.sql @@ -0,0 +1,16 @@ +BEGIN; + +ALTER TABLE chain.runtime_events + ADD COLUMN TIMESTAMP timestamp WITH time zone; + +UPDATE chain.runtime_events AS evs + SET timestamp = blocks.timestamp + FROM chain.runtime_blocks AS blocks + WHERE evs.runtime = blocks.runtime + AND evs.round = blocks.round; + +ALTER TABLE chain.runtime_events + ALTER COLUMN timestamp + SET NOT NULL; + +COMMIT; diff --git a/tests/e2e_regression/expected/emerald_events.body b/tests/e2e_regression/expected/emerald_events.body index 1ac7f607d..8199f08e6 100644 --- a/tests/e2e_regression/expected/emerald_events.body +++ b/tests/e2e_regression/expected/emerald_events.body @@ -7,6 +7,7 @@ "eth_tx_hash": "f5e4975d629ee8a0eb2f7d642c6356c4f32883d78ca6667983863e0619edbd1c", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "32f44bd9558e89572de93e81fcb0130aa1180e532eeba05be2eb7491ae8fc0ca", "tx_index": 0, "type": "core.gas_used" @@ -41,6 +42,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "32f44bd9558e89572de93e81fcb0130aa1180e532eeba05be2eb7491ae8fc0ca", "tx_index": 0, "type": "evm.log" @@ -58,6 +60,7 @@ "eth_tx_hash": "f5e4975d629ee8a0eb2f7d642c6356c4f32883d78ca6667983863e0619edbd1c", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "32f44bd9558e89572de93e81fcb0130aa1180e532eeba05be2eb7491ae8fc0ca", "tx_index": 0, "type": "evm.log" @@ -92,6 +95,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "32f44bd9558e89572de93e81fcb0130aa1180e532eeba05be2eb7491ae8fc0ca", "tx_index": 0, "type": "evm.log" @@ -126,6 +130,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "32f44bd9558e89572de93e81fcb0130aa1180e532eeba05be2eb7491ae8fc0ca", "tx_index": 0, "type": "evm.log" @@ -160,6 +165,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "32f44bd9558e89572de93e81fcb0130aa1180e532eeba05be2eb7491ae8fc0ca", "tx_index": 0, "type": "evm.log" @@ -171,6 +177,7 @@ "eth_tx_hash": "01611b501f7ca379844523d9b40b6d4472ec265373e7ee027666b8206bd579ec", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "8130a1005cc6b9d45ee3896f43aec3403996f94a91bead5c9231345764c4784c", "tx_index": 1, "type": "core.gas_used" @@ -188,6 +195,7 @@ "eth_tx_hash": "01611b501f7ca379844523d9b40b6d4472ec265373e7ee027666b8206bd579ec", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "8130a1005cc6b9d45ee3896f43aec3403996f94a91bead5c9231345764c4784c", "tx_index": 1, "type": "evm.log" @@ -205,6 +213,7 @@ "eth_tx_hash": "01611b501f7ca379844523d9b40b6d4472ec265373e7ee027666b8206bd579ec", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "8130a1005cc6b9d45ee3896f43aec3403996f94a91bead5c9231345764c4784c", "tx_index": 1, "type": "evm.log" @@ -239,6 +248,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "8130a1005cc6b9d45ee3896f43aec3403996f94a91bead5c9231345764c4784c", "tx_index": 1, "type": "evm.log" @@ -254,6 +264,7 @@ "eth_tx_hash": "01611b501f7ca379844523d9b40b6d4472ec265373e7ee027666b8206bd579ec", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "8130a1005cc6b9d45ee3896f43aec3403996f94a91bead5c9231345764c4784c", "tx_index": 1, "type": "evm.log" @@ -288,6 +299,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "8130a1005cc6b9d45ee3896f43aec3403996f94a91bead5c9231345764c4784c", "tx_index": 1, "type": "evm.log" @@ -322,6 +334,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "8130a1005cc6b9d45ee3896f43aec3403996f94a91bead5c9231345764c4784c", "tx_index": 1, "type": "evm.log" @@ -356,6 +369,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "8130a1005cc6b9d45ee3896f43aec3403996f94a91bead5c9231345764c4784c", "tx_index": 1, "type": "evm.log" @@ -373,6 +387,7 @@ "eth_tx_hash": "01611b501f7ca379844523d9b40b6d4472ec265373e7ee027666b8206bd579ec", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "8130a1005cc6b9d45ee3896f43aec3403996f94a91bead5c9231345764c4784c", "tx_index": 1, "type": "evm.log" @@ -407,6 +422,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "8130a1005cc6b9d45ee3896f43aec3403996f94a91bead5c9231345764c4784c", "tx_index": 1, "type": "evm.log" @@ -422,6 +438,7 @@ "eth_tx_hash": "01611b501f7ca379844523d9b40b6d4472ec265373e7ee027666b8206bd579ec", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "8130a1005cc6b9d45ee3896f43aec3403996f94a91bead5c9231345764c4784c", "tx_index": 1, "type": "evm.log" @@ -437,6 +454,7 @@ "eth_tx_hash": "01611b501f7ca379844523d9b40b6d4472ec265373e7ee027666b8206bd579ec", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "8130a1005cc6b9d45ee3896f43aec3403996f94a91bead5c9231345764c4784c", "tx_index": 1, "type": "evm.log" @@ -448,6 +466,7 @@ "eth_tx_hash": "5ddfaf69ff95e3548bf049e2ce06a890ddae5818451c838fcd2a68459ed5541d", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "core.gas_used" @@ -482,6 +501,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -516,6 +536,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -550,6 +571,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -567,6 +589,7 @@ "eth_tx_hash": "5ddfaf69ff95e3548bf049e2ce06a890ddae5818451c838fcd2a68459ed5541d", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -585,6 +608,7 @@ "eth_tx_hash": "5ddfaf69ff95e3548bf049e2ce06a890ddae5818451c838fcd2a68459ed5541d", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -601,6 +625,7 @@ "eth_tx_hash": "5ddfaf69ff95e3548bf049e2ce06a890ddae5818451c838fcd2a68459ed5541d", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -635,6 +660,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -669,6 +695,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -703,6 +730,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -737,6 +765,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -771,6 +800,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -787,6 +817,7 @@ "eth_tx_hash": "5ddfaf69ff95e3548bf049e2ce06a890ddae5818451c838fcd2a68459ed5541d", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -821,6 +852,7 @@ } ], "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -838,6 +870,7 @@ "eth_tx_hash": "5ddfaf69ff95e3548bf049e2ce06a890ddae5818451c838fcd2a68459ed5541d", "evm_log_name": "", "round": 1003598, + "timestamp": "2022-04-11T13:38:14Z", "tx_hash": "c0ddeca3477caa31823f59a92dba843d372d895e4bc75a149e8abc6ff1ea1fee", "tx_index": 2, "type": "evm.log" @@ -849,6 +882,7 @@ "eth_tx_hash": "0da5386ccd9c2580c84aa53d9ec908e9b6845dc6777220e0debd1699b497b128", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "88e31ae2278ab6082dd279b91a08208764e6eed1cfe2ef42f9745fdb42934a1d", "tx_index": 0, "type": "core.gas_used" @@ -883,6 +917,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "88e31ae2278ab6082dd279b91a08208764e6eed1cfe2ef42f9745fdb42934a1d", "tx_index": 0, "type": "evm.log" @@ -900,6 +935,7 @@ "eth_tx_hash": "0da5386ccd9c2580c84aa53d9ec908e9b6845dc6777220e0debd1699b497b128", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "88e31ae2278ab6082dd279b91a08208764e6eed1cfe2ef42f9745fdb42934a1d", "tx_index": 0, "type": "evm.log" @@ -934,6 +970,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "88e31ae2278ab6082dd279b91a08208764e6eed1cfe2ef42f9745fdb42934a1d", "tx_index": 0, "type": "evm.log" @@ -968,6 +1005,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "88e31ae2278ab6082dd279b91a08208764e6eed1cfe2ef42f9745fdb42934a1d", "tx_index": 0, "type": "evm.log" @@ -979,6 +1017,7 @@ "eth_tx_hash": "cbfc539a86519a799637e46bbe028b3e7e96cca8be961e928ccbbda667a704ce", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "e1f2e9b21f8333c0759bcc3c06fd5ad0e3b3c702402b7ae25d374d3ee097bc90", "tx_index": 1, "type": "core.gas_used" @@ -1013,6 +1052,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "e1f2e9b21f8333c0759bcc3c06fd5ad0e3b3c702402b7ae25d374d3ee097bc90", "tx_index": 1, "type": "evm.log" @@ -1024,6 +1064,7 @@ "eth_tx_hash": "7b4aaf4dd20eb2b519a1c116c23abb7fe5a1bde258360104ac7ec8d46567e641", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "44eda71cb0aa58b27d5df66244a60bae3b3e3aec65a6d61d1515571305a2a2db", "tx_index": 2, "type": "core.gas_used" @@ -1041,6 +1082,7 @@ "eth_tx_hash": "7b4aaf4dd20eb2b519a1c116c23abb7fe5a1bde258360104ac7ec8d46567e641", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "44eda71cb0aa58b27d5df66244a60bae3b3e3aec65a6d61d1515571305a2a2db", "tx_index": 2, "type": "evm.log" @@ -1058,6 +1100,7 @@ "eth_tx_hash": "7b4aaf4dd20eb2b519a1c116c23abb7fe5a1bde258360104ac7ec8d46567e641", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "44eda71cb0aa58b27d5df66244a60bae3b3e3aec65a6d61d1515571305a2a2db", "tx_index": 2, "type": "evm.log" @@ -1092,6 +1135,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "44eda71cb0aa58b27d5df66244a60bae3b3e3aec65a6d61d1515571305a2a2db", "tx_index": 2, "type": "evm.log" @@ -1107,6 +1151,7 @@ "eth_tx_hash": "7b4aaf4dd20eb2b519a1c116c23abb7fe5a1bde258360104ac7ec8d46567e641", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "44eda71cb0aa58b27d5df66244a60bae3b3e3aec65a6d61d1515571305a2a2db", "tx_index": 2, "type": "evm.log" @@ -1124,6 +1169,7 @@ "eth_tx_hash": "7b4aaf4dd20eb2b519a1c116c23abb7fe5a1bde258360104ac7ec8d46567e641", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "44eda71cb0aa58b27d5df66244a60bae3b3e3aec65a6d61d1515571305a2a2db", "tx_index": 2, "type": "evm.log" @@ -1158,6 +1204,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "44eda71cb0aa58b27d5df66244a60bae3b3e3aec65a6d61d1515571305a2a2db", "tx_index": 2, "type": "evm.log" @@ -1192,6 +1239,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "44eda71cb0aa58b27d5df66244a60bae3b3e3aec65a6d61d1515571305a2a2db", "tx_index": 2, "type": "evm.log" @@ -1226,6 +1274,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "44eda71cb0aa58b27d5df66244a60bae3b3e3aec65a6d61d1515571305a2a2db", "tx_index": 2, "type": "evm.log" @@ -1260,6 +1309,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "44eda71cb0aa58b27d5df66244a60bae3b3e3aec65a6d61d1515571305a2a2db", "tx_index": 2, "type": "evm.log" @@ -1275,6 +1325,7 @@ "eth_tx_hash": "7b4aaf4dd20eb2b519a1c116c23abb7fe5a1bde258360104ac7ec8d46567e641", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "44eda71cb0aa58b27d5df66244a60bae3b3e3aec65a6d61d1515571305a2a2db", "tx_index": 2, "type": "evm.log" @@ -1290,6 +1341,7 @@ "eth_tx_hash": "7b4aaf4dd20eb2b519a1c116c23abb7fe5a1bde258360104ac7ec8d46567e641", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "44eda71cb0aa58b27d5df66244a60bae3b3e3aec65a6d61d1515571305a2a2db", "tx_index": 2, "type": "evm.log" @@ -1301,6 +1353,7 @@ "eth_tx_hash": "d0b029d60b477f3e6e51c1f8cd7cca37979f19363da29af6048ad595b6a93441", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "ee64ba61a35319363771a4e633b0fce8beadd9f9502786fdf8a02ab4dc69d744", "tx_index": 3, "type": "core.gas_used" @@ -1312,6 +1365,7 @@ "eth_tx_hash": "eb0115ba8be5a121a25a125b15ac51fecf1a9e8d5d76560ada2d0d477e1de545", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "7da617897318ddbc3be0fc6b533d2ed40b0d9aa78f182384eff34e763c76bb25", "tx_index": 4, "type": "core.gas_used" @@ -1323,6 +1377,7 @@ "eth_tx_hash": "5c68c9131388503fc918a037315345aa6baf3cfb99b0281058e5d8fa66b83cde", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "0e43922d6dc91de50f508faf440cf4caf82612daa2efafba87ca7319d4f127fa", "tx_index": 5, "type": "core.gas_used" @@ -1334,6 +1389,7 @@ "eth_tx_hash": "90fad26496384ec4e2c94bc19111514dbd28b0e0b50d63341282dff86d196bc2", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "01e5a94665e2f024073a727984b2c6fc74c72c165604ad3547eddb86ab5d54b8", "tx_index": 6, "type": "core.gas_used" @@ -1345,6 +1401,7 @@ "eth_tx_hash": "bbdd0f0f15b283f68a5b2d68d571985fce0a259d7e0ed60a9bc2749bcfa57c1f", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "a8d10202d0fd60b70680ac7cd59c55e49e46126cc630a3be9441f297056b9a30", "tx_index": 7, "type": "core.gas_used" @@ -1379,6 +1436,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "a8d10202d0fd60b70680ac7cd59c55e49e46126cc630a3be9441f297056b9a30", "tx_index": 7, "type": "evm.log" @@ -1396,6 +1454,7 @@ "eth_tx_hash": "bbdd0f0f15b283f68a5b2d68d571985fce0a259d7e0ed60a9bc2749bcfa57c1f", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "a8d10202d0fd60b70680ac7cd59c55e49e46126cc630a3be9441f297056b9a30", "tx_index": 7, "type": "evm.log" @@ -1430,6 +1489,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "a8d10202d0fd60b70680ac7cd59c55e49e46126cc630a3be9441f297056b9a30", "tx_index": 7, "type": "evm.log" @@ -1446,6 +1506,7 @@ "eth_tx_hash": "bbdd0f0f15b283f68a5b2d68d571985fce0a259d7e0ed60a9bc2749bcfa57c1f", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "a8d10202d0fd60b70680ac7cd59c55e49e46126cc630a3be9441f297056b9a30", "tx_index": 7, "type": "evm.log" @@ -1461,6 +1522,7 @@ "eth_tx_hash": "bbdd0f0f15b283f68a5b2d68d571985fce0a259d7e0ed60a9bc2749bcfa57c1f", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "a8d10202d0fd60b70680ac7cd59c55e49e46126cc630a3be9441f297056b9a30", "tx_index": 7, "type": "evm.log" @@ -1472,6 +1534,7 @@ "eth_tx_hash": "0114f38951e0501ff0bff1826572e40589f1c2c00fd87d44970d7d6fd0cf4d0f", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "a65e985e85ded530d46e57d5a380e0551ec1eea7e867e169b4b7fa199bc61fa1", "tx_index": 8, "type": "core.gas_used" @@ -1506,6 +1569,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "a65e985e85ded530d46e57d5a380e0551ec1eea7e867e169b4b7fa199bc61fa1", "tx_index": 8, "type": "evm.log" @@ -1523,6 +1587,7 @@ "eth_tx_hash": "0114f38951e0501ff0bff1826572e40589f1c2c00fd87d44970d7d6fd0cf4d0f", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "a65e985e85ded530d46e57d5a380e0551ec1eea7e867e169b4b7fa199bc61fa1", "tx_index": 8, "type": "evm.log" @@ -1557,6 +1622,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "a65e985e85ded530d46e57d5a380e0551ec1eea7e867e169b4b7fa199bc61fa1", "tx_index": 8, "type": "evm.log" @@ -1591,6 +1657,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "a65e985e85ded530d46e57d5a380e0551ec1eea7e867e169b4b7fa199bc61fa1", "tx_index": 8, "type": "evm.log" @@ -1606,6 +1673,7 @@ "eth_tx_hash": "0114f38951e0501ff0bff1826572e40589f1c2c00fd87d44970d7d6fd0cf4d0f", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "a65e985e85ded530d46e57d5a380e0551ec1eea7e867e169b4b7fa199bc61fa1", "tx_index": 8, "type": "evm.log" @@ -1617,6 +1685,7 @@ "eth_tx_hash": "3845a182be38bc79b6d572018f5a2138e4825eab44b1152ef956720347a7fabe", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "core.gas_used" @@ -1651,6 +1720,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1685,6 +1755,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1702,6 +1773,7 @@ "eth_tx_hash": "3845a182be38bc79b6d572018f5a2138e4825eab44b1152ef956720347a7fabe", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1720,6 +1792,7 @@ "eth_tx_hash": "3845a182be38bc79b6d572018f5a2138e4825eab44b1152ef956720347a7fabe", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1736,6 +1809,7 @@ "eth_tx_hash": "3845a182be38bc79b6d572018f5a2138e4825eab44b1152ef956720347a7fabe", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1770,6 +1844,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1804,6 +1879,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1838,6 +1914,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1872,6 +1949,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1906,6 +1984,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1922,6 +2001,7 @@ "eth_tx_hash": "3845a182be38bc79b6d572018f5a2138e4825eab44b1152ef956720347a7fabe", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1956,6 +2036,7 @@ } ], "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1973,6 +2054,7 @@ "eth_tx_hash": "3845a182be38bc79b6d572018f5a2138e4825eab44b1152ef956720347a7fabe", "evm_log_name": "", "round": 1003597, + "timestamp": "2022-04-11T13:38:08Z", "tx_hash": "983740e5eac8ef3acd067072d4cb7fff6f3c62bdc394b162639cebbe64572bc5", "tx_index": 9, "type": "evm.log" @@ -1984,6 +2066,7 @@ "eth_tx_hash": "8663b15c78d9312be5c3f7b5c72674509ff9e0430221bde6865f1ea45a4c5d5a", "evm_log_name": "", "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "86302d0f785f9cd0e1cae01ccba4087dad85dada43de72b33f488bab0778eecd", "tx_index": 0, "type": "core.gas_used" @@ -1999,6 +2082,7 @@ "eth_tx_hash": "8663b15c78d9312be5c3f7b5c72674509ff9e0430221bde6865f1ea45a4c5d5a", "evm_log_name": "", "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "86302d0f785f9cd0e1cae01ccba4087dad85dada43de72b33f488bab0778eecd", "tx_index": 0, "type": "evm.log" @@ -2016,6 +2100,7 @@ "eth_tx_hash": "8663b15c78d9312be5c3f7b5c72674509ff9e0430221bde6865f1ea45a4c5d5a", "evm_log_name": "", "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "86302d0f785f9cd0e1cae01ccba4087dad85dada43de72b33f488bab0778eecd", "tx_index": 0, "type": "evm.log" @@ -2050,6 +2135,7 @@ } ], "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "86302d0f785f9cd0e1cae01ccba4087dad85dada43de72b33f488bab0778eecd", "tx_index": 0, "type": "evm.log" @@ -2065,6 +2151,7 @@ "eth_tx_hash": "8663b15c78d9312be5c3f7b5c72674509ff9e0430221bde6865f1ea45a4c5d5a", "evm_log_name": "", "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "86302d0f785f9cd0e1cae01ccba4087dad85dada43de72b33f488bab0778eecd", "tx_index": 0, "type": "evm.log" @@ -2099,6 +2186,7 @@ } ], "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "86302d0f785f9cd0e1cae01ccba4087dad85dada43de72b33f488bab0778eecd", "tx_index": 0, "type": "evm.log" @@ -2110,6 +2198,7 @@ "eth_tx_hash": "6401f8e52743996fcf642b9e91f8681e1578c81d23b4aa8579af69d7b0f6ce9a", "evm_log_name": "", "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "6990763e70c6d36d2a5d9549993a1af6fb740f78b155b0f9055c821d480b804c", "tx_index": 1, "type": "core.gas_used" @@ -2127,6 +2216,7 @@ "eth_tx_hash": "6401f8e52743996fcf642b9e91f8681e1578c81d23b4aa8579af69d7b0f6ce9a", "evm_log_name": "", "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "6990763e70c6d36d2a5d9549993a1af6fb740f78b155b0f9055c821d480b804c", "tx_index": 1, "type": "evm.log" @@ -2161,6 +2251,7 @@ } ], "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "6990763e70c6d36d2a5d9549993a1af6fb740f78b155b0f9055c821d480b804c", "tx_index": 1, "type": "evm.log" @@ -2195,6 +2286,7 @@ } ], "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "6990763e70c6d36d2a5d9549993a1af6fb740f78b155b0f9055c821d480b804c", "tx_index": 1, "type": "evm.log" @@ -2229,6 +2321,7 @@ } ], "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "6990763e70c6d36d2a5d9549993a1af6fb740f78b155b0f9055c821d480b804c", "tx_index": 1, "type": "evm.log" @@ -2246,6 +2339,7 @@ "eth_tx_hash": "6401f8e52743996fcf642b9e91f8681e1578c81d23b4aa8579af69d7b0f6ce9a", "evm_log_name": "", "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "6990763e70c6d36d2a5d9549993a1af6fb740f78b155b0f9055c821d480b804c", "tx_index": 1, "type": "evm.log" @@ -2280,6 +2374,7 @@ } ], "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "6990763e70c6d36d2a5d9549993a1af6fb740f78b155b0f9055c821d480b804c", "tx_index": 1, "type": "evm.log" @@ -2295,6 +2390,7 @@ "eth_tx_hash": "6401f8e52743996fcf642b9e91f8681e1578c81d23b4aa8579af69d7b0f6ce9a", "evm_log_name": "", "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "6990763e70c6d36d2a5d9549993a1af6fb740f78b155b0f9055c821d480b804c", "tx_index": 1, "type": "evm.log" @@ -2310,6 +2406,7 @@ "eth_tx_hash": "6401f8e52743996fcf642b9e91f8681e1578c81d23b4aa8579af69d7b0f6ce9a", "evm_log_name": "", "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "6990763e70c6d36d2a5d9549993a1af6fb740f78b155b0f9055c821d480b804c", "tx_index": 1, "type": "evm.log" @@ -2321,6 +2418,7 @@ "eth_tx_hash": "7e9bc9a46485824bfe3c6f4a7fc8fe4b371dfe306bc5018b1b08601150def22a", "evm_log_name": "", "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "14970ba0f96730423e78aed50163739a6c42e21f7c2e027e53bc3608bc08f819", "tx_index": 2, "type": "core.gas_used" @@ -2355,6 +2453,7 @@ } ], "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "14970ba0f96730423e78aed50163739a6c42e21f7c2e027e53bc3608bc08f819", "tx_index": 2, "type": "evm.log" @@ -2372,6 +2471,7 @@ "eth_tx_hash": "7e9bc9a46485824bfe3c6f4a7fc8fe4b371dfe306bc5018b1b08601150def22a", "evm_log_name": "", "round": 1003596, + "timestamp": "2022-04-11T13:38:02Z", "tx_hash": "14970ba0f96730423e78aed50163739a6c42e21f7c2e027e53bc3608bc08f819", "tx_index": 2, "type": "evm.log"