From e5592052d56cea3224d9a325195a1f087948a396 Mon Sep 17 00:00:00 2001 From: Ho Date: Mon, 23 Jun 2025 11:38:56 +0900 Subject: [PATCH 01/29] add debug stuff for local running coordinator / prover pair --- database/localdbg/.env | 3 + database/localdbg/docker-compose.yml | 22 ++ database/localdbg/dump_block_records.sql | 29 ++ database/localdbg/dump_chunk_records.sql | 39 +++ database/localdbg/import_blocks.sql | 400 +++++++++++++++++++++++ database/localdbg/import_chunk.sql | 8 + database/localdbg/import_more_chunks.sql | 72 ++++ zkvm-prover/.work/.gitignore | 5 + zkvm-prover/.work/batch/openvm.toml | 34 ++ zkvm-prover/.work/bundle/openvm.toml | 17 + zkvm-prover/.work/chunk/openvm.toml | 53 +++ zkvm-prover/Makefile | 11 + zkvm-prover/download-release.sh | 20 ++ 13 files changed, 713 insertions(+) create mode 100644 database/localdbg/.env create mode 100644 database/localdbg/docker-compose.yml create mode 100644 database/localdbg/dump_block_records.sql create mode 100644 database/localdbg/dump_chunk_records.sql create mode 100644 database/localdbg/import_blocks.sql create mode 100644 database/localdbg/import_chunk.sql create mode 100644 database/localdbg/import_more_chunks.sql create mode 100644 zkvm-prover/.work/.gitignore create mode 100644 zkvm-prover/.work/batch/openvm.toml create mode 100644 zkvm-prover/.work/bundle/openvm.toml create mode 100644 zkvm-prover/.work/chunk/openvm.toml create mode 100644 zkvm-prover/download-release.sh diff --git a/database/localdbg/.env b/database/localdbg/.env new file mode 100644 index 0000000000..a5d24147bc --- /dev/null +++ b/database/localdbg/.env @@ -0,0 +1,3 @@ +GOOSE_DRIVER=postgres +GOOSE_DBSTRING=postgresql://dev:dev@localhost:5432/scroll?sslmode=disable +GOOSE_MIGRATION_DIR=./../migrate/migrations diff --git a/database/localdbg/docker-compose.yml b/database/localdbg/docker-compose.yml new file mode 100644 index 0000000000..7861a48281 --- /dev/null +++ b/database/localdbg/docker-compose.yml @@ -0,0 +1,22 @@ +# docker-compose.yml +# This configuration is for local debugging only. +# - PostgreSQL is bound to localhost (127.0.0.1) and not exposed externally. +# - Data is persisted to ./db relative to current directory. +# - No production security settings are applied. +# The access url is postgresql://dev:dev@localhost:5432/devdb + +version: '3.8' + +services: + postgres: + image: postgres + container_name: local_postgres + environment: + POSTGRES_USER: dev + POSTGRES_PASSWORD: dev + POSTGRES_DB: scroll + ports: + - "127.0.0.1:5432:5432" # Listen only on localhost +# volumes: +# - ./db:/var/lib/postgresql/data # Persist data to local ./db + restart: unless-stopped \ No newline at end of file diff --git a/database/localdbg/dump_block_records.sql b/database/localdbg/dump_block_records.sql new file mode 100644 index 0000000000..d06d67c92e --- /dev/null +++ b/database/localdbg/dump_block_records.sql @@ -0,0 +1,29 @@ +-- Create a file with INSERT statements for the specific records +-- We noticed that transactions is not used within coordinator so simply +-- replace it with empty record +\o block_export.sql +\t on +\a on +SELECT 'INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES (' || + quote_literal(number) || ', ' || + quote_literal(hash) || ', ' || + quote_literal(parent_hash) || ', ' || + quote_literal(header) || ', ' || + quote_literal(withdraw_root) || ', ' || + quote_literal(state_root) || ', ' || + quote_literal(tx_num) || ', ' || + quote_literal(gas_used) || ', ' || + quote_literal(block_timestamp) || ', ' || + quote_literal(row_consumption) || ', ' || + quote_literal(chunk_hash) || ', ' || + quote_literal('[]') || + ');' +FROM l2_block +WHERE number >= 10405845 and number <= 10405944 +ORDER BY number DESC; +\t off +\a off +\o \ No newline at end of file diff --git a/database/localdbg/dump_chunk_records.sql b/database/localdbg/dump_chunk_records.sql new file mode 100644 index 0000000000..e8f2e06e72 --- /dev/null +++ b/database/localdbg/dump_chunk_records.sql @@ -0,0 +1,39 @@ +-- Create a file with INSERT statements for the specific records +\o chunk_export.sql +\t on +\a on +SELECT 'INSERT INTO chunk ("index", hash, start_block_number, end_block_number, + start_block_hash, end_block_hash, total_l1_messages_popped_before, + total_l1_messages_popped_in_chunk, start_block_time, + parent_chunk_hash, state_root, parent_chunk_state_root, + withdraw_root, total_l2_tx_gas, total_l2_tx_num, + total_l1_commit_calldata_size, total_l1_commit_gas, + enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash + ) VALUES (' || + quote_literal("index") || ', ' || + quote_literal(hash) || ', ' || + quote_literal(start_block_number) || ', ' || + quote_literal(end_block_number) || ', ' || + quote_literal(start_block_hash) || ', ' || + quote_literal(end_block_hash) || ', ' || + quote_literal(total_l1_messages_popped_before) || ', ' || + quote_literal(total_l1_messages_popped_in_chunk) || ', ' || + quote_literal(start_block_time) || ', ' || + quote_literal(parent_chunk_hash) || ', ' || + quote_literal(state_root) || ', ' || + quote_literal(parent_chunk_state_root) || ', ' || + quote_literal(withdraw_root) || ', ' || + quote_literal(total_l2_tx_gas) || ', ' || + quote_literal(total_l2_tx_num) || ', ' || + quote_literal(total_l1_commit_calldata_size) || ', ' || + quote_literal(total_l1_commit_gas) || ', ' || + quote_literal(enable_compress) || ', ' || + quote_literal(prev_l1_message_queue_hash) || ', ' || + quote_literal(post_l1_message_queue_hash) || + ');' +FROM chunk +ORDER BY "index" DESC +LIMIT 10; +\t off +\a off +\o \ No newline at end of file diff --git a/database/localdbg/import_blocks.sql b/database/localdbg/import_blocks.sql new file mode 100644 index 0000000000..cea5b723d2 --- /dev/null +++ b/database/localdbg/import_blocks.sql @@ -0,0 +1,400 @@ +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405944', '0x522d7f22665754abccab64dc67f1ae4b2dda9729613893f20117810f5092427d', '0xd8996ec4cfae5b3a84704bc6774d3c0084b3775efd8e25111415546a8193a085', '{"parentHash":"0xd8996ec4cfae5b3a84704bc6774d3c0084b3775efd8e25111415546a8193a085","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xbe7752f82ad42463b27e0ac06b2c86e853a2f1fdf36456c8496979fda2998896","transactionsRoot":"0x290227ecfa9e0f358b999a971aa4d0f1af0db206311605d2126626f3d09283e7","receiptsRoot":"0xf889a1ea17b84acfb7789aa38182a24f314c4cb1a4f8146bbfaa9da1325ae949","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec838","gasLimit":"0x1312d00","gasUsed":"0x94e2","timestamp":"0x68404038","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x522d7f22665754abccab64dc67f1ae4b2dda9729613893f20117810f5092427d"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xbe7752f82ad42463b27e0ac06b2c86e853a2f1fdf36456c8496979fda2998896', '1', '38114', '1749041208', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405943', '0xd8996ec4cfae5b3a84704bc6774d3c0084b3775efd8e25111415546a8193a085', '0xe611f303854aaf36937c5f72fe73d0041421e0444a75afa3308fedd79b4e8993', '{"parentHash":"0xe611f303854aaf36937c5f72fe73d0041421e0444a75afa3308fedd79b4e8993","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xc2f15bac2c1b880a6cd79014c3aafdd7dbb2b5183e15a5bee6a30246f9bb8dcf","transactionsRoot":"0xadf9bf8be642e5dfe7d756b564a4ce6090bf9ef81ed4f9f69a4ebcc6bf29a633","receiptsRoot":"0x1fb6a3ca77f7bb96604326ca7d51d7645745e7ce487e5f2a89161a1837f9a5f1","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec837","gasLimit":"0x1312d00","gasUsed":"0x94d6","timestamp":"0x68404032","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xd8996ec4cfae5b3a84704bc6774d3c0084b3775efd8e25111415546a8193a085"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xc2f15bac2c1b880a6cd79014c3aafdd7dbb2b5183e15a5bee6a30246f9bb8dcf', '1', '38102', '1749041202', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405942', '0xe611f303854aaf36937c5f72fe73d0041421e0444a75afa3308fedd79b4e8993', '0x2fc3a606ad7238f021903676fde22ac84053ba43dca27252afdc600c4dcd7ac9', '{"parentHash":"0x2fc3a606ad7238f021903676fde22ac84053ba43dca27252afdc600c4dcd7ac9","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xc8c257a0436d96fca7100ff92c7d144c1395f7d271fe92884f6a6eeacc399b39","transactionsRoot":"0x757f9308b4ca8355dc613d69db80c401a9a73ad03335c0f1bb70fdc7c94eeb26","receiptsRoot":"0xdd1ac1302b3c279c536e1a573abf87bb2d3c3946a45718427b3285149411bf90","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec836","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68404028","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xe611f303854aaf36937c5f72fe73d0041421e0444a75afa3308fedd79b4e8993"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xc8c257a0436d96fca7100ff92c7d144c1395f7d271fe92884f6a6eeacc399b39', '1', '38478', '1749041192', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405941', '0x2fc3a606ad7238f021903676fde22ac84053ba43dca27252afdc600c4dcd7ac9', '0xfc78d50a885b944039420bcedcedfaf884ba36e8e39f179a33a2f3b1e0a1f3c5', '{"parentHash":"0xfc78d50a885b944039420bcedcedfaf884ba36e8e39f179a33a2f3b1e0a1f3c5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x8732873ed0885a537b3e582ed097792d558d4c861030ddebdef0bc597e8db590","transactionsRoot":"0x7e7935f29671cf2929a89fcd7a0f81a3c0c195ae2fe63689b3ce16a36ad5a5a4","receiptsRoot":"0x0cee1b1aa862e5b20ba6349a0415db0a275be65d7b669479c83dfdbb13e548ae","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec835","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68404014","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x2fc3a606ad7238f021903676fde22ac84053ba43dca27252afdc600c4dcd7ac9"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x8732873ed0885a537b3e582ed097792d558d4c861030ddebdef0bc597e8db590', '1', '41278', '1749041172', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405940', '0xfc78d50a885b944039420bcedcedfaf884ba36e8e39f179a33a2f3b1e0a1f3c5', '0x92d161cf6f32af110ca44839d0c12e4957db645ff472a119c8a43877721c72a5', '{"parentHash":"0x92d161cf6f32af110ca44839d0c12e4957db645ff472a119c8a43877721c72a5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x95f8d4943476e43ec3485e7bd470fe57a8ad499e6372d90be65a562feb352e99","transactionsRoot":"0x30f82da84a0770711de0a0487f8278233a998559f2422f60cb3d2b23035c946b","receiptsRoot":"0xeb5282e434d75e3b7d3381ce3f49f9cb2512c2891ed966a84a8a9da89cabee94","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec834","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x6840400a","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xfc78d50a885b944039420bcedcedfaf884ba36e8e39f179a33a2f3b1e0a1f3c5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x95f8d4943476e43ec3485e7bd470fe57a8ad499e6372d90be65a562feb352e99', '1', '41278', '1749041162', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405939', '0x92d161cf6f32af110ca44839d0c12e4957db645ff472a119c8a43877721c72a5', '0xb4cc1250bd7c677264cd4201c3a73a7f9b926ab354746cd00ce2cd72f5a9faed', '{"parentHash":"0xb4cc1250bd7c677264cd4201c3a73a7f9b926ab354746cd00ce2cd72f5a9faed","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x82b8e9b4077d1a5a36147fb1c2ef2869c7d301a12220defef5bd76c6c25e5e6d","transactionsRoot":"0x1e05a7fcf15bd0ca4256a331632e93c0de8008ee47f0424a2bec49ce1aef97e3","receiptsRoot":"0xb5c9fb7ea680e4acf37d3d12e610287acd85ce615bc88dd7ecd04e9b520ecd5d","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec833","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68404000","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x92d161cf6f32af110ca44839d0c12e4957db645ff472a119c8a43877721c72a5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x82b8e9b4077d1a5a36147fb1c2ef2869c7d301a12220defef5bd76c6c25e5e6d', '1', '41278', '1749041152', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405938', '0xb4cc1250bd7c677264cd4201c3a73a7f9b926ab354746cd00ce2cd72f5a9faed', '0x06bc4cc7d4c6dd7639ef5aa374311b18eb3792b5a7fd75a086943f1f2b203e23', '{"parentHash":"0x06bc4cc7d4c6dd7639ef5aa374311b18eb3792b5a7fd75a086943f1f2b203e23","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x3815fa4ba8f382898315cb612e630c62f02c70457209fbf4fce24dd9fc96362c","transactionsRoot":"0xf9a54a30da8d787594aa8c9c548e381cd11f2718681725f851b76bd7fd19447c","receiptsRoot":"0xf6f118bb4ecf8bd6c60671b9fa940fdc231c2323325ae563a095c2e5cd4e116b","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec832","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ff6","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xb4cc1250bd7c677264cd4201c3a73a7f9b926ab354746cd00ce2cd72f5a9faed"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x3815fa4ba8f382898315cb612e630c62f02c70457209fbf4fce24dd9fc96362c', '1', '41278', '1749041142', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405937', '0x06bc4cc7d4c6dd7639ef5aa374311b18eb3792b5a7fd75a086943f1f2b203e23', '0xf8b2da015a32479eff769648817d5f443070292c2d6309f2c510a726e4252bb4', '{"parentHash":"0xf8b2da015a32479eff769648817d5f443070292c2d6309f2c510a726e4252bb4","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xa9245d62b3209c85173488ff5eacaf6e27886202590f978b9239132a43d7173c","transactionsRoot":"0xb99ae73184bc948230f3b48913b183ad0113f856640dedccc38b13cdd8e1f030","receiptsRoot":"0x873e0cfcaf12040ca3001c03ad6a81d51bc2325a2a7d12d7377fc0f0f287ee95","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec831","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403fec","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x06bc4cc7d4c6dd7639ef5aa374311b18eb3792b5a7fd75a086943f1f2b203e23"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xa9245d62b3209c85173488ff5eacaf6e27886202590f978b9239132a43d7173c', '1', '41278', '1749041132', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405936', '0xf8b2da015a32479eff769648817d5f443070292c2d6309f2c510a726e4252bb4', '0x6d0113fe6efb2b891bbe67d76e9461cb3827d4cbdedca20c80ab699b4d77d831', '{"parentHash":"0x6d0113fe6efb2b891bbe67d76e9461cb3827d4cbdedca20c80ab699b4d77d831","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x706dca0e49ac358345bd6b1dd82153f4b7a3b7ab0ee643fd1d57897aba6d71b7","transactionsRoot":"0xf4f14df6a408e018b63c2cc9572b1c15355112fc1d166f4893a766955947b0c5","receiptsRoot":"0x29b1160fa0f309fde68f2509b1d6b738478d907cc47f5983469426969355d8ba","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec830","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403fd8","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4203","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xf8b2da015a32479eff769648817d5f443070292c2d6309f2c510a726e4252bb4"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x706dca0e49ac358345bd6b1dd82153f4b7a3b7ab0ee643fd1d57897aba6d71b7', '1', '41278', '1749041112', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405935', '0x6d0113fe6efb2b891bbe67d76e9461cb3827d4cbdedca20c80ab699b4d77d831', '0xd9492e6a7933434d53a3ba2b52720c5fa41b0cf8fdb12f4abc5797d5c0838dde', '{"parentHash":"0xd9492e6a7933434d53a3ba2b52720c5fa41b0cf8fdb12f4abc5797d5c0838dde","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xa6d77eee80f956c965e2cc0b873532234b832f6e1ac1722e179b8ccdeeaa38af","transactionsRoot":"0x514304a7cd943918b9bd707547f719e2d99dfa10bdf1044fdc8fd1623aa14ca1","receiptsRoot":"0xf93755a32fbd7bd996e77a85737888a5abb73cdb1f10b5eca554e459328e373d","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec82f","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403fce","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x6d0113fe6efb2b891bbe67d76e9461cb3827d4cbdedca20c80ab699b4d77d831"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xa6d77eee80f956c965e2cc0b873532234b832f6e1ac1722e179b8ccdeeaa38af', '1', '41278', '1749041102', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405934', '0xd9492e6a7933434d53a3ba2b52720c5fa41b0cf8fdb12f4abc5797d5c0838dde', '0x5cc24195981bd805b164a32b73b6803ff28993e34cd041ce8d1d37d645cb7a7e', '{"parentHash":"0x5cc24195981bd805b164a32b73b6803ff28993e34cd041ce8d1d37d645cb7a7e","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xca3b518f5aaeebf5405da1e2d504c7274384a018a31b8501c5aa3cdeef18c275","transactionsRoot":"0x84dd7944b14606b5b9d805677aa10c7dc4effd7c3a8bf5ee482725f62e472f31","receiptsRoot":"0x692a6c88218159b2e463549dc2efd22cae6f285bfdd55a214c2a73e60ddcba9f","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec82e","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403fc7","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xd9492e6a7933434d53a3ba2b52720c5fa41b0cf8fdb12f4abc5797d5c0838dde"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xca3b518f5aaeebf5405da1e2d504c7274384a018a31b8501c5aa3cdeef18c275', '1', '41278', '1749041095', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405933', '0x5cc24195981bd805b164a32b73b6803ff28993e34cd041ce8d1d37d645cb7a7e', '0x238b9c31f4e3c1821b8323174801363bbbdbae704ff23c080cbd33bb14a75872', '{"parentHash":"0x238b9c31f4e3c1821b8323174801363bbbdbae704ff23c080cbd33bb14a75872","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7d02b9e7ff452aab4fb5717355cfc2d158e05c5c7bd5cdaabcbbc5266480a98e","transactionsRoot":"0x7c63a528c1f984fcec92bbfd9ea6a98097ea52fd0c9b30938705b0a1ca5ced06","receiptsRoot":"0xfe9bb8add4e9b82c4dff5ecbba93825fa7e415d759033fb5d15dcf33a9f4c1df","logsBloom":"0x00000000000000000000000000000000000800000100000000000800000000000000900000000000000000000000000000000000000200000000000000000000000000000000000000000001002000000000000001000000000000000000000000000000020000000000000000000800000000000000002000000000000000000000000000000000000000000000000000000480000000000020000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000002000000000000000004000000000200000000000000020000000800000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec82d","gasLimit":"0x1312d00","gasUsed":"0x1fa54","timestamp":"0x68403fc4","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x5cc24195981bd805b164a32b73b6803ff28993e34cd041ce8d1d37d645cb7a7e"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7d02b9e7ff452aab4fb5717355cfc2d158e05c5c7bd5cdaabcbbc5266480a98e', '1', '129620', '1749041092', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405932', '0x238b9c31f4e3c1821b8323174801363bbbdbae704ff23c080cbd33bb14a75872', '0x04bdc7d66f10be716f2a2521628fc8e0451e5c9aa5b7add08cdd35a4849ccf8c', '{"parentHash":"0x04bdc7d66f10be716f2a2521628fc8e0451e5c9aa5b7add08cdd35a4849ccf8c","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x58ffc262b1b2906d5d46360a9a6a44603a562670b8a5bfc558867d5333bf6b89","transactionsRoot":"0x45393b042c5b31d2dbe6bee5709666f5a8ee5f1ec4049c5ba66ad1fdecddc197","receiptsRoot":"0x9fc8cb394ffbd1ab82014742b023a008703f2aedcbf5ef76341348ce3b91cee3","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec82c","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403fba","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x238b9c31f4e3c1821b8323174801363bbbdbae704ff23c080cbd33bb14a75872"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x58ffc262b1b2906d5d46360a9a6a44603a562670b8a5bfc558867d5333bf6b89', '1', '41278', '1749041082', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405931', '0x04bdc7d66f10be716f2a2521628fc8e0451e5c9aa5b7add08cdd35a4849ccf8c', '0xe5750a175b12ecebad5ed54faab2bfb43484f643cd94b58ba2cabe1977cccb95', '{"parentHash":"0xe5750a175b12ecebad5ed54faab2bfb43484f643cd94b58ba2cabe1977cccb95","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x1d38c7f24fa50e771103bda1c98e6948001e6500a4518d5a9328b68d0a89afae","transactionsRoot":"0x04d3dad3d292ae6f8b121b93b5543b00a039e1dd07d1cddd1f179a25f7feae86","receiptsRoot":"0xd4ce818cce711f416d0c763e86d7d343120eaf323f57e0c26f70411107af8275","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec82b","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403fb0","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x04bdc7d66f10be716f2a2521628fc8e0451e5c9aa5b7add08cdd35a4849ccf8c"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x1d38c7f24fa50e771103bda1c98e6948001e6500a4518d5a9328b68d0a89afae', '1', '41278', '1749041072', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405930', '0xe5750a175b12ecebad5ed54faab2bfb43484f643cd94b58ba2cabe1977cccb95', '0xe04054a2a56cf0b5b10850eb340f9eebfcb150bfc87c0069ac88cc5b85e60ae5', '{"parentHash":"0xe04054a2a56cf0b5b10850eb340f9eebfcb150bfc87c0069ac88cc5b85e60ae5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xba255ab08c2c118c23d2e7362fd4b6b0710c256ea7ddfef5eb9b90350e3ca0d5","transactionsRoot":"0x602f15e4d9d5738d2fa6a6ca932ffa41799f1dd9f0729a6778326aad00e85c1e","receiptsRoot":"0x6e687e25606eaff7fc22c0d9bfc788a733b7634dc2123406fe190a0a67ffdeaf","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec82a","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f9c","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xe5750a175b12ecebad5ed54faab2bfb43484f643cd94b58ba2cabe1977cccb95"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xba255ab08c2c118c23d2e7362fd4b6b0710c256ea7ddfef5eb9b90350e3ca0d5', '1', '41278', '1749041052', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405929', '0xe04054a2a56cf0b5b10850eb340f9eebfcb150bfc87c0069ac88cc5b85e60ae5', '0xaaaf07c2147d75a29b4f4ccc2c6965cee5a6fb48a86695db9ad5c0ddc01f7990', '{"parentHash":"0xaaaf07c2147d75a29b4f4ccc2c6965cee5a6fb48a86695db9ad5c0ddc01f7990","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x5237e7d9c60b1cbca429131d623039fb8f82a6df0d7729eeafc4881f0ca7692e","transactionsRoot":"0x02ea2dea7cc2d05358d2c6d1a753b8b2f5345859d286469b89ad891d1f9254d5","receiptsRoot":"0x65443c91804a4fa18ac753804a74a10b454f2670cf4a361fa483b9b051fd6a5e","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec829","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f92","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xe04054a2a56cf0b5b10850eb340f9eebfcb150bfc87c0069ac88cc5b85e60ae5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x5237e7d9c60b1cbca429131d623039fb8f82a6df0d7729eeafc4881f0ca7692e', '1', '41278', '1749041042', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405928', '0xaaaf07c2147d75a29b4f4ccc2c6965cee5a6fb48a86695db9ad5c0ddc01f7990', '0xcef2d129a7c8a49a067f31765069e2a32a6cffd2bb2f454540c9e2504bd4c0c8', '{"parentHash":"0xcef2d129a7c8a49a067f31765069e2a32a6cffd2bb2f454540c9e2504bd4c0c8","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xca2e7b109723590b6bdcf5bdcbf15917cce954dbd3108676e7d1668e4eeda816","transactionsRoot":"0x88fc713a8f45cd496f8e522fe36c22363b59cea3937b6fac38c196afbc66d0a9","receiptsRoot":"0xf33084f4520c4444e66288ca8c98413714b84839f984011f997a04bce661472f","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec828","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403f88","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xaaaf07c2147d75a29b4f4ccc2c6965cee5a6fb48a86695db9ad5c0ddc01f7990"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xca2e7b109723590b6bdcf5bdcbf15917cce954dbd3108676e7d1668e4eeda816', '1', '38478', '1749041032', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405927', '0xcef2d129a7c8a49a067f31765069e2a32a6cffd2bb2f454540c9e2504bd4c0c8', '0x63076e493203174b6e48ef2fed0e6e48f62b20a43ff5140d1d081d07a99dd9df', '{"parentHash":"0x63076e493203174b6e48ef2fed0e6e48f62b20a43ff5140d1d081d07a99dd9df","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x172b6a8caf4c330760642a91dffbac07f47659ca1d49dc3534b1dcd92c755137","transactionsRoot":"0xe5e636e3e0b4bbf055be2a86015e247ca7b90865306ac2409f7fa51fdcc95095","receiptsRoot":"0x212a26524f2563e7d075e8a6a8088a0f4045d91427974b2ae712ce3f45a6c4b1","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec827","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f81","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xcef2d129a7c8a49a067f31765069e2a32a6cffd2bb2f454540c9e2504bd4c0c8"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x172b6a8caf4c330760642a91dffbac07f47659ca1d49dc3534b1dcd92c755137', '1', '41278', '1749041025', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405926', '0x63076e493203174b6e48ef2fed0e6e48f62b20a43ff5140d1d081d07a99dd9df', '0x6d1c7b926232fd17db38ce29ae40f2dc502dddf6cd654f56e31d69b62e0d46bf', '{"parentHash":"0x6d1c7b926232fd17db38ce29ae40f2dc502dddf6cd654f56e31d69b62e0d46bf","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x93c8df411ced3c60aafb2d732e82eae89ce16f4177649d3634c49f1ce033fb4d","transactionsRoot":"0xa6b99694740f5f9cf40db1f32205c68af646a84a370619594dd3ea2324688682","receiptsRoot":"0xd967eb0c9072deadc475375dc0e32e67dcfe577aa1e1f88144e04e24ef002ee1","logsBloom":"0x00000000000000000000000000002000000000000080000000000100000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000040000000000000000000000000020000000000010000000000000000001000000000000000000000000000000000000000000020000000000000000000000000004000000000080000000000000000000040000000000000000000000000000000000000000000000000000000000000000001000000000000000000000110000000000044040000040000000000000100000000000000000800200000000000000004000001000000000","difficulty":"0x1","number":"0x9ec826","gasLimit":"0x1312d00","gasUsed":"0x44ffc","timestamp":"0x68403f7f","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x63076e493203174b6e48ef2fed0e6e48f62b20a43ff5140d1d081d07a99dd9df"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x93c8df411ced3c60aafb2d732e82eae89ce16f4177649d3634c49f1ce033fb4d', '1', '282620', '1749041023', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405925', '0x6d1c7b926232fd17db38ce29ae40f2dc502dddf6cd654f56e31d69b62e0d46bf', '0xe0831a0687a0f2572c288ef105f84e9f3619a96fb99b13edc61b51fc29a9b3b5', '{"parentHash":"0xe0831a0687a0f2572c288ef105f84e9f3619a96fb99b13edc61b51fc29a9b3b5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x13249e11568c46407aac27522b892395ffe965bf998216e05f9bde37ab0974d0","transactionsRoot":"0xf42f73c3902fb114572e24924bfcd84e33e61d1472ee67613bc99628b6096a8e","receiptsRoot":"0x7adb6be7e1d221c675c4836f83fba8b82ce80d5dae4fbd7a21b9a11e3937f423","logsBloom":"0x00000000000000000000000000000000000000000080000000000100000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000000000040000000000000000000000000020000000000010000000000000000001000000000000000000200000000000000000000000000000040000000800000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000040000000000000000110000000000044000000040000000000000100000000000000000800200000000000000004000000200000000","difficulty":"0x1","number":"0x9ec825","gasLimit":"0x1312d00","gasUsed":"0x44ffc","timestamp":"0x68403f7e","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x6d1c7b926232fd17db38ce29ae40f2dc502dddf6cd654f56e31d69b62e0d46bf"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x13249e11568c46407aac27522b892395ffe965bf998216e05f9bde37ab0974d0', '1', '282620', '1749041022', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405924', '0xe0831a0687a0f2572c288ef105f84e9f3619a96fb99b13edc61b51fc29a9b3b5', '0x71cdf7c180b25fefec87beff013ea3cbd07712cd5bbc31164ec3fd47f13ac4c9', '{"parentHash":"0x71cdf7c180b25fefec87beff013ea3cbd07712cd5bbc31164ec3fd47f13ac4c9","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x032f48f6c490ad509738ad799d47f9a2d481cda2b6a36640b93aabb66ab77491","transactionsRoot":"0x908ea3e62f16e6c494ba22ce55232978bbb5544149ae30cf34dfba6691a336fe","receiptsRoot":"0x35c7004ba92d47e2613600423e6d378b86b83f35dd13c26aa873592b8dc4231e","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec824","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403f75","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xe0831a0687a0f2572c288ef105f84e9f3619a96fb99b13edc61b51fc29a9b3b5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x032f48f6c490ad509738ad799d47f9a2d481cda2b6a36640b93aabb66ab77491', '1', '38478', '1749041013', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405923', '0x71cdf7c180b25fefec87beff013ea3cbd07712cd5bbc31164ec3fd47f13ac4c9', '0xb8494b3cf0f3866491eae96dbd82a2fe7804bfe6c3dc5bdb1de917e1cb7e5a3f', '{"parentHash":"0xb8494b3cf0f3866491eae96dbd82a2fe7804bfe6c3dc5bdb1de917e1cb7e5a3f","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x4892a014e2cc284d1dd727e7422a15cffe83a3e2ffa125396999412a7163495e","transactionsRoot":"0x1205da7d9160769b5b63bcbe451469c7023e829d549a993a080dd44398d52855","receiptsRoot":"0x6c630569729bc002238990f63209e3aebc939c247de254e24924a903ebca68ef","logsBloom":"0x800000000000000000000000000000000000000004000000000000000000000000000000000000000000400000008000000000000000000000000000000000000000000000000000080000000010000000800000000000000000000200000001000000200000004000000000000002020041010000000000000000080000000000000000000000000000000000000000000000000000000000002000000100200000000000000000000000000000000000000000000000000020002000000200000000000000400000000000000000000000000006000000000040000000000000000000000000000000000000000000000000c000000000400000000c000004","difficulty":"0x1","number":"0x9ec823","gasLimit":"0x1312d00","gasUsed":"0x30228","timestamp":"0x68403f74","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x71cdf7c180b25fefec87beff013ea3cbd07712cd5bbc31164ec3fd47f13ac4c9"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x4892a014e2cc284d1dd727e7422a15cffe83a3e2ffa125396999412a7163495e', '1', '197160', '1749041012', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405922', '0xb8494b3cf0f3866491eae96dbd82a2fe7804bfe6c3dc5bdb1de917e1cb7e5a3f', '0xdb722ad3da146ae4e45088ead4aaab98739b9ca6ce924c3f355f97b235d1a2b2', '{"parentHash":"0xdb722ad3da146ae4e45088ead4aaab98739b9ca6ce924c3f355f97b235d1a2b2","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xc9db7d7818c1c27d5d4c477c64aa6aa1fc22e6910cd3e9d0de20d09563aecc24","transactionsRoot":"0xf6f3fdad76238c8c42791beb24d2d63c812a3aad3b3c4c85f9d16b9631374a3d","receiptsRoot":"0x0888d8af82d92622607ec91309962db949b2d3624989ffe5be188b9b61db7d47","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec822","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f60","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xb8494b3cf0f3866491eae96dbd82a2fe7804bfe6c3dc5bdb1de917e1cb7e5a3f"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xc9db7d7818c1c27d5d4c477c64aa6aa1fc22e6910cd3e9d0de20d09563aecc24', '1', '41278', '1749040992', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405921', '0xdb722ad3da146ae4e45088ead4aaab98739b9ca6ce924c3f355f97b235d1a2b2', '0x3586c492c3449d6e5b50608b63549cb33085ab15ea6ef9757d6eef17efb53b09', '{"parentHash":"0x3586c492c3449d6e5b50608b63549cb33085ab15ea6ef9757d6eef17efb53b09","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xaac0b91e0987d5d36c17eb008a50740d662eb3a5ab0bcf879d5e14cb0dc0fb58","transactionsRoot":"0xbb3a651e5cfc655a35d423e3db3494bfb4f24f1ce5a66acb4951bafe313d7a7e","receiptsRoot":"0x5182a731b540dd2f07bb3ccfb2a907f1e2c3633ca6942b9f08a08c528a5f187c","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec821","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403f56","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xdb722ad3da146ae4e45088ead4aaab98739b9ca6ce924c3f355f97b235d1a2b2"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xaac0b91e0987d5d36c17eb008a50740d662eb3a5ab0bcf879d5e14cb0dc0fb58', '1', '38478', '1749040982', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405920', '0x3586c492c3449d6e5b50608b63549cb33085ab15ea6ef9757d6eef17efb53b09', '0x311dfff8eb0029d86853a8c573aa718354bf3a532c0778ec9c7059fa13f1aedb', '{"parentHash":"0x311dfff8eb0029d86853a8c573aa718354bf3a532c0778ec9c7059fa13f1aedb","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x60000fbb71532e5653ebb8f087ae38e9a2cadb6f9f0611ca729e3edfabf45e37","transactionsRoot":"0xb30008b97e4011b36c747f03dee9a6bfca1c9faedea7ee4207884951ee2034b8","receiptsRoot":"0x71e44dbf8079931c4b6e9fb8c2844b31db7897cd3ebbc6e84b4eb3e167df5812","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec820","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f4c","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x3586c492c3449d6e5b50608b63549cb33085ab15ea6ef9757d6eef17efb53b09"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x60000fbb71532e5653ebb8f087ae38e9a2cadb6f9f0611ca729e3edfabf45e37', '1', '41278', '1749040972', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405919', '0x311dfff8eb0029d86853a8c573aa718354bf3a532c0778ec9c7059fa13f1aedb', '0x91258cebc22e243e50b95dfd99abaf115f74620f793df196a71293dae1169d58', '{"parentHash":"0x91258cebc22e243e50b95dfd99abaf115f74620f793df196a71293dae1169d58","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x5cf4f785b6c8ae90560fd1c09559902b5d56b0f167bfcc2a75a89fe06a813afb","transactionsRoot":"0x0c78995763caf2caf95651371c11abd40c73f4714a9010c320ffe359d161820d","receiptsRoot":"0xf5e9a89fc6227b57d4cefc55dc8072954c41f8db98efc05c053225c8556f6722","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec81f","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f42","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x311dfff8eb0029d86853a8c573aa718354bf3a532c0778ec9c7059fa13f1aedb"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x5cf4f785b6c8ae90560fd1c09559902b5d56b0f167bfcc2a75a89fe06a813afb', '1', '41278', '1749040962', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405918', '0x91258cebc22e243e50b95dfd99abaf115f74620f793df196a71293dae1169d58', '0x8bd68b8d52e216d6e184c6bf267d4a70d80893f9556b7efd71304176eb86e32a', '{"parentHash":"0x8bd68b8d52e216d6e184c6bf267d4a70d80893f9556b7efd71304176eb86e32a","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x0c1432eaff904dc29637f826daed41f65e7172b9d6e9923340aa97eb5e3c25ff","transactionsRoot":"0x8ce1284faf59633de41faea48ebba950f9b51fde8e73ecd3c8948c05f2d1e774","receiptsRoot":"0x04959d879a9a87b46933ffb92ce04ba7ad035292ba723ba0be193db2cea9462a","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec81e","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f38","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x91258cebc22e243e50b95dfd99abaf115f74620f793df196a71293dae1169d58"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x0c1432eaff904dc29637f826daed41f65e7172b9d6e9923340aa97eb5e3c25ff', '1', '41278', '1749040952', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405917', '0x8bd68b8d52e216d6e184c6bf267d4a70d80893f9556b7efd71304176eb86e32a', '0x1dce82889a578c62d1beed3711d08e13ded1004bb302601c8cd0d7a761993bd6', '{"parentHash":"0x1dce82889a578c62d1beed3711d08e13ded1004bb302601c8cd0d7a761993bd6","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd56a72a870b4140188ef147cff4d62f043e3d3951fa0f1c3016cb2f71d88fc21","transactionsRoot":"0xc91f929f09b20d26b259ff42950dc46d6082990c65ca484730edc9c0a4893a73","receiptsRoot":"0x64e7fcec14adce6836a8db75f22fd47288b24480ac897c22112650b9e3bab917","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec81d","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f24","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x8bd68b8d52e216d6e184c6bf267d4a70d80893f9556b7efd71304176eb86e32a"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd56a72a870b4140188ef147cff4d62f043e3d3951fa0f1c3016cb2f71d88fc21', '1', '41278', '1749040932', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405916', '0x1dce82889a578c62d1beed3711d08e13ded1004bb302601c8cd0d7a761993bd6', '0x5617de888b091896fd96308a2c6bc66a2719372c87c4f7e8585783fc7ac47fad', '{"parentHash":"0x5617de888b091896fd96308a2c6bc66a2719372c87c4f7e8585783fc7ac47fad","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x72e9999ab4e30501f8445c0ac109089169ea5dd5a3e9208eead5901aafed10bc","transactionsRoot":"0x9a260caf07d97cc98d8857ac61a39f76d606b9da06f89582d6a6c2fcf74b90d7","receiptsRoot":"0x3aa7696fd68024e5f167d27d02c9ff23a9ca7b389e9bc17d285f9bb409dc8189","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec81c","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f1a","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x1dce82889a578c62d1beed3711d08e13ded1004bb302601c8cd0d7a761993bd6"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x72e9999ab4e30501f8445c0ac109089169ea5dd5a3e9208eead5901aafed10bc', '1', '41278', '1749040922', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405915', '0x5617de888b091896fd96308a2c6bc66a2719372c87c4f7e8585783fc7ac47fad', '0xa9e062d1e26ad4f5a65bc1cbe048cd3505bde1b6ec0164b70e996fc99412fe66', '{"parentHash":"0xa9e062d1e26ad4f5a65bc1cbe048cd3505bde1b6ec0164b70e996fc99412fe66","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd960dbcb67f4f024f13406539432d70fd72e0cb1e03bf4295b4a2ddc34e441db","transactionsRoot":"0x3c6be946f87675632f44a60060250fa9b62716e613038b5525af7497fffed837","receiptsRoot":"0x15312d9f8d57ee3cb47c63c5ac57b776faca14899d6d6e611155614cd47f24b0","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec81b","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f11","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x5617de888b091896fd96308a2c6bc66a2719372c87c4f7e8585783fc7ac47fad"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd960dbcb67f4f024f13406539432d70fd72e0cb1e03bf4295b4a2ddc34e441db', '1', '41278', '1749040913', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405914', '0xa9e062d1e26ad4f5a65bc1cbe048cd3505bde1b6ec0164b70e996fc99412fe66', '0x75876122116c609437718d4043d1a12eb2f57821af61d8888f5a6f3603c520b7', '{"parentHash":"0x75876122116c609437718d4043d1a12eb2f57821af61d8888f5a6f3603c520b7","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x1990e509fa98bbbf04502c51a2102e09174816ba6d05d9f4979575e9db674992","transactionsRoot":"0xcb73a646ac241c2a70959ac6c88203a02d4a092a0dc0fa27d2229caf9a2941f0","receiptsRoot":"0x302347f5f66a629e6e8f5f596ddc57edb8ea71124420858d546aa436afc17dba","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec81a","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f10","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xa9e062d1e26ad4f5a65bc1cbe048cd3505bde1b6ec0164b70e996fc99412fe66"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x1990e509fa98bbbf04502c51a2102e09174816ba6d05d9f4979575e9db674992', '1', '41278', '1749040912', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405913', '0x75876122116c609437718d4043d1a12eb2f57821af61d8888f5a6f3603c520b7', '0xee3f3cfa7e0cb4c274e9a607891930119fec36c0ff032dcda28bea4f82bee5c8', '{"parentHash":"0xee3f3cfa7e0cb4c274e9a607891930119fec36c0ff032dcda28bea4f82bee5c8","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x4920e0fba4b885e51cb46385a4e782e86a3c87cfbf76071ac0f98a71620e3c92","transactionsRoot":"0x416bcc7b571485a5c483b7a53205160f5eb38594d3a1e2f12bc802453fd4c040","receiptsRoot":"0x725806b481bfd1727dd493d969a6d57b793b6185761f5452ecf38d8acbec1364","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec819","gasLimit":"0x1312d00","gasUsed":"0x94ee","timestamp":"0x68403f0f","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x75876122116c609437718d4043d1a12eb2f57821af61d8888f5a6f3603c520b7"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x4920e0fba4b885e51cb46385a4e782e86a3c87cfbf76071ac0f98a71620e3c92', '1', '38126', '1749040911', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405912', '0xee3f3cfa7e0cb4c274e9a607891930119fec36c0ff032dcda28bea4f82bee5c8', '0x902c743a58545c970c9faf2199147d19943bb1edbe3d3f1705dffb67357a3807', '{"parentHash":"0x902c743a58545c970c9faf2199147d19943bb1edbe3d3f1705dffb67357a3807","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xace84350ea22e08ead162bcfb4e9e985f5638781d1631ba24d7862cfa46207dc","transactionsRoot":"0x5a886ef8a05c3eee07a5e33a46bd43732b25979979b348a5ec6f08885151aaa1","receiptsRoot":"0x725806b481bfd1727dd493d969a6d57b793b6185761f5452ecf38d8acbec1364","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec818","gasLimit":"0x1312d00","gasUsed":"0x94ee","timestamp":"0x68403f0e","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xee3f3cfa7e0cb4c274e9a607891930119fec36c0ff032dcda28bea4f82bee5c8"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xace84350ea22e08ead162bcfb4e9e985f5638781d1631ba24d7862cfa46207dc', '1', '38126', '1749040910', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405911', '0x902c743a58545c970c9faf2199147d19943bb1edbe3d3f1705dffb67357a3807', '0xdd3ec15d498365046f0c1cf225751b729203aac6419c4a4baa8a761fbaafecca', '{"parentHash":"0xdd3ec15d498365046f0c1cf225751b729203aac6419c4a4baa8a761fbaafecca","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7820d7bf28e2a65b0ac9186a1364316c8f0a9d6800c4e85428eceda1bf4c84e6","transactionsRoot":"0xe2c09ee1197aac2f02d0e653c0c9d94b2e0cdf8a118fbb8eda9fb1aefc215a36","receiptsRoot":"0x1fb6a3ca77f7bb96604326ca7d51d7645745e7ce487e5f2a89161a1837f9a5f1","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec817","gasLimit":"0x1312d00","gasUsed":"0x94d6","timestamp":"0x68403f06","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x902c743a58545c970c9faf2199147d19943bb1edbe3d3f1705dffb67357a3807"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7820d7bf28e2a65b0ac9186a1364316c8f0a9d6800c4e85428eceda1bf4c84e6', '1', '38102', '1749040902', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405910', '0xdd3ec15d498365046f0c1cf225751b729203aac6419c4a4baa8a761fbaafecca', '0x5e34356941c15a4f6439178bbf806d29a3b48fb4bdb08b37fb68845bd1e4d5ca', '{"parentHash":"0x5e34356941c15a4f6439178bbf806d29a3b48fb4bdb08b37fb68845bd1e4d5ca","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x2aa74c378c71052d3a2232adf75a86c10f91398fd41a9f8931ef683374224cd2","transactionsRoot":"0xfd71fa5485488f77263d66a5bcaeeeb99eda14281bf221a4ac9e0ce8aa1c1cb8","receiptsRoot":"0x22026be8611fc4ee4ab597897db1f51166eecfc706a7739056e85428508732ff","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec816","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403efc","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xdd3ec15d498365046f0c1cf225751b729203aac6419c4a4baa8a761fbaafecca"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x2aa74c378c71052d3a2232adf75a86c10f91398fd41a9f8931ef683374224cd2', '1', '41278', '1749040892', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405909', '0x5e34356941c15a4f6439178bbf806d29a3b48fb4bdb08b37fb68845bd1e4d5ca', '0x6931a20b42519d87e0a21d175ae417ba0ff4e563c6899dc8150d93db7b357df5', '{"parentHash":"0x6931a20b42519d87e0a21d175ae417ba0ff4e563c6899dc8150d93db7b357df5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xb7864ef628308d62980a6afbe1cd8642ccd968d52c0f40026eeba3b646b3c3a5","transactionsRoot":"0x164b75b0ccd3fee99a33611a8d638c8bee22a0a055d61262131e9091e08a1f68","receiptsRoot":"0x1459b1aab5d9039aa66a9055f3366305aa450e6b675fdd099037ef08bd226339","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec815","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ee8","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x5e34356941c15a4f6439178bbf806d29a3b48fb4bdb08b37fb68845bd1e4d5ca"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xb7864ef628308d62980a6afbe1cd8642ccd968d52c0f40026eeba3b646b3c3a5', '1', '41278', '1749040872', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405908', '0x6931a20b42519d87e0a21d175ae417ba0ff4e563c6899dc8150d93db7b357df5', '0x5d6b701681c6af7ce0e736767225f9118fea743d81630a4f4c1bc1381c5ec291', '{"parentHash":"0x5d6b701681c6af7ce0e736767225f9118fea743d81630a4f4c1bc1381c5ec291","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xc9e4a71135f625cf479c6fa57fe8c12fff86ff35712307801c0bc3104cbed58c","transactionsRoot":"0xe18891f3fadd518b94b13f08c3d3d413c24baf256da3984ae96dd329c41d0071","receiptsRoot":"0x81b635044d7bdb599359e855fe44b0cd53a72b6f1fb90b404239d731e900a353","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec814","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403ede","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4208","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x6931a20b42519d87e0a21d175ae417ba0ff4e563c6899dc8150d93db7b357df5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xc9e4a71135f625cf479c6fa57fe8c12fff86ff35712307801c0bc3104cbed58c', '1', '38478', '1749040862', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405907', '0x5d6b701681c6af7ce0e736767225f9118fea743d81630a4f4c1bc1381c5ec291', '0x39bec42f78b3c7a07a64771a203a2f5a0a28ca28bec69eb0d696390a64769da2', '{"parentHash":"0x39bec42f78b3c7a07a64771a203a2f5a0a28ca28bec69eb0d696390a64769da2","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7ff7ddd7832d0d9181dd102f5b5826548f37ddb535d84a34df6bbb3be99fd03a","transactionsRoot":"0x38fa40789a5cc6d0fe7de638a9fc3d823bcb97bd602983453dcd9e31fd085b72","receiptsRoot":"0xd6ce9b1672821cda4bce338b377a5ea85036634d6c9558206e9b327f612bf10e","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec813","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ed4","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4208","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x5d6b701681c6af7ce0e736767225f9118fea743d81630a4f4c1bc1381c5ec291"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7ff7ddd7832d0d9181dd102f5b5826548f37ddb535d84a34df6bbb3be99fd03a', '1', '41278', '1749040852', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405906', '0x39bec42f78b3c7a07a64771a203a2f5a0a28ca28bec69eb0d696390a64769da2', '0x30c7f061710be0e0ec0b8be4119ebc9c274a721686df6640c4049187a28a2179', '{"parentHash":"0x30c7f061710be0e0ec0b8be4119ebc9c274a721686df6640c4049187a28a2179","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x281dbf8abc64708ca83b97a87615c546608e125fcf4bd82bd217e76703398684","transactionsRoot":"0x6373633dfeb8d89bd9b746eacc0011868319dd4f4cc912e7986a026a73e4fcbf","receiptsRoot":"0xa03d6a1369b5b7f51ca6f3a5f856ab380abedf7e68871ba4df59578a17cd3a01","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec812","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ece","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x39bec42f78b3c7a07a64771a203a2f5a0a28ca28bec69eb0d696390a64769da2"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x281dbf8abc64708ca83b97a87615c546608e125fcf4bd82bd217e76703398684', '1', '41278', '1749040846', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405905', '0x30c7f061710be0e0ec0b8be4119ebc9c274a721686df6640c4049187a28a2179', '0x1a3ef89efa1bc17526dc7582b75a50f594139653ab6856d2250d0fd6d36205fc', '{"parentHash":"0x1a3ef89efa1bc17526dc7582b75a50f594139653ab6856d2250d0fd6d36205fc","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xcff086cc9a98724229fce7e631b312b5bb2ae153ac2283aa961dbc2b3fbe10b4","transactionsRoot":"0xfc07f97b78ea9c41debe6699100552d37562cd6748b4de9b0567ccb78550aac6","receiptsRoot":"0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec811","gasLimit":"0x1312d00","gasUsed":"0x5208","timestamp":"0x68403eca","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x30c7f061710be0e0ec0b8be4119ebc9c274a721686df6640c4049187a28a2179"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xcff086cc9a98724229fce7e631b312b5bb2ae153ac2283aa961dbc2b3fbe10b4', '1', '21000', '1749040842', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405904', '0x1a3ef89efa1bc17526dc7582b75a50f594139653ab6856d2250d0fd6d36205fc', '0xe8316c3dda327b0f2ffbf897cd8ed58403e92464fc0a8431aa18d87607769873', '{"parentHash":"0xe8316c3dda327b0f2ffbf897cd8ed58403e92464fc0a8431aa18d87607769873","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x113c9cd4bf986e2c81daca61d853f9bc282e719c64f93790e6f2a6a3cbd70d7a","transactionsRoot":"0xc88cefb862c8833b0127e8386c3fb0b8a92dcbe2c5c266f862583db3ed9e9822","receiptsRoot":"0xb7437cdd66aeb49efc2e0bcbb0dd37a4bf6bfd144e2548063019c0de3edcd230","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec810","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ec0","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4209","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x1a3ef89efa1bc17526dc7582b75a50f594139653ab6856d2250d0fd6d36205fc"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x113c9cd4bf986e2c81daca61d853f9bc282e719c64f93790e6f2a6a3cbd70d7a', '1', '41278', '1749040832', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405903', '0xe8316c3dda327b0f2ffbf897cd8ed58403e92464fc0a8431aa18d87607769873', '0xfabb98fe58fdcceb46f18d5bd8da12fe86ac0f93d3b3f5cb4d816ed25421b1f4', '{"parentHash":"0xfabb98fe58fdcceb46f18d5bd8da12fe86ac0f93d3b3f5cb4d816ed25421b1f4","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x1b14945e264d076f671f3c05c7772b104d5ed19fd984dfec7e60e39e5de8e51c","transactionsRoot":"0x0b0d04238d929d43ad494667ab2314b68ca5333250d22db72173c16adbfa3f67","receiptsRoot":"0x72c618712d04d620688b3fbe127d4e97646175d9489180e3a2ee68190bc42b3d","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec80f","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403eac","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4209","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xe8316c3dda327b0f2ffbf897cd8ed58403e92464fc0a8431aa18d87607769873"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x1b14945e264d076f671f3c05c7772b104d5ed19fd984dfec7e60e39e5de8e51c', '1', '41278', '1749040812', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405902', '0xfabb98fe58fdcceb46f18d5bd8da12fe86ac0f93d3b3f5cb4d816ed25421b1f4', '0x871cc2d80e31ecf368ff2b2a9ac3c5b6b1a629819f934661a337b595e4a67656', '{"parentHash":"0x871cc2d80e31ecf368ff2b2a9ac3c5b6b1a629819f934661a337b595e4a67656","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xa4dd3c611ad0d84a7f388a10586fa10fbf58633eda289d16873721c72f1cd310","transactionsRoot":"0x86c194ba8c77ff634ef255e4edeb6cc37f1fd191bc485df1fdf5c1309f9d0a52","receiptsRoot":"0x651d9adc4b53c1f42f088efe35f72fa8137573d415a1568474adba4dbacb39d6","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec80e","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ea8","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4209","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xfabb98fe58fdcceb46f18d5bd8da12fe86ac0f93d3b3f5cb4d816ed25421b1f4"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xa4dd3c611ad0d84a7f388a10586fa10fbf58633eda289d16873721c72f1cd310', '1', '41278', '1749040808', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405901', '0x871cc2d80e31ecf368ff2b2a9ac3c5b6b1a629819f934661a337b595e4a67656', '0xa7b974055fa99cdfcd3df5c464d145b49a120af486ab9d1bc5d423945664916e', '{"parentHash":"0xa7b974055fa99cdfcd3df5c464d145b49a120af486ab9d1bc5d423945664916e","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xacd037315e6564943a24e4534d0759f41544f9bd6be26708790890ee9bea2f50","transactionsRoot":"0x68fb1ba44ab3312dfe2e277e663f553f2201624e480fc8f8ff040eb68e4438cb","receiptsRoot":"0x1a04187bb9c19a2a2195594edc763ac05b535a6ccc2979de441682b96dd98118","logsBloom":"0x00000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000008000000000000000000000000000000000000000000000000000000000004000000000000000000000020000000000010000000000000000000000000000000000200000000000000000000000000000000000000080000000000000000000000000000000000000000200000000000000000100000000002000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec80d","gasLimit":"0x1312d00","gasUsed":"0x8620","timestamp":"0x68403ea2","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4209","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x871cc2d80e31ecf368ff2b2a9ac3c5b6b1a629819f934661a337b595e4a67656"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xacd037315e6564943a24e4534d0759f41544f9bd6be26708790890ee9bea2f50', '1', '34336', '1749040802', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405900', '0xa7b974055fa99cdfcd3df5c464d145b49a120af486ab9d1bc5d423945664916e', '0x7aa2c09fe1accc348ba4357a224c883f2dd306cefaa7d46d69c05f5ca40bcc60', '{"parentHash":"0x7aa2c09fe1accc348ba4357a224c883f2dd306cefaa7d46d69c05f5ca40bcc60","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x370dd68f0e68205715b71ce6fdb062988ad111f6643ce6a5565dd25be571e5be","transactionsRoot":"0x6ad3acdfe3325bc97261a13c24c3d7cf226db3f95451311844142f5fabe1951b","receiptsRoot":"0x6f53d75611f0f7afec6999ba0a486aba9164ca3ce41d15a91d488e1de86124e4","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec80c","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e9d","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4209","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xa7b974055fa99cdfcd3df5c464d145b49a120af486ab9d1bc5d423945664916e"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x370dd68f0e68205715b71ce6fdb062988ad111f6643ce6a5565dd25be571e5be', '1', '41278', '1749040797', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405899', '0x7aa2c09fe1accc348ba4357a224c883f2dd306cefaa7d46d69c05f5ca40bcc60', '0x2b0f5f77e5723e72955e3f750d5b4f51f62fad67e60a146e315336448c04f7fe', '{"parentHash":"0x2b0f5f77e5723e72955e3f750d5b4f51f62fad67e60a146e315336448c04f7fe","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xab2b0da8e2daa7660a748d964211def5f1e6a91983972d47218db4295c0b54b2","transactionsRoot":"0x0962a67f16f474fabfd25da687d6095720a98db659c4c1352a1fadf3156babed","receiptsRoot":"0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec80b","gasLimit":"0x1312d00","gasUsed":"0x5208","timestamp":"0x68403e98","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4209","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x7aa2c09fe1accc348ba4357a224c883f2dd306cefaa7d46d69c05f5ca40bcc60"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xab2b0da8e2daa7660a748d964211def5f1e6a91983972d47218db4295c0b54b2', '1', '21000', '1749040792', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405898', '0x2b0f5f77e5723e72955e3f750d5b4f51f62fad67e60a146e315336448c04f7fe', '0x2764a0469deea354593e29780f8c60caba6eccbb0a92332a794ddd0a03165f59', '{"parentHash":"0x2764a0469deea354593e29780f8c60caba6eccbb0a92332a794ddd0a03165f59","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xb5134ffa25a59168b9956b911a6fef37c12d972967cc5956a4f27972ded41bb7","transactionsRoot":"0xa0597b8e3f72a5874f1a6fa54af2b8deb580b9a978603d1f5b9a798e4bbe4b4a","receiptsRoot":"0x8643021b578ed7905c266f7f2102f877fad7bb4c430c5f42782c4816c5e62dab","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec80a","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e90","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x2b0f5f77e5723e72955e3f750d5b4f51f62fad67e60a146e315336448c04f7fe"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xb5134ffa25a59168b9956b911a6fef37c12d972967cc5956a4f27972ded41bb7', '1', '41278', '1749040784', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405897', '0x2764a0469deea354593e29780f8c60caba6eccbb0a92332a794ddd0a03165f59', '0xccc841ab6d00b48dbf95af892e4bc88934465a5bc53969828e7b1217361205ff', '{"parentHash":"0xccc841ab6d00b48dbf95af892e4bc88934465a5bc53969828e7b1217361205ff","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x09a6d6e8640bd61d842161da0f9c6391209a9a9a0f2f2781b1dc6282cedbd610","transactionsRoot":"0xbd1c9f8a8a3154c3880e33ec0c06b8505868b67d90cb8f3b299fa13e7d492875","receiptsRoot":"0x89857c435a630b2a034d7315966d0b4ac7b30c0cb56a7aa840363b6b871ee82f","logsBloom":"0x00000000000100000000000000100000800100000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000008000000000000100000000000000000000000200200000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000004000000000000000040000000000002000000000000000080","difficulty":"0x1","number":"0x9ec809","gasLimit":"0x1312d00","gasUsed":"0x1f380","timestamp":"0x68403e8e","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x2764a0469deea354593e29780f8c60caba6eccbb0a92332a794ddd0a03165f59"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x09a6d6e8640bd61d842161da0f9c6391209a9a9a0f2f2781b1dc6282cedbd610', '1', '127872', '1749040782', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405896', '0xccc841ab6d00b48dbf95af892e4bc88934465a5bc53969828e7b1217361205ff', '0x214bf9a33e5d2324b2dbb8ee71ad173f6a26deada3e2c0cb425088e52ba4b4db', '{"parentHash":"0x214bf9a33e5d2324b2dbb8ee71ad173f6a26deada3e2c0cb425088e52ba4b4db","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xa395e419ca646fe0f7cb0da14c56f5c79271a2a595d0ef6cc6acf6f7cd029fc8","transactionsRoot":"0xba1d4eb390286c13885867a1a645b670b26b78b4912c486065246bdd0a34aca0","receiptsRoot":"0x53f3bccb9c46c653b9ff54f09e18dc1238c27950a664b205b12efe0a1bbee8a8","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec808","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e84","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xccc841ab6d00b48dbf95af892e4bc88934465a5bc53969828e7b1217361205ff"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xa395e419ca646fe0f7cb0da14c56f5c79271a2a595d0ef6cc6acf6f7cd029fc8', '1', '41278', '1749040772', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405895', '0x214bf9a33e5d2324b2dbb8ee71ad173f6a26deada3e2c0cb425088e52ba4b4db', '0x395ce50472ccf625733c2b7d706e4804a551b686f0dfd6098a740f927143d4af', '{"parentHash":"0x395ce50472ccf625733c2b7d706e4804a551b686f0dfd6098a740f927143d4af","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x74d7d8e05cc268b33525ee0fc481adebc1f5698b1270bba3dc4ebd4679c99dda","transactionsRoot":"0x674ca977dd5534c976532f6f496675f62c540da6ee4f0b8d4f9d870e94c88d5f","receiptsRoot":"0x19c5022b69c902a2e118e4e0ec9147ab1bb10bd58e8aaf6bc9ac5a99965f25fa","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec807","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e70","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x214bf9a33e5d2324b2dbb8ee71ad173f6a26deada3e2c0cb425088e52ba4b4db"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x74d7d8e05cc268b33525ee0fc481adebc1f5698b1270bba3dc4ebd4679c99dda', '1', '41278', '1749040752', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405894', '0x395ce50472ccf625733c2b7d706e4804a551b686f0dfd6098a740f927143d4af', '0x8d91de26317b9d136d4e67bf7f7d19e56a30688a080434423a23a2223287172f', '{"parentHash":"0x8d91de26317b9d136d4e67bf7f7d19e56a30688a080434423a23a2223287172f","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7c2532876cf532d8a67ca018b9c2209714be869fcc40afb6726ee61995b0243c","transactionsRoot":"0x86a381e8e404fe80abcca7ad2edc11f412bdb37d50dcf937a605d5c9b55a93d3","receiptsRoot":"0x1c036b2520c2028559472810982642df2a876d05dfe74db01ee814c9bdc060d2","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec806","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e66","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x395ce50472ccf625733c2b7d706e4804a551b686f0dfd6098a740f927143d4af"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7c2532876cf532d8a67ca018b9c2209714be869fcc40afb6726ee61995b0243c', '1', '41278', '1749040742', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405893', '0x8d91de26317b9d136d4e67bf7f7d19e56a30688a080434423a23a2223287172f', '0x528b846bc9704e0de0087017c70f92b987f3ee2971f84960282d20b4e3835881', '{"parentHash":"0x528b846bc9704e0de0087017c70f92b987f3ee2971f84960282d20b4e3835881","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xaad7476f9f8b5c5a8ba502f10f30aacea87c2b64b98f4e6417fec5107093eebc","transactionsRoot":"0x9702bcb13c8d0140a6c3585259d2a81b49f3f420720f699fd6af58480bb7ff07","receiptsRoot":"0x9f40a7d564877756ee9ffbe17caba4eab2e866ae0a24385ccaf4eb40d1f137f4","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec805","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e5c","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x8d91de26317b9d136d4e67bf7f7d19e56a30688a080434423a23a2223287172f"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xaad7476f9f8b5c5a8ba502f10f30aacea87c2b64b98f4e6417fec5107093eebc', '1', '41278', '1749040732', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405892', '0x528b846bc9704e0de0087017c70f92b987f3ee2971f84960282d20b4e3835881', '0x87252e31710ffd707df64b51148442508386c5a51060aff222be3d39bec8a0df', '{"parentHash":"0x87252e31710ffd707df64b51148442508386c5a51060aff222be3d39bec8a0df","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xfa34a383ee361cd76b5e7571ad93ab6e61cca6c48dddff78206195bceab831d3","transactionsRoot":"0xfbedc88931a82055c5eee1eae8c55ef2a5b481e974508bac514bd65d7891dfd9","receiptsRoot":"0xd3ed64874a48ae7b136587fa7aa64389003dc0489d88cd8260d716926586c650","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec804","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e52","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x528b846bc9704e0de0087017c70f92b987f3ee2971f84960282d20b4e3835881"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xfa34a383ee361cd76b5e7571ad93ab6e61cca6c48dddff78206195bceab831d3', '1', '41278', '1749040722', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405891', '0x87252e31710ffd707df64b51148442508386c5a51060aff222be3d39bec8a0df', '0x2568ef06ff448cd1537b0e7bc3e2f419b3181d15d3cbd5bff5323287b344df2a', '{"parentHash":"0x2568ef06ff448cd1537b0e7bc3e2f419b3181d15d3cbd5bff5323287b344df2a","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xcbb589f92543210a051162d57891cdfa727a3a9b247b54515eee91d830e550a1","transactionsRoot":"0xaeda3c1e1dc1a6d49f48fc920b6b3fb9b23d351f1571b8afff3d58a3d7ea9b4f","receiptsRoot":"0xe1e362610a65555a1c2e8e7e1022da457d69eef89d84360c6c7c4b99926020d3","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec803","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e48","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420b","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x87252e31710ffd707df64b51148442508386c5a51060aff222be3d39bec8a0df"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xcbb589f92543210a051162d57891cdfa727a3a9b247b54515eee91d830e550a1', '1', '41278', '1749040712', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405890', '0x2568ef06ff448cd1537b0e7bc3e2f419b3181d15d3cbd5bff5323287b344df2a', '0x6cfe90ead0f53e7a9a9d2fc519e0cd6ffdd759326511d366165112ed681c12bf', '{"parentHash":"0x6cfe90ead0f53e7a9a9d2fc519e0cd6ffdd759326511d366165112ed681c12bf","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x91e6c4f3fee49d48443ed5d80b9797ac341bd9a6cce52ae3b4d3d811fbcbd6c4","transactionsRoot":"0x5830cd332dfadb02b07e8c2e1b0ce543cc6131b6d1421f2749726d6b18a65c07","receiptsRoot":"0xadc435f05bccaa6f053bb59106fa78929c113861d8bc98914848519a2e7c2cc6","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec802","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403e34","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420b","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x2568ef06ff448cd1537b0e7bc3e2f419b3181d15d3cbd5bff5323287b344df2a"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x91e6c4f3fee49d48443ed5d80b9797ac341bd9a6cce52ae3b4d3d811fbcbd6c4', '1', '38478', '1749040692', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405889', '0x6cfe90ead0f53e7a9a9d2fc519e0cd6ffdd759326511d366165112ed681c12bf', '0x6a38276e6a2362cd532917f006e64410228bb18bd4a3f5ed3066fb66526b60bf', '{"parentHash":"0x6a38276e6a2362cd532917f006e64410228bb18bd4a3f5ed3066fb66526b60bf","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x8652a2c521f31917cda9514ce1266f59da61e6729d51c7d2e54d47288121a56d","transactionsRoot":"0x8aa6928333729cf2bbef8d6c881eea8b20d728f81904ba0f902257c2b5426143","receiptsRoot":"0xca1d6dda2b4062a145d4ba39a380c60647be106d9a90006263e1e17c15c260f7","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec801","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e2a","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420c","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x6cfe90ead0f53e7a9a9d2fc519e0cd6ffdd759326511d366165112ed681c12bf"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x8652a2c521f31917cda9514ce1266f59da61e6729d51c7d2e54d47288121a56d', '1', '41278', '1749040682', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405888', '0x6a38276e6a2362cd532917f006e64410228bb18bd4a3f5ed3066fb66526b60bf', '0xd2c4b4473d85616fd40e7cd113ca2a7d213cd7b2eb6689ed3011561bf2beadd6', '{"parentHash":"0xd2c4b4473d85616fd40e7cd113ca2a7d213cd7b2eb6689ed3011561bf2beadd6","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe93995241062b2ed46a9f1bf39194fc0bd93d0cd4a5fe33cfc0874bdd4b07271","transactionsRoot":"0x9b6f336242607ae928873736295163d42f29a1808b21f6a8b578010724381295","receiptsRoot":"0xfbf7d52c998d2d7f778845430e0a33f9eb9da4fa2c507cc7e058f91c763a6aa0","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec800","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e21","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420c","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x6a38276e6a2362cd532917f006e64410228bb18bd4a3f5ed3066fb66526b60bf"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xe93995241062b2ed46a9f1bf39194fc0bd93d0cd4a5fe33cfc0874bdd4b07271', '1', '41278', '1749040673', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405887', '0xd2c4b4473d85616fd40e7cd113ca2a7d213cd7b2eb6689ed3011561bf2beadd6', '0x968e0d6c7f1c606e5b1390caa3a2d009307e9876be6459e91d7d70e3122a4a13', '{"parentHash":"0x968e0d6c7f1c606e5b1390caa3a2d009307e9876be6459e91d7d70e3122a4a13","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xbe1485bf87d83b9b5ea7b74d47af14534d0abb9e2f1f2e88de6a2ddd3ad66648","transactionsRoot":"0xdf3ebf515a6f9abd2d2084dc7fc4a5e2bdd45f424414324397e54b474ece36d5","receiptsRoot":"0x050577a144328e59f84a3ea82786db2e7b604438fd089dd291ccc6cefb99e05e","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000004000000000000200000000002000000000000000002000000000000001002020000000000001000000000000000000000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000400000000000000000000004000000000000000000000000020000000000000000000000000008000000000800000000400000000000000000000","difficulty":"0x1","number":"0x9ec7ff","gasLimit":"0x1312d00","gasUsed":"0x1ef18","timestamp":"0x68403e20","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420c","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xd2c4b4473d85616fd40e7cd113ca2a7d213cd7b2eb6689ed3011561bf2beadd6"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xbe1485bf87d83b9b5ea7b74d47af14534d0abb9e2f1f2e88de6a2ddd3ad66648', '1', '126744', '1749040672', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405886', '0x968e0d6c7f1c606e5b1390caa3a2d009307e9876be6459e91d7d70e3122a4a13', '0x20526fca2bde7cc3a8efcf51f28da21e174eaa58e50eedc4a50a122fd56c93e0', '{"parentHash":"0x20526fca2bde7cc3a8efcf51f28da21e174eaa58e50eedc4a50a122fd56c93e0","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd05f57b3a0f0216c2ceed4eabbf4745401c6cd3595fab9e1954881377bba57d0","transactionsRoot":"0x4bd7e24a0a14263e50ebc3e743afa12fc53c45ff506163d338c6c1756758b11c","receiptsRoot":"0x0d5adf0a7f65fcdad23fc830f2612c799dfa7130b7a62c0de554988baee81ff8","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7fe","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e16","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420c","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x968e0d6c7f1c606e5b1390caa3a2d009307e9876be6459e91d7d70e3122a4a13"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd05f57b3a0f0216c2ceed4eabbf4745401c6cd3595fab9e1954881377bba57d0', '1', '41278', '1749040662', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405885', '0x20526fca2bde7cc3a8efcf51f28da21e174eaa58e50eedc4a50a122fd56c93e0', '0x057e3a6ad8036acfbb609c94d226a9e313cde7022c8320ace35486c74ed93ebf', '{"parentHash":"0x057e3a6ad8036acfbb609c94d226a9e313cde7022c8320ace35486c74ed93ebf","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xb4dc24c6524f1ecd887daca5878189e19659cedf1203ae95979e1683d2193e95","transactionsRoot":"0xcd54853e7d6590e22aa140a52b1a8b672384a5e7fcee871acb3cb28055eaebdf","receiptsRoot":"0x86695686b2655990737600e97f2b772e3a65fb247b5169276326297392d5d6a4","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7fd","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e0c","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420c","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x20526fca2bde7cc3a8efcf51f28da21e174eaa58e50eedc4a50a122fd56c93e0"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xb4dc24c6524f1ecd887daca5878189e19659cedf1203ae95979e1683d2193e95', '1', '41278', '1749040652', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405884', '0x057e3a6ad8036acfbb609c94d226a9e313cde7022c8320ace35486c74ed93ebf', '0xfacac8334ed79251cc2171a7f94a9b041ff026c1a298e433705571d7beec13a9', '{"parentHash":"0xfacac8334ed79251cc2171a7f94a9b041ff026c1a298e433705571d7beec13a9","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x9a5d78cd9225fc4d182876aa0091394c6b398a665831da4b48a0a49f10ae0472","transactionsRoot":"0x81b2987e104dbfc0e87db5f0ed6bd3bc28c2638861c04e62af14d2fa54c33c20","receiptsRoot":"0x5153484422f11397b45947dfdffe38d88d8d66702fc5f26f0838ae98a1f3a33f","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7fc","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403dfb","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x057e3a6ad8036acfbb609c94d226a9e313cde7022c8320ace35486c74ed93ebf"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x9a5d78cd9225fc4d182876aa0091394c6b398a665831da4b48a0a49f10ae0472', '1', '38478', '1749040635', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405883', '0xfacac8334ed79251cc2171a7f94a9b041ff026c1a298e433705571d7beec13a9', '0xc73ba76842492f6f19d82552f0076a7f131c5f74faf259589fcf2190b14f08ac', '{"parentHash":"0xc73ba76842492f6f19d82552f0076a7f131c5f74faf259589fcf2190b14f08ac","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x9b2e6a51333c4d4277e62c2c40f5a8d420838251c523d8a9a90286a19c8f239d","transactionsRoot":"0x22924152934e4d4b0b7f587b97671f3129328e3d2de096a09530cf6229c51faa","receiptsRoot":"0x063c2c53250aa9bff386608a42a6b423448d3528fa8b20ba429356b39c2cd51f","logsBloom":"0x00000000000000000000000000002000020000000080000000000100000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000040000000000000000000000000020000000000010000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000008000080000000000000000000000000000000000000000000000000000000000000000000000000000004000000001000000000000000000000110000000000044040000040000000000000100000000000000000800200000000000000004000000000000000","difficulty":"0x1","number":"0x9ec7fb","gasLimit":"0x1312d00","gasUsed":"0x44ffc","timestamp":"0x68403dfa","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xfacac8334ed79251cc2171a7f94a9b041ff026c1a298e433705571d7beec13a9"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x9b2e6a51333c4d4277e62c2c40f5a8d420838251c523d8a9a90286a19c8f239d', '1', '282620', '1749040634', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405882', '0xc73ba76842492f6f19d82552f0076a7f131c5f74faf259589fcf2190b14f08ac', '0x78508d2dfc4c0a6a68518b3e95ba3316920bf047b9bb0f9a847fefbc08a14749', '{"parentHash":"0x78508d2dfc4c0a6a68518b3e95ba3316920bf047b9bb0f9a847fefbc08a14749","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xf8bb27e23ff70c70d078c3db188d593a2e8180e105600e19966b86780942d0ec","transactionsRoot":"0x76e4ca77c69038caecc436d178269a173385f7293b50f73076d2f190f23fab74","receiptsRoot":"0xfad2b29eefbd463cc19fcdac92738ab9541cb1233066bada883a2828fa34e9b7","logsBloom":"0x00000000000000000000000000000000000000000080000000000100000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000040000000000000000000004000020000000000010000000000000000009000000000000000000200000000000000000000000000000040000000800000000000004000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000001000000000000000000000110000000000044000000040000000000000100000000000000000800200000000000000004000000000000000","difficulty":"0x1","number":"0x9ec7fa","gasLimit":"0x1312d00","gasUsed":"0x44ffc","timestamp":"0x68403df8","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xc73ba76842492f6f19d82552f0076a7f131c5f74faf259589fcf2190b14f08ac"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xf8bb27e23ff70c70d078c3db188d593a2e8180e105600e19966b86780942d0ec', '1', '282620', '1749040632', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405881', '0x78508d2dfc4c0a6a68518b3e95ba3316920bf047b9bb0f9a847fefbc08a14749', '0xf6efada8cde9aeb1646c79a6356920b8f729b102245faf9dc4a72ad28f950687', '{"parentHash":"0xf6efada8cde9aeb1646c79a6356920b8f729b102245faf9dc4a72ad28f950687","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd116d45373faeff34c3799cf275ccecddc78cfdc3ddb0a9da2ada776d823d22f","transactionsRoot":"0x1ce962947544f7e8c1cb0b778e70ef649f046d2c3d7b4ca8ab6d0c80571da2f4","receiptsRoot":"0x5a496cb0fd35bb5f60018d396e52ef85398069a3e1b4ee5ed44464cda77bff5e","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7f9","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403def","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x78508d2dfc4c0a6a68518b3e95ba3316920bf047b9bb0f9a847fefbc08a14749"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd116d45373faeff34c3799cf275ccecddc78cfdc3ddb0a9da2ada776d823d22f', '1', '41278', '1749040623', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405880', '0xf6efada8cde9aeb1646c79a6356920b8f729b102245faf9dc4a72ad28f950687', '0xedf9ab1b6c3048297277fe3164ba7c3bc00ecde4239bcf7ee0955bfca2c25f02', '{"parentHash":"0xedf9ab1b6c3048297277fe3164ba7c3bc00ecde4239bcf7ee0955bfca2c25f02","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x9dcb8c83ea344f37ba615c7e8107ac65afad40121b7035f1a19c7ad3f6c85901","transactionsRoot":"0xf0fd30db1d38fc9fcce73f5e382d5f30bd7ec65aef6390cba0c50ea33cd152e9","receiptsRoot":"0x9905a0ace0572edafce575d389028ce6f34d9e23af872104be967a4abc8278c1","logsBloom":"0x00000000000000000000800002000000000000000000000000000000000000020000000000000000000000000000002000000000000000000000000000000000000000800000000000000000001000000480000020020000000000020000000100000020000000400000000000800802004101100000000000000108010400000000000000400000000000000000000020000000000000008000020000000000000000000000200000000000000000000000000000000800002000300000030000000000000000000000000000000000000000200000000000004000000000000000000000000000000000000000000001000040000000005000000008000004","difficulty":"0x1","number":"0x9ec7f8","gasLimit":"0x1312d00","gasUsed":"0x32a54","timestamp":"0x68403dee","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xf6efada8cde9aeb1646c79a6356920b8f729b102245faf9dc4a72ad28f950687"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x9dcb8c83ea344f37ba615c7e8107ac65afad40121b7035f1a19c7ad3f6c85901', '1', '207444', '1749040622', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405879', '0xedf9ab1b6c3048297277fe3164ba7c3bc00ecde4239bcf7ee0955bfca2c25f02', '0xcc575de0fff25ae812672ee31ca4ab6a0fda50eb01a298c66dcae125eef88b18', '{"parentHash":"0xcc575de0fff25ae812672ee31ca4ab6a0fda50eb01a298c66dcae125eef88b18","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd3a4c1e221a53c8a3a999aab87907419bee71f6c075c0006f6e41da6ed635b75","transactionsRoot":"0xae0e9616983cc42c48cb884f9bd554e0d56fa197719a73bd41a62ae05f14eda1","receiptsRoot":"0xbe7b6ca0bf5dde8608ea581e5ea5e86b14c6ce4285963fc26d4367ebedc20031","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7f7","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403de4","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xedf9ab1b6c3048297277fe3164ba7c3bc00ecde4239bcf7ee0955bfca2c25f02"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd3a4c1e221a53c8a3a999aab87907419bee71f6c075c0006f6e41da6ed635b75', '1', '41278', '1749040612', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405878', '0xcc575de0fff25ae812672ee31ca4ab6a0fda50eb01a298c66dcae125eef88b18', '0x05374e5fb1f264c06cf57fe6d6358ad10feda9adfa4a802df51d810c6e2472a0', '{"parentHash":"0x05374e5fb1f264c06cf57fe6d6358ad10feda9adfa4a802df51d810c6e2472a0","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x0b879aeda4de9abcd126e92d217f40908089585476908278ed9b4b1c5e4aeeec","transactionsRoot":"0x5968bec28f761b4af169aeaa4ae4135ea0e87850e8da275e75330b57e2aaf60b","receiptsRoot":"0xe8d5868e77fa84caa4b337e2f288c3c104155afddf4033ebf6f4a80de30a4a73","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7f6","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403de3","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420e","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xcc575de0fff25ae812672ee31ca4ab6a0fda50eb01a298c66dcae125eef88b18"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x0b879aeda4de9abcd126e92d217f40908089585476908278ed9b4b1c5e4aeeec', '1', '41278', '1749040611', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405877', '0x05374e5fb1f264c06cf57fe6d6358ad10feda9adfa4a802df51d810c6e2472a0', '0x4b1b5cd0d12256112ab173579166accef04ada4016a95d4debc9022fc76c3dc3', '{"parentHash":"0x4b1b5cd0d12256112ab173579166accef04ada4016a95d4debc9022fc76c3dc3","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x81e36bfdabaa2b4bb6ecda5bcf629273d8605ed196ddf2ce24fa742705ec1704","transactionsRoot":"0x80141a4e07d2cd386f8a9dda8f925146f7ac50d1b58685036c7008c7d61f8e4d","receiptsRoot":"0x1fb6a3ca77f7bb96604326ca7d51d7645745e7ce487e5f2a89161a1837f9a5f1","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec7f5","gasLimit":"0x1312d00","gasUsed":"0x94d6","timestamp":"0x68403de2","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420e","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x05374e5fb1f264c06cf57fe6d6358ad10feda9adfa4a802df51d810c6e2472a0"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x81e36bfdabaa2b4bb6ecda5bcf629273d8605ed196ddf2ce24fa742705ec1704', '1', '38102', '1749040610', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405876', '0x4b1b5cd0d12256112ab173579166accef04ada4016a95d4debc9022fc76c3dc3', '0x01eecd9be4867e5574edbc5f4bb451b14c000555e2027ed2528e1a97994b724a', '{"parentHash":"0x01eecd9be4867e5574edbc5f4bb451b14c000555e2027ed2528e1a97994b724a","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe880da59e096266cc6cd9cc7cf38e088811d777a9bb2cf3de4bd9aa744abe8e8","transactionsRoot":"0x017648197fa048cb6c775ccec301da7529c1dc99530e7673b23d62e9bf9d1b04","receiptsRoot":"0x725806b481bfd1727dd493d969a6d57b793b6185761f5452ecf38d8acbec1364","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec7f4","gasLimit":"0x1312d00","gasUsed":"0x94ee","timestamp":"0x68403de1","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420e","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x4b1b5cd0d12256112ab173579166accef04ada4016a95d4debc9022fc76c3dc3"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xe880da59e096266cc6cd9cc7cf38e088811d777a9bb2cf3de4bd9aa744abe8e8', '1', '38126', '1749040609', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405875', '0x01eecd9be4867e5574edbc5f4bb451b14c000555e2027ed2528e1a97994b724a', '0x69e9e70678e2b9c8c9be400457ff62fcc60d0246b087c723542764219f85655a', '{"parentHash":"0x69e9e70678e2b9c8c9be400457ff62fcc60d0246b087c723542764219f85655a","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x94a03c1f0734fb772d9169eb70c71d4515ea471783aee0f9c897f95b0b7524c8","transactionsRoot":"0x085579bd86b81297a9558c1631e77061879651fa22cdf43d28a69f0030e29933","receiptsRoot":"0x725806b481bfd1727dd493d969a6d57b793b6185761f5452ecf38d8acbec1364","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec7f3","gasLimit":"0x1312d00","gasUsed":"0x94ee","timestamp":"0x68403dda","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420e","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x01eecd9be4867e5574edbc5f4bb451b14c000555e2027ed2528e1a97994b724a"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x94a03c1f0734fb772d9169eb70c71d4515ea471783aee0f9c897f95b0b7524c8', '1', '38126', '1749040602', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405874', '0x69e9e70678e2b9c8c9be400457ff62fcc60d0246b087c723542764219f85655a', '0xb4707e05b6a94fcee97549a1948e3b62bfc5a99f06747dba2c0cb2f4d7e79813', '{"parentHash":"0xb4707e05b6a94fcee97549a1948e3b62bfc5a99f06747dba2c0cb2f4d7e79813","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x9f50354bd7286fd692af5ac7c926029e12ac43c20c4dc218a50bbcf633b532f8","transactionsRoot":"0x932a70b5c40cb41e6c9f171f9edf0d9cfa7ff6dfa55412a7ea8b8a5f89042724","receiptsRoot":"0xe442e83e289dc26dcd4f8c6c65a6c46bfdc1a5a97e6ba9a754971c3eba9895be","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7f2","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403dd0","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420e","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x69e9e70678e2b9c8c9be400457ff62fcc60d0246b087c723542764219f85655a"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x9f50354bd7286fd692af5ac7c926029e12ac43c20c4dc218a50bbcf633b532f8', '1', '41278', '1749040592', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405873', '0xb4707e05b6a94fcee97549a1948e3b62bfc5a99f06747dba2c0cb2f4d7e79813', '0x43c18a19a8768acdb77e41b49a43bdc49f12b791923096d7c41c04b912e9cb32', '{"parentHash":"0x43c18a19a8768acdb77e41b49a43bdc49f12b791923096d7c41c04b912e9cb32","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x48d2289fb261a4c36e5c97c1ec3042ad8e160f3ffa43e837494bba2fcef39664","transactionsRoot":"0x7939400fadb4a475ad113a180ee61cab5ba9ab49f3d311e2100d95902c66ca2d","receiptsRoot":"0xeb37012acdb53d5a6724a6bdbfe321dc09d2a5dc866c0ee71b03160ceccf9b98","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7f1","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403dbc","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420f","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xb4707e05b6a94fcee97549a1948e3b62bfc5a99f06747dba2c0cb2f4d7e79813"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x48d2289fb261a4c36e5c97c1ec3042ad8e160f3ffa43e837494bba2fcef39664', '1', '41278', '1749040572', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405872', '0x43c18a19a8768acdb77e41b49a43bdc49f12b791923096d7c41c04b912e9cb32', '0x92a398563f6633b630bd14c6b52d7ff3134f6fabebbf5310602337c3f319d35e', '{"parentHash":"0x92a398563f6633b630bd14c6b52d7ff3134f6fabebbf5310602337c3f319d35e","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7f63e2d929b89a0d759844ad9b87fddebad02554057c0f10db6abdde0c71ee03","transactionsRoot":"0x5d1a65fffc8773cf8d7ed8eefc3cb131250e923bb4440eb18024cff4980ea013","receiptsRoot":"0x442236c88c3523f8aae150fe6bd15b68a4f4dfd9f11c4f6f9d9f4d335c636056","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7f0","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403db2","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420f","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x43c18a19a8768acdb77e41b49a43bdc49f12b791923096d7c41c04b912e9cb32"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7f63e2d929b89a0d759844ad9b87fddebad02554057c0f10db6abdde0c71ee03', '1', '41278', '1749040562', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405871', '0x92a398563f6633b630bd14c6b52d7ff3134f6fabebbf5310602337c3f319d35e', '0x089e2bb4e07082cc9a1c24393a5a55a10ee23b4347c6166f23e897f8d24a911f', '{"parentHash":"0x089e2bb4e07082cc9a1c24393a5a55a10ee23b4347c6166f23e897f8d24a911f","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x6cf57c6e8adad1c7e476e9370f5080a485ecca78859736f2b10b9ceb05905cad","transactionsRoot":"0x660cb5d93b210743cb8be72c335f836217cfecccac66dc2a305a12f4349cf888","receiptsRoot":"0xbb2c9ed022a6dd6b28b749d2e453a5c6fe50788bc0269446755d00bdd1d3b3dc","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7ef","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403da8","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4210","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x92a398563f6633b630bd14c6b52d7ff3134f6fabebbf5310602337c3f319d35e"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x6cf57c6e8adad1c7e476e9370f5080a485ecca78859736f2b10b9ceb05905cad', '1', '38478', '1749040552', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405870', '0x089e2bb4e07082cc9a1c24393a5a55a10ee23b4347c6166f23e897f8d24a911f', '0xe0dbda5f14178caa917cc6925543eee22a9c442321ca374b595f4fbeb6166ad9', '{"parentHash":"0xe0dbda5f14178caa917cc6925543eee22a9c442321ca374b595f4fbeb6166ad9","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x1d0801740e6f005e671ac7dcdba1f0d78a034c687b85ee4ab4ba624dd0bab5c8","transactionsRoot":"0xc9725249bb2042b6fe796d4b8e73fa7c3e0bb8360157b2dc61a324c2abb52ad6","receiptsRoot":"0x08ebb26faf332ca98f35bc1d6bbc36c9dd3abccae0683f1e5863a0ed70624b79","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7ee","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d9e","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420f","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x089e2bb4e07082cc9a1c24393a5a55a10ee23b4347c6166f23e897f8d24a911f"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x1d0801740e6f005e671ac7dcdba1f0d78a034c687b85ee4ab4ba624dd0bab5c8', '1', '41278', '1749040542', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405869', '0xe0dbda5f14178caa917cc6925543eee22a9c442321ca374b595f4fbeb6166ad9', '0xd20fe659b627e98f54460df69637d1daab7708ffba0f47ff7bdd3ae73d59351f', '{"parentHash":"0xd20fe659b627e98f54460df69637d1daab7708ffba0f47ff7bdd3ae73d59351f","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd3b9266c3a5fd9bb9f178355d9171291fb0bae019847c5a98838b9d5e9fa5df8","transactionsRoot":"0x5f15e592ce4107a52ae1c25d83d5c88c6e61c22c46c8bea753f595e8e6a90edb","receiptsRoot":"0x2ce530c37595faad1b8514265f7686f4ecdae29df582aacd830162ca67eebd3b","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7ed","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d9b","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4211","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xe0dbda5f14178caa917cc6925543eee22a9c442321ca374b595f4fbeb6166ad9"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd3b9266c3a5fd9bb9f178355d9171291fb0bae019847c5a98838b9d5e9fa5df8', '1', '41278', '1749040539', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405868', '0xd20fe659b627e98f54460df69637d1daab7708ffba0f47ff7bdd3ae73d59351f', '0x6e60c7ec087b69d9efe3c8ea976d4070d3de8222e47f49cd186922bf55fc2093', '{"parentHash":"0x6e60c7ec087b69d9efe3c8ea976d4070d3de8222e47f49cd186922bf55fc2093","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xf94bee03bbd1ba64aa62b0b9e3d34ad78270db8e98945130653d34dc780e9377","transactionsRoot":"0x732a7e2e6ec1b4d00d97f4c5dfe7412c732dc621038aa9b104ebebbe9ac7ceb2","receiptsRoot":"0x5335599f7ca9b8a0614a5e303a954a421aec48c738a44f14f9f7a67b39d54980","logsBloom":"0x00000000000000000000000200000000000000000080000000000100000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000400000000000000000000000040000000000000000000000000020000000000010000000000000000001000000000000000000200000000000000000000000000000040000000800000000000004000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000110000000000044000000040000000000000100000000000000000800200000000000000004000000000000000","difficulty":"0x1","number":"0x9ec7ec","gasLimit":"0x1312d00","gasUsed":"0x3ff08","timestamp":"0x68403d94","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4211","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xd20fe659b627e98f54460df69637d1daab7708ffba0f47ff7bdd3ae73d59351f"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xf94bee03bbd1ba64aa62b0b9e3d34ad78270db8e98945130653d34dc780e9377', '1', '261896', '1749040532', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405867', '0x6e60c7ec087b69d9efe3c8ea976d4070d3de8222e47f49cd186922bf55fc2093', '0xb5dfdbf522d5c213b593ec525f6cfaab88231d0f17fcc02bf739e68bfc23908f', '{"parentHash":"0xb5dfdbf522d5c213b593ec525f6cfaab88231d0f17fcc02bf739e68bfc23908f","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xfdb2d6a6d649d7411423e5933f98fd4e344a5a7595d94eb3c5f1c87eb39a5571","transactionsRoot":"0xbc2a442ea3a4ae88313338c605ff177286405610e3a01f19cecfa7e13dfcbd60","receiptsRoot":"0x89ac4df1aa1e66cab46d7ab74fbb55525d4e78ddfdbf0830b8bf6bda30e0e751","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7eb","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d80","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4212","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x6e60c7ec087b69d9efe3c8ea976d4070d3de8222e47f49cd186922bf55fc2093"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xfdb2d6a6d649d7411423e5933f98fd4e344a5a7595d94eb3c5f1c87eb39a5571', '1', '41278', '1749040512', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405866', '0xb5dfdbf522d5c213b593ec525f6cfaab88231d0f17fcc02bf739e68bfc23908f', '0x155ef397933ee406f9ae857088b4b994ac63634cd0c60d403799a0509f7502c3', '{"parentHash":"0x155ef397933ee406f9ae857088b4b994ac63634cd0c60d403799a0509f7502c3","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xad9b8963019671b6953ceec64b4cd588bd61700d2cd3ae5bca16a838298180e7","transactionsRoot":"0x1805d6340195f4455b99900b8c5f2ae51a81cfb1095e9b96f46e4633b01206ec","receiptsRoot":"0x2c2803ca335169b410b0dc4d7b56f9097be417803e1f5d47033d67c206406fb5","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7ea","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d76","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4212","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xb5dfdbf522d5c213b593ec525f6cfaab88231d0f17fcc02bf739e68bfc23908f"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xad9b8963019671b6953ceec64b4cd588bd61700d2cd3ae5bca16a838298180e7', '1', '41278', '1749040502', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405865', '0x155ef397933ee406f9ae857088b4b994ac63634cd0c60d403799a0509f7502c3', '0xb362aa01b234044e13b4a593c2799bc9beebaf7842f1b08c7392c7ad3cd66fb5', '{"parentHash":"0xb362aa01b234044e13b4a593c2799bc9beebaf7842f1b08c7392c7ad3cd66fb5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7e71c61d5df03ea493bb320a1090ca7ec133af6af968e0ec63241e33189a857b","transactionsRoot":"0xfb69b9098c0d9256cee25deb0de6ead3a4f36ce3fbda3e367caf8821840f35fc","receiptsRoot":"0x94f8636141f298253271ef05fd11f1d889dc9536a333639e1ef1758fd2ee6693","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e9","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d6c","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4213","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x155ef397933ee406f9ae857088b4b994ac63634cd0c60d403799a0509f7502c3"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7e71c61d5df03ea493bb320a1090ca7ec133af6af968e0ec63241e33189a857b', '1', '41278', '1749040492', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405864', '0xb362aa01b234044e13b4a593c2799bc9beebaf7842f1b08c7392c7ad3cd66fb5', '0xdabc00227ee30c895cbae5da1cbd9e6c0f0ca6cfd693032302eb746773454729', '{"parentHash":"0xdabc00227ee30c895cbae5da1cbd9e6c0f0ca6cfd693032302eb746773454729","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x0e61fa8122e769e84f578586c0c4669fcd029fca6757ac4a389ecdb48e8a2af5","transactionsRoot":"0x8b797d63c8fdc1c2a612569a3ba769cfc6c38eaeca6d769d8ec0747d0cded148","receiptsRoot":"0x1fd44fcac2c6ee82a11a8536ade8375b99e84ae2bdcc53417a70a72e04ba1899","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e8","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d62","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4212","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xb362aa01b234044e13b4a593c2799bc9beebaf7842f1b08c7392c7ad3cd66fb5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x0e61fa8122e769e84f578586c0c4669fcd029fca6757ac4a389ecdb48e8a2af5', '1', '41278', '1749040482', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405863', '0xdabc00227ee30c895cbae5da1cbd9e6c0f0ca6cfd693032302eb746773454729', '0x2d9aaadb9e90e153e1f1de5a88b5fe5b4fb9c54eb5a6aa52d09dcd345add7386', '{"parentHash":"0x2d9aaadb9e90e153e1f1de5a88b5fe5b4fb9c54eb5a6aa52d09dcd345add7386","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xb7f87906df869df6b0e12a6dafce0c8159a1569f9d1cbb251e2cb8e90b0fe4aa","transactionsRoot":"0xb8d68c4d2fa50892436b75422dfb6ce741f5e18399682da0a7907001c2f48f5c","receiptsRoot":"0x39f3c98cb8e66cc17abe431b22c5f133138a20b908f43ca654c9defc7ff627eb","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e7","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403d58","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4213","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xdabc00227ee30c895cbae5da1cbd9e6c0f0ca6cfd693032302eb746773454729"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xb7f87906df869df6b0e12a6dafce0c8159a1569f9d1cbb251e2cb8e90b0fe4aa', '1', '38478', '1749040472', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405862', '0x2d9aaadb9e90e153e1f1de5a88b5fe5b4fb9c54eb5a6aa52d09dcd345add7386', '0xcf0b95b760c8a7cf0dc26d60341e1ba26179fe7c52c33b2f50080c90b926fbcb', '{"parentHash":"0xcf0b95b760c8a7cf0dc26d60341e1ba26179fe7c52c33b2f50080c90b926fbcb","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd5fba4648bc54a5250316a318e7a896c1b476ffe2603c94f3cb6c5abfa0ca4f5","transactionsRoot":"0x2d3a32458bb0f8d4226c51efe7f586ca00e3f4e815c050e662ecf71645135956","receiptsRoot":"0xf5bcd433589a30ea84b3bf8b9d3f24cb9d1b823630245969213831b58e7442f1","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e6","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d44","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4213","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x2d9aaadb9e90e153e1f1de5a88b5fe5b4fb9c54eb5a6aa52d09dcd345add7386"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd5fba4648bc54a5250316a318e7a896c1b476ffe2603c94f3cb6c5abfa0ca4f5', '1', '41278', '1749040452', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405861', '0xcf0b95b760c8a7cf0dc26d60341e1ba26179fe7c52c33b2f50080c90b926fbcb', '0x3a374a7e65ea0547867a560438a84e1449b84f54e17df996bd561158199c88dc', '{"parentHash":"0x3a374a7e65ea0547867a560438a84e1449b84f54e17df996bd561158199c88dc","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd9d984d299d387bc9c5a8c3d0c1f8bcfced89166a76170b7943b88506de3e68c","transactionsRoot":"0xefa7a1c94f7c3ce0aaed7100a55e062c53478dd4e3ddc2873d18a3db9ff6158c","receiptsRoot":"0x86007a6ec9afb5ce165ed8f1b2c0b18f8c5044cc2461dbb104b5aea0c721b424","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e5","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d3a","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4212","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xcf0b95b760c8a7cf0dc26d60341e1ba26179fe7c52c33b2f50080c90b926fbcb"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd9d984d299d387bc9c5a8c3d0c1f8bcfced89166a76170b7943b88506de3e68c', '1', '41278', '1749040442', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405860', '0x3a374a7e65ea0547867a560438a84e1449b84f54e17df996bd561158199c88dc', '0x7695489289b89d2d34ca267a91da92804c80006c0a0ceeaefb760d749a4f08ef', '{"parentHash":"0x7695489289b89d2d34ca267a91da92804c80006c0a0ceeaefb760d749a4f08ef","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x8c729fd12682fc29a146cc1c21740e207916deeb30e654633beb6d307dad8355","transactionsRoot":"0xed6d1c9ff1888a88e02ad54b0dad35aecebae7b814c5a88a5c4b0871fa41fbb5","receiptsRoot":"0xe3fff8ac735117cfe66b679e36a7993e157e16d46bed2ab802aebe5450fe5c84","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e4","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d30","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4215","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x3a374a7e65ea0547867a560438a84e1449b84f54e17df996bd561158199c88dc"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x8c729fd12682fc29a146cc1c21740e207916deeb30e654633beb6d307dad8355', '1', '41278', '1749040432', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405859', '0x7695489289b89d2d34ca267a91da92804c80006c0a0ceeaefb760d749a4f08ef', '0x674a46f6b895251fcd6a0c84484093b7a4d7f4c09c50c31c0bc620391f0e3ba5', '{"parentHash":"0x674a46f6b895251fcd6a0c84484093b7a4d7f4c09c50c31c0bc620391f0e3ba5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x9904a69d35c7f6e2575433c7e7428dc0fa0d63d0164bb610934769f76eb9a8fb","transactionsRoot":"0xaaa961ed1746e55d07c29126bba9d8036751bfe614ff6505712c068714130378","receiptsRoot":"0x090347f5f7e63ad92b684192e36fe61b6135996f24356b0f1186f67b863c9ce5","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e3","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403d26","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4215","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x7695489289b89d2d34ca267a91da92804c80006c0a0ceeaefb760d749a4f08ef"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x9904a69d35c7f6e2575433c7e7428dc0fa0d63d0164bb610934769f76eb9a8fb', '1', '38478', '1749040422', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405858', '0x674a46f6b895251fcd6a0c84484093b7a4d7f4c09c50c31c0bc620391f0e3ba5', '0x63aa3c63c814b59eff6317df66c26707aefbf130fcad68ad50758666b599bcc6', '{"parentHash":"0x63aa3c63c814b59eff6317df66c26707aefbf130fcad68ad50758666b599bcc6","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x92d87b1488dd2f0c17d7cf051f0aa704ce473d067ead4659233cb8dd45c6e62f","transactionsRoot":"0x99623f2b16980692835096d6a902c13aa9d8553aee8cfdf3622fd23d14e338aa","receiptsRoot":"0x004824a84e77c65d42e4c418658327166cfe9508d67a6da611aefabb764b04ea","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e2","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d24","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4216","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x674a46f6b895251fcd6a0c84484093b7a4d7f4c09c50c31c0bc620391f0e3ba5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x92d87b1488dd2f0c17d7cf051f0aa704ce473d067ead4659233cb8dd45c6e62f', '1', '41278', '1749040420', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405857', '0x63aa3c63c814b59eff6317df66c26707aefbf130fcad68ad50758666b599bcc6', '0x9b1fbd939f6b022ad5ab78e02fa4f0ec4f936ff3a46f2c921de61d09df481f3e', '{"parentHash":"0x9b1fbd939f6b022ad5ab78e02fa4f0ec4f936ff3a46f2c921de61d09df481f3e","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x9dd42d74eb88e506b927084620678f7e85c58e8dcabef33d743ebe15f79f6ff6","transactionsRoot":"0x0ddf99896f3e708f2f216d00f8a4383ca78b0d423079c23c4ade05e3e4d72cb7","receiptsRoot":"0x4d2b5006499a2036e04d1aadc45e25cc7936ee4ba0adbe74406350a0db84dc63","logsBloom":"0x00000000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000200000000000000000000000000002000000000000001002020000000000001000000000000200000000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000000002000000000480000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000002000000000004000000000000000000000000020000000000000000000000000008000000000000000040000000000000010000000","difficulty":"0x1","number":"0x9ec7e1","gasLimit":"0x1312d00","gasUsed":"0x1ef00","timestamp":"0x68403d1c","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4216","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x63aa3c63c814b59eff6317df66c26707aefbf130fcad68ad50758666b599bcc6"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x9dd42d74eb88e506b927084620678f7e85c58e8dcabef33d743ebe15f79f6ff6', '1', '126720', '1749040412', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405856', '0x9b1fbd939f6b022ad5ab78e02fa4f0ec4f936ff3a46f2c921de61d09df481f3e', '0x2f40c7fc0fa649e7ce9fb3cfda5f10f8bac2a3f3fdcef7629dbf57ad8d404eee', '{"parentHash":"0x2f40c7fc0fa649e7ce9fb3cfda5f10f8bac2a3f3fdcef7629dbf57ad8d404eee","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7586fb4c0cb703967cee0dc4db8aa816d2808eccdf03f8151ecdcabc5434581f","transactionsRoot":"0x3304b51be28fb1c8f636d0f6f7a062727e3a7fff8c754f5a811a977aae1b0d07","receiptsRoot":"0x083d975d736295631f476530dff9ee654910642050ab1cbb40688c78cec1204c","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e0","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d0f","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4218","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x9b1fbd939f6b022ad5ab78e02fa4f0ec4f936ff3a46f2c921de61d09df481f3e"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7586fb4c0cb703967cee0dc4db8aa816d2808eccdf03f8151ecdcabc5434581f', '1', '41278', '1749040399', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405855', '0x2f40c7fc0fa649e7ce9fb3cfda5f10f8bac2a3f3fdcef7629dbf57ad8d404eee', '0xc5f78095fcfa65f201dc56d63770d867a76ebc925ce62403bd1f0bec29494492', '{"parentHash":"0xc5f78095fcfa65f201dc56d63770d867a76ebc925ce62403bd1f0bec29494492","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x63ca6187e8b74cf4f319be1d6b7fcf0e42814fd0f017e74ae0dfba2f5167ad9e","transactionsRoot":"0x2bf7f185c1a0f17854973436c0b91b7fbb4fc968746131f120911c4374d50af5","receiptsRoot":"0x3ab0f92164ea453866176f956a72ec12c20386138bf4b7f0eb74b7354c282c5e","logsBloom":"0x00000000000000000000000000000000000000000004000000100000000000000000100000000000000000000000000000000020000200000000000000000000000000000000000000000001002000000000000001000000000000000200000000000000020000000000000000000800000000000400000000000000000000000000000000000000000000000000000000000480000000002000000000000000000200001000000000000000000000000000000000000000010000000000000000000000000000000000000000000000004000000000000000000000000020000000000000000000000080000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec7df","gasLimit":"0x1312d00","gasUsed":"0x1f9dc","timestamp":"0x68403d08","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4218","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x2f40c7fc0fa649e7ce9fb3cfda5f10f8bac2a3f3fdcef7629dbf57ad8d404eee"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x63ca6187e8b74cf4f319be1d6b7fcf0e42814fd0f017e74ae0dfba2f5167ad9e', '1', '129500', '1749040392', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405854', '0xc5f78095fcfa65f201dc56d63770d867a76ebc925ce62403bd1f0bec29494492', '0x1440ca43be062a5961ae23be75eef5ae3af280218c3cb04aac0e5920064c12db', '{"parentHash":"0x1440ca43be062a5961ae23be75eef5ae3af280218c3cb04aac0e5920064c12db","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x29a1e68f63e521fbb26e7912c84e870c36f8b848618b88eecd24f25e97ec9de4","transactionsRoot":"0xf18ff8698da4f3e8d7ee7fcf36f6767233a597aeb67d9f906727002f2afab4df","receiptsRoot":"0xf24ceb0d70b0b964dc8b40504454952dcec8fe782a92a1fa7413dfdaa524071b","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7de","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403cfe","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4218","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xc5f78095fcfa65f201dc56d63770d867a76ebc925ce62403bd1f0bec29494492"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x29a1e68f63e521fbb26e7912c84e870c36f8b848618b88eecd24f25e97ec9de4', '1', '38478', '1749040382', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405853', '0x1440ca43be062a5961ae23be75eef5ae3af280218c3cb04aac0e5920064c12db', '0x70979d15b51921068c9e8270cb9ea3458741f69a58c308b9afe1788c5735b15d', '{"parentHash":"0x70979d15b51921068c9e8270cb9ea3458741f69a58c308b9afe1788c5735b15d","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xb39506e8afeddbf1e5f4fe275c074c440b31d69ebfb93ef2c7fd7af867e600e8","transactionsRoot":"0xc688eddf407fe76f9f111d38371fe002fd6f61dc939cf1e4a94c567fb8e96e13","receiptsRoot":"0xe6922e58e372c557ab6840d92cdf3c0ff7fdfa240b6d968f0c10113287143042","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7dd","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403cf4","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4218","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x1440ca43be062a5961ae23be75eef5ae3af280218c3cb04aac0e5920064c12db"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xb39506e8afeddbf1e5f4fe275c074c440b31d69ebfb93ef2c7fd7af867e600e8', '1', '41278', '1749040372', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405852', '0x70979d15b51921068c9e8270cb9ea3458741f69a58c308b9afe1788c5735b15d', '0x778a103849d7fe398b6d5ea258d9d34338f25cfc0745a6b649d460766d2ec9cd', '{"parentHash":"0x778a103849d7fe398b6d5ea258d9d34338f25cfc0745a6b649d460766d2ec9cd","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x27df003aeccbe5a854484d79a43f816561e05787eb0ae353357363c51773e0d5","transactionsRoot":"0x76604e7a00be688f9a462c1ed558e1823b82243d2b7043d9c39ace3dac77f152","receiptsRoot":"0xf76d84c87e33a9fc7523d4d0d0cb7805526600d1a7ba4f6ef79b50c595435833","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7dc","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403cea","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4218","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x70979d15b51921068c9e8270cb9ea3458741f69a58c308b9afe1788c5735b15d"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x27df003aeccbe5a854484d79a43f816561e05787eb0ae353357363c51773e0d5', '1', '38478', '1749040362', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405851', '0x778a103849d7fe398b6d5ea258d9d34338f25cfc0745a6b649d460766d2ec9cd', '0x68656da9f95e4042977770a1c5d032f2b861684b2c20b782327ccc8a913b855a', '{"parentHash":"0x68656da9f95e4042977770a1c5d032f2b861684b2c20b782327ccc8a913b855a","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x814c2c2fab0559aff68181ba8266fe273b48ce688ae7ab5423143697a2e3c223","transactionsRoot":"0x34797e376e52413b2193e8f6037760504b47d7b7f1873e7ba93cff04f400232d","receiptsRoot":"0x348b707ea70a6d1c86934ea691a3aca2e6c16f2da91516aad38d5cb5f4b43fc0","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7db","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ce0","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4219","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x778a103849d7fe398b6d5ea258d9d34338f25cfc0745a6b649d460766d2ec9cd"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x814c2c2fab0559aff68181ba8266fe273b48ce688ae7ab5423143697a2e3c223', '1', '41278', '1749040352', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405850', '0x68656da9f95e4042977770a1c5d032f2b861684b2c20b782327ccc8a913b855a', '0x511907d2bf22d82be076415ba6476b76418325b08eacbcad64f1abf391b96e2c', '{"parentHash":"0x511907d2bf22d82be076415ba6476b76418325b08eacbcad64f1abf391b96e2c","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x344841bb9442b72a1939c291abb32041a39df676915cd2a29af579d86199f9d1","transactionsRoot":"0xda76575ad7bae6d598577fd7e5ad357c0ad1e9c8862c4f89fb349c1c9c7b9617","receiptsRoot":"0x190650f6f05cd627da30f1c71f1ff94854dfe979a57b9fc9047e7c5799f665da","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7da","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ccc","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef421a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x68656da9f95e4042977770a1c5d032f2b861684b2c20b782327ccc8a913b855a"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x344841bb9442b72a1939c291abb32041a39df676915cd2a29af579d86199f9d1', '1', '41278', '1749040332', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405849', '0x511907d2bf22d82be076415ba6476b76418325b08eacbcad64f1abf391b96e2c', '0x952f06bcbbc7f1fce60d4aad1109b043282a087f3f8132e9431c43838dafffde', '{"parentHash":"0x952f06bcbbc7f1fce60d4aad1109b043282a087f3f8132e9431c43838dafffde","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x62ae186cb6cab0a56439702b9abcca7de278191964ffddedc68be68fb7ce2fb0","transactionsRoot":"0xb338264d754d0e688f220cd99cedcc1eb2bbc3814a67c0521e66ba3652eefdb3","receiptsRoot":"0x86751021e7f67cff1b9848837159343f0f6ae07df16d0a9ee94e8a2f58d3d05f","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7d9","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403cc2","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef421b","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x511907d2bf22d82be076415ba6476b76418325b08eacbcad64f1abf391b96e2c"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x62ae186cb6cab0a56439702b9abcca7de278191964ffddedc68be68fb7ce2fb0', '1', '41278', '1749040322', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405848', '0x952f06bcbbc7f1fce60d4aad1109b043282a087f3f8132e9431c43838dafffde', '0xf8fe3ad891923c8cf6336f6bd67745b39f5830cf1a578baa8357daeede11c44b', '{"parentHash":"0xf8fe3ad891923c8cf6336f6bd67745b39f5830cf1a578baa8357daeede11c44b","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe0e78a504c708c23f12665567f606cb23b67c1fdfb17bb8435da827c32f233b7","transactionsRoot":"0xfb2e0f93a13fc1b904009f854060067baaa7e1ed269c968064e017ceb1dab343","receiptsRoot":"0x1c5119842f1f9266426330049a1b98c51aa02e58bb0628b9b9310e899c09d3d4","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7d8","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403cb8","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef421c","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x952f06bcbbc7f1fce60d4aad1109b043282a087f3f8132e9431c43838dafffde"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xe0e78a504c708c23f12665567f606cb23b67c1fdfb17bb8435da827c32f233b7', '1', '38478', '1749040312', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405847', '0xf8fe3ad891923c8cf6336f6bd67745b39f5830cf1a578baa8357daeede11c44b', '0xfe49b92d0a8fabca00f1e5630d5085eb0e06a2e53b79358daf4874fdaeb53290', '{"parentHash":"0xfe49b92d0a8fabca00f1e5630d5085eb0e06a2e53b79358daf4874fdaeb53290","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x075fb214eb20d38e7e448f4ab44977b45cb905d94532d8e2c53d834159e44f50","transactionsRoot":"0x5c40249494982f5dd6bcefdf26b4c20163928e9059d75b1edd7e7050fb79dad2","receiptsRoot":"0x1cb76e00c127f1a895a8af78b00353350c40c1d224bebaa43bb7d7c8d73ad4c2","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7d7","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403cb4","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef421d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xf8fe3ad891923c8cf6336f6bd67745b39f5830cf1a578baa8357daeede11c44b"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x075fb214eb20d38e7e448f4ab44977b45cb905d94532d8e2c53d834159e44f50', '1', '38478', '1749040308', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405846', '0xfe49b92d0a8fabca00f1e5630d5085eb0e06a2e53b79358daf4874fdaeb53290', '0xbf4294a7c70709c02f0b38bd532e3fb8c8485e34b598992049ef14aeac3d6daf', '{"parentHash":"0xbf4294a7c70709c02f0b38bd532e3fb8c8485e34b598992049ef14aeac3d6daf","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xba19b362738de826f2e19b7acabf2656ee33d5f10c7b83327309822c553f79e3","transactionsRoot":"0xa4430ced2fc593cc83d8a016c12b4574e59aa29b035c20f455893a67a658943f","receiptsRoot":"0xf889a1ea17b84acfb7789aa38182a24f314c4cb1a4f8146bbfaa9da1325ae949","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec7d6","gasLimit":"0x1312d00","gasUsed":"0x94e2","timestamp":"0x68403cb3","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef421d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xfe49b92d0a8fabca00f1e5630d5085eb0e06a2e53b79358daf4874fdaeb53290"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xba19b362738de826f2e19b7acabf2656ee33d5f10c7b83327309822c553f79e3', '1', '38114', '1749040307', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); +INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, + state_root, tx_num, gas_used, block_timestamp, row_consumption, + chunk_hash, transactions + ) VALUES ('10405845', '0xbf4294a7c70709c02f0b38bd532e3fb8c8485e34b598992049ef14aeac3d6daf', '0xff1ae0f43684296baf178282a9384365357b92c32053518e9e0979cd3732d632', '{"parentHash":"0xff1ae0f43684296baf178282a9384365357b92c32053518e9e0979cd3732d632","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x1ea586c73b2018dfb4689a6da99f02beea7312dfd49703a79a8923b260736a8a","transactionsRoot":"0xbf91258f8470977bebfa3189469c8db7ad5a05d1ddd11af41dd8d394a2653c88","receiptsRoot":"0xf889a1ea17b84acfb7789aa38182a24f314c4cb1a4f8146bbfaa9da1325ae949","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec7d5","gasLimit":"0x1312d00","gasUsed":"0x94e2","timestamp":"0x68403cb2","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef421d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xbf4294a7c70709c02f0b38bd532e3fb8c8485e34b598992049ef14aeac3d6daf"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x1ea586c73b2018dfb4689a6da99f02beea7312dfd49703a79a8923b260736a8a', '1', '38114', '1749040306', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); diff --git a/database/localdbg/import_chunk.sql b/database/localdbg/import_chunk.sql new file mode 100644 index 0000000000..4ff9566b5c --- /dev/null +++ b/database/localdbg/import_chunk.sql @@ -0,0 +1,8 @@ +INSERT INTO chunk ("index", hash, start_block_number, end_block_number, + start_block_hash, end_block_hash, total_l1_messages_popped_before, + total_l1_messages_popped_in_chunk, start_block_time, + parent_chunk_hash, state_root, parent_chunk_state_root, + withdraw_root, total_l2_tx_gas, total_l2_tx_num, + total_l1_commit_calldata_size, total_l1_commit_gas, + enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash + ) VALUES ('795824', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '10405845', '10405944', '0xbf4294a7c70709c02f0b38bd532e3fb8c8485e34b598992049ef14aeac3d6daf', '0x522d7f22665754abccab64dc67f1ae4b2dda9729613893f20117810f5092427d', '1067977', '2', '1749040306', '0xdbc3ec00148cb6f8369ac740006613ca9d0c4502a134eab0b19019c55bcca2ca', '0xbe7752f82ad42463b27e0ac06b2c86e853a2f1fdf36456c8496979fda2998896', '0x86c1756e36e88429f488999207317e04a1c15b52d47c568a149cc973061c74eb', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '5951574', '98', '0', '0', 'true', '0x588be45906ca9c9f7436a0d092603667e8cff81641115fb2e142714c00000000', '0x3223e4556c429f27f83e309efb061653e1624706f288fc85563bef8100000000'); diff --git a/database/localdbg/import_more_chunks.sql b/database/localdbg/import_more_chunks.sql new file mode 100644 index 0000000000..cdab846532 --- /dev/null +++ b/database/localdbg/import_more_chunks.sql @@ -0,0 +1,72 @@ +INSERT INTO chunk ("index", hash, start_block_number, end_block_number, + start_block_hash, end_block_hash, total_l1_messages_popped_before, + total_l1_messages_popped_in_chunk, start_block_time, + parent_chunk_hash, state_root, parent_chunk_state_root, + withdraw_root, total_l2_tx_gas, total_l2_tx_num, + total_l1_commit_calldata_size, total_l1_commit_gas, + enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash + ) VALUES ('795823', '0xdbc3ec00148cb6f8369ac740006613ca9d0c4502a134eab0b19019c55bcca2ca', '10405745', '10405844', '0x9b89275494c743803843bd3df6b7b9ff43bbbef2ec1a67b9680681f73476feac', '0xff1ae0f43684296baf178282a9384365357b92c32053518e9e0979cd3732d632', '1067973', '4', '1749039452', '0x72f0cbeb2de49271ee5f102da89c1783e2baa5b01ce96f8bb1bbcdbb11f72e0e', '0x86c1756e36e88429f488999207317e04a1c15b52d47c568a149cc973061c74eb', '0x6a4bc0f6dcf544d18084595284bd6da0ad82bd3daa10d5924fe6cadc5980b889', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '9672856', '103', '0', '0', 'true', '0xac1cb1387af33778061a9301c10d4a4481d99452785714667695ebb400000000', '0x588be45906ca9c9f7436a0d092603667e8cff81641115fb2e142714c00000000'); +INSERT INTO chunk ("index", hash, start_block_number, end_block_number, + start_block_hash, end_block_hash, total_l1_messages_popped_before, + total_l1_messages_popped_in_chunk, start_block_time, + parent_chunk_hash, state_root, parent_chunk_state_root, + withdraw_root, total_l2_tx_gas, total_l2_tx_num, + total_l1_commit_calldata_size, total_l1_commit_gas, + enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash + ) VALUES ('795822', '0x72f0cbeb2de49271ee5f102da89c1783e2baa5b01ce96f8bb1bbcdbb11f72e0e', '10405645', '10405744', '0xca94e73dcf085bb4cf11e82a69a46a450d8a13b0ab100a36cf27235d08506a25', '0x17e5632b0e15e21b317fa27134fb24bb5097a925cf0b3a1441065474b8616741', '1067972', '1', '1749038511', '0x6d36cd65eddc355c504e28159844b7a671a2b627fabf83b5b1c9b0819aa800a5', '0x6a4bc0f6dcf544d18084595284bd6da0ad82bd3daa10d5924fe6cadc5980b889', '0x13e9d47953f0f6dae1a3625e5706e26f8897da0c86994426610e1d64918dd6dc', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '6897786', '105', '0', '0', 'true', '0xbf186c8c0b504aa5b01c72219f41cb317a5c774eb6876867bfb5f9cc00000000', '0xac1cb1387af33778061a9301c10d4a4481d99452785714667695ebb400000000'); +INSERT INTO chunk ("index", hash, start_block_number, end_block_number, + start_block_hash, end_block_hash, total_l1_messages_popped_before, + total_l1_messages_popped_in_chunk, start_block_time, + parent_chunk_hash, state_root, parent_chunk_state_root, + withdraw_root, total_l2_tx_gas, total_l2_tx_num, + total_l1_commit_calldata_size, total_l1_commit_gas, + enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash + ) VALUES ('795821', '0x6d36cd65eddc355c504e28159844b7a671a2b627fabf83b5b1c9b0819aa800a5', '10405545', '10405644', '0x13167bb858b1c6210c5965e72f55469e5bcc204a3ad94b585c9d4edee7583c32', '0xd0eb92204cbd8a4a44f0aa75b1554ca6d8e95a2da8460eaf2e4f2a85ae89f87a', '1067971', '1', '1749037722', '0x7d3db73a6a4503b6bf0acd269554c97928c08d0d8b0b258e8ab468bf1685d823', '0x13e9d47953f0f6dae1a3625e5706e26f8897da0c86994426610e1d64918dd6dc', '0x1a71a3b84ee819dd5827369cb905d05c66cd70ea0d00e996a0fc3b2a18beab78', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '9847682', '102', '0', '0', 'true', '0xd350c1d4bccade184fa3e1768b9865bf2ee0bf40108164c16287098b00000000', '0xbf186c8c0b504aa5b01c72219f41cb317a5c774eb6876867bfb5f9cc00000000'); +INSERT INTO chunk ("index", hash, start_block_number, end_block_number, + start_block_hash, end_block_hash, total_l1_messages_popped_before, + total_l1_messages_popped_in_chunk, start_block_time, + parent_chunk_hash, state_root, parent_chunk_state_root, + withdraw_root, total_l2_tx_gas, total_l2_tx_num, + total_l1_commit_calldata_size, total_l1_commit_gas, + enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash + ) VALUES ('795820', '0x7d3db73a6a4503b6bf0acd269554c97928c08d0d8b0b258e8ab468bf1685d823', '10405445', '10405544', '0xfab227c444916cc75ae161aed936f838ee1099d386098bfa8dd827e14d2707fb', '0x97f10e03c344086069e8854c3fe8496489978690b30f1f72f25f9d108c52c359', '1067971', '0', '1749036803', '0xe832fd69a7c60b6f7882b095970ff9af1945509b08f8a27c24d09b72f1065610', '0x1a71a3b84ee819dd5827369cb905d05c66cd70ea0d00e996a0fc3b2a18beab78', '0x52d34e124b415b90029d9689a588be66ed84aa3a17ee540efcb7dd179ccc2bf2', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '9717230', '102', '0', '0', 'true', '0xd350c1d4bccade184fa3e1768b9865bf2ee0bf40108164c16287098b00000000', '0xd350c1d4bccade184fa3e1768b9865bf2ee0bf40108164c16287098b00000000'); +INSERT INTO chunk ("index", hash, start_block_number, end_block_number, + start_block_hash, end_block_hash, total_l1_messages_popped_before, + total_l1_messages_popped_in_chunk, start_block_time, + parent_chunk_hash, state_root, parent_chunk_state_root, + withdraw_root, total_l2_tx_gas, total_l2_tx_num, + total_l1_commit_calldata_size, total_l1_commit_gas, + enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash + ) VALUES ('795819', '0xe832fd69a7c60b6f7882b095970ff9af1945509b08f8a27c24d09b72f1065610', '10405345', '10405444', '0x1159e4f1e0d9263451d4fcb350fa3c40ac42e1167e7ee5ccd9f8f3c9bd63f7e2', '0x3cdb32ac5cc1a6ba55f63d7862a8ea111aa6736a54577a37d2a2a7ca5ed27e77', '1067968', '3', '1749035912', '0x0140216f406c4d7c656e138c2a292aed2feecd3b298449f210c3dd8a94b20cbe', '0x52d34e124b415b90029d9689a588be66ed84aa3a17ee540efcb7dd179ccc2bf2', '0xb3be5e60afe9e45f04a3ee5173e099f791fc8b3318b8dc87ffb2fc58f0cf0051', '0xa565f3fdd399dc23aa34602405ff543a7628d36e4c51f232cfa42ad8ead16a5c', '7947615', '99', '0', '0', 'true', '0x701631a081e57a034fc4901a2502ec45233faeb52d4ee95a3c358ccc00000000', '0xd350c1d4bccade184fa3e1768b9865bf2ee0bf40108164c16287098b00000000'); +INSERT INTO chunk ("index", hash, start_block_number, end_block_number, + start_block_hash, end_block_hash, total_l1_messages_popped_before, + total_l1_messages_popped_in_chunk, start_block_time, + parent_chunk_hash, state_root, parent_chunk_state_root, + withdraw_root, total_l2_tx_gas, total_l2_tx_num, + total_l1_commit_calldata_size, total_l1_commit_gas, + enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash + ) VALUES ('795818', '0x0140216f406c4d7c656e138c2a292aed2feecd3b298449f210c3dd8a94b20cbe', '10405245', '10405344', '0xcbd0bf8de84d031b9ea27e0cdc35ba1886b65e823f4df361dbbab747bd2445da', '0xb0b40d064a9a6ec6b2234397eea1cd9baa643cabadea7b9c5ebbd8e22e52c350', '1067968', '0', '1749034972', '0x4c900747837da5d70e0933e1482c92731da16c35ce0f6926a4f409c219143fc5', '0xb3be5e60afe9e45f04a3ee5173e099f791fc8b3318b8dc87ffb2fc58f0cf0051', '0xb20143ddfb4277e957555292ea72be3d50e30f3f185bad011b6d10b29faeefd2', '0xa565f3fdd399dc23aa34602405ff543a7628d36e4c51f232cfa42ad8ead16a5c', '5931635', '103', '0', '0', 'true', '0x701631a081e57a034fc4901a2502ec45233faeb52d4ee95a3c358ccc00000000', '0x701631a081e57a034fc4901a2502ec45233faeb52d4ee95a3c358ccc00000000'); +INSERT INTO chunk ("index", hash, start_block_number, end_block_number, + start_block_hash, end_block_hash, total_l1_messages_popped_before, + total_l1_messages_popped_in_chunk, start_block_time, + parent_chunk_hash, state_root, parent_chunk_state_root, + withdraw_root, total_l2_tx_gas, total_l2_tx_num, + total_l1_commit_calldata_size, total_l1_commit_gas, + enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash + ) VALUES ('795817', '0x4c900747837da5d70e0933e1482c92731da16c35ce0f6926a4f409c219143fc5', '10405145', '10405244', '0x7571f7779a8078a176cd9458ffdc9c75a6ff4056f88e47ba72ff96a6d165e1bc', '0x083750d7664c98f10ce3042890c26643d68fb7bbf6fe582deb75caaa80618d4d', '1067967', '1', '1749033992', '0x6e6da747415600904d5b29241618de67760b2fbd8cbbd3a58efb27718b549c36', '0xb20143ddfb4277e957555292ea72be3d50e30f3f185bad011b6d10b29faeefd2', '0x131fe9cfc6d92555efc3e1b222c81968e2b6f13595513188140d6da48a5ee0a4', '0xa565f3fdd399dc23aa34602405ff543a7628d36e4c51f232cfa42ad8ead16a5c', '5354644', '104', '0', '0', 'true', '0x421ad11af2c169fff8f376e3838b644032fa00417634bbfba4557ec300000000', '0x701631a081e57a034fc4901a2502ec45233faeb52d4ee95a3c358ccc00000000'); +INSERT INTO chunk ("index", hash, start_block_number, end_block_number, + start_block_hash, end_block_hash, total_l1_messages_popped_before, + total_l1_messages_popped_in_chunk, start_block_time, + parent_chunk_hash, state_root, parent_chunk_state_root, + withdraw_root, total_l2_tx_gas, total_l2_tx_num, + total_l1_commit_calldata_size, total_l1_commit_gas, + enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash + ) VALUES ('795816', '0x6e6da747415600904d5b29241618de67760b2fbd8cbbd3a58efb27718b549c36', '10405045', '10405144', '0xa2cc3ea845ffa14c0b392dd391f0215867267bef9c6d68008ba2d430ef69be32', '0x8c6fbd3a543c08d604ed6330c62c635132de0c3431d632f4c26f00da3d36f07f', '1067964', '3', '1749033192', '0x7c8b5eb58109ed7947bc90c1ba36ab7e02fa59512e34c5af1db69e01a7a2f72a', '0x131fe9cfc6d92555efc3e1b222c81968e2b6f13595513188140d6da48a5ee0a4', '0x86590a1c0de788f0cab33135eaf79c59172da157cd175670695074e7aeb75ea3', '0xa565f3fdd399dc23aa34602405ff543a7628d36e4c51f232cfa42ad8ead16a5c', '8354632', '102', '0', '0', 'true', '0x8f7b703da3b65cd87a10314594d8906ef41273a67e855d5fb247bf1800000000', '0x421ad11af2c169fff8f376e3838b644032fa00417634bbfba4557ec300000000'); +INSERT INTO chunk ("index", hash, start_block_number, end_block_number, + start_block_hash, end_block_hash, total_l1_messages_popped_before, + total_l1_messages_popped_in_chunk, start_block_time, + parent_chunk_hash, state_root, parent_chunk_state_root, + withdraw_root, total_l2_tx_gas, total_l2_tx_num, + total_l1_commit_calldata_size, total_l1_commit_gas, + enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash + ) VALUES ('795815', '0x7c8b5eb58109ed7947bc90c1ba36ab7e02fa59512e34c5af1db69e01a7a2f72a', '10404945', '10405044', '0x806f53f6c2ef7d880b1b422428dfc4b655e66827aa2853443b7061f50807a2e8', '0xff8f1c3f2dd77c24313b5689a72478c3090349103e668065df2c1afc6e67f947', '1067962', '2', '1749032332', '0x627211154cdac0037baf7541dced64ef88454fa27861b57fa3fa501a3b52ee8e', '0x86590a1c0de788f0cab33135eaf79c59172da157cd175670695074e7aeb75ea3', '0x25bf485ee5e3b6d440571521dbd8ee990795a4c1089e39afecb9ea571e15311d', '0xa565f3fdd399dc23aa34602405ff543a7628d36e4c51f232cfa42ad8ead16a5c', '7143030', '102', '0', '0', 'true', '0x1b6df8ca8be3757e5d0415e09963b984f7560cb9b32be9c5e75b702600000000', '0x8f7b703da3b65cd87a10314594d8906ef41273a67e855d5fb247bf1800000000'); diff --git a/zkvm-prover/.work/.gitignore b/zkvm-prover/.work/.gitignore new file mode 100644 index 0000000000..317022c1ba --- /dev/null +++ b/zkvm-prover/.work/.gitignore @@ -0,0 +1,5 @@ +*.vmexe +*.bin +*.sol +cache +db \ No newline at end of file diff --git a/zkvm-prover/.work/batch/openvm.toml b/zkvm-prover/.work/batch/openvm.toml new file mode 100644 index 0000000000..f96da131a6 --- /dev/null +++ b/zkvm-prover/.work/batch/openvm.toml @@ -0,0 +1,34 @@ +[app_fri_params.fri_params] +log_blowup = 1 +log_final_poly_len = 0 +num_queries = 100 +proof_of_work_bits = 16 + +[app_vm_config.rv32i] + +[app_vm_config.rv32m] + +[app_vm_config.io] + +[app_vm_config.keccak] + +[app_vm_config.castf] + +[app_vm_config.modular] +supported_modulus = [ + "4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787", + "52435875175126190479447740508185965837690552500527637822603658699938581184513", +] +[app_vm_config.native] +[app_vm_config.pairing] +supported_curves = ["Bls12_381"] +[app_vm_config.sha256] +[app_vm_config.fp2] +supported_modulus = [ + "4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787", +] +[[app_vm_config.ecc.supported_curves]] +modulus = "4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787" +scalar = "52435875175126190479447740508185965837690552500527637822603658699938581184513" +a = "0" +b = "4" \ No newline at end of file diff --git a/zkvm-prover/.work/bundle/openvm.toml b/zkvm-prover/.work/bundle/openvm.toml new file mode 100644 index 0000000000..9b9590e638 --- /dev/null +++ b/zkvm-prover/.work/bundle/openvm.toml @@ -0,0 +1,17 @@ +[app_fri_params.fri_params] +log_blowup = 1 +log_final_poly_len = 0 +num_queries = 100 +proof_of_work_bits = 16 + +[app_vm_config.rv32i] + +[app_vm_config.rv32m] + +[app_vm_config.io] + +[app_vm_config.keccak] + +[app_vm_config.castf] + +[app_vm_config.native] \ No newline at end of file diff --git a/zkvm-prover/.work/chunk/openvm.toml b/zkvm-prover/.work/chunk/openvm.toml new file mode 100644 index 0000000000..8bfa220331 --- /dev/null +++ b/zkvm-prover/.work/chunk/openvm.toml @@ -0,0 +1,53 @@ +[app_fri_params.fri_params] +log_blowup = 1 +log_final_poly_len = 0 +num_queries = 100 +proof_of_work_bits = 16 + +[app_vm_config.rv32i] + +[app_vm_config.io] + +[app_vm_config.keccak] + +[app_vm_config.rv32m] +range_tuple_checker_sizes = [256, 8192] + +[app_vm_config.bigint] +range_tuple_checker_sizes = [256, 8192] + +[app_vm_config.modular] +supported_modulus = [ + "21888242871839275222246405745257275088696311157297823662689037894645226208583", + "21888242871839275222246405745257275088548364400416034343698204186575808495617", + "115792089237316195423570985008687907853269984665640564039457584007908834671663", + "115792089237316195423570985008687907852837564279074904382605163141518161494337", + "115792089210356248762697446949407573530086143415290314195533631308867097853951", + "115792089210356248762697446949407573529996955224135760342422259061068512044369" +] + +[app_vm_config.fp2] +supported_modulus = ["21888242871839275222246405745257275088696311157297823662689037894645226208583"] + +[app_vm_config.pairing] +supported_curves = ["Bn254"] + +[app_vm_config.sha256] + +[[app_vm_config.ecc.supported_curves]] +modulus = "115792089237316195423570985008687907853269984665640564039457584007908834671663" +scalar = "115792089237316195423570985008687907852837564279074904382605163141518161494337" +a = "0" +b = "7" + +[[app_vm_config.ecc.supported_curves]] +modulus = "115792089210356248762697446949407573530086143415290314195533631308867097853951" +scalar = "115792089210356248762697446949407573529996955224135760342422259061068512044369" +a = "115792089210356248762697446949407573530086143415290314195533631308867097853948" +b = "41058363725152142129326129780047268409114441015993725554835256314039467401291" + +[[app_vm_config.ecc.supported_curves]] +modulus = "21888242871839275222246405745257275088696311157297823662689037894645226208583" +scalar = "21888242871839275222246405745257275088548364400416034343698204186575808495617" +a = "0" +b = "3" \ No newline at end of file diff --git a/zkvm-prover/Makefile b/zkvm-prover/Makefile index 332f86610f..11dbc4f82a 100644 --- a/zkvm-prover/Makefile +++ b/zkvm-prover/Makefile @@ -1,5 +1,10 @@ .PHONY: prover lint tests_binary +RUST_MIN_STACK ?= 16777216 +export RUST_MIN_STACK + +CIRCUIT_STUFF = .work/chunk/app.vmexe .work/batch/app.vmexe .work/bundle/app.vmexe + ifeq (4.3,$(firstword $(sort $(MAKE_VERSION) 4.3))) PLONKY3_VERSION=$(shell grep -m 1 "Plonky3.git" ../Cargo.lock | cut -d "#" -f2 | cut -c-7) else @@ -46,3 +51,9 @@ lint: cargo check --all-features cargo clippy --all-features --all-targets -- -D warnings cargo fmt --all + +$(CIRCUIT_STUFF): + bash .work/download-release.sh + +test_run: $(CIRCUIT_STUFF) + GO_TAG=${GO_TAG} GIT_REV=${GIT_REV} ZK_VERSION=${ZK_VERSION} cargo run --release -p prover -- --config ./config.json \ No newline at end of file diff --git a/zkvm-prover/download-release.sh b/zkvm-prover/download-release.sh new file mode 100644 index 0000000000..ce17d95795 --- /dev/null +++ b/zkvm-prover/download-release.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# release version +if [ -z "${SCROLL_ZKVM_VERSION}" ]; then + SCROLL_ZKVM_VERSION=$($SHELL ./print_high_zkvm_version.sh | cut -d' ' -f1|cut -c2-) +fi + +echo $SCROLL_ZKVM_VERSION + +# chunk-circuit exe +wget https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION/chunk/app.vmexe -O .work/chunk/app.vmexe + +# batch-circuit exe +wget https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION/batch/app.vmexe -O .work/batch/app.vmexe + +# bundle-circuit exe +wget https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION/bundle/app.vmexe -O .work/bundle/app.vmexe + +# bundle-circuit exe, legacy version, may not exist +wget https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION/bundle/app_euclidv1.vmexe -O .work/bundle/app_euclidv1.vmexe || echo "legacy app not exist for $SCROLL_ZKVM_VERSION" From 461b3fbf2e584642a40b42138d02063a254f57e2 Mon Sep 17 00:00:00 2001 From: Ho Date: Mon, 23 Jun 2025 11:43:36 +0900 Subject: [PATCH 02/29] trivial fixing --- Cargo.lock | 2 +- crates/prover-bin/Cargo.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 91ecb1cdcb..96dfe7e1e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5568,7 +5568,7 @@ dependencies = [ [[package]] name = "prover" -version = "0.1.0" +version = "4.5.8" dependencies = [ "async-trait", "base64 0.22.1", diff --git a/crates/prover-bin/Cargo.toml b/crates/prover-bin/Cargo.toml index 7534788119..4075ce855e 100644 --- a/crates/prover-bin/Cargo.toml +++ b/crates/prover-bin/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "prover" -version = "0.1.0" -edition = "2021" +version.workspace = true +edition.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 989119c0351273ed0817b1d0013f1b31ae152985 Mon Sep 17 00:00:00 2001 From: Ho Date: Tue, 24 Jun 2025 15:33:16 +0900 Subject: [PATCH 03/29] refactor prover-bin for enabling deploy multiple circuits --- .../internal/logic/verifier/verifier.go | 36 ++++----- crates/libzkp/src/verifier/euclidv2.rs | 38 +++------ crates/prover-bin/src/main.rs | 65 +++++++++++++-- crates/prover-bin/src/prover.rs | 48 +++++------ crates/prover-bin/src/zk_circuits_handler.rs | 2 +- .../src/zk_circuits_handler/euclidV2.rs | 79 +++++++++++++------ zkvm-prover/Makefile | 2 +- 7 files changed, 171 insertions(+), 99 deletions(-) diff --git a/coordinator/internal/logic/verifier/verifier.go b/coordinator/internal/logic/verifier/verifier.go index d62318d1e7..9b0497f8c2 100644 --- a/coordinator/internal/logic/verifier/verifier.go +++ b/coordinator/internal/logic/verifier/verifier.go @@ -3,7 +3,6 @@ package verifier import ( - "encoding/base64" "encoding/json" "io" "os" @@ -67,7 +66,7 @@ func NewVerifier(cfg *config.VerifierConfig) (*Verifier, error) { OpenVMVkMap: make(map[string]struct{}), } - if err := v.loadOpenVMVks(message.EuclidV2Fork); err != nil { + if err := v.loadOpenVMVks(cfg.HighVersionCircuit.AssetsPath); err != nil { return nil, err } @@ -108,27 +107,23 @@ func (v *Verifier) VerifyBundleProof(proof *message.OpenVMBundleProof, forkName return libzkp.VerifyBundleProof(string(buf), forkName), nil } -func (v *Verifier) ReadVK(filePat string) (string, error) { +// func (v *Verifier) ReadVK(filePat string) (string, error) { - f, err := os.Open(filepath.Clean(filePat)) - if err != nil { - return "", err - } - byt, err := io.ReadAll(f) - if err != nil { - return "", err - } - return base64.StdEncoding.EncodeToString(byt), nil -} +// f, err := os.Open(filepath.Clean(filePat)) +// if err != nil { +// return "", err +// } +// byt, err := io.ReadAll(f) +// if err != nil { +// return "", err +// } +// return base64.StdEncoding.EncodeToString(byt), nil +// } -func (v *Verifier) loadOpenVMVks(forkName string) error { - tempFile := path.Join(os.TempDir(), "openVmVk.json") - err := libzkp.DumpVk(forkName, tempFile) - if err != nil { - return err - } +func (v *Verifier) loadOpenVMVks(assetsPath string) error { + vkFile := path.Join(assetsPath, "openVmVk.json") - f, err := os.Open(filepath.Clean(tempFile)) + f, err := os.Open(filepath.Clean(vkFile)) if err != nil { return err } @@ -144,5 +139,6 @@ func (v *Verifier) loadOpenVMVks(forkName string) error { v.OpenVMVkMap[dump.Chunk] = struct{}{} v.OpenVMVkMap[dump.Batch] = struct{}{} v.OpenVMVkMap[dump.Bundle] = struct{}{} + log.Info("Load vks", "from", assetsPath, "chunk", dump.Chunk, "batch", dump.Batch, "bundle", dump.Bundle) return nil } diff --git a/crates/libzkp/src/verifier/euclidv2.rs b/crates/libzkp/src/verifier/euclidv2.rs index 7994abf50c..3b2dcc75db 100644 --- a/crates/libzkp/src/verifier/euclidv2.rs +++ b/crates/libzkp/src/verifier/euclidv2.rs @@ -1,4 +1,4 @@ -use super::{ProofVerifier, TaskType, VKDump}; +use super::{ProofVerifier, TaskType}; use eyre::Result; @@ -6,13 +6,11 @@ use crate::{ proofs::{AsRootProof, BatchProof, BundleProof, ChunkProof, IntoEvmProof}, utils::panic_catch, }; -use scroll_zkvm_verifier_euclid::verifier::{BatchVerifier, BundleVerifierEuclidV2, ChunkVerifier}; -use std::{fs::File, path::Path}; +use scroll_zkvm_verifier_euclid::verifier::UniversalVerifier; +use std::path::Path; pub struct EuclidV2Verifier { - chunk_verifier: ChunkVerifier, - batch_verifier: BatchVerifier, - bundle_verifier: BundleVerifierEuclidV2, + verifier: UniversalVerifier, } impl EuclidV2Verifier { @@ -22,12 +20,8 @@ impl EuclidV2Verifier { let exe = Path::new(assets_dir).join("root-verifier-committed-exe"); Self { - chunk_verifier: ChunkVerifier::setup(&config, &exe, &verifier_bin) + verifier: UniversalVerifier::setup(&config, &exe, &verifier_bin) .expect("Setting up chunk verifier"), - batch_verifier: BatchVerifier::setup(&config, &exe, &verifier_bin) - .expect("Setting up batch verifier"), - bundle_verifier: BundleVerifierEuclidV2::setup(&config, &exe, &verifier_bin) - .expect("Setting up bundle verifier"), } } } @@ -37,30 +31,24 @@ impl ProofVerifier for EuclidV2Verifier { panic_catch(|| match task_type { TaskType::Chunk => { let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); - self.chunk_verifier.verify_proof(proof.as_root_proof()) + self.verifier.verify_proof(proof.as_root_proof(), &proof.vk).unwrap() } TaskType::Batch => { let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); - self.batch_verifier.verify_proof(proof.as_root_proof()) + self.verifier.verify_proof(proof.as_root_proof(), &proof.vk).unwrap() } TaskType::Bundle => { let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); - self.bundle_verifier - .verify_proof_evm(&proof.into_evm_proof()) + let vk = proof.vk.clone(); + let evm_proof = proof.into_evm_proof(); + self.verifier + .verify_proof_evm(&evm_proof, &vk).unwrap() } }) .map_err(|err_str: String| eyre::eyre!("{err_str}")) } - fn dump_vk(&self, file: &Path) { - use base64::{prelude::BASE64_STANDARD, Engine}; - let f = File::create(file).expect("Failed to open file to dump VK"); - - let dump = VKDump { - chunk_vk: BASE64_STANDARD.encode(self.chunk_verifier.get_app_vk()), - batch_vk: BASE64_STANDARD.encode(self.batch_verifier.get_app_vk()), - bundle_vk: BASE64_STANDARD.encode(self.bundle_verifier.get_app_vk()), - }; - serde_json::to_writer(f, &dump).expect("Failed to dump VK"); + fn dump_vk(&self, _file: &Path) { + panic!("dump vk has been deprecated"); } } diff --git a/crates/prover-bin/src/main.rs b/crates/prover-bin/src/main.rs index 8c20c3e9cb..f06c9c4502 100644 --- a/crates/prover-bin/src/main.rs +++ b/crates/prover-bin/src/main.rs @@ -2,12 +2,13 @@ mod prover; mod types; mod zk_circuits_handler; -use clap::{ArgAction, Parser}; +use clap::{ArgAction, Parser, Subcommand}; use prover::{LocalProver, LocalProverConfig}; use scroll_proving_sdk::{ - prover::ProverBuilder, + prover::{types::ProofType, ProverBuilder}, utils::{get_version, init_tracing}, }; +use std::{fs::File, path::Path}; #[derive(Parser, Debug)] #[command(disable_version_flag = true)] @@ -16,6 +17,9 @@ struct Args { #[arg(long = "config", default_value = "conf/config.json")] config_file: String, + #[arg(long = "forkname")] + fork_name: Option, + /// Version of this prover #[arg(short, long, action = ArgAction::SetTrue)] version: bool, @@ -23,6 +27,40 @@ struct Args { /// Path of log file #[arg(long = "log.file")] log_file: Option, + + #[command(subcommand)] + command: Option, +} + +#[derive(Subcommand, Debug)] +enum Commands { + /// Dump vk of this prover + Dump { + /// File to save the vks + file_name: String, + }, +} + +fn dump_vk(file: &Path, prover: &LocalProver, fork_name: &str) -> eyre::Result<()> { + let f = File::create(file)?; + + #[derive(Debug, serde::Serialize)] + struct VKDump { + pub chunk_vk: String, + pub batch_vk: String, + pub bundle_vk: String, + } + + let handler = prover.new_handler(fork_name); + + let dump = VKDump { + chunk_vk: handler.get_vk(ProofType::Chunk), + batch_vk: handler.get_vk(ProofType::Batch), + bundle_vk: handler.get_vk(ProofType::Bundle), + }; + serde_json::to_writer(f, &dump)?; + + Ok(()) } #[tokio::main] @@ -37,14 +75,25 @@ async fn main() -> eyre::Result<()> { } let cfg = LocalProverConfig::from_file(args.config_file)?; + let default_fork_name = cfg.circuits.keys().nth(0).unwrap().clone(); let sdk_config = cfg.sdk_config.clone(); - let local_prover = LocalProver::new(cfg); - let prover = ProverBuilder::new(sdk_config, local_prover) - .build() - .await - .map_err(|e| eyre::eyre!("build prover fail: {e}"))?; + let local_prover = LocalProver::new(cfg.clone()); + + match args.command { + Some(Commands::Dump { file_name }) => { + let fork_name = args.fork_name.unwrap_or_else(||default_fork_name); + println!("dump vk for {fork_name}"); + dump_vk(Path::new(&file_name), &local_prover, &fork_name)?; + }, + None => { + let prover = ProverBuilder::new(sdk_config, local_prover) + .build() + .await + .map_err(|e| eyre::eyre!("build prover fail: {e}"))?; - prover.run().await; + prover.run().await; + }, + } Ok(()) } diff --git a/crates/prover-bin/src/prover.rs b/crates/prover-bin/src/prover.rs index 1d628f2706..079d3fd8e1 100644 --- a/crates/prover-bin/src/prover.rs +++ b/crates/prover-bin/src/prover.rs @@ -1,10 +1,10 @@ use crate::zk_circuits_handler::{euclidV2::EuclidV2Handler, CircuitsHandler}; use async_trait::async_trait; -use base64::{prelude::BASE64_STANDARD, Engine}; use eyre::Result; use scroll_proving_sdk::{ config::Config as SdkConfig, prover::{ + types::ProofType, proving_service::{ GetVkRequest, GetVkResponse, ProveRequest, ProveResponse, QueryTaskRequest, QueryTaskResponse, TaskStatus, @@ -16,7 +16,7 @@ use serde::{Deserialize, Serialize}; use std::{ collections::HashMap, fs::File, - sync::Arc, + sync::{OnceLock, Arc}, time::{SystemTime, UNIX_EPOCH}, }; use tokio::{runtime::Handle, sync::Mutex, task::JoinHandle}; @@ -45,6 +45,9 @@ impl LocalProverConfig { pub struct CircuitConfig { pub hard_fork_name: String, pub workspace_path: String, + /// cached vk value to save some initial cost, for debugging only + #[serde(default)] + pub vks: HashMap, } pub struct LocalProver { @@ -52,7 +55,7 @@ pub struct LocalProver { next_task_id: u64, current_task: Option>>, - active_handler: Option<(String, Arc)>, + handlers: HashMap>>, } #[async_trait] @@ -62,13 +65,13 @@ impl ProvingService for LocalProver { } async fn get_vks(&self, req: GetVkRequest) -> GetVkResponse { let mut vks = vec![]; - for hard_fork_name in self.config.circuits.keys() { - let handler = self.new_handler(hard_fork_name); + for (hard_fork_name, cfg) in self.config.circuits.iter() { for proof_type in &req.proof_types { - let vk = handler.get_vk(*proof_type).await; - - if let Some(vk) = vk { - vks.push(BASE64_STANDARD.encode(vk)); + if let Some(vk) = cfg.vks.get(proof_type) { + vks.push(vk.clone()) + } else { + let handler = self.get_or_init_handler(hard_fork_name); + vks.push(handler.get_vk(*proof_type)); } } } @@ -77,8 +80,9 @@ impl ProvingService for LocalProver { } async fn prove(&mut self, req: ProveRequest) -> ProveResponse { self.set_active_handler(&req.hard_fork_name); + let handler = self.get_or_init_handler(&req.hard_fork_name); match self - .do_prove(req, self.active_handler.as_ref().unwrap().1.clone()) + .do_prove(req, handler) .await { Ok(resp) => resp, @@ -133,11 +137,14 @@ impl ProvingService for LocalProver { impl LocalProver { pub fn new(config: LocalProverConfig) -> Self { + let handlers = config.circuits.iter() + .map(|(k,_)|(k.clone(), OnceLock::new())) + .collect(); Self { config, next_task_id: 0, current_task: None, - active_handler: None, + handlers, } } @@ -168,25 +175,22 @@ impl LocalProver { }) } - fn set_active_handler(&mut self, hard_fork_name: &str) { - if let Some(handler) = &self.active_handler { - if handler.0 == hard_fork_name { - return; - } - } - self.active_handler = Some((hard_fork_name.to_string(), self.new_handler(hard_fork_name))); + fn get_or_init_handler(&self, hard_fork_name: &str) -> Arc{ + let lk = self.handlers.get(hard_fork_name).expect("coordinator should never sent unexpected forkname"); + lk.get_or_init(||self.new_handler(hard_fork_name)).clone() } - fn new_handler(&self, hard_fork_name: &str) -> Arc { + pub fn new_handler(&self, hard_fork_name: &str) -> Arc { // if we got assigned a task for an unknown hard fork, there is something wrong in the // coordinator let config = self.config.circuits.get(hard_fork_name).unwrap(); match hard_fork_name { - "euclidV2" => Arc::new(Arc::new(Mutex::new(EuclidV2Handler::new( - &config.workspace_path, + // The new EuclidV2Handler is a universal handler + // We can add other handler implements if needed + _ => Arc::new(Arc::new(Mutex::new(EuclidV2Handler::new( + &config, )))) as Arc, - _ => unreachable!(), } } } diff --git a/crates/prover-bin/src/zk_circuits_handler.rs b/crates/prover-bin/src/zk_circuits_handler.rs index 17cf44db04..fc8349adcb 100644 --- a/crates/prover-bin/src/zk_circuits_handler.rs +++ b/crates/prover-bin/src/zk_circuits_handler.rs @@ -11,7 +11,7 @@ use std::path::Path; #[async_trait] pub trait CircuitsHandler: Sync + Send { - async fn get_vk(&self, task_type: ProofType) -> Option>; + fn get_vk(&self, task_type: ProofType) -> String; async fn get_proof_data(&self, prove_request: ProveRequest) -> Result; } diff --git a/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs b/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs index 1bc173ea0d..4fd5a6d01b 100644 --- a/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs +++ b/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs @@ -1,22 +1,26 @@ -use std::{path::Path, sync::Arc}; +use std::{path::Path, sync::{OnceLock, Arc}, collections::HashMap}; use super::{CircuitsHandler, Phase}; +use crate::prover::CircuitConfig; use async_trait::async_trait; use eyre::Result; use scroll_proving_sdk::prover::{proving_service::ProveRequest, ProofType}; use scroll_zkvm_prover_euclid::{BatchProver, BundleProverEuclidV2, ChunkProver}; use scroll_zkvm_types::ProvingTask; use tokio::sync::Mutex; +use base64::{prelude::BASE64_STANDARD, Engine}; pub struct EuclidV2Handler { chunk_prover: ChunkProver, batch_prover: BatchProver, bundle_prover: BundleProverEuclidV2, + cached_vks: HashMap>, } unsafe impl Send for EuclidV2Handler {} impl EuclidV2Handler { - pub fn new(workspace_path: &str) -> Self { + pub fn new(cfg: &CircuitConfig) -> Self { + let workspace_path = &cfg.workspace_path; let p = Phase::EuclidV2; let workspace_path = Path::new(workspace_path); let chunk_prover = ChunkProver::setup(p.phase_spec_chunk(workspace_path)) @@ -28,46 +32,77 @@ impl EuclidV2Handler { let bundle_prover = BundleProverEuclidV2::setup(p.phase_spec_bundle(workspace_path)) .expect("Failed to setup bundle prover"); + let build_vk_cache = |proof_type: ProofType| { + let vk = if let Some(vk) = cfg.vks.get(&proof_type){ + OnceLock::from(vk.clone()) + } else { + OnceLock::new() + }; + (proof_type, vk) + }; + Self { chunk_prover, batch_prover, bundle_prover, + cached_vks: HashMap::from([ + build_vk_cache(ProofType::Chunk), + build_vk_cache(ProofType::Batch), + build_vk_cache(ProofType::Bundle), + ]), } } + + pub fn get_vk_and_cache(&self, task_type: ProofType) -> String { + match task_type { + ProofType::Chunk => + self.cached_vks[&ProofType::Chunk].get_or_init(|| + BASE64_STANDARD.encode(self.chunk_prover.get_app_vk()) + ), + ProofType::Batch => + self.cached_vks[&ProofType::Batch].get_or_init(|| + BASE64_STANDARD.encode(self.batch_prover.get_app_vk()) + ), + ProofType::Bundle => + self.cached_vks[&ProofType::Bundle].get_or_init(|| + BASE64_STANDARD.encode(self.bundle_prover.get_evm_vk()) + ), + _ => unreachable!("Unsupported proof type {:?}", task_type), + }.clone() + } } + + #[async_trait] impl CircuitsHandler for Arc> { - async fn get_vk(&self, task_type: ProofType) -> Option> { - Some(match task_type { - ProofType::Chunk => self.try_lock().unwrap().chunk_prover.get_app_vk(), - ProofType::Batch => self.try_lock().unwrap().batch_prover.get_app_vk(), - ProofType::Bundle => self.try_lock().unwrap().bundle_prover.get_app_vk(), - _ => unreachable!("Unsupported proof type"), - }) + fn get_vk(&self, task_type: ProofType) -> String { + self.try_lock().unwrap().get_vk_and_cache(task_type) } async fn get_proof_data(&self, prove_request: ProveRequest) -> Result { + let u_task: ProvingTask = serde_json::from_str(&prove_request.input)?; + let handler_self = self.try_lock().unwrap(); + let expected_vk = handler_self.get_vk_and_cache(prove_request.proof_type); + if BASE64_STANDARD.encode(&u_task.vk) != expected_vk { + eyre::bail!("vk is not match!, prove type {:?}, expected {}, get {}", + prove_request.proof_type, + expected_vk, + BASE64_STANDARD.encode(&u_task.vk), + ); + } let proof = match prove_request.proof_type { - ProofType::Chunk => self - .try_lock() - .unwrap() - .chunk_prover + ProofType::Chunk => handler_self.chunk_prover .gen_proof_universal(&u_task, false)?, - ProofType::Batch => self - .try_lock() - .unwrap() - .batch_prover + ProofType::Batch => handler_self.batch_prover .gen_proof_universal(&u_task, false)?, - ProofType::Bundle => self - .try_lock() - .unwrap() - .bundle_prover + ProofType::Bundle => handler_self.bundle_prover .gen_proof_universal(&u_task, true)?, - _ => return Err(eyre::eyre!("Unsupported proof type")), + _ => return Err(eyre::eyre!("Unsupported proof type {:?}", prove_request.proof_type)), }; + //TODO: check expected PI Ok(serde_json::to_string(&proof)?) } } diff --git a/zkvm-prover/Makefile b/zkvm-prover/Makefile index 11dbc4f82a..bc3eaeb895 100644 --- a/zkvm-prover/Makefile +++ b/zkvm-prover/Makefile @@ -41,7 +41,7 @@ else endif prover: - GO_TAG=${GO_TAG} GIT_REV=${GIT_REV} ZK_VERSION=${ZK_VERSION} cargo build --release + GO_TAG=${GO_TAG} GIT_REV=${GIT_REV} ZK_VERSION=${ZK_VERSION} cd ../crates/prover-bin && cargo build --release tests_binary: cargo clean && cargo test --release --no-run From b18fde4012a1c18f87fc4ba10c3ae8afe9357c59 Mon Sep 17 00:00:00 2001 From: Ho Date: Tue, 24 Jun 2025 15:33:42 +0900 Subject: [PATCH 04/29] move gpt patch --- {zkvm-prover => crates/prover-bin}/.cargo/config.toml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {zkvm-prover => crates/prover-bin}/.cargo/config.toml (100%) diff --git a/zkvm-prover/.cargo/config.toml b/crates/prover-bin/.cargo/config.toml similarity index 100% rename from zkvm-prover/.cargo/config.toml rename to crates/prover-bin/.cargo/config.toml From 954aaf793904e57e8d37ce0714ef236389e35d7d Mon Sep 17 00:00:00 2001 From: Ho Date: Tue, 24 Jun 2025 21:34:30 +0900 Subject: [PATCH 05/29] fix forkname issue enalbe block height check inside coordinator --- .../internal/controller/api/controller.go | 7 ++- .../internal/controller/api/get_task.go | 63 +++++++++++++++++++ coordinator/internal/logic/libzkp/lib.go | 11 ++-- 3 files changed, 74 insertions(+), 7 deletions(-) diff --git a/coordinator/internal/controller/api/controller.go b/coordinator/internal/controller/api/controller.go index 105b39fc4d..b1ea549743 100644 --- a/coordinator/internal/controller/api/controller.go +++ b/coordinator/internal/controller/api/controller.go @@ -1,11 +1,14 @@ package api import ( + "encoding/json" + "github.com/prometheus/client_golang/prometheus" "github.com/scroll-tech/go-ethereum/log" "github.com/scroll-tech/go-ethereum/params" "gorm.io/gorm" + "scroll-tech/common/libzkp" "scroll-tech/coordinator/internal/config" "scroll-tech/coordinator/internal/logic/verifier" ) @@ -29,7 +32,7 @@ func InitController(cfg *config.Config, chainCfg *params.ChainConfig, db *gorm.D log.Info("verifier created", "openVmVerifier", vf.OpenVMVkMap) // TODO: enable this when the libzkp has been updated - /*l2cfg := cfg.L2.Endpoint + l2cfg := cfg.L2.Endpoint if l2cfg == nil { panic("l2geth is not specified") } @@ -37,7 +40,7 @@ func InitController(cfg *config.Config, chainCfg *params.ChainConfig, db *gorm.D if err != nil { panic(err) } - libzkp.InitL2geth(string(l2cfgBytes))*/ + libzkp.InitL2geth(string(l2cfgBytes)) Auth = NewAuthController(db, cfg, vf) GetTask = NewGetTaskController(cfg, chainCfg, db, reg) diff --git a/coordinator/internal/controller/api/get_task.go b/coordinator/internal/controller/api/get_task.go index a2e0290042..37084dae90 100644 --- a/coordinator/internal/controller/api/get_task.go +++ b/coordinator/internal/controller/api/get_task.go @@ -4,10 +4,13 @@ import ( "errors" "fmt" "math/rand" + "sync" + "time" "github.com/gin-gonic/gin" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" + "github.com/scroll-tech/go-ethereum/ethclient" "github.com/scroll-tech/go-ethereum/log" "github.com/scroll-tech/go-ethereum/params" "gorm.io/gorm" @@ -25,6 +28,13 @@ type GetTaskController struct { proverTasks map[message.ProofType]provertask.ProverTask getTaskAccessCounter *prometheus.CounterVec + + l2gethClient *ethclient.Client + lastBlockNumber struct { + sync.RWMutex + data uint64 + t time.Time + } } // NewGetTaskController create a get prover task controller @@ -44,9 +54,51 @@ func NewGetTaskController(cfg *config.Config, chainCfg *params.ChainConfig, db * ptc.proverTasks[message.ProofTypeChunk] = chunkProverTask ptc.proverTasks[message.ProofTypeBatch] = batchProverTask ptc.proverTasks[message.ProofTypeBundle] = bundleProverTask + + if cfg.L2 == nil || cfg.L2.Endpoint == nil { + log.Crit("l2 endpoint is not set in config") + } else { + var err error + ptc.l2gethClient, err = ethclient.Dial(cfg.L2.Endpoint.Url) + if err != nil { + log.Crit("dial l2geth endpoint fail", "err", err) + } + } + return ptc } +// getLatestBlockNumber gets the latest block number, using cache if available and not expired +func (ptc *GetTaskController) getLatestBlockNumber(ctx *gin.Context) (uint64, error) { + // First check if we have a cached value that's still valid + ptc.lastBlockNumber.RLock() + if !ptc.lastBlockNumber.t.IsZero() && time.Since(ptc.lastBlockNumber.t) < time.Second*10 { + blockNumber := ptc.lastBlockNumber.data + ptc.lastBlockNumber.RUnlock() + return blockNumber, nil + } + ptc.lastBlockNumber.RUnlock() + + // If not cached or expired, fetch from the client + if ptc.l2gethClient == nil { + return 0, errors.New("L2 geth client not initialized") + } + + blockNumber, err := ptc.l2gethClient.BlockNumber(ctx) + if err != nil { + return 0, fmt.Errorf("failed to get latest block number: %w", err) + } + + // Update the cache + ptc.lastBlockNumber.Lock() + ptc.lastBlockNumber.data = blockNumber + ptc.lastBlockNumber.t = time.Now() + ptc.lastBlockNumber.Unlock() + + log.Debug("updated block height reference", "height", blockNumber) + return blockNumber, nil +} + func (ptc *GetTaskController) incGetTaskAccessCounter(ctx *gin.Context) error { publicKey, publicKeyExist := ctx.Get(coordinatorType.PublicKey) if !publicKeyExist { @@ -78,6 +130,17 @@ func (ptc *GetTaskController) GetTasks(ctx *gin.Context) { return } + if getTaskParameter.ProverHeight == 0 { + // help update the prover height with internal l2geth + if blk, err := ptc.getLatestBlockNumber(ctx); err == nil { + getTaskParameter.ProverHeight = blk + } else { + nerr := fmt.Errorf("inner l2geth failure, err:%w", err) + types.RenderFailure(ctx, types.InternalServerError, nerr) + return + } + } + proofType := ptc.proofType(&getTaskParameter) proverTask, isExist := ptc.proverTasks[proofType] if !isExist { diff --git a/coordinator/internal/logic/libzkp/lib.go b/coordinator/internal/logic/libzkp/lib.go index 38e217eb94..7920135b39 100644 --- a/coordinator/internal/logic/libzkp/lib.go +++ b/coordinator/internal/logic/libzkp/lib.go @@ -11,6 +11,7 @@ import "C" //nolint:typecheck import ( "fmt" "os" + "strings" "unsafe" "scroll-tech/common/types/message" @@ -45,7 +46,7 @@ func InitL2geth(configJSON string) { // Verify a chunk proof func VerifyChunkProof(proofData, forkName string) bool { cProof := goToCString(proofData) - cForkName := goToCString(forkName) + cForkName := goToCString(strings.ToLower(forkName)) defer freeCString(cProof) defer freeCString(cForkName) @@ -56,7 +57,7 @@ func VerifyChunkProof(proofData, forkName string) bool { // Verify a batch proof func VerifyBatchProof(proofData, forkName string) bool { cProof := goToCString(proofData) - cForkName := goToCString(forkName) + cForkName := goToCString(strings.ToLower(forkName)) defer freeCString(cProof) defer freeCString(cForkName) @@ -67,7 +68,7 @@ func VerifyBatchProof(proofData, forkName string) bool { // Verify a bundle proof func VerifyBundleProof(proofData, forkName string) bool { cProof := goToCString(proofData) - cForkName := goToCString(forkName) + cForkName := goToCString(strings.ToLower(forkName)) defer freeCString(cProof) defer freeCString(cForkName) @@ -97,7 +98,7 @@ func fromMessageTaskType(taskType int) int { // Generate a universal task func GenerateUniversalTask(taskType int, taskJSON, forkName string) (bool, string, string, []byte) { - return generateUniversalTask(fromMessageTaskType(taskType), taskJSON, forkName) + return generateUniversalTask(fromMessageTaskType(taskType), taskJSON, strings.ToLower(forkName)) } // Generate wrapped proof @@ -127,7 +128,7 @@ func GenerateWrappedProof(proofJSON, metadata string, vkData []byte) string { // Dumps a verification key to a file func DumpVk(forkName, filePath string) error { - cForkName := goToCString(forkName) + cForkName := goToCString(strings.ToLower(forkName)) cFilePath := goToCString(filePath) defer freeCString(cForkName) defer freeCString(cFilePath) From 633754424c2571636b26d3ef0dde1f8889f74df0 Mon Sep 17 00:00:00 2001 From: Ho Date: Wed, 25 Jun 2025 09:27:42 +0900 Subject: [PATCH 06/29] use template instead of config file --- zkvm-prover/.work/.gitignore | 3 ++- zkvm-prover/config.json | 31 ------------------------------- zkvm-prover/config.json.template | 1 + 3 files changed, 3 insertions(+), 32 deletions(-) delete mode 100644 zkvm-prover/config.json diff --git a/zkvm-prover/.work/.gitignore b/zkvm-prover/.work/.gitignore index 317022c1ba..88f0f3f95e 100644 --- a/zkvm-prover/.work/.gitignore +++ b/zkvm-prover/.work/.gitignore @@ -2,4 +2,5 @@ *.bin *.sol cache -db \ No newline at end of file +db +*.json \ No newline at end of file diff --git a/zkvm-prover/config.json b/zkvm-prover/config.json deleted file mode 100644 index 978c2be570..0000000000 --- a/zkvm-prover/config.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "sdk_config": { - "prover_name_prefix": "prover-1", - "keys_dir": "keys", - "coordinator": { - "base_url": "http://localhost:8555", - "retry_count": 10, - "retry_wait_time_sec": 10, - "connection_timeout_sec": 30 - }, - "l2geth": { - "endpoint": "http://localhost:9999" - }, - "prover": { - "circuit_type": 2, - "supported_proof_types": [ - 1, - 2, - 3 - ], - "circuit_version": "v0.13.1" - }, - "db_path": "unique-db-path-for-prover-1" - }, - "circuits": { - "euclidV2": { - "hard_fork_name": "euclidV2", - "workspace_path": "/home/ubuntu/prover-workdir" - } - } -} \ No newline at end of file diff --git a/zkvm-prover/config.json.template b/zkvm-prover/config.json.template index 9aad78ead8..a607e79a5e 100644 --- a/zkvm-prover/config.json.template +++ b/zkvm-prover/config.json.template @@ -20,6 +20,7 @@ ], "circuit_version": "v0.13.1" }, + "health_listener_addr": "127.0.0.1:10080", "db_path": ".work/db" }, "circuits": { From deef9af37fe629e37ac2314afd310b7a94302d86 Mon Sep 17 00:00:00 2001 From: Ho Date: Wed, 25 Jun 2025 09:33:38 +0900 Subject: [PATCH 07/29] fmt and clippy --- crates/libzkp/src/verifier/euclidv2.rs | 11 ++-- crates/prover-bin/src/main.rs | 8 +-- crates/prover-bin/src/prover.rs | 33 ++++++------ .../src/zk_circuits_handler/euclidV2.rs | 53 ++++++++++--------- 4 files changed, 57 insertions(+), 48 deletions(-) diff --git a/crates/libzkp/src/verifier/euclidv2.rs b/crates/libzkp/src/verifier/euclidv2.rs index 3b2dcc75db..112bc1d3a8 100644 --- a/crates/libzkp/src/verifier/euclidv2.rs +++ b/crates/libzkp/src/verifier/euclidv2.rs @@ -31,18 +31,21 @@ impl ProofVerifier for EuclidV2Verifier { panic_catch(|| match task_type { TaskType::Chunk => { let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); - self.verifier.verify_proof(proof.as_root_proof(), &proof.vk).unwrap() + self.verifier + .verify_proof(proof.as_root_proof(), &proof.vk) + .unwrap() } TaskType::Batch => { let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); - self.verifier.verify_proof(proof.as_root_proof(), &proof.vk).unwrap() + self.verifier + .verify_proof(proof.as_root_proof(), &proof.vk) + .unwrap() } TaskType::Bundle => { let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); let vk = proof.vk.clone(); let evm_proof = proof.into_evm_proof(); - self.verifier - .verify_proof_evm(&evm_proof, &vk).unwrap() + self.verifier.verify_proof_evm(&evm_proof, &vk).unwrap() } }) .map_err(|err_str: String| eyre::eyre!("{err_str}")) diff --git a/crates/prover-bin/src/main.rs b/crates/prover-bin/src/main.rs index f06c9c4502..46e9c3f17f 100644 --- a/crates/prover-bin/src/main.rs +++ b/crates/prover-bin/src/main.rs @@ -75,16 +75,16 @@ async fn main() -> eyre::Result<()> { } let cfg = LocalProverConfig::from_file(args.config_file)?; - let default_fork_name = cfg.circuits.keys().nth(0).unwrap().clone(); + let default_fork_name = cfg.circuits.keys().next().unwrap().clone(); let sdk_config = cfg.sdk_config.clone(); let local_prover = LocalProver::new(cfg.clone()); match args.command { Some(Commands::Dump { file_name }) => { - let fork_name = args.fork_name.unwrap_or_else(||default_fork_name); + let fork_name = args.fork_name.unwrap_or(default_fork_name); println!("dump vk for {fork_name}"); dump_vk(Path::new(&file_name), &local_prover, &fork_name)?; - }, + } None => { let prover = ProverBuilder::new(sdk_config, local_prover) .build() @@ -92,7 +92,7 @@ async fn main() -> eyre::Result<()> { .map_err(|e| eyre::eyre!("build prover fail: {e}"))?; prover.run().await; - }, + } } Ok(()) diff --git a/crates/prover-bin/src/prover.rs b/crates/prover-bin/src/prover.rs index 079d3fd8e1..393fce3891 100644 --- a/crates/prover-bin/src/prover.rs +++ b/crates/prover-bin/src/prover.rs @@ -4,11 +4,11 @@ use eyre::Result; use scroll_proving_sdk::{ config::Config as SdkConfig, prover::{ - types::ProofType, proving_service::{ GetVkRequest, GetVkResponse, ProveRequest, ProveResponse, QueryTaskRequest, QueryTaskResponse, TaskStatus, }, + types::ProofType, ProvingService, }, }; @@ -16,7 +16,7 @@ use serde::{Deserialize, Serialize}; use std::{ collections::HashMap, fs::File, - sync::{OnceLock, Arc}, + sync::{Arc, OnceLock}, time::{SystemTime, UNIX_EPOCH}, }; use tokio::{runtime::Handle, sync::Mutex, task::JoinHandle}; @@ -79,12 +79,8 @@ impl ProvingService for LocalProver { GetVkResponse { vks, error: None } } async fn prove(&mut self, req: ProveRequest) -> ProveResponse { - self.set_active_handler(&req.hard_fork_name); let handler = self.get_or_init_handler(&req.hard_fork_name); - match self - .do_prove(req, handler) - .await - { + match self.do_prove(req, handler).await { Ok(resp) => resp, Err(e) => ProveResponse { status: TaskStatus::Failed, @@ -137,9 +133,11 @@ impl ProvingService for LocalProver { impl LocalProver { pub fn new(config: LocalProverConfig) -> Self { - let handlers = config.circuits.iter() - .map(|(k,_)|(k.clone(), OnceLock::new())) - .collect(); + let handlers = config + .circuits + .keys() + .map(|k| (k.clone(), OnceLock::new())) + .collect(); Self { config, next_task_id: 0, @@ -175,9 +173,12 @@ impl LocalProver { }) } - fn get_or_init_handler(&self, hard_fork_name: &str) -> Arc{ - let lk = self.handlers.get(hard_fork_name).expect("coordinator should never sent unexpected forkname"); - lk.get_or_init(||self.new_handler(hard_fork_name)).clone() + fn get_or_init_handler(&self, hard_fork_name: &str) -> Arc { + let lk = self + .handlers + .get(hard_fork_name) + .expect("coordinator should never sent unexpected forkname"); + lk.get_or_init(|| self.new_handler(hard_fork_name)).clone() } pub fn new_handler(&self, hard_fork_name: &str) -> Arc { @@ -188,9 +189,9 @@ impl LocalProver { match hard_fork_name { // The new EuclidV2Handler is a universal handler // We can add other handler implements if needed - _ => Arc::new(Arc::new(Mutex::new(EuclidV2Handler::new( - &config, - )))) as Arc, + "some future forkname" => unreachable!(), + _ => Arc::new(Arc::new(Mutex::new(EuclidV2Handler::new(config)))) + as Arc, } } } diff --git a/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs b/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs index 4fd5a6d01b..583f61a8a5 100644 --- a/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs +++ b/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs @@ -1,14 +1,18 @@ -use std::{path::Path, sync::{OnceLock, Arc}, collections::HashMap}; +use std::{ + collections::HashMap, + path::Path, + sync::{Arc, OnceLock}, +}; use super::{CircuitsHandler, Phase}; use crate::prover::CircuitConfig; use async_trait::async_trait; +use base64::{prelude::BASE64_STANDARD, Engine}; use eyre::Result; use scroll_proving_sdk::prover::{proving_service::ProveRequest, ProofType}; use scroll_zkvm_prover_euclid::{BatchProver, BundleProverEuclidV2, ChunkProver}; use scroll_zkvm_types::ProvingTask; use tokio::sync::Mutex; -use base64::{prelude::BASE64_STANDARD, Engine}; pub struct EuclidV2Handler { chunk_prover: ChunkProver, batch_prover: BatchProver, @@ -33,7 +37,7 @@ impl EuclidV2Handler { .expect("Failed to setup bundle prover"); let build_vk_cache = |proof_type: ProofType| { - let vk = if let Some(vk) = cfg.vks.get(&proof_type){ + let vk = if let Some(vk) = cfg.vks.get(&proof_type) { OnceLock::from(vk.clone()) } else { OnceLock::new() @@ -55,25 +59,18 @@ impl EuclidV2Handler { pub fn get_vk_and_cache(&self, task_type: ProofType) -> String { match task_type { - ProofType::Chunk => - self.cached_vks[&ProofType::Chunk].get_or_init(|| - BASE64_STANDARD.encode(self.chunk_prover.get_app_vk()) - ), - ProofType::Batch => - self.cached_vks[&ProofType::Batch].get_or_init(|| - BASE64_STANDARD.encode(self.batch_prover.get_app_vk()) - ), - ProofType::Bundle => - self.cached_vks[&ProofType::Bundle].get_or_init(|| - BASE64_STANDARD.encode(self.bundle_prover.get_evm_vk()) - ), + ProofType::Chunk => self.cached_vks[&ProofType::Chunk] + .get_or_init(|| BASE64_STANDARD.encode(self.chunk_prover.get_app_vk())), + ProofType::Batch => self.cached_vks[&ProofType::Batch] + .get_or_init(|| BASE64_STANDARD.encode(self.batch_prover.get_app_vk())), + ProofType::Bundle => self.cached_vks[&ProofType::Bundle] + .get_or_init(|| BASE64_STANDARD.encode(self.bundle_prover.get_evm_vk())), _ => unreachable!("Unsupported proof type {:?}", task_type), - }.clone() + } + .clone() } } - - #[async_trait] impl CircuitsHandler for Arc> { fn get_vk(&self, task_type: ProofType) -> String { @@ -81,12 +78,12 @@ impl CircuitsHandler for Arc> { } async fn get_proof_data(&self, prove_request: ProveRequest) -> Result { - let u_task: ProvingTask = serde_json::from_str(&prove_request.input)?; let handler_self = self.try_lock().unwrap(); let expected_vk = handler_self.get_vk_and_cache(prove_request.proof_type); if BASE64_STANDARD.encode(&u_task.vk) != expected_vk { - eyre::bail!("vk is not match!, prove type {:?}, expected {}, get {}", + eyre::bail!( + "vk is not match!, prove type {:?}, expected {}, get {}", prove_request.proof_type, expected_vk, BASE64_STANDARD.encode(&u_task.vk), @@ -94,13 +91,21 @@ impl CircuitsHandler for Arc> { } let proof = match prove_request.proof_type { - ProofType::Chunk => handler_self.chunk_prover + ProofType::Chunk => handler_self + .chunk_prover .gen_proof_universal(&u_task, false)?, - ProofType::Batch => handler_self.batch_prover + ProofType::Batch => handler_self + .batch_prover .gen_proof_universal(&u_task, false)?, - ProofType::Bundle => handler_self.bundle_prover + ProofType::Bundle => handler_self + .bundle_prover .gen_proof_universal(&u_task, true)?, - _ => return Err(eyre::eyre!("Unsupported proof type {:?}", prove_request.proof_type)), + _ => { + return Err(eyre::eyre!( + "Unsupported proof type {:?}", + prove_request.proof_type + )) + } }; //TODO: check expected PI Ok(serde_json::to_string(&proof)?) From 19b8090bc9bdc6a8bc41e24af6cf437afac60004 Mon Sep 17 00:00:00 2001 From: Ho Date: Wed, 25 Jun 2025 09:34:45 +0900 Subject: [PATCH 08/29] fix issue after rebase --- coordinator/internal/controller/api/controller.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coordinator/internal/controller/api/controller.go b/coordinator/internal/controller/api/controller.go index b1ea549743..2751d590ae 100644 --- a/coordinator/internal/controller/api/controller.go +++ b/coordinator/internal/controller/api/controller.go @@ -8,9 +8,9 @@ import ( "github.com/scroll-tech/go-ethereum/params" "gorm.io/gorm" - "scroll-tech/common/libzkp" "scroll-tech/coordinator/internal/config" "scroll-tech/coordinator/internal/logic/verifier" + "scroll-tech/coordinator/libzkp" ) var ( From 606884cc9555aa2b781a23e38c86da6e630b1a1e Mon Sep 17 00:00:00 2001 From: Ho Date: Wed, 25 Jun 2025 09:39:13 +0900 Subject: [PATCH 09/29] gitignore --- common/.gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/.gitignore b/common/.gitignore index db236fbd20..dbf0de98d5 100644 --- a/common/.gitignore +++ b/common/.gitignore @@ -1,4 +1,3 @@ /build/bin .idea -libzkp/impl/target -libzkp/interface/*.a \ No newline at end of file +libzkp \ No newline at end of file From 91f0386aea3475b6dd4662debaa5c0927648a9ed Mon Sep 17 00:00:00 2001 From: Ho Date: Thu, 26 Jun 2025 15:07:32 +0900 Subject: [PATCH 10/29] resolve vk issue, add verifer tool --- .gitignore | 1 + coordinator/cmd/tool/tool.go | 21 ++- coordinator/cmd/tool/verify.go | 127 ++++++++++++++++++ .../logic/submitproof/proof_receiver.go | 15 ++- coordinator/internal/logic/verifier/types.go | 3 + .../internal/logic/verifier/verifier.go | 30 ++++- 6 files changed, 191 insertions(+), 6 deletions(-) create mode 100644 coordinator/cmd/tool/verify.go diff --git a/.gitignore b/.gitignore index 7c1a5849e5..24762eae64 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ sftp-config.json *~ target +zkvm-prover/config.json \ No newline at end of file diff --git a/coordinator/cmd/tool/tool.go b/coordinator/cmd/tool/tool.go index a13f516dc6..3e90d8a96a 100644 --- a/coordinator/cmd/tool/tool.go +++ b/coordinator/cmd/tool/tool.go @@ -19,6 +19,7 @@ import ( ) var app *cli.App +var cfg *config.Config func init() { // Set up coordinator app info. @@ -29,7 +30,25 @@ func init() { app.Version = version.Version app.Flags = append(app.Flags, utils.CommonFlags...) app.Before = func(ctx *cli.Context) error { - return utils.LogSetup(ctx) + if err := utils.LogSetup(ctx); err != nil { + return err + } + + cfgFile := ctx.String(utils.ConfigFileFlag.Name) + var err error + cfg, err = config.NewConfig(cfgFile) + if err != nil { + log.Crit("failed to load config file", "config file", cfgFile, "error", err) + } + return nil + } + // sub commands + app.Commands = []*cli.Command{ + { + Name: "verify", + Usage: "verify an proof, specified by [forkname] ", + Action: verify, + }, } } diff --git a/coordinator/cmd/tool/verify.go b/coordinator/cmd/tool/verify.go new file mode 100644 index 0000000000..14ea9d3c46 --- /dev/null +++ b/coordinator/cmd/tool/verify.go @@ -0,0 +1,127 @@ +package main + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "fmt" + "os" + "strings" + + "scroll-tech/coordinator/internal/logic/verifier" + + "scroll-tech/common/types/message" + + "github.com/urfave/cli/v2" +) + +func verify(cCtx *cli.Context) error { + var forkName, proofType, proofPath string + if cCtx.Args().Len() <= 2 { + forkName = cfg.ProverManager.Verifier.HighVersionCircuit.ForkName + proofType = cCtx.Args().First() + proofPath = cCtx.Args().Get(1) + } else { + forkName = cCtx.Args().First() + proofType = cCtx.Args().Get(1) + proofPath = cCtx.Args().Get(2) + } + fmt.Println("verify proof in: ", proofPath, "type", proofType, "forkName", forkName) + + // Load the content of the proof file + data, err := os.ReadFile(proofPath) + if err != nil { + return fmt.Errorf("error reading file: %w", err) + } + + vf, err := verifier.NewVerifier(cfg.ProverManager.Verifier) + if err != nil { + return err + } + + var ret bool + switch strings.ToLower(proofType) { + case "chunk": + proof := &message.OpenVMChunkProof{} + if err := json.Unmarshal(data, proof); err != nil { + return err + } + vk, ok := vf.ChunkVk[forkName] + if !ok { + return fmt.Errorf("no vk loaded for fork %s", forkName) + } + if len(proof.Vk) != 0 { + if bytes.Compare(proof.Vk, vk) != 0 { + return fmt.Errorf("unmatch vk with expected: expected %s, get %s", + base64.StdEncoding.EncodeToString(vk), + base64.StdEncoding.EncodeToString(proof.Vk), + ) + } + } else { + proof.Vk = vk + } + + ret, err = vf.VerifyChunkProof(proof, forkName) + case "batch": + proof := &message.OpenVMBatchProof{} + if err := json.Unmarshal(data, proof); err != nil { + return err + } + vk, ok := vf.BatchVk[forkName] + if !ok { + return fmt.Errorf("no vk loaded for fork %s", forkName) + } + if len(proof.Vk) != 0 { + if bytes.Compare(proof.Vk, vk) != 0 { + return fmt.Errorf("unmatch vk with expected: expected %s, get %s", + base64.StdEncoding.EncodeToString(vk), + base64.StdEncoding.EncodeToString(proof.Vk), + ) + } + } else { + proof.Vk = vk + } + + ret, err = vf.VerifyBatchProof(proof, forkName) + case "bundle": + proof := &message.OpenVMBundleProof{} + if err := json.Unmarshal(data, proof); err != nil { + return err + } + vk, ok := vf.BundleVk[forkName] + if !ok { + return fmt.Errorf("no vk loaded for fork %s", forkName) + } + if len(proof.Vk) != 0 { + if bytes.Compare(proof.Vk, vk) != 0 { + return fmt.Errorf("unmatch vk with expected: expected %s, get %s", + base64.StdEncoding.EncodeToString(vk), + base64.StdEncoding.EncodeToString(proof.Vk), + ) + } + } else { + proof.Vk = vk + } + + if len(proof.Vk) != 0 { + if bytes.Compare(proof.Vk, vf.ChunkVk[forkName]) != 0 { + return fmt.Errorf("unmatch vk with expected: expected %s, get %s", + base64.StdEncoding.EncodeToString(vf.ChunkVk[forkName]), + base64.StdEncoding.EncodeToString(proof.Vk), + ) + } + } else { + proof.Vk = vf.ChunkVk[forkName] + } + + ret, err = vf.VerifyBundleProof(proof, forkName) + default: + return fmt.Errorf("unsupport proof type %s", proofType) + } + + if err != nil { + return err + } + fmt.Println("verified:", ret) + return nil +} diff --git a/coordinator/internal/logic/submitproof/proof_receiver.go b/coordinator/internal/logic/submitproof/proof_receiver.go index ae54a17e60..e35b7aa98a 100644 --- a/coordinator/internal/logic/submitproof/proof_receiver.go +++ b/coordinator/internal/logic/submitproof/proof_receiver.go @@ -178,7 +178,20 @@ func (m *ProofReceiverLogic) HandleZkProof(ctx *gin.Context, proofParameter coor if len(proverTask.Metadata) == 0 { return errors.New("can not re-wrapping proof: no metadata has been recorded in advance") } - proofParameter.Proof = libzkp.GenerateWrappedProof(proofParameter.Proof, string(proverTask.Metadata), []byte{}) + var expected_vk []byte + switch message.ProofType(proofParameter.TaskType) { + case message.ProofTypeChunk: + expected_vk = m.verifier.ChunkVk[hardForkName] + case message.ProofTypeBatch: + expected_vk = m.verifier.BatchVk[hardForkName] + case message.ProofTypeBundle: + expected_vk = m.verifier.BundleVk[hardForkName] + } + if len(expected_vk) == 0 { + return errors.New("no vk specified match current hard fork, check your config") + } + + proofParameter.Proof = libzkp.GenerateWrappedProof(proofParameter.Proof, string(proverTask.Metadata), expected_vk) if proofParameter.Proof == "" { return errors.New("can not re-wrapping proof, see coordinator log for reason") } diff --git a/coordinator/internal/logic/verifier/types.go b/coordinator/internal/logic/verifier/types.go index 686ef384aa..861a4aeefc 100644 --- a/coordinator/internal/logic/verifier/types.go +++ b/coordinator/internal/logic/verifier/types.go @@ -11,4 +11,7 @@ const InvalidTestProof = "this is a invalid proof" type Verifier struct { cfg *config.VerifierConfig OpenVMVkMap map[string]struct{} + ChunkVk map[string][]byte + BatchVk map[string][]byte + BundleVk map[string][]byte } diff --git a/coordinator/internal/logic/verifier/verifier.go b/coordinator/internal/logic/verifier/verifier.go index 9b0497f8c2..77c682d574 100644 --- a/coordinator/internal/logic/verifier/verifier.go +++ b/coordinator/internal/logic/verifier/verifier.go @@ -3,6 +3,7 @@ package verifier import ( + "encoding/base64" "encoding/json" "io" "os" @@ -64,9 +65,12 @@ func NewVerifier(cfg *config.VerifierConfig) (*Verifier, error) { v := &Verifier{ cfg: cfg, OpenVMVkMap: make(map[string]struct{}), + ChunkVk: make(map[string][]byte), + BatchVk: make(map[string][]byte), + BundleVk: make(map[string][]byte), } - if err := v.loadOpenVMVks(cfg.HighVersionCircuit.AssetsPath); err != nil { + if err := v.loadOpenVMVks(cfg.HighVersionCircuit); err != nil { return nil, err } @@ -120,8 +124,9 @@ func (v *Verifier) VerifyBundleProof(proof *message.OpenVMBundleProof, forkName // return base64.StdEncoding.EncodeToString(byt), nil // } -func (v *Verifier) loadOpenVMVks(assetsPath string) error { - vkFile := path.Join(assetsPath, "openVmVk.json") +func (v *Verifier) loadOpenVMVks(cfg *config.CircuitConfig) error { + + vkFile := path.Join(cfg.AssetsPath, "openVmVk.json") f, err := os.Open(filepath.Clean(vkFile)) if err != nil { @@ -139,6 +144,23 @@ func (v *Verifier) loadOpenVMVks(assetsPath string) error { v.OpenVMVkMap[dump.Chunk] = struct{}{} v.OpenVMVkMap[dump.Batch] = struct{}{} v.OpenVMVkMap[dump.Bundle] = struct{}{} - log.Info("Load vks", "from", assetsPath, "chunk", dump.Chunk, "batch", dump.Batch, "bundle", dump.Bundle) + log.Info("Load vks", "from", cfg.AssetsPath, "chunk", dump.Chunk, "batch", dump.Batch, "bundle", dump.Bundle) + + decodedBytes, err := base64.StdEncoding.DecodeString(dump.Chunk) + if err != nil { + return err + } + v.ChunkVk[cfg.ForkName] = decodedBytes + decodedBytes, err = base64.StdEncoding.DecodeString(dump.Batch) + if err != nil { + return err + } + v.BatchVk[cfg.ForkName] = decodedBytes + decodedBytes, err = base64.StdEncoding.DecodeString(dump.Bundle) + if err != nil { + return err + } + v.BundleVk[cfg.ForkName] = decodedBytes + return nil } From 5417c9c2492f711bada6003ad02893c31e2c4d86 Mon Sep 17 00:00:00 2001 From: Ho Date: Thu, 26 Jun 2025 15:08:07 +0900 Subject: [PATCH 11/29] trivial: resolve unsafe directive --- crates/libzkp/src/lib.rs | 5 ++-- crates/libzkp/src/verifier.rs | 50 ++++++++++++++++++++--------------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/crates/libzkp/src/lib.rs b/crates/libzkp/src/lib.rs index 7a7cd88814..17b3bbff2b 100644 --- a/crates/libzkp/src/lib.rs +++ b/crates/libzkp/src/lib.rs @@ -26,6 +26,7 @@ pub fn checkout_chunk_task( } /// Generate required staff for proving tasks +/// return (pi_hash, metadata, task) pub fn gen_universal_task( task_type: i32, task_json: &str, @@ -106,7 +107,7 @@ pub fn verifier_init(config: &str) -> eyre::Result<()> { pub fn verify_proof(proof: Vec, fork_name: &str, task_type: TaskType) -> eyre::Result { let verifier = verifier::get_verifier(fork_name)?; - let ret = verifier.verify(task_type, proof)?; + let ret = verifier.lock().unwrap().verify(task_type, proof)?; Ok(ret) } @@ -115,7 +116,7 @@ pub fn verify_proof(proof: Vec, fork_name: &str, task_type: TaskType) -> eyr pub fn dump_vk(fork_name: &str, file: &str) -> eyre::Result<()> { let verifier = verifier::get_verifier(fork_name)?; - verifier.dump_vk(Path::new(file)); + verifier.lock().unwrap().dump_vk(Path::new(file)); Ok(()) } diff --git a/crates/libzkp/src/verifier.rs b/crates/libzkp/src/verifier.rs index 83224e2381..54163bfd70 100644 --- a/crates/libzkp/src/verifier.rs +++ b/crates/libzkp/src/verifier.rs @@ -4,7 +4,7 @@ mod euclidv2; use euclidv2::EuclidV2Verifier; use eyre::Result; use serde::{Deserialize, Serialize}; -use std::{cell::OnceCell, path::Path, rc::Rc}; +use std::{sync::{OnceLock, Arc, Mutex}, path::Path}; #[derive(Debug, Clone, Copy, PartialEq)] pub enum TaskType { @@ -48,31 +48,39 @@ pub struct VerifierConfig { type HardForkName = String; -struct VerifierPair(HardForkName, Rc>); -static mut VERIFIER_HIGH: OnceCell = OnceCell::new(); +struct VerifierPair(HardForkName, Arc>); +static VERIFIER_HIGH: OnceLock = OnceLock::new(); pub fn init(config: VerifierConfig) { let verifier = EuclidV2Verifier::new(&config.high_version_circuit.assets_path); - unsafe { - VERIFIER_HIGH - .set(VerifierPair( - config.high_version_circuit.fork_name, - Rc::new(Box::new(verifier)), - )) - .unwrap_unchecked(); - } + + let ret = VERIFIER_HIGH + .set(VerifierPair( + config.high_version_circuit.fork_name.to_lowercase(), + Arc::new(Mutex::new(verifier)), + )) + .is_ok(); + + assert!(ret); + } -pub fn get_verifier(fork_name: &str) -> Result>> { - unsafe { - if let Some(verifier) = VERIFIER_HIGH.get() { - if verifier.0 == fork_name { - return Ok(verifier.1.clone()); - } +pub fn get_verifier(fork_name: &str) -> Result>> { + + if let Some(verifier) = VERIFIER_HIGH.get() { + if verifier.0 == fork_name { + return Ok(verifier.1.clone()); } + Err(eyre::eyre!( + "failed to get verifier, key not found: {}, expected {}", + fork_name, verifier.0, + )) + + } else { + Err(eyre::eyre!( + "failed to get verifier, not inited {}", + fork_name + )) } - Err(eyre::eyre!( - "failed to get verifier, key not found, {}", - fork_name - )) + } From c3e5baa833b515a2c4aef31907eb007abbf30d56 Mon Sep 17 00:00:00 2001 From: Ho Date: Thu, 26 Jun 2025 16:32:05 +0900 Subject: [PATCH 12/29] cleanup after rebase --- common/Makefile | 3 +-- coordinator/Makefile | 1 + coordinator/cmd/tool/tool.go | 5 ----- coordinator/cmd/tool/verify.go | 20 +++++-------------- .../internal/controller/api/controller.go | 2 +- .../internal/logic/verifier/verifier.go | 4 ++-- crates/libzkp/src/verifier.rs | 12 +++++------ 7 files changed, 16 insertions(+), 31 deletions(-) diff --git a/common/Makefile b/common/Makefile index 37360e42e9..19d7b84f3f 100644 --- a/common/Makefile +++ b/common/Makefile @@ -4,5 +4,4 @@ test: go test -v -race -coverprofile=coverage.txt -covermode=atomic -p 1 $(PWD)/... lint: ## Lint the files - used for CI - GOBIN=$(PWD)/build/bin go run ../build/lint.go - cd libzkp/impl && cargo fmt --all -- --check && cargo clippy --release -- -D warnings \ No newline at end of file + GOBIN=$(PWD)/build/bin go run ../build/lint.go \ No newline at end of file diff --git a/coordinator/Makefile b/coordinator/Makefile index a086b77374..af0a621e62 100644 --- a/coordinator/Makefile +++ b/coordinator/Makefile @@ -51,6 +51,7 @@ test-gpu-verifier: $(LIBZKP_PATH) lint: ## Lint the files - used for CI GOBIN=$(PWD)/build/bin go run ../build/lint.go + cd ../ && cargo fmt --all -- --check && cargo clippy --release -- -D warnings clean: ## Empty out the bin folder @rm -rf build/bin diff --git a/coordinator/cmd/tool/tool.go b/coordinator/cmd/tool/tool.go index 3e90d8a96a..25f51de417 100644 --- a/coordinator/cmd/tool/tool.go +++ b/coordinator/cmd/tool/tool.go @@ -53,11 +53,6 @@ func init() { } func action(ctx *cli.Context) error { - cfgFile := ctx.String(utils.ConfigFileFlag.Name) - cfg, err := config.NewConfig(cfgFile) - if err != nil { - log.Crit("failed to load config file", "config file", cfgFile, "error", err) - } db, err := database.InitDB(cfg.DB) if err != nil { log.Crit("failed to init db connection", "err", err) diff --git a/coordinator/cmd/tool/verify.go b/coordinator/cmd/tool/verify.go index 14ea9d3c46..b31000ba9c 100644 --- a/coordinator/cmd/tool/verify.go +++ b/coordinator/cmd/tool/verify.go @@ -6,6 +6,7 @@ import ( "encoding/json" "fmt" "os" + "path/filepath" "strings" "scroll-tech/coordinator/internal/logic/verifier" @@ -29,7 +30,7 @@ func verify(cCtx *cli.Context) error { fmt.Println("verify proof in: ", proofPath, "type", proofType, "forkName", forkName) // Load the content of the proof file - data, err := os.ReadFile(proofPath) + data, err := os.ReadFile(filepath.Clean(proofPath)) if err != nil { return fmt.Errorf("error reading file: %w", err) } @@ -51,7 +52,7 @@ func verify(cCtx *cli.Context) error { return fmt.Errorf("no vk loaded for fork %s", forkName) } if len(proof.Vk) != 0 { - if bytes.Compare(proof.Vk, vk) != 0 { + if bytes.Equal(proof.Vk, vk) { return fmt.Errorf("unmatch vk with expected: expected %s, get %s", base64.StdEncoding.EncodeToString(vk), base64.StdEncoding.EncodeToString(proof.Vk), @@ -72,7 +73,7 @@ func verify(cCtx *cli.Context) error { return fmt.Errorf("no vk loaded for fork %s", forkName) } if len(proof.Vk) != 0 { - if bytes.Compare(proof.Vk, vk) != 0 { + if bytes.Equal(proof.Vk, vk) { return fmt.Errorf("unmatch vk with expected: expected %s, get %s", base64.StdEncoding.EncodeToString(vk), base64.StdEncoding.EncodeToString(proof.Vk), @@ -93,7 +94,7 @@ func verify(cCtx *cli.Context) error { return fmt.Errorf("no vk loaded for fork %s", forkName) } if len(proof.Vk) != 0 { - if bytes.Compare(proof.Vk, vk) != 0 { + if bytes.Equal(proof.Vk, vk) { return fmt.Errorf("unmatch vk with expected: expected %s, get %s", base64.StdEncoding.EncodeToString(vk), base64.StdEncoding.EncodeToString(proof.Vk), @@ -103,17 +104,6 @@ func verify(cCtx *cli.Context) error { proof.Vk = vk } - if len(proof.Vk) != 0 { - if bytes.Compare(proof.Vk, vf.ChunkVk[forkName]) != 0 { - return fmt.Errorf("unmatch vk with expected: expected %s, get %s", - base64.StdEncoding.EncodeToString(vf.ChunkVk[forkName]), - base64.StdEncoding.EncodeToString(proof.Vk), - ) - } - } else { - proof.Vk = vf.ChunkVk[forkName] - } - ret, err = vf.VerifyBundleProof(proof, forkName) default: return fmt.Errorf("unsupport proof type %s", proofType) diff --git a/coordinator/internal/controller/api/controller.go b/coordinator/internal/controller/api/controller.go index 2751d590ae..974a99c718 100644 --- a/coordinator/internal/controller/api/controller.go +++ b/coordinator/internal/controller/api/controller.go @@ -9,8 +9,8 @@ import ( "gorm.io/gorm" "scroll-tech/coordinator/internal/config" + "scroll-tech/coordinator/internal/logic/libzkp" "scroll-tech/coordinator/internal/logic/verifier" - "scroll-tech/coordinator/libzkp" ) var ( diff --git a/coordinator/internal/logic/verifier/verifier.go b/coordinator/internal/logic/verifier/verifier.go index 77c682d574..4aa407c9ed 100644 --- a/coordinator/internal/logic/verifier/verifier.go +++ b/coordinator/internal/logic/verifier/verifier.go @@ -18,7 +18,7 @@ import ( "scroll-tech/coordinator/internal/logic/libzkp" ) -// This struct maps to `CircuitConfig` in libzkp/impl/src/verifier.rs +// This struct maps to `CircuitConfig` in libzkp/src/verifier.rs // Define a brand new struct here is to eliminate side effects in case fields // in `*config.CircuitConfig` being changed type rustCircuitConfig struct { @@ -33,7 +33,7 @@ func newRustCircuitConfig(cfg *config.CircuitConfig) *rustCircuitConfig { } } -// This struct maps to `VerifierConfig` in coordinator/internal/logic/libzkp/impl/src/verifier.rs +// This struct maps to `VerifierConfig` in coordinator/internal/logic/libzkp/src/verifier.rs // Define a brand new struct here is to eliminate side effects in case fields // in `*config.VerifierConfig` being changed type rustVerifierConfig struct { diff --git a/crates/libzkp/src/verifier.rs b/crates/libzkp/src/verifier.rs index 54163bfd70..4abd348ebe 100644 --- a/crates/libzkp/src/verifier.rs +++ b/crates/libzkp/src/verifier.rs @@ -4,7 +4,10 @@ mod euclidv2; use euclidv2::EuclidV2Verifier; use eyre::Result; use serde::{Deserialize, Serialize}; -use std::{sync::{OnceLock, Arc, Mutex}, path::Path}; +use std::{ + path::Path, + sync::{Arc, Mutex, OnceLock}, +}; #[derive(Debug, Clone, Copy, PartialEq)] pub enum TaskType { @@ -62,25 +65,22 @@ pub fn init(config: VerifierConfig) { .is_ok(); assert!(ret); - } pub fn get_verifier(fork_name: &str) -> Result>> { - if let Some(verifier) = VERIFIER_HIGH.get() { if verifier.0 == fork_name { return Ok(verifier.1.clone()); } Err(eyre::eyre!( "failed to get verifier, key not found: {}, expected {}", - fork_name, verifier.0, + fork_name, + verifier.0, )) - } else { Err(eyre::eyre!( "failed to get verifier, not inited {}", fork_name )) } - } From 8f53bfd73bb779fb293e13c620146a28d1c46c95 Mon Sep 17 00:00:00 2001 From: Ho Date: Thu, 26 Jun 2025 22:14:47 +0900 Subject: [PATCH 13/29] update dev and task code --- Cargo.lock | 169 +++++++++++++++++++++++++----- Cargo.toml | 6 +- crates/libzkp/src/tasks.rs | 15 +-- crates/libzkp/src/tasks/batch.rs | 107 ++++++------------- crates/libzkp/src/tasks/bundle.rs | 86 +++++++-------- crates/libzkp/src/tasks/chunk.rs | 43 +++++--- 6 files changed, 248 insertions(+), 178 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 96dfe7e1e0..1eb80ab32b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3993,16 +3993,39 @@ dependencies = [ "strum 0.26.3", ] +[[package]] +name = "openvm-algebra-complex-macros" +version = "0.1.0" +source = "git+https://github.com/openvm-org/openvm.git?rev=a0ae88f#a0ae88f2c4d98b651c653a1e9b7598d3ad15455e" +dependencies = [ + "openvm-macros-common 1.1.1", + "quote", + "syn 2.0.101", +] + [[package]] name = "openvm-algebra-complex-macros" version = "0.1.0" source = "git+https://github.com/openvm-org/openvm.git?rev=bdb4831#bdb4831fefed13b0741d3a052d434a9c995c6d5d" dependencies = [ - "openvm-macros-common", + "openvm-macros-common 1.2.0", "quote", "syn 2.0.101", ] +[[package]] +name = "openvm-algebra-guest" +version = "1.1.1" +source = "git+https://github.com/openvm-org/openvm.git?rev=a0ae88f#a0ae88f2c4d98b651c653a1e9b7598d3ad15455e" +dependencies = [ + "halo2curves-axiom", + "num-bigint 0.4.6", + "openvm-algebra-complex-macros 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=a0ae88f)", + "openvm-algebra-moduli-macros 1.1.1", + "serde-big-array", + "strum_macros 0.26.4", +] + [[package]] name = "openvm-algebra-guest" version = "1.2.0" @@ -4010,18 +4033,28 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=bdb4831#bdb4831fefed1 dependencies = [ "halo2curves-axiom", "num-bigint 0.4.6", - "openvm-algebra-complex-macros", - "openvm-algebra-moduli-macros", + "openvm-algebra-complex-macros 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=bdb4831)", + "openvm-algebra-moduli-macros 1.2.0", "serde-big-array", "strum_macros 0.26.4", ] +[[package]] +name = "openvm-algebra-moduli-macros" +version = "1.1.1" +source = "git+https://github.com/openvm-org/openvm.git?rev=a0ae88f#a0ae88f2c4d98b651c653a1e9b7598d3ad15455e" +dependencies = [ + "openvm-macros-common 1.1.1", + "quote", + "syn 2.0.101", +] + [[package]] name = "openvm-algebra-moduli-macros" version = "1.2.0" source = "git+https://github.com/openvm-org/openvm.git?rev=bdb4831#bdb4831fefed13b0741d3a052d434a9c995c6d5d" dependencies = [ - "openvm-macros-common", + "openvm-macros-common 1.2.0", "quote", "syn 2.0.101", ] @@ -4031,7 +4064,7 @@ name = "openvm-algebra-transpiler" version = "1.2.0" source = "git+https://github.com/openvm-org/openvm.git?rev=bdb4831#bdb4831fefed13b0741d3a052d434a9c995c6d5d" dependencies = [ - "openvm-algebra-guest", + "openvm-algebra-guest 1.2.0", "openvm-instructions", "openvm-instructions-derive", "openvm-stark-backend", @@ -4217,12 +4250,12 @@ dependencies = [ "num-traits", "once_cell", "openvm-algebra-circuit", - "openvm-algebra-guest", + "openvm-algebra-guest 1.2.0", "openvm-circuit", "openvm-circuit-derive", "openvm-circuit-primitives", "openvm-circuit-primitives-derive", - "openvm-ecc-guest", + "openvm-ecc-guest 1.2.0", "openvm-ecc-transpiler", "openvm-instructions", "openvm-mod-circuit-builder", @@ -4235,6 +4268,29 @@ dependencies = [ "strum 0.26.3", ] +[[package]] +name = "openvm-ecc-guest" +version = "1.1.1" +source = "git+https://github.com/openvm-org/openvm.git?rev=a0ae88f#a0ae88f2c4d98b651c653a1e9b7598d3ad15455e" +dependencies = [ + "ecdsa", + "elliptic-curve", + "group 0.13.0", + "halo2curves-axiom", + "hex-literal", + "lazy_static", + "num-bigint 0.4.6", + "once_cell", + "openvm 1.1.1", + "openvm-algebra-guest 1.1.1", + "openvm-algebra-moduli-macros 1.1.1", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=a0ae88f)", + "openvm-ecc-sw-macros 1.1.1", + "openvm-rv32im-guest 1.1.1", + "serde", + "strum_macros 0.26.4", +] + [[package]] name = "openvm-ecc-guest" version = "1.2.0" @@ -4250,22 +4306,32 @@ dependencies = [ "num-bigint 0.4.6", "once_cell", "openvm 1.2.0", - "openvm-algebra-guest", - "openvm-algebra-moduli-macros", + "openvm-algebra-guest 1.2.0", + "openvm-algebra-moduli-macros 1.2.0", "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=bdb4831)", - "openvm-ecc-sw-macros", + "openvm-ecc-sw-macros 1.2.0", "openvm-rv32im-guest 1.2.0", "p256", "serde", "strum_macros 0.26.4", ] +[[package]] +name = "openvm-ecc-sw-macros" +version = "1.1.1" +source = "git+https://github.com/openvm-org/openvm.git?rev=a0ae88f#a0ae88f2c4d98b651c653a1e9b7598d3ad15455e" +dependencies = [ + "openvm-macros-common 1.1.1", + "quote", + "syn 2.0.101", +] + [[package]] name = "openvm-ecc-sw-macros" version = "1.2.0" source = "git+https://github.com/openvm-org/openvm.git?rev=bdb4831#bdb4831fefed13b0741d3a052d434a9c995c6d5d" dependencies = [ - "openvm-macros-common", + "openvm-macros-common 1.2.0", "quote", "syn 2.0.101", ] @@ -4275,7 +4341,7 @@ name = "openvm-ecc-transpiler" version = "1.2.0" source = "git+https://github.com/openvm-org/openvm.git?rev=bdb4831#bdb4831fefed13b0741d3a052d434a9c995c6d5d" dependencies = [ - "openvm-ecc-guest", + "openvm-ecc-guest 1.2.0", "openvm-instructions", "openvm-instructions-derive", "openvm-stark-backend", @@ -4359,6 +4425,14 @@ dependencies = [ "strum 0.26.3", ] +[[package]] +name = "openvm-macros-common" +version = "1.1.1" +source = "git+https://github.com/openvm-org/openvm.git?rev=a0ae88f#a0ae88f2c4d98b651c653a1e9b7598d3ad15455e" +dependencies = [ + "syn 2.0.101", +] + [[package]] name = "openvm-macros-common" version = "1.2.0" @@ -4491,10 +4565,10 @@ dependencies = [ "openvm-circuit-primitives", "openvm-circuit-primitives-derive", "openvm-ecc-circuit", - "openvm-ecc-guest", + "openvm-ecc-guest 1.2.0", "openvm-instructions", "openvm-mod-circuit-builder", - "openvm-pairing-guest", + "openvm-pairing-guest 1.2.0", "openvm-pairing-transpiler", "openvm-rv32-adapters", "openvm-rv32im-circuit", @@ -4504,6 +4578,32 @@ dependencies = [ "strum 0.26.3", ] +[[package]] +name = "openvm-pairing-guest" +version = "1.1.1" +source = "git+https://github.com/openvm-org/openvm.git?rev=a0ae88f#a0ae88f2c4d98b651c653a1e9b7598d3ad15455e" +dependencies = [ + "group 0.13.0", + "halo2curves-axiom", + "hex-literal", + "itertools 0.14.0", + "lazy_static", + "num-bigint 0.4.6", + "num-traits", + "openvm 1.1.1", + "openvm-algebra-complex-macros 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=a0ae88f)", + "openvm-algebra-guest 1.1.1", + "openvm-algebra-moduli-macros 1.1.1", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=a0ae88f)", + "openvm-ecc-guest 1.1.1", + "openvm-ecc-sw-macros 1.1.1", + "openvm-platform 1.1.1", + "openvm-rv32im-guest 1.1.1", + "rand 0.8.5", + "serde", + "strum_macros 0.26.4", +] + [[package]] name = "openvm-pairing-guest" version = "1.2.0" @@ -4517,12 +4617,12 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "openvm 1.2.0", - "openvm-algebra-complex-macros", - "openvm-algebra-guest", - "openvm-algebra-moduli-macros", + "openvm-algebra-complex-macros 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=bdb4831)", + "openvm-algebra-guest 1.2.0", + "openvm-algebra-moduli-macros 1.2.0", "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=bdb4831)", - "openvm-ecc-guest", - "openvm-ecc-sw-macros", + "openvm-ecc-guest 1.2.0", + "openvm-ecc-sw-macros 1.2.0", "openvm-platform 1.2.0", "openvm-rv32im-guest 1.2.0", "rand 0.8.5", @@ -4537,7 +4637,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=bdb4831#bdb4831fefed1 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-pairing-guest", + "openvm-pairing-guest 1.2.0", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4745,6 +4845,15 @@ dependencies = [ "strum 0.26.3", ] +[[package]] +name = "openvm-sha256-guest" +version = "1.1.1" +source = "git+https://github.com/openvm-org/openvm.git?rev=a0ae88f#a0ae88f2c4d98b651c653a1e9b7598d3ad15455e" +dependencies = [ + "openvm-platform 1.1.1", + "sha2", +] + [[package]] name = "openvm-sha256-guest" version = "1.2.0" @@ -4761,7 +4870,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=bdb4831#bdb4831fefed1 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-sha256-guest", + "openvm-sha256-guest 1.2.0", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -7351,7 +7460,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-prover" version = "0.4.0" -source = "git+https://github.com/scroll-tech/zkvm-prover?rev=29c99de#29c99def6f496bf70a590823cda4b74f67625bc2" +source = "git+https://github.com/scroll-tech/zkvm-prover?rev=6078604#607860401682165d5822fba7223ca3419db36b22" dependencies = [ "alloy-primitives", "base64 0.22.1", @@ -7387,7 +7496,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-types" version = "0.4.0" -source = "git+https://github.com/scroll-tech/zkvm-prover?rev=29c99de#29c99def6f496bf70a590823cda4b74f67625bc2" +source = "git+https://github.com/scroll-tech/zkvm-prover?rev=6078604#607860401682165d5822fba7223ca3419db36b22" dependencies = [ "base64 0.22.1", "bincode", @@ -7407,7 +7516,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-types-base" version = "0.4.0" -source = "git+https://github.com/scroll-tech/zkvm-prover?rev=29c99de#29c99def6f496bf70a590823cda4b74f67625bc2" +source = "git+https://github.com/scroll-tech/zkvm-prover?rev=6078604#607860401682165d5822fba7223ca3419db36b22" dependencies = [ "alloy-primitives", "alloy-serde 0.8.3", @@ -7422,10 +7531,14 @@ dependencies = [ [[package]] name = "scroll-zkvm-types-batch" version = "0.4.0" -source = "git+https://github.com/scroll-tech/zkvm-prover?rev=29c99de#29c99def6f496bf70a590823cda4b74f67625bc2" +source = "git+https://github.com/scroll-tech/zkvm-prover?rev=6078604#607860401682165d5822fba7223ca3419db36b22" dependencies = [ "alloy-primitives", "itertools 0.14.0", + "openvm 1.1.1", + "openvm-ecc-guest 1.1.1", + "openvm-pairing-guest 1.1.1", + "openvm-sha256-guest 1.1.1", "rkyv", "scroll-zkvm-types-base", "serde", @@ -7435,7 +7548,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-types-bundle" version = "0.4.0" -source = "git+https://github.com/scroll-tech/zkvm-prover?rev=29c99de#29c99def6f496bf70a590823cda4b74f67625bc2" +source = "git+https://github.com/scroll-tech/zkvm-prover?rev=6078604#607860401682165d5822fba7223ca3419db36b22" dependencies = [ "alloy-primitives", "itertools 0.14.0", @@ -7448,7 +7561,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-types-chunk" version = "0.4.0" -source = "git+https://github.com/scroll-tech/zkvm-prover?rev=29c99de#29c99def6f496bf70a590823cda4b74f67625bc2" +source = "git+https://github.com/scroll-tech/zkvm-prover?rev=6078604#607860401682165d5822fba7223ca3419db36b22" dependencies = [ "alloy-primitives", "itertools 0.14.0", @@ -7467,7 +7580,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-verifier" version = "0.4.0" -source = "git+https://github.com/scroll-tech/zkvm-prover?rev=29c99de#29c99def6f496bf70a590823cda4b74f67625bc2" +source = "git+https://github.com/scroll-tech/zkvm-prover?rev=6078604#607860401682165d5822fba7223ca3419db36b22" dependencies = [ "bincode", "eyre", diff --git a/Cargo.toml b/Cargo.toml index d7d4d05835..12f16560c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,9 +17,9 @@ repository = "https://github.com/scroll-tech/scroll" version = "4.5.8" [workspace.dependencies] -scroll-zkvm-prover-euclid = { git = "https://github.com/scroll-tech/zkvm-prover", rev = "29c99de", package = "scroll-zkvm-prover" } -scroll-zkvm-verifier-euclid = { git = "https://github.com/scroll-tech/zkvm-prover", rev = "29c99de", package = "scroll-zkvm-verifier" } -scroll-zkvm-types = { git = "https://github.com/scroll-tech/zkvm-prover", rev = "29c99de" } +scroll-zkvm-prover-euclid = { git = "https://github.com/scroll-tech/zkvm-prover", rev = "6078604", package = "scroll-zkvm-prover" } +scroll-zkvm-verifier-euclid = { git = "https://github.com/scroll-tech/zkvm-prover", rev = "6078604", package = "scroll-zkvm-verifier" } +scroll-zkvm-types = { git = "https://github.com/scroll-tech/zkvm-prover", rev = "6078604" } sbv-primitives = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "zkvm/euclid-upgrade", features = ["scroll"] } sbv-utils = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "zkvm/euclid-upgrade" } diff --git a/crates/libzkp/src/tasks.rs b/crates/libzkp/src/tasks.rs index 6d5f08addd..6054e21e3c 100644 --- a/crates/libzkp/src/tasks.rs +++ b/crates/libzkp/src/tasks.rs @@ -10,12 +10,8 @@ pub use chunk_interpreter::ChunkInterpreter; pub use scroll_zkvm_types::task::ProvingTask; use crate::proofs::{BatchProofMetadata, BundleProofMetadata, ChunkProofMetadata}; -use chunk_interpreter::{DummyInterpreter, TryFromWithInterpreter}; use sbv_primitives::B256; -use scroll_zkvm_types::{ - chunk::ChunkInfo, - public_inputs::{ForkName, MultiVersionPublicInputs}, -}; +use scroll_zkvm_types::public_inputs::{ForkName, MultiVersionPublicInputs}; /// Generate required staff for chunk proving pub fn gen_universal_chunk_task( @@ -23,11 +19,10 @@ pub fn gen_universal_chunk_task( fork_name: ForkName, interpreter: Option, ) -> eyre::Result<(B256, ChunkProofMetadata, ProvingTask)> { - let chunk_info = if let Some(interpreter) = interpreter { - ChunkInfo::try_from_with_interpret(&mut task, interpreter) - } else { - ChunkInfo::try_from_with_interpret(&mut task, DummyInterpreter {}) - }?; + if let Some(interpreter) = interpreter { + task.prepare_task_via_interpret(interpreter)?; + } + let chunk_info = task.precheck_and_build_metadata()?; let proving_task = task.try_into()?; let expected_pi_hash = chunk_info.pi_hash_by_fork(fork_name); Ok(( diff --git a/crates/libzkp/src/tasks/batch.rs b/crates/libzkp/src/tasks/batch.rs index c685a70d66..59c9c5d2a5 100644 --- a/crates/libzkp/src/tasks/batch.rs +++ b/crates/libzkp/src/tasks/batch.rs @@ -5,7 +5,7 @@ use sbv_primitives::{B256, U256}; use scroll_zkvm_types::{ batch::{ BatchHeader, BatchHeaderV6, BatchHeaderV7, BatchInfo, BatchWitness, EnvelopeV6, EnvelopeV7, - PointEvalWitness, ReferenceHeader, N_BLOB_BYTES, + PointEvalWitness, ReferenceHeader, ToArchievedWitness, N_BLOB_BYTES, }, public_inputs::ForkName, task::ProvingTask, @@ -104,7 +104,7 @@ impl BatchProvingTask { fn build_guest_input(&self) -> BatchWitness { let fork_name = self.fork_name.to_lowercase().as_str().into(); - // calculate point eval needed and compare with task input + // sanity check: calculate point eval needed and compare with task input let (kzg_commitment, kzg_proof, challenge_digest) = { let blob = point_eval::to_blob(&self.blob_bytes); let commitment = point_eval::blob_to_kzg_commitment(&blob); @@ -174,80 +174,39 @@ impl BatchProvingTask { } pub fn precheck_and_build_metadata(&self) -> Result { + use scroll_zkvm_types::public_inputs::MultiVersionPublicInputs; + use std::panic::{self, AssertUnwindSafe}; + let fork_name = ForkName::from(self.fork_name.as_str()); - let (parent_state_root, state_root, chain_id, withdraw_root) = ( - self.chunk_proofs - .first() - .expect("at least one chunk in batch") - .metadata - .chunk_info - .prev_state_root, - self.chunk_proofs - .last() - .expect("at least one chunk in batch") - .metadata - .chunk_info - .post_state_root, - self.chunk_proofs - .last() - .expect("at least one chunk in batch") - .metadata - .chunk_info - .chain_id, - self.chunk_proofs - .last() - .expect("at least one chunk in batch") - .metadata - .chunk_info - .withdraw_root, - ); - let (parent_batch_hash, prev_msg_queue_hash, post_msg_queue_hash) = match self.batch_header - { - BatchHeaderV::V6(h) => { - assert_eq!( - fork_name, - ForkName::EuclidV1, - "hardfork mismatch for da-codec@v6 header: found={fork_name:?}, expected={:?}", - ForkName::EuclidV1, - ); - (h.parent_batch_hash, Default::default(), Default::default()) - } - BatchHeaderV::V7(h) => { - assert_eq!( - fork_name, - ForkName::EuclidV2, - "hardfork mismatch for da-codec@v7 header: found={fork_name:?}, expected={:?}", - ForkName::EuclidV2, - ); - ( - h.parent_batch_hash, - self.chunk_proofs - .first() - .expect("at least one chunk in batch") - .metadata - .chunk_info - .prev_msg_queue_hash, - self.chunk_proofs - .last() - .expect("at least one chunk in batch") - .metadata - .chunk_info - .post_msg_queue_hash, - ) + // for every aggregation task, there are two steps needed to build the metadata: + // 1. generate data for metadata from the witness + // 2. validate every adjacent proof pair + let witness = self.build_guest_input(); + let archieved = ToArchievedWitness::create(&witness) + .map_err(|e| eyre::eyre!("archieve batch witness fail: {e}"))?; + let archieved_witness = archieved + .access() + .map_err(|e| eyre::eyre!("access archieved batch witness fail: {e}"))?; + let metadata: BatchInfo = archieved_witness.into(); + + panic::catch_unwind(AssertUnwindSafe(|| { + for w in self.chunk_proofs.windows(2) { + w[1].metadata + .chunk_info + .validate(&w[0].metadata.chunk_info, fork_name); } - }; + })) + .map_err(|e| { + let error_msg = if let Some(string) = e.downcast_ref::() { + string.clone() + } else if let Some(str) = e.downcast_ref::<&str>() { + str.to_string() + } else { + "Unknown validation error occurred".to_string() + }; + eyre::eyre!("Chunk data validation failed: {}", error_msg) + })?; - let batch_hash = self.batch_header.batch_hash(); - - Ok(BatchInfo { - parent_state_root, - parent_batch_hash, - state_root, - batch_hash, - chain_id, - withdraw_root, - prev_msg_queue_hash, - post_msg_queue_hash, - }) + Ok(metadata) } } diff --git a/crates/libzkp/src/tasks/bundle.rs b/crates/libzkp/src/tasks/bundle.rs index c4d32dcc23..bd86f155a0 100644 --- a/crates/libzkp/src/tasks/bundle.rs +++ b/crates/libzkp/src/tasks/bundle.rs @@ -1,7 +1,8 @@ use crate::proofs::BatchProof; use eyre::Result; use scroll_zkvm_types::{ - bundle::{BundleInfo, BundleWitness}, + bundle::{BundleInfo, BundleWitness, ToArchievedWitness}, + public_inputs::ForkName, task::ProvingTask, utils::{to_rkyv_bytes, RancorError}, }; @@ -50,57 +51,40 @@ impl BundleProvingTask { } pub fn precheck_and_build_metadata(&self) -> Result { - use eyre::eyre; - let err_prefix = format!("metadata_with_prechecks for task_id={}", self.identifier()); - - for w in self.batch_proofs.windows(2) { - if w[1].metadata.batch_info.chain_id != w[0].metadata.batch_info.chain_id { - return Err(eyre!("{err_prefix}: chain_id mismatch")); - } - - if w[1].metadata.batch_info.parent_state_root != w[0].metadata.batch_info.state_root { - return Err(eyre!("{err_prefix}: state_root not chained")); - } - - if w[1].metadata.batch_info.parent_batch_hash != w[0].metadata.batch_info.batch_hash { - return Err(eyre!("{err_prefix}: batch_hash not chained")); + use scroll_zkvm_types::public_inputs::MultiVersionPublicInputs; + use std::panic::{self, AssertUnwindSafe}; + + let fork_name = ForkName::from(self.fork_name.as_str()); + // for every aggregation task, there are two steps needed to build the metadata: + // 1. generate data for metadata from the witness + // 2. validate every adjacent proof pair + let witness = self.build_guest_input(); + let archieved = ToArchievedWitness::create(&witness) + .map_err(|e| eyre::eyre!("archieve bundle witness fail: {e}"))?; + let archieved_witness = archieved + .access() + .map_err(|e| eyre::eyre!("access archieved bundle witness fail: {e}"))?; + let metadata: BundleInfo = archieved_witness.into(); + + panic::catch_unwind(AssertUnwindSafe(|| { + for w in self.batch_proofs.windows(2) { + w[1].metadata + .batch_info + .validate(&w[0].metadata.batch_info, fork_name); } - } - - let (first_batch, last_batch) = ( - &self - .batch_proofs - .first() - .expect("at least one batch in bundle") - .metadata - .batch_info, - &self - .batch_proofs - .last() - .expect("at least one batch in bundle") - .metadata - .batch_info, - ); - - let chain_id = first_batch.chain_id; - let num_batches = u32::try_from(self.batch_proofs.len()).expect("num_batches: u32"); - let prev_state_root = first_batch.parent_state_root; - let prev_batch_hash = first_batch.parent_batch_hash; - let post_state_root = last_batch.state_root; - let batch_hash = last_batch.batch_hash; - let withdraw_root = last_batch.withdraw_root; - let msg_queue_hash = last_batch.post_msg_queue_hash; - - Ok(BundleInfo { - chain_id, - msg_queue_hash, - num_batches, - prev_state_root, - prev_batch_hash, - post_state_root, - batch_hash, - withdraw_root, - }) + })) + .map_err(|e| { + let error_msg = if let Some(string) = e.downcast_ref::() { + string.clone() + } else if let Some(str) = e.downcast_ref::<&str>() { + str.to_string() + } else { + "Unknown validation error occurred".to_string() + }; + eyre::eyre!("Batch data validation failed: {}", error_msg) + })?; + + Ok(metadata) } } diff --git a/crates/libzkp/src/tasks/chunk.rs b/crates/libzkp/src/tasks/chunk.rs index 0fef0c66bc..348f849450 100644 --- a/crates/libzkp/src/tasks/chunk.rs +++ b/crates/libzkp/src/tasks/chunk.rs @@ -2,7 +2,7 @@ use super::chunk_interpreter::*; use eyre::Result; use sbv_primitives::{types::BlockWitness, B256}; use scroll_zkvm_types::{ - chunk::{execute, ChunkInfo, ChunkWitness}, + chunk::{execute, ChunkInfo, ChunkWitness, ToArchievedWitness}, task::ProvingTask, utils::{to_rkyv_bytes, RancorError}, }; @@ -129,23 +129,33 @@ impl ChunkProvingTask { fn insert_state(&mut self, node: sbv_primitives::Bytes) { self.block_witnesses[0].states.push(node); } -} -const MAX_FETCH_NODES_ATTEMPTS: usize = 15; + pub fn precheck_and_build_metadata(&self) -> Result { + let witness = self.build_guest_input(); + let archieved = ToArchievedWitness::create(&witness) + .map_err(|e| eyre::eyre!("archieve chunk witness fail: {e}"))?; + let archieved_witness = archieved + .access() + .map_err(|e| eyre::eyre!("access archieved chunk witness fail: {e}"))?; -impl TryFromWithInterpreter<&mut ChunkProvingTask> for ChunkInfo { - fn try_from_with_interpret( - value: &mut ChunkProvingTask, + let ret = ChunkInfo::try_from(archieved_witness).map_err(|e| eyre::eyre!("{e}"))?; + Ok(ret) + } + + /// this method check the validate of current task (there may be missing storage node) + /// and try fixing it until everything is ok + pub fn prepare_task_via_interpret( + &mut self, interpreter: impl ChunkInterpreter, - ) -> eyre::Result { + ) -> eyre::Result<()> { use eyre::eyre; let err_prefix = format!( "metadata_with_prechecks for task_id={:?}", - value.identifier() + self.identifier() ); - if value.block_witnesses.is_empty() { + if self.block_witnesses.is_empty() { return Err(eyre!( "{err_prefix}: chunk should contain at least one block", )); @@ -156,8 +166,15 @@ impl TryFromWithInterpreter<&mut ChunkProvingTask> for ChunkInfo { let err_parse_re = regex::Regex::new(pattern)?; let mut attempts = 0; loop { - match execute(&value.build_guest_input()) { - Ok(chunk_info) => return Ok(chunk_info), + let witness = self.build_guest_input(); + let archieved = ToArchievedWitness::create(&witness) + .map_err(|e| eyre::eyre!("archieve chunk witness fail: {e}"))?; + let archieved_witness = archieved + .access() + .map_err(|e| eyre::eyre!("access archieved chunk witness fail: {e}"))?; + + match execute(archieved_witness) { + Ok(_) => return Ok(()), Err(e) => { if let Some(caps) = err_parse_re.captures(&e) { let hash = caps[2].to_string(); @@ -174,7 +191,7 @@ impl TryFromWithInterpreter<&mut ChunkProvingTask> for ChunkInfo { hash.parse::().expect("should be hex"); let node = interpreter.try_fetch_storage_node(node_hash)?; tracing::warn!("missing node fetched: {node}"); - value.insert_state(node); + self.insert_state(node); } else { return Err(eyre!("{err_prefix}: {e}")); } @@ -183,3 +200,5 @@ impl TryFromWithInterpreter<&mut ChunkProvingTask> for ChunkInfo { } } } + +const MAX_FETCH_NODES_ATTEMPTS: usize = 15; From 6c76a9bf41f314801a5ac5c79eefbff9e828f41b Mon Sep 17 00:00:00 2001 From: Ho Date: Thu, 26 Jun 2025 22:16:11 +0900 Subject: [PATCH 14/29] purge localdbg --- database/.gitignore | 1 + database/localdbg/.env | 3 - database/localdbg/docker-compose.yml | 22 -- database/localdbg/dump_block_records.sql | 29 -- database/localdbg/dump_chunk_records.sql | 39 --- database/localdbg/import_blocks.sql | 400 ----------------------- database/localdbg/import_chunk.sql | 8 - database/localdbg/import_more_chunks.sql | 72 ---- 8 files changed, 1 insertion(+), 573 deletions(-) delete mode 100644 database/localdbg/.env delete mode 100644 database/localdbg/docker-compose.yml delete mode 100644 database/localdbg/dump_block_records.sql delete mode 100644 database/localdbg/dump_chunk_records.sql delete mode 100644 database/localdbg/import_blocks.sql delete mode 100644 database/localdbg/import_chunk.sql delete mode 100644 database/localdbg/import_more_chunks.sql diff --git a/database/.gitignore b/database/.gitignore index 0460e1887b..a627f08c84 100644 --- a/database/.gitignore +++ b/database/.gitignore @@ -1,2 +1,3 @@ /build/bin .idea +localdbg \ No newline at end of file diff --git a/database/localdbg/.env b/database/localdbg/.env deleted file mode 100644 index a5d24147bc..0000000000 --- a/database/localdbg/.env +++ /dev/null @@ -1,3 +0,0 @@ -GOOSE_DRIVER=postgres -GOOSE_DBSTRING=postgresql://dev:dev@localhost:5432/scroll?sslmode=disable -GOOSE_MIGRATION_DIR=./../migrate/migrations diff --git a/database/localdbg/docker-compose.yml b/database/localdbg/docker-compose.yml deleted file mode 100644 index 7861a48281..0000000000 --- a/database/localdbg/docker-compose.yml +++ /dev/null @@ -1,22 +0,0 @@ -# docker-compose.yml -# This configuration is for local debugging only. -# - PostgreSQL is bound to localhost (127.0.0.1) and not exposed externally. -# - Data is persisted to ./db relative to current directory. -# - No production security settings are applied. -# The access url is postgresql://dev:dev@localhost:5432/devdb - -version: '3.8' - -services: - postgres: - image: postgres - container_name: local_postgres - environment: - POSTGRES_USER: dev - POSTGRES_PASSWORD: dev - POSTGRES_DB: scroll - ports: - - "127.0.0.1:5432:5432" # Listen only on localhost -# volumes: -# - ./db:/var/lib/postgresql/data # Persist data to local ./db - restart: unless-stopped \ No newline at end of file diff --git a/database/localdbg/dump_block_records.sql b/database/localdbg/dump_block_records.sql deleted file mode 100644 index d06d67c92e..0000000000 --- a/database/localdbg/dump_block_records.sql +++ /dev/null @@ -1,29 +0,0 @@ --- Create a file with INSERT statements for the specific records --- We noticed that transactions is not used within coordinator so simply --- replace it with empty record -\o block_export.sql -\t on -\a on -SELECT 'INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES (' || - quote_literal(number) || ', ' || - quote_literal(hash) || ', ' || - quote_literal(parent_hash) || ', ' || - quote_literal(header) || ', ' || - quote_literal(withdraw_root) || ', ' || - quote_literal(state_root) || ', ' || - quote_literal(tx_num) || ', ' || - quote_literal(gas_used) || ', ' || - quote_literal(block_timestamp) || ', ' || - quote_literal(row_consumption) || ', ' || - quote_literal(chunk_hash) || ', ' || - quote_literal('[]') || - ');' -FROM l2_block -WHERE number >= 10405845 and number <= 10405944 -ORDER BY number DESC; -\t off -\a off -\o \ No newline at end of file diff --git a/database/localdbg/dump_chunk_records.sql b/database/localdbg/dump_chunk_records.sql deleted file mode 100644 index e8f2e06e72..0000000000 --- a/database/localdbg/dump_chunk_records.sql +++ /dev/null @@ -1,39 +0,0 @@ --- Create a file with INSERT statements for the specific records -\o chunk_export.sql -\t on -\a on -SELECT 'INSERT INTO chunk ("index", hash, start_block_number, end_block_number, - start_block_hash, end_block_hash, total_l1_messages_popped_before, - total_l1_messages_popped_in_chunk, start_block_time, - parent_chunk_hash, state_root, parent_chunk_state_root, - withdraw_root, total_l2_tx_gas, total_l2_tx_num, - total_l1_commit_calldata_size, total_l1_commit_gas, - enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash - ) VALUES (' || - quote_literal("index") || ', ' || - quote_literal(hash) || ', ' || - quote_literal(start_block_number) || ', ' || - quote_literal(end_block_number) || ', ' || - quote_literal(start_block_hash) || ', ' || - quote_literal(end_block_hash) || ', ' || - quote_literal(total_l1_messages_popped_before) || ', ' || - quote_literal(total_l1_messages_popped_in_chunk) || ', ' || - quote_literal(start_block_time) || ', ' || - quote_literal(parent_chunk_hash) || ', ' || - quote_literal(state_root) || ', ' || - quote_literal(parent_chunk_state_root) || ', ' || - quote_literal(withdraw_root) || ', ' || - quote_literal(total_l2_tx_gas) || ', ' || - quote_literal(total_l2_tx_num) || ', ' || - quote_literal(total_l1_commit_calldata_size) || ', ' || - quote_literal(total_l1_commit_gas) || ', ' || - quote_literal(enable_compress) || ', ' || - quote_literal(prev_l1_message_queue_hash) || ', ' || - quote_literal(post_l1_message_queue_hash) || - ');' -FROM chunk -ORDER BY "index" DESC -LIMIT 10; -\t off -\a off -\o \ No newline at end of file diff --git a/database/localdbg/import_blocks.sql b/database/localdbg/import_blocks.sql deleted file mode 100644 index cea5b723d2..0000000000 --- a/database/localdbg/import_blocks.sql +++ /dev/null @@ -1,400 +0,0 @@ -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405944', '0x522d7f22665754abccab64dc67f1ae4b2dda9729613893f20117810f5092427d', '0xd8996ec4cfae5b3a84704bc6774d3c0084b3775efd8e25111415546a8193a085', '{"parentHash":"0xd8996ec4cfae5b3a84704bc6774d3c0084b3775efd8e25111415546a8193a085","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xbe7752f82ad42463b27e0ac06b2c86e853a2f1fdf36456c8496979fda2998896","transactionsRoot":"0x290227ecfa9e0f358b999a971aa4d0f1af0db206311605d2126626f3d09283e7","receiptsRoot":"0xf889a1ea17b84acfb7789aa38182a24f314c4cb1a4f8146bbfaa9da1325ae949","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec838","gasLimit":"0x1312d00","gasUsed":"0x94e2","timestamp":"0x68404038","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x522d7f22665754abccab64dc67f1ae4b2dda9729613893f20117810f5092427d"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xbe7752f82ad42463b27e0ac06b2c86e853a2f1fdf36456c8496979fda2998896', '1', '38114', '1749041208', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405943', '0xd8996ec4cfae5b3a84704bc6774d3c0084b3775efd8e25111415546a8193a085', '0xe611f303854aaf36937c5f72fe73d0041421e0444a75afa3308fedd79b4e8993', '{"parentHash":"0xe611f303854aaf36937c5f72fe73d0041421e0444a75afa3308fedd79b4e8993","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xc2f15bac2c1b880a6cd79014c3aafdd7dbb2b5183e15a5bee6a30246f9bb8dcf","transactionsRoot":"0xadf9bf8be642e5dfe7d756b564a4ce6090bf9ef81ed4f9f69a4ebcc6bf29a633","receiptsRoot":"0x1fb6a3ca77f7bb96604326ca7d51d7645745e7ce487e5f2a89161a1837f9a5f1","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec837","gasLimit":"0x1312d00","gasUsed":"0x94d6","timestamp":"0x68404032","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xd8996ec4cfae5b3a84704bc6774d3c0084b3775efd8e25111415546a8193a085"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xc2f15bac2c1b880a6cd79014c3aafdd7dbb2b5183e15a5bee6a30246f9bb8dcf', '1', '38102', '1749041202', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405942', '0xe611f303854aaf36937c5f72fe73d0041421e0444a75afa3308fedd79b4e8993', '0x2fc3a606ad7238f021903676fde22ac84053ba43dca27252afdc600c4dcd7ac9', '{"parentHash":"0x2fc3a606ad7238f021903676fde22ac84053ba43dca27252afdc600c4dcd7ac9","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xc8c257a0436d96fca7100ff92c7d144c1395f7d271fe92884f6a6eeacc399b39","transactionsRoot":"0x757f9308b4ca8355dc613d69db80c401a9a73ad03335c0f1bb70fdc7c94eeb26","receiptsRoot":"0xdd1ac1302b3c279c536e1a573abf87bb2d3c3946a45718427b3285149411bf90","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec836","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68404028","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xe611f303854aaf36937c5f72fe73d0041421e0444a75afa3308fedd79b4e8993"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xc8c257a0436d96fca7100ff92c7d144c1395f7d271fe92884f6a6eeacc399b39', '1', '38478', '1749041192', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405941', '0x2fc3a606ad7238f021903676fde22ac84053ba43dca27252afdc600c4dcd7ac9', '0xfc78d50a885b944039420bcedcedfaf884ba36e8e39f179a33a2f3b1e0a1f3c5', '{"parentHash":"0xfc78d50a885b944039420bcedcedfaf884ba36e8e39f179a33a2f3b1e0a1f3c5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x8732873ed0885a537b3e582ed097792d558d4c861030ddebdef0bc597e8db590","transactionsRoot":"0x7e7935f29671cf2929a89fcd7a0f81a3c0c195ae2fe63689b3ce16a36ad5a5a4","receiptsRoot":"0x0cee1b1aa862e5b20ba6349a0415db0a275be65d7b669479c83dfdbb13e548ae","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec835","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68404014","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x2fc3a606ad7238f021903676fde22ac84053ba43dca27252afdc600c4dcd7ac9"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x8732873ed0885a537b3e582ed097792d558d4c861030ddebdef0bc597e8db590', '1', '41278', '1749041172', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405940', '0xfc78d50a885b944039420bcedcedfaf884ba36e8e39f179a33a2f3b1e0a1f3c5', '0x92d161cf6f32af110ca44839d0c12e4957db645ff472a119c8a43877721c72a5', '{"parentHash":"0x92d161cf6f32af110ca44839d0c12e4957db645ff472a119c8a43877721c72a5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x95f8d4943476e43ec3485e7bd470fe57a8ad499e6372d90be65a562feb352e99","transactionsRoot":"0x30f82da84a0770711de0a0487f8278233a998559f2422f60cb3d2b23035c946b","receiptsRoot":"0xeb5282e434d75e3b7d3381ce3f49f9cb2512c2891ed966a84a8a9da89cabee94","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec834","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x6840400a","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xfc78d50a885b944039420bcedcedfaf884ba36e8e39f179a33a2f3b1e0a1f3c5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x95f8d4943476e43ec3485e7bd470fe57a8ad499e6372d90be65a562feb352e99', '1', '41278', '1749041162', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405939', '0x92d161cf6f32af110ca44839d0c12e4957db645ff472a119c8a43877721c72a5', '0xb4cc1250bd7c677264cd4201c3a73a7f9b926ab354746cd00ce2cd72f5a9faed', '{"parentHash":"0xb4cc1250bd7c677264cd4201c3a73a7f9b926ab354746cd00ce2cd72f5a9faed","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x82b8e9b4077d1a5a36147fb1c2ef2869c7d301a12220defef5bd76c6c25e5e6d","transactionsRoot":"0x1e05a7fcf15bd0ca4256a331632e93c0de8008ee47f0424a2bec49ce1aef97e3","receiptsRoot":"0xb5c9fb7ea680e4acf37d3d12e610287acd85ce615bc88dd7ecd04e9b520ecd5d","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec833","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68404000","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x92d161cf6f32af110ca44839d0c12e4957db645ff472a119c8a43877721c72a5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x82b8e9b4077d1a5a36147fb1c2ef2869c7d301a12220defef5bd76c6c25e5e6d', '1', '41278', '1749041152', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405938', '0xb4cc1250bd7c677264cd4201c3a73a7f9b926ab354746cd00ce2cd72f5a9faed', '0x06bc4cc7d4c6dd7639ef5aa374311b18eb3792b5a7fd75a086943f1f2b203e23', '{"parentHash":"0x06bc4cc7d4c6dd7639ef5aa374311b18eb3792b5a7fd75a086943f1f2b203e23","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x3815fa4ba8f382898315cb612e630c62f02c70457209fbf4fce24dd9fc96362c","transactionsRoot":"0xf9a54a30da8d787594aa8c9c548e381cd11f2718681725f851b76bd7fd19447c","receiptsRoot":"0xf6f118bb4ecf8bd6c60671b9fa940fdc231c2323325ae563a095c2e5cd4e116b","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec832","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ff6","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xb4cc1250bd7c677264cd4201c3a73a7f9b926ab354746cd00ce2cd72f5a9faed"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x3815fa4ba8f382898315cb612e630c62f02c70457209fbf4fce24dd9fc96362c', '1', '41278', '1749041142', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405937', '0x06bc4cc7d4c6dd7639ef5aa374311b18eb3792b5a7fd75a086943f1f2b203e23', '0xf8b2da015a32479eff769648817d5f443070292c2d6309f2c510a726e4252bb4', '{"parentHash":"0xf8b2da015a32479eff769648817d5f443070292c2d6309f2c510a726e4252bb4","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xa9245d62b3209c85173488ff5eacaf6e27886202590f978b9239132a43d7173c","transactionsRoot":"0xb99ae73184bc948230f3b48913b183ad0113f856640dedccc38b13cdd8e1f030","receiptsRoot":"0x873e0cfcaf12040ca3001c03ad6a81d51bc2325a2a7d12d7377fc0f0f287ee95","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec831","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403fec","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x06bc4cc7d4c6dd7639ef5aa374311b18eb3792b5a7fd75a086943f1f2b203e23"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xa9245d62b3209c85173488ff5eacaf6e27886202590f978b9239132a43d7173c', '1', '41278', '1749041132', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405936', '0xf8b2da015a32479eff769648817d5f443070292c2d6309f2c510a726e4252bb4', '0x6d0113fe6efb2b891bbe67d76e9461cb3827d4cbdedca20c80ab699b4d77d831', '{"parentHash":"0x6d0113fe6efb2b891bbe67d76e9461cb3827d4cbdedca20c80ab699b4d77d831","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x706dca0e49ac358345bd6b1dd82153f4b7a3b7ab0ee643fd1d57897aba6d71b7","transactionsRoot":"0xf4f14df6a408e018b63c2cc9572b1c15355112fc1d166f4893a766955947b0c5","receiptsRoot":"0x29b1160fa0f309fde68f2509b1d6b738478d907cc47f5983469426969355d8ba","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec830","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403fd8","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4203","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xf8b2da015a32479eff769648817d5f443070292c2d6309f2c510a726e4252bb4"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x706dca0e49ac358345bd6b1dd82153f4b7a3b7ab0ee643fd1d57897aba6d71b7', '1', '41278', '1749041112', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405935', '0x6d0113fe6efb2b891bbe67d76e9461cb3827d4cbdedca20c80ab699b4d77d831', '0xd9492e6a7933434d53a3ba2b52720c5fa41b0cf8fdb12f4abc5797d5c0838dde', '{"parentHash":"0xd9492e6a7933434d53a3ba2b52720c5fa41b0cf8fdb12f4abc5797d5c0838dde","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xa6d77eee80f956c965e2cc0b873532234b832f6e1ac1722e179b8ccdeeaa38af","transactionsRoot":"0x514304a7cd943918b9bd707547f719e2d99dfa10bdf1044fdc8fd1623aa14ca1","receiptsRoot":"0xf93755a32fbd7bd996e77a85737888a5abb73cdb1f10b5eca554e459328e373d","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec82f","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403fce","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x6d0113fe6efb2b891bbe67d76e9461cb3827d4cbdedca20c80ab699b4d77d831"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xa6d77eee80f956c965e2cc0b873532234b832f6e1ac1722e179b8ccdeeaa38af', '1', '41278', '1749041102', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405934', '0xd9492e6a7933434d53a3ba2b52720c5fa41b0cf8fdb12f4abc5797d5c0838dde', '0x5cc24195981bd805b164a32b73b6803ff28993e34cd041ce8d1d37d645cb7a7e', '{"parentHash":"0x5cc24195981bd805b164a32b73b6803ff28993e34cd041ce8d1d37d645cb7a7e","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xca3b518f5aaeebf5405da1e2d504c7274384a018a31b8501c5aa3cdeef18c275","transactionsRoot":"0x84dd7944b14606b5b9d805677aa10c7dc4effd7c3a8bf5ee482725f62e472f31","receiptsRoot":"0x692a6c88218159b2e463549dc2efd22cae6f285bfdd55a214c2a73e60ddcba9f","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec82e","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403fc7","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xd9492e6a7933434d53a3ba2b52720c5fa41b0cf8fdb12f4abc5797d5c0838dde"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xca3b518f5aaeebf5405da1e2d504c7274384a018a31b8501c5aa3cdeef18c275', '1', '41278', '1749041095', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405933', '0x5cc24195981bd805b164a32b73b6803ff28993e34cd041ce8d1d37d645cb7a7e', '0x238b9c31f4e3c1821b8323174801363bbbdbae704ff23c080cbd33bb14a75872', '{"parentHash":"0x238b9c31f4e3c1821b8323174801363bbbdbae704ff23c080cbd33bb14a75872","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7d02b9e7ff452aab4fb5717355cfc2d158e05c5c7bd5cdaabcbbc5266480a98e","transactionsRoot":"0x7c63a528c1f984fcec92bbfd9ea6a98097ea52fd0c9b30938705b0a1ca5ced06","receiptsRoot":"0xfe9bb8add4e9b82c4dff5ecbba93825fa7e415d759033fb5d15dcf33a9f4c1df","logsBloom":"0x00000000000000000000000000000000000800000100000000000800000000000000900000000000000000000000000000000000000200000000000000000000000000000000000000000001002000000000000001000000000000000000000000000000020000000000000000000800000000000000002000000000000000000000000000000000000000000000000000000480000000000020000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000002000000000000000004000000000200000000000000020000000800000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec82d","gasLimit":"0x1312d00","gasUsed":"0x1fa54","timestamp":"0x68403fc4","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x5cc24195981bd805b164a32b73b6803ff28993e34cd041ce8d1d37d645cb7a7e"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7d02b9e7ff452aab4fb5717355cfc2d158e05c5c7bd5cdaabcbbc5266480a98e', '1', '129620', '1749041092', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405932', '0x238b9c31f4e3c1821b8323174801363bbbdbae704ff23c080cbd33bb14a75872', '0x04bdc7d66f10be716f2a2521628fc8e0451e5c9aa5b7add08cdd35a4849ccf8c', '{"parentHash":"0x04bdc7d66f10be716f2a2521628fc8e0451e5c9aa5b7add08cdd35a4849ccf8c","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x58ffc262b1b2906d5d46360a9a6a44603a562670b8a5bfc558867d5333bf6b89","transactionsRoot":"0x45393b042c5b31d2dbe6bee5709666f5a8ee5f1ec4049c5ba66ad1fdecddc197","receiptsRoot":"0x9fc8cb394ffbd1ab82014742b023a008703f2aedcbf5ef76341348ce3b91cee3","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec82c","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403fba","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x238b9c31f4e3c1821b8323174801363bbbdbae704ff23c080cbd33bb14a75872"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x58ffc262b1b2906d5d46360a9a6a44603a562670b8a5bfc558867d5333bf6b89', '1', '41278', '1749041082', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405931', '0x04bdc7d66f10be716f2a2521628fc8e0451e5c9aa5b7add08cdd35a4849ccf8c', '0xe5750a175b12ecebad5ed54faab2bfb43484f643cd94b58ba2cabe1977cccb95', '{"parentHash":"0xe5750a175b12ecebad5ed54faab2bfb43484f643cd94b58ba2cabe1977cccb95","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x1d38c7f24fa50e771103bda1c98e6948001e6500a4518d5a9328b68d0a89afae","transactionsRoot":"0x04d3dad3d292ae6f8b121b93b5543b00a039e1dd07d1cddd1f179a25f7feae86","receiptsRoot":"0xd4ce818cce711f416d0c763e86d7d343120eaf323f57e0c26f70411107af8275","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec82b","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403fb0","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4204","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x04bdc7d66f10be716f2a2521628fc8e0451e5c9aa5b7add08cdd35a4849ccf8c"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x1d38c7f24fa50e771103bda1c98e6948001e6500a4518d5a9328b68d0a89afae', '1', '41278', '1749041072', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405930', '0xe5750a175b12ecebad5ed54faab2bfb43484f643cd94b58ba2cabe1977cccb95', '0xe04054a2a56cf0b5b10850eb340f9eebfcb150bfc87c0069ac88cc5b85e60ae5', '{"parentHash":"0xe04054a2a56cf0b5b10850eb340f9eebfcb150bfc87c0069ac88cc5b85e60ae5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xba255ab08c2c118c23d2e7362fd4b6b0710c256ea7ddfef5eb9b90350e3ca0d5","transactionsRoot":"0x602f15e4d9d5738d2fa6a6ca932ffa41799f1dd9f0729a6778326aad00e85c1e","receiptsRoot":"0x6e687e25606eaff7fc22c0d9bfc788a733b7634dc2123406fe190a0a67ffdeaf","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec82a","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f9c","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xe5750a175b12ecebad5ed54faab2bfb43484f643cd94b58ba2cabe1977cccb95"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xba255ab08c2c118c23d2e7362fd4b6b0710c256ea7ddfef5eb9b90350e3ca0d5', '1', '41278', '1749041052', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405929', '0xe04054a2a56cf0b5b10850eb340f9eebfcb150bfc87c0069ac88cc5b85e60ae5', '0xaaaf07c2147d75a29b4f4ccc2c6965cee5a6fb48a86695db9ad5c0ddc01f7990', '{"parentHash":"0xaaaf07c2147d75a29b4f4ccc2c6965cee5a6fb48a86695db9ad5c0ddc01f7990","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x5237e7d9c60b1cbca429131d623039fb8f82a6df0d7729eeafc4881f0ca7692e","transactionsRoot":"0x02ea2dea7cc2d05358d2c6d1a753b8b2f5345859d286469b89ad891d1f9254d5","receiptsRoot":"0x65443c91804a4fa18ac753804a74a10b454f2670cf4a361fa483b9b051fd6a5e","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec829","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f92","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xe04054a2a56cf0b5b10850eb340f9eebfcb150bfc87c0069ac88cc5b85e60ae5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x5237e7d9c60b1cbca429131d623039fb8f82a6df0d7729eeafc4881f0ca7692e', '1', '41278', '1749041042', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405928', '0xaaaf07c2147d75a29b4f4ccc2c6965cee5a6fb48a86695db9ad5c0ddc01f7990', '0xcef2d129a7c8a49a067f31765069e2a32a6cffd2bb2f454540c9e2504bd4c0c8', '{"parentHash":"0xcef2d129a7c8a49a067f31765069e2a32a6cffd2bb2f454540c9e2504bd4c0c8","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xca2e7b109723590b6bdcf5bdcbf15917cce954dbd3108676e7d1668e4eeda816","transactionsRoot":"0x88fc713a8f45cd496f8e522fe36c22363b59cea3937b6fac38c196afbc66d0a9","receiptsRoot":"0xf33084f4520c4444e66288ca8c98413714b84839f984011f997a04bce661472f","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec828","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403f88","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xaaaf07c2147d75a29b4f4ccc2c6965cee5a6fb48a86695db9ad5c0ddc01f7990"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xca2e7b109723590b6bdcf5bdcbf15917cce954dbd3108676e7d1668e4eeda816', '1', '38478', '1749041032', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405927', '0xcef2d129a7c8a49a067f31765069e2a32a6cffd2bb2f454540c9e2504bd4c0c8', '0x63076e493203174b6e48ef2fed0e6e48f62b20a43ff5140d1d081d07a99dd9df', '{"parentHash":"0x63076e493203174b6e48ef2fed0e6e48f62b20a43ff5140d1d081d07a99dd9df","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x172b6a8caf4c330760642a91dffbac07f47659ca1d49dc3534b1dcd92c755137","transactionsRoot":"0xe5e636e3e0b4bbf055be2a86015e247ca7b90865306ac2409f7fa51fdcc95095","receiptsRoot":"0x212a26524f2563e7d075e8a6a8088a0f4045d91427974b2ae712ce3f45a6c4b1","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec827","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f81","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xcef2d129a7c8a49a067f31765069e2a32a6cffd2bb2f454540c9e2504bd4c0c8"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x172b6a8caf4c330760642a91dffbac07f47659ca1d49dc3534b1dcd92c755137', '1', '41278', '1749041025', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405926', '0x63076e493203174b6e48ef2fed0e6e48f62b20a43ff5140d1d081d07a99dd9df', '0x6d1c7b926232fd17db38ce29ae40f2dc502dddf6cd654f56e31d69b62e0d46bf', '{"parentHash":"0x6d1c7b926232fd17db38ce29ae40f2dc502dddf6cd654f56e31d69b62e0d46bf","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x93c8df411ced3c60aafb2d732e82eae89ce16f4177649d3634c49f1ce033fb4d","transactionsRoot":"0xa6b99694740f5f9cf40db1f32205c68af646a84a370619594dd3ea2324688682","receiptsRoot":"0xd967eb0c9072deadc475375dc0e32e67dcfe577aa1e1f88144e04e24ef002ee1","logsBloom":"0x00000000000000000000000000002000000000000080000000000100000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000040000000000000000000000000020000000000010000000000000000001000000000000000000000000000000000000000000020000000000000000000000000004000000000080000000000000000000040000000000000000000000000000000000000000000000000000000000000000001000000000000000000000110000000000044040000040000000000000100000000000000000800200000000000000004000001000000000","difficulty":"0x1","number":"0x9ec826","gasLimit":"0x1312d00","gasUsed":"0x44ffc","timestamp":"0x68403f7f","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x63076e493203174b6e48ef2fed0e6e48f62b20a43ff5140d1d081d07a99dd9df"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x93c8df411ced3c60aafb2d732e82eae89ce16f4177649d3634c49f1ce033fb4d', '1', '282620', '1749041023', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405925', '0x6d1c7b926232fd17db38ce29ae40f2dc502dddf6cd654f56e31d69b62e0d46bf', '0xe0831a0687a0f2572c288ef105f84e9f3619a96fb99b13edc61b51fc29a9b3b5', '{"parentHash":"0xe0831a0687a0f2572c288ef105f84e9f3619a96fb99b13edc61b51fc29a9b3b5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x13249e11568c46407aac27522b892395ffe965bf998216e05f9bde37ab0974d0","transactionsRoot":"0xf42f73c3902fb114572e24924bfcd84e33e61d1472ee67613bc99628b6096a8e","receiptsRoot":"0x7adb6be7e1d221c675c4836f83fba8b82ce80d5dae4fbd7a21b9a11e3937f423","logsBloom":"0x00000000000000000000000000000000000000000080000000000100000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000000000040000000000000000000000000020000000000010000000000000000001000000000000000000200000000000000000000000000000040000000800000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000040000000000000000110000000000044000000040000000000000100000000000000000800200000000000000004000000200000000","difficulty":"0x1","number":"0x9ec825","gasLimit":"0x1312d00","gasUsed":"0x44ffc","timestamp":"0x68403f7e","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x6d1c7b926232fd17db38ce29ae40f2dc502dddf6cd654f56e31d69b62e0d46bf"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x13249e11568c46407aac27522b892395ffe965bf998216e05f9bde37ab0974d0', '1', '282620', '1749041022', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405924', '0xe0831a0687a0f2572c288ef105f84e9f3619a96fb99b13edc61b51fc29a9b3b5', '0x71cdf7c180b25fefec87beff013ea3cbd07712cd5bbc31164ec3fd47f13ac4c9', '{"parentHash":"0x71cdf7c180b25fefec87beff013ea3cbd07712cd5bbc31164ec3fd47f13ac4c9","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x032f48f6c490ad509738ad799d47f9a2d481cda2b6a36640b93aabb66ab77491","transactionsRoot":"0x908ea3e62f16e6c494ba22ce55232978bbb5544149ae30cf34dfba6691a336fe","receiptsRoot":"0x35c7004ba92d47e2613600423e6d378b86b83f35dd13c26aa873592b8dc4231e","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec824","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403f75","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xe0831a0687a0f2572c288ef105f84e9f3619a96fb99b13edc61b51fc29a9b3b5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x032f48f6c490ad509738ad799d47f9a2d481cda2b6a36640b93aabb66ab77491', '1', '38478', '1749041013', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405923', '0x71cdf7c180b25fefec87beff013ea3cbd07712cd5bbc31164ec3fd47f13ac4c9', '0xb8494b3cf0f3866491eae96dbd82a2fe7804bfe6c3dc5bdb1de917e1cb7e5a3f', '{"parentHash":"0xb8494b3cf0f3866491eae96dbd82a2fe7804bfe6c3dc5bdb1de917e1cb7e5a3f","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x4892a014e2cc284d1dd727e7422a15cffe83a3e2ffa125396999412a7163495e","transactionsRoot":"0x1205da7d9160769b5b63bcbe451469c7023e829d549a993a080dd44398d52855","receiptsRoot":"0x6c630569729bc002238990f63209e3aebc939c247de254e24924a903ebca68ef","logsBloom":"0x800000000000000000000000000000000000000004000000000000000000000000000000000000000000400000008000000000000000000000000000000000000000000000000000080000000010000000800000000000000000000200000001000000200000004000000000000002020041010000000000000000080000000000000000000000000000000000000000000000000000000000002000000100200000000000000000000000000000000000000000000000000020002000000200000000000000400000000000000000000000000006000000000040000000000000000000000000000000000000000000000000c000000000400000000c000004","difficulty":"0x1","number":"0x9ec823","gasLimit":"0x1312d00","gasUsed":"0x30228","timestamp":"0x68403f74","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x71cdf7c180b25fefec87beff013ea3cbd07712cd5bbc31164ec3fd47f13ac4c9"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x4892a014e2cc284d1dd727e7422a15cffe83a3e2ffa125396999412a7163495e', '1', '197160', '1749041012', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405922', '0xb8494b3cf0f3866491eae96dbd82a2fe7804bfe6c3dc5bdb1de917e1cb7e5a3f', '0xdb722ad3da146ae4e45088ead4aaab98739b9ca6ce924c3f355f97b235d1a2b2', '{"parentHash":"0xdb722ad3da146ae4e45088ead4aaab98739b9ca6ce924c3f355f97b235d1a2b2","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xc9db7d7818c1c27d5d4c477c64aa6aa1fc22e6910cd3e9d0de20d09563aecc24","transactionsRoot":"0xf6f3fdad76238c8c42791beb24d2d63c812a3aad3b3c4c85f9d16b9631374a3d","receiptsRoot":"0x0888d8af82d92622607ec91309962db949b2d3624989ffe5be188b9b61db7d47","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec822","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f60","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4205","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xb8494b3cf0f3866491eae96dbd82a2fe7804bfe6c3dc5bdb1de917e1cb7e5a3f"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xc9db7d7818c1c27d5d4c477c64aa6aa1fc22e6910cd3e9d0de20d09563aecc24', '1', '41278', '1749040992', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405921', '0xdb722ad3da146ae4e45088ead4aaab98739b9ca6ce924c3f355f97b235d1a2b2', '0x3586c492c3449d6e5b50608b63549cb33085ab15ea6ef9757d6eef17efb53b09', '{"parentHash":"0x3586c492c3449d6e5b50608b63549cb33085ab15ea6ef9757d6eef17efb53b09","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xaac0b91e0987d5d36c17eb008a50740d662eb3a5ab0bcf879d5e14cb0dc0fb58","transactionsRoot":"0xbb3a651e5cfc655a35d423e3db3494bfb4f24f1ce5a66acb4951bafe313d7a7e","receiptsRoot":"0x5182a731b540dd2f07bb3ccfb2a907f1e2c3633ca6942b9f08a08c528a5f187c","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec821","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403f56","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xdb722ad3da146ae4e45088ead4aaab98739b9ca6ce924c3f355f97b235d1a2b2"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xaac0b91e0987d5d36c17eb008a50740d662eb3a5ab0bcf879d5e14cb0dc0fb58', '1', '38478', '1749040982', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405920', '0x3586c492c3449d6e5b50608b63549cb33085ab15ea6ef9757d6eef17efb53b09', '0x311dfff8eb0029d86853a8c573aa718354bf3a532c0778ec9c7059fa13f1aedb', '{"parentHash":"0x311dfff8eb0029d86853a8c573aa718354bf3a532c0778ec9c7059fa13f1aedb","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x60000fbb71532e5653ebb8f087ae38e9a2cadb6f9f0611ca729e3edfabf45e37","transactionsRoot":"0xb30008b97e4011b36c747f03dee9a6bfca1c9faedea7ee4207884951ee2034b8","receiptsRoot":"0x71e44dbf8079931c4b6e9fb8c2844b31db7897cd3ebbc6e84b4eb3e167df5812","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec820","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f4c","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x3586c492c3449d6e5b50608b63549cb33085ab15ea6ef9757d6eef17efb53b09"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x60000fbb71532e5653ebb8f087ae38e9a2cadb6f9f0611ca729e3edfabf45e37', '1', '41278', '1749040972', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405919', '0x311dfff8eb0029d86853a8c573aa718354bf3a532c0778ec9c7059fa13f1aedb', '0x91258cebc22e243e50b95dfd99abaf115f74620f793df196a71293dae1169d58', '{"parentHash":"0x91258cebc22e243e50b95dfd99abaf115f74620f793df196a71293dae1169d58","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x5cf4f785b6c8ae90560fd1c09559902b5d56b0f167bfcc2a75a89fe06a813afb","transactionsRoot":"0x0c78995763caf2caf95651371c11abd40c73f4714a9010c320ffe359d161820d","receiptsRoot":"0xf5e9a89fc6227b57d4cefc55dc8072954c41f8db98efc05c053225c8556f6722","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec81f","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f42","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x311dfff8eb0029d86853a8c573aa718354bf3a532c0778ec9c7059fa13f1aedb"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x5cf4f785b6c8ae90560fd1c09559902b5d56b0f167bfcc2a75a89fe06a813afb', '1', '41278', '1749040962', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405918', '0x91258cebc22e243e50b95dfd99abaf115f74620f793df196a71293dae1169d58', '0x8bd68b8d52e216d6e184c6bf267d4a70d80893f9556b7efd71304176eb86e32a', '{"parentHash":"0x8bd68b8d52e216d6e184c6bf267d4a70d80893f9556b7efd71304176eb86e32a","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x0c1432eaff904dc29637f826daed41f65e7172b9d6e9923340aa97eb5e3c25ff","transactionsRoot":"0x8ce1284faf59633de41faea48ebba950f9b51fde8e73ecd3c8948c05f2d1e774","receiptsRoot":"0x04959d879a9a87b46933ffb92ce04ba7ad035292ba723ba0be193db2cea9462a","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec81e","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f38","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x91258cebc22e243e50b95dfd99abaf115f74620f793df196a71293dae1169d58"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x0c1432eaff904dc29637f826daed41f65e7172b9d6e9923340aa97eb5e3c25ff', '1', '41278', '1749040952', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405917', '0x8bd68b8d52e216d6e184c6bf267d4a70d80893f9556b7efd71304176eb86e32a', '0x1dce82889a578c62d1beed3711d08e13ded1004bb302601c8cd0d7a761993bd6', '{"parentHash":"0x1dce82889a578c62d1beed3711d08e13ded1004bb302601c8cd0d7a761993bd6","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd56a72a870b4140188ef147cff4d62f043e3d3951fa0f1c3016cb2f71d88fc21","transactionsRoot":"0xc91f929f09b20d26b259ff42950dc46d6082990c65ca484730edc9c0a4893a73","receiptsRoot":"0x64e7fcec14adce6836a8db75f22fd47288b24480ac897c22112650b9e3bab917","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec81d","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f24","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x8bd68b8d52e216d6e184c6bf267d4a70d80893f9556b7efd71304176eb86e32a"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd56a72a870b4140188ef147cff4d62f043e3d3951fa0f1c3016cb2f71d88fc21', '1', '41278', '1749040932', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405916', '0x1dce82889a578c62d1beed3711d08e13ded1004bb302601c8cd0d7a761993bd6', '0x5617de888b091896fd96308a2c6bc66a2719372c87c4f7e8585783fc7ac47fad', '{"parentHash":"0x5617de888b091896fd96308a2c6bc66a2719372c87c4f7e8585783fc7ac47fad","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x72e9999ab4e30501f8445c0ac109089169ea5dd5a3e9208eead5901aafed10bc","transactionsRoot":"0x9a260caf07d97cc98d8857ac61a39f76d606b9da06f89582d6a6c2fcf74b90d7","receiptsRoot":"0x3aa7696fd68024e5f167d27d02c9ff23a9ca7b389e9bc17d285f9bb409dc8189","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec81c","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f1a","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x1dce82889a578c62d1beed3711d08e13ded1004bb302601c8cd0d7a761993bd6"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x72e9999ab4e30501f8445c0ac109089169ea5dd5a3e9208eead5901aafed10bc', '1', '41278', '1749040922', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405915', '0x5617de888b091896fd96308a2c6bc66a2719372c87c4f7e8585783fc7ac47fad', '0xa9e062d1e26ad4f5a65bc1cbe048cd3505bde1b6ec0164b70e996fc99412fe66', '{"parentHash":"0xa9e062d1e26ad4f5a65bc1cbe048cd3505bde1b6ec0164b70e996fc99412fe66","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd960dbcb67f4f024f13406539432d70fd72e0cb1e03bf4295b4a2ddc34e441db","transactionsRoot":"0x3c6be946f87675632f44a60060250fa9b62716e613038b5525af7497fffed837","receiptsRoot":"0x15312d9f8d57ee3cb47c63c5ac57b776faca14899d6d6e611155614cd47f24b0","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec81b","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f11","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x5617de888b091896fd96308a2c6bc66a2719372c87c4f7e8585783fc7ac47fad"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd960dbcb67f4f024f13406539432d70fd72e0cb1e03bf4295b4a2ddc34e441db', '1', '41278', '1749040913', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405914', '0xa9e062d1e26ad4f5a65bc1cbe048cd3505bde1b6ec0164b70e996fc99412fe66', '0x75876122116c609437718d4043d1a12eb2f57821af61d8888f5a6f3603c520b7', '{"parentHash":"0x75876122116c609437718d4043d1a12eb2f57821af61d8888f5a6f3603c520b7","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x1990e509fa98bbbf04502c51a2102e09174816ba6d05d9f4979575e9db674992","transactionsRoot":"0xcb73a646ac241c2a70959ac6c88203a02d4a092a0dc0fa27d2229caf9a2941f0","receiptsRoot":"0x302347f5f66a629e6e8f5f596ddc57edb8ea71124420858d546aa436afc17dba","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec81a","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403f10","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xa9e062d1e26ad4f5a65bc1cbe048cd3505bde1b6ec0164b70e996fc99412fe66"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x1990e509fa98bbbf04502c51a2102e09174816ba6d05d9f4979575e9db674992', '1', '41278', '1749040912', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405913', '0x75876122116c609437718d4043d1a12eb2f57821af61d8888f5a6f3603c520b7', '0xee3f3cfa7e0cb4c274e9a607891930119fec36c0ff032dcda28bea4f82bee5c8', '{"parentHash":"0xee3f3cfa7e0cb4c274e9a607891930119fec36c0ff032dcda28bea4f82bee5c8","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x4920e0fba4b885e51cb46385a4e782e86a3c87cfbf76071ac0f98a71620e3c92","transactionsRoot":"0x416bcc7b571485a5c483b7a53205160f5eb38594d3a1e2f12bc802453fd4c040","receiptsRoot":"0x725806b481bfd1727dd493d969a6d57b793b6185761f5452ecf38d8acbec1364","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec819","gasLimit":"0x1312d00","gasUsed":"0x94ee","timestamp":"0x68403f0f","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x75876122116c609437718d4043d1a12eb2f57821af61d8888f5a6f3603c520b7"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x4920e0fba4b885e51cb46385a4e782e86a3c87cfbf76071ac0f98a71620e3c92', '1', '38126', '1749040911', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405912', '0xee3f3cfa7e0cb4c274e9a607891930119fec36c0ff032dcda28bea4f82bee5c8', '0x902c743a58545c970c9faf2199147d19943bb1edbe3d3f1705dffb67357a3807', '{"parentHash":"0x902c743a58545c970c9faf2199147d19943bb1edbe3d3f1705dffb67357a3807","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xace84350ea22e08ead162bcfb4e9e985f5638781d1631ba24d7862cfa46207dc","transactionsRoot":"0x5a886ef8a05c3eee07a5e33a46bd43732b25979979b348a5ec6f08885151aaa1","receiptsRoot":"0x725806b481bfd1727dd493d969a6d57b793b6185761f5452ecf38d8acbec1364","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec818","gasLimit":"0x1312d00","gasUsed":"0x94ee","timestamp":"0x68403f0e","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xee3f3cfa7e0cb4c274e9a607891930119fec36c0ff032dcda28bea4f82bee5c8"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xace84350ea22e08ead162bcfb4e9e985f5638781d1631ba24d7862cfa46207dc', '1', '38126', '1749040910', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405911', '0x902c743a58545c970c9faf2199147d19943bb1edbe3d3f1705dffb67357a3807', '0xdd3ec15d498365046f0c1cf225751b729203aac6419c4a4baa8a761fbaafecca', '{"parentHash":"0xdd3ec15d498365046f0c1cf225751b729203aac6419c4a4baa8a761fbaafecca","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7820d7bf28e2a65b0ac9186a1364316c8f0a9d6800c4e85428eceda1bf4c84e6","transactionsRoot":"0xe2c09ee1197aac2f02d0e653c0c9d94b2e0cdf8a118fbb8eda9fb1aefc215a36","receiptsRoot":"0x1fb6a3ca77f7bb96604326ca7d51d7645745e7ce487e5f2a89161a1837f9a5f1","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec817","gasLimit":"0x1312d00","gasUsed":"0x94d6","timestamp":"0x68403f06","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x902c743a58545c970c9faf2199147d19943bb1edbe3d3f1705dffb67357a3807"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7820d7bf28e2a65b0ac9186a1364316c8f0a9d6800c4e85428eceda1bf4c84e6', '1', '38102', '1749040902', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405910', '0xdd3ec15d498365046f0c1cf225751b729203aac6419c4a4baa8a761fbaafecca', '0x5e34356941c15a4f6439178bbf806d29a3b48fb4bdb08b37fb68845bd1e4d5ca', '{"parentHash":"0x5e34356941c15a4f6439178bbf806d29a3b48fb4bdb08b37fb68845bd1e4d5ca","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x2aa74c378c71052d3a2232adf75a86c10f91398fd41a9f8931ef683374224cd2","transactionsRoot":"0xfd71fa5485488f77263d66a5bcaeeeb99eda14281bf221a4ac9e0ce8aa1c1cb8","receiptsRoot":"0x22026be8611fc4ee4ab597897db1f51166eecfc706a7739056e85428508732ff","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec816","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403efc","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4206","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xdd3ec15d498365046f0c1cf225751b729203aac6419c4a4baa8a761fbaafecca"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x2aa74c378c71052d3a2232adf75a86c10f91398fd41a9f8931ef683374224cd2', '1', '41278', '1749040892', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405909', '0x5e34356941c15a4f6439178bbf806d29a3b48fb4bdb08b37fb68845bd1e4d5ca', '0x6931a20b42519d87e0a21d175ae417ba0ff4e563c6899dc8150d93db7b357df5', '{"parentHash":"0x6931a20b42519d87e0a21d175ae417ba0ff4e563c6899dc8150d93db7b357df5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xb7864ef628308d62980a6afbe1cd8642ccd968d52c0f40026eeba3b646b3c3a5","transactionsRoot":"0x164b75b0ccd3fee99a33611a8d638c8bee22a0a055d61262131e9091e08a1f68","receiptsRoot":"0x1459b1aab5d9039aa66a9055f3366305aa450e6b675fdd099037ef08bd226339","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec815","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ee8","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x5e34356941c15a4f6439178bbf806d29a3b48fb4bdb08b37fb68845bd1e4d5ca"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xb7864ef628308d62980a6afbe1cd8642ccd968d52c0f40026eeba3b646b3c3a5', '1', '41278', '1749040872', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405908', '0x6931a20b42519d87e0a21d175ae417ba0ff4e563c6899dc8150d93db7b357df5', '0x5d6b701681c6af7ce0e736767225f9118fea743d81630a4f4c1bc1381c5ec291', '{"parentHash":"0x5d6b701681c6af7ce0e736767225f9118fea743d81630a4f4c1bc1381c5ec291","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xc9e4a71135f625cf479c6fa57fe8c12fff86ff35712307801c0bc3104cbed58c","transactionsRoot":"0xe18891f3fadd518b94b13f08c3d3d413c24baf256da3984ae96dd329c41d0071","receiptsRoot":"0x81b635044d7bdb599359e855fe44b0cd53a72b6f1fb90b404239d731e900a353","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec814","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403ede","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4208","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x6931a20b42519d87e0a21d175ae417ba0ff4e563c6899dc8150d93db7b357df5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xc9e4a71135f625cf479c6fa57fe8c12fff86ff35712307801c0bc3104cbed58c', '1', '38478', '1749040862', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405907', '0x5d6b701681c6af7ce0e736767225f9118fea743d81630a4f4c1bc1381c5ec291', '0x39bec42f78b3c7a07a64771a203a2f5a0a28ca28bec69eb0d696390a64769da2', '{"parentHash":"0x39bec42f78b3c7a07a64771a203a2f5a0a28ca28bec69eb0d696390a64769da2","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7ff7ddd7832d0d9181dd102f5b5826548f37ddb535d84a34df6bbb3be99fd03a","transactionsRoot":"0x38fa40789a5cc6d0fe7de638a9fc3d823bcb97bd602983453dcd9e31fd085b72","receiptsRoot":"0xd6ce9b1672821cda4bce338b377a5ea85036634d6c9558206e9b327f612bf10e","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec813","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ed4","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4208","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x5d6b701681c6af7ce0e736767225f9118fea743d81630a4f4c1bc1381c5ec291"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7ff7ddd7832d0d9181dd102f5b5826548f37ddb535d84a34df6bbb3be99fd03a', '1', '41278', '1749040852', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405906', '0x39bec42f78b3c7a07a64771a203a2f5a0a28ca28bec69eb0d696390a64769da2', '0x30c7f061710be0e0ec0b8be4119ebc9c274a721686df6640c4049187a28a2179', '{"parentHash":"0x30c7f061710be0e0ec0b8be4119ebc9c274a721686df6640c4049187a28a2179","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x281dbf8abc64708ca83b97a87615c546608e125fcf4bd82bd217e76703398684","transactionsRoot":"0x6373633dfeb8d89bd9b746eacc0011868319dd4f4cc912e7986a026a73e4fcbf","receiptsRoot":"0xa03d6a1369b5b7f51ca6f3a5f856ab380abedf7e68871ba4df59578a17cd3a01","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec812","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ece","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x39bec42f78b3c7a07a64771a203a2f5a0a28ca28bec69eb0d696390a64769da2"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x281dbf8abc64708ca83b97a87615c546608e125fcf4bd82bd217e76703398684', '1', '41278', '1749040846', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405905', '0x30c7f061710be0e0ec0b8be4119ebc9c274a721686df6640c4049187a28a2179', '0x1a3ef89efa1bc17526dc7582b75a50f594139653ab6856d2250d0fd6d36205fc', '{"parentHash":"0x1a3ef89efa1bc17526dc7582b75a50f594139653ab6856d2250d0fd6d36205fc","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xcff086cc9a98724229fce7e631b312b5bb2ae153ac2283aa961dbc2b3fbe10b4","transactionsRoot":"0xfc07f97b78ea9c41debe6699100552d37562cd6748b4de9b0567ccb78550aac6","receiptsRoot":"0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec811","gasLimit":"0x1312d00","gasUsed":"0x5208","timestamp":"0x68403eca","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4207","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x30c7f061710be0e0ec0b8be4119ebc9c274a721686df6640c4049187a28a2179"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xcff086cc9a98724229fce7e631b312b5bb2ae153ac2283aa961dbc2b3fbe10b4', '1', '21000', '1749040842', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405904', '0x1a3ef89efa1bc17526dc7582b75a50f594139653ab6856d2250d0fd6d36205fc', '0xe8316c3dda327b0f2ffbf897cd8ed58403e92464fc0a8431aa18d87607769873', '{"parentHash":"0xe8316c3dda327b0f2ffbf897cd8ed58403e92464fc0a8431aa18d87607769873","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x113c9cd4bf986e2c81daca61d853f9bc282e719c64f93790e6f2a6a3cbd70d7a","transactionsRoot":"0xc88cefb862c8833b0127e8386c3fb0b8a92dcbe2c5c266f862583db3ed9e9822","receiptsRoot":"0xb7437cdd66aeb49efc2e0bcbb0dd37a4bf6bfd144e2548063019c0de3edcd230","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec810","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ec0","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4209","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x1a3ef89efa1bc17526dc7582b75a50f594139653ab6856d2250d0fd6d36205fc"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x113c9cd4bf986e2c81daca61d853f9bc282e719c64f93790e6f2a6a3cbd70d7a', '1', '41278', '1749040832', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405903', '0xe8316c3dda327b0f2ffbf897cd8ed58403e92464fc0a8431aa18d87607769873', '0xfabb98fe58fdcceb46f18d5bd8da12fe86ac0f93d3b3f5cb4d816ed25421b1f4', '{"parentHash":"0xfabb98fe58fdcceb46f18d5bd8da12fe86ac0f93d3b3f5cb4d816ed25421b1f4","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x1b14945e264d076f671f3c05c7772b104d5ed19fd984dfec7e60e39e5de8e51c","transactionsRoot":"0x0b0d04238d929d43ad494667ab2314b68ca5333250d22db72173c16adbfa3f67","receiptsRoot":"0x72c618712d04d620688b3fbe127d4e97646175d9489180e3a2ee68190bc42b3d","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec80f","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403eac","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4209","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xe8316c3dda327b0f2ffbf897cd8ed58403e92464fc0a8431aa18d87607769873"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x1b14945e264d076f671f3c05c7772b104d5ed19fd984dfec7e60e39e5de8e51c', '1', '41278', '1749040812', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405902', '0xfabb98fe58fdcceb46f18d5bd8da12fe86ac0f93d3b3f5cb4d816ed25421b1f4', '0x871cc2d80e31ecf368ff2b2a9ac3c5b6b1a629819f934661a337b595e4a67656', '{"parentHash":"0x871cc2d80e31ecf368ff2b2a9ac3c5b6b1a629819f934661a337b595e4a67656","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xa4dd3c611ad0d84a7f388a10586fa10fbf58633eda289d16873721c72f1cd310","transactionsRoot":"0x86c194ba8c77ff634ef255e4edeb6cc37f1fd191bc485df1fdf5c1309f9d0a52","receiptsRoot":"0x651d9adc4b53c1f42f088efe35f72fa8137573d415a1568474adba4dbacb39d6","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec80e","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ea8","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4209","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xfabb98fe58fdcceb46f18d5bd8da12fe86ac0f93d3b3f5cb4d816ed25421b1f4"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xa4dd3c611ad0d84a7f388a10586fa10fbf58633eda289d16873721c72f1cd310', '1', '41278', '1749040808', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405901', '0x871cc2d80e31ecf368ff2b2a9ac3c5b6b1a629819f934661a337b595e4a67656', '0xa7b974055fa99cdfcd3df5c464d145b49a120af486ab9d1bc5d423945664916e', '{"parentHash":"0xa7b974055fa99cdfcd3df5c464d145b49a120af486ab9d1bc5d423945664916e","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xacd037315e6564943a24e4534d0759f41544f9bd6be26708790890ee9bea2f50","transactionsRoot":"0x68fb1ba44ab3312dfe2e277e663f553f2201624e480fc8f8ff040eb68e4438cb","receiptsRoot":"0x1a04187bb9c19a2a2195594edc763ac05b535a6ccc2979de441682b96dd98118","logsBloom":"0x00000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000008000000000000000000000000000000000000000000000000000000000004000000000000000000000020000000000010000000000000000000000000000000000200000000000000000000000000000000000000080000000000000000000000000000000000000000200000000000000000100000000002000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec80d","gasLimit":"0x1312d00","gasUsed":"0x8620","timestamp":"0x68403ea2","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4209","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x871cc2d80e31ecf368ff2b2a9ac3c5b6b1a629819f934661a337b595e4a67656"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xacd037315e6564943a24e4534d0759f41544f9bd6be26708790890ee9bea2f50', '1', '34336', '1749040802', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405900', '0xa7b974055fa99cdfcd3df5c464d145b49a120af486ab9d1bc5d423945664916e', '0x7aa2c09fe1accc348ba4357a224c883f2dd306cefaa7d46d69c05f5ca40bcc60', '{"parentHash":"0x7aa2c09fe1accc348ba4357a224c883f2dd306cefaa7d46d69c05f5ca40bcc60","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x370dd68f0e68205715b71ce6fdb062988ad111f6643ce6a5565dd25be571e5be","transactionsRoot":"0x6ad3acdfe3325bc97261a13c24c3d7cf226db3f95451311844142f5fabe1951b","receiptsRoot":"0x6f53d75611f0f7afec6999ba0a486aba9164ca3ce41d15a91d488e1de86124e4","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec80c","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e9d","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4209","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xa7b974055fa99cdfcd3df5c464d145b49a120af486ab9d1bc5d423945664916e"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x370dd68f0e68205715b71ce6fdb062988ad111f6643ce6a5565dd25be571e5be', '1', '41278', '1749040797', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405899', '0x7aa2c09fe1accc348ba4357a224c883f2dd306cefaa7d46d69c05f5ca40bcc60', '0x2b0f5f77e5723e72955e3f750d5b4f51f62fad67e60a146e315336448c04f7fe', '{"parentHash":"0x2b0f5f77e5723e72955e3f750d5b4f51f62fad67e60a146e315336448c04f7fe","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xab2b0da8e2daa7660a748d964211def5f1e6a91983972d47218db4295c0b54b2","transactionsRoot":"0x0962a67f16f474fabfd25da687d6095720a98db659c4c1352a1fadf3156babed","receiptsRoot":"0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec80b","gasLimit":"0x1312d00","gasUsed":"0x5208","timestamp":"0x68403e98","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4209","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x7aa2c09fe1accc348ba4357a224c883f2dd306cefaa7d46d69c05f5ca40bcc60"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xab2b0da8e2daa7660a748d964211def5f1e6a91983972d47218db4295c0b54b2', '1', '21000', '1749040792', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405898', '0x2b0f5f77e5723e72955e3f750d5b4f51f62fad67e60a146e315336448c04f7fe', '0x2764a0469deea354593e29780f8c60caba6eccbb0a92332a794ddd0a03165f59', '{"parentHash":"0x2764a0469deea354593e29780f8c60caba6eccbb0a92332a794ddd0a03165f59","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xb5134ffa25a59168b9956b911a6fef37c12d972967cc5956a4f27972ded41bb7","transactionsRoot":"0xa0597b8e3f72a5874f1a6fa54af2b8deb580b9a978603d1f5b9a798e4bbe4b4a","receiptsRoot":"0x8643021b578ed7905c266f7f2102f877fad7bb4c430c5f42782c4816c5e62dab","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec80a","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e90","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x2b0f5f77e5723e72955e3f750d5b4f51f62fad67e60a146e315336448c04f7fe"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xb5134ffa25a59168b9956b911a6fef37c12d972967cc5956a4f27972ded41bb7', '1', '41278', '1749040784', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405897', '0x2764a0469deea354593e29780f8c60caba6eccbb0a92332a794ddd0a03165f59', '0xccc841ab6d00b48dbf95af892e4bc88934465a5bc53969828e7b1217361205ff', '{"parentHash":"0xccc841ab6d00b48dbf95af892e4bc88934465a5bc53969828e7b1217361205ff","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x09a6d6e8640bd61d842161da0f9c6391209a9a9a0f2f2781b1dc6282cedbd610","transactionsRoot":"0xbd1c9f8a8a3154c3880e33ec0c06b8505868b67d90cb8f3b299fa13e7d492875","receiptsRoot":"0x89857c435a630b2a034d7315966d0b4ac7b30c0cb56a7aa840363b6b871ee82f","logsBloom":"0x00000000000100000000000000100000800100000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000008000000000000100000000000000000000000200200000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000004000000000000000040000000000002000000000000000080","difficulty":"0x1","number":"0x9ec809","gasLimit":"0x1312d00","gasUsed":"0x1f380","timestamp":"0x68403e8e","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x2764a0469deea354593e29780f8c60caba6eccbb0a92332a794ddd0a03165f59"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x09a6d6e8640bd61d842161da0f9c6391209a9a9a0f2f2781b1dc6282cedbd610', '1', '127872', '1749040782', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405896', '0xccc841ab6d00b48dbf95af892e4bc88934465a5bc53969828e7b1217361205ff', '0x214bf9a33e5d2324b2dbb8ee71ad173f6a26deada3e2c0cb425088e52ba4b4db', '{"parentHash":"0x214bf9a33e5d2324b2dbb8ee71ad173f6a26deada3e2c0cb425088e52ba4b4db","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xa395e419ca646fe0f7cb0da14c56f5c79271a2a595d0ef6cc6acf6f7cd029fc8","transactionsRoot":"0xba1d4eb390286c13885867a1a645b670b26b78b4912c486065246bdd0a34aca0","receiptsRoot":"0x53f3bccb9c46c653b9ff54f09e18dc1238c27950a664b205b12efe0a1bbee8a8","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec808","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e84","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xccc841ab6d00b48dbf95af892e4bc88934465a5bc53969828e7b1217361205ff"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xa395e419ca646fe0f7cb0da14c56f5c79271a2a595d0ef6cc6acf6f7cd029fc8', '1', '41278', '1749040772', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405895', '0x214bf9a33e5d2324b2dbb8ee71ad173f6a26deada3e2c0cb425088e52ba4b4db', '0x395ce50472ccf625733c2b7d706e4804a551b686f0dfd6098a740f927143d4af', '{"parentHash":"0x395ce50472ccf625733c2b7d706e4804a551b686f0dfd6098a740f927143d4af","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x74d7d8e05cc268b33525ee0fc481adebc1f5698b1270bba3dc4ebd4679c99dda","transactionsRoot":"0x674ca977dd5534c976532f6f496675f62c540da6ee4f0b8d4f9d870e94c88d5f","receiptsRoot":"0x19c5022b69c902a2e118e4e0ec9147ab1bb10bd58e8aaf6bc9ac5a99965f25fa","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec807","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e70","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x214bf9a33e5d2324b2dbb8ee71ad173f6a26deada3e2c0cb425088e52ba4b4db"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x74d7d8e05cc268b33525ee0fc481adebc1f5698b1270bba3dc4ebd4679c99dda', '1', '41278', '1749040752', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405894', '0x395ce50472ccf625733c2b7d706e4804a551b686f0dfd6098a740f927143d4af', '0x8d91de26317b9d136d4e67bf7f7d19e56a30688a080434423a23a2223287172f', '{"parentHash":"0x8d91de26317b9d136d4e67bf7f7d19e56a30688a080434423a23a2223287172f","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7c2532876cf532d8a67ca018b9c2209714be869fcc40afb6726ee61995b0243c","transactionsRoot":"0x86a381e8e404fe80abcca7ad2edc11f412bdb37d50dcf937a605d5c9b55a93d3","receiptsRoot":"0x1c036b2520c2028559472810982642df2a876d05dfe74db01ee814c9bdc060d2","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec806","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e66","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x395ce50472ccf625733c2b7d706e4804a551b686f0dfd6098a740f927143d4af"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7c2532876cf532d8a67ca018b9c2209714be869fcc40afb6726ee61995b0243c', '1', '41278', '1749040742', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405893', '0x8d91de26317b9d136d4e67bf7f7d19e56a30688a080434423a23a2223287172f', '0x528b846bc9704e0de0087017c70f92b987f3ee2971f84960282d20b4e3835881', '{"parentHash":"0x528b846bc9704e0de0087017c70f92b987f3ee2971f84960282d20b4e3835881","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xaad7476f9f8b5c5a8ba502f10f30aacea87c2b64b98f4e6417fec5107093eebc","transactionsRoot":"0x9702bcb13c8d0140a6c3585259d2a81b49f3f420720f699fd6af58480bb7ff07","receiptsRoot":"0x9f40a7d564877756ee9ffbe17caba4eab2e866ae0a24385ccaf4eb40d1f137f4","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec805","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e5c","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x8d91de26317b9d136d4e67bf7f7d19e56a30688a080434423a23a2223287172f"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xaad7476f9f8b5c5a8ba502f10f30aacea87c2b64b98f4e6417fec5107093eebc', '1', '41278', '1749040732', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405892', '0x528b846bc9704e0de0087017c70f92b987f3ee2971f84960282d20b4e3835881', '0x87252e31710ffd707df64b51148442508386c5a51060aff222be3d39bec8a0df', '{"parentHash":"0x87252e31710ffd707df64b51148442508386c5a51060aff222be3d39bec8a0df","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xfa34a383ee361cd76b5e7571ad93ab6e61cca6c48dddff78206195bceab831d3","transactionsRoot":"0xfbedc88931a82055c5eee1eae8c55ef2a5b481e974508bac514bd65d7891dfd9","receiptsRoot":"0xd3ed64874a48ae7b136587fa7aa64389003dc0489d88cd8260d716926586c650","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec804","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e52","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x528b846bc9704e0de0087017c70f92b987f3ee2971f84960282d20b4e3835881"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xfa34a383ee361cd76b5e7571ad93ab6e61cca6c48dddff78206195bceab831d3', '1', '41278', '1749040722', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405891', '0x87252e31710ffd707df64b51148442508386c5a51060aff222be3d39bec8a0df', '0x2568ef06ff448cd1537b0e7bc3e2f419b3181d15d3cbd5bff5323287b344df2a', '{"parentHash":"0x2568ef06ff448cd1537b0e7bc3e2f419b3181d15d3cbd5bff5323287b344df2a","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xcbb589f92543210a051162d57891cdfa727a3a9b247b54515eee91d830e550a1","transactionsRoot":"0xaeda3c1e1dc1a6d49f48fc920b6b3fb9b23d351f1571b8afff3d58a3d7ea9b4f","receiptsRoot":"0xe1e362610a65555a1c2e8e7e1022da457d69eef89d84360c6c7c4b99926020d3","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec803","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e48","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420b","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x87252e31710ffd707df64b51148442508386c5a51060aff222be3d39bec8a0df"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xcbb589f92543210a051162d57891cdfa727a3a9b247b54515eee91d830e550a1', '1', '41278', '1749040712', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405890', '0x2568ef06ff448cd1537b0e7bc3e2f419b3181d15d3cbd5bff5323287b344df2a', '0x6cfe90ead0f53e7a9a9d2fc519e0cd6ffdd759326511d366165112ed681c12bf', '{"parentHash":"0x6cfe90ead0f53e7a9a9d2fc519e0cd6ffdd759326511d366165112ed681c12bf","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x91e6c4f3fee49d48443ed5d80b9797ac341bd9a6cce52ae3b4d3d811fbcbd6c4","transactionsRoot":"0x5830cd332dfadb02b07e8c2e1b0ce543cc6131b6d1421f2749726d6b18a65c07","receiptsRoot":"0xadc435f05bccaa6f053bb59106fa78929c113861d8bc98914848519a2e7c2cc6","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec802","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403e34","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420b","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x2568ef06ff448cd1537b0e7bc3e2f419b3181d15d3cbd5bff5323287b344df2a"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x91e6c4f3fee49d48443ed5d80b9797ac341bd9a6cce52ae3b4d3d811fbcbd6c4', '1', '38478', '1749040692', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405889', '0x6cfe90ead0f53e7a9a9d2fc519e0cd6ffdd759326511d366165112ed681c12bf', '0x6a38276e6a2362cd532917f006e64410228bb18bd4a3f5ed3066fb66526b60bf', '{"parentHash":"0x6a38276e6a2362cd532917f006e64410228bb18bd4a3f5ed3066fb66526b60bf","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x8652a2c521f31917cda9514ce1266f59da61e6729d51c7d2e54d47288121a56d","transactionsRoot":"0x8aa6928333729cf2bbef8d6c881eea8b20d728f81904ba0f902257c2b5426143","receiptsRoot":"0xca1d6dda2b4062a145d4ba39a380c60647be106d9a90006263e1e17c15c260f7","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec801","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e2a","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420c","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x6cfe90ead0f53e7a9a9d2fc519e0cd6ffdd759326511d366165112ed681c12bf"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x8652a2c521f31917cda9514ce1266f59da61e6729d51c7d2e54d47288121a56d', '1', '41278', '1749040682', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405888', '0x6a38276e6a2362cd532917f006e64410228bb18bd4a3f5ed3066fb66526b60bf', '0xd2c4b4473d85616fd40e7cd113ca2a7d213cd7b2eb6689ed3011561bf2beadd6', '{"parentHash":"0xd2c4b4473d85616fd40e7cd113ca2a7d213cd7b2eb6689ed3011561bf2beadd6","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe93995241062b2ed46a9f1bf39194fc0bd93d0cd4a5fe33cfc0874bdd4b07271","transactionsRoot":"0x9b6f336242607ae928873736295163d42f29a1808b21f6a8b578010724381295","receiptsRoot":"0xfbf7d52c998d2d7f778845430e0a33f9eb9da4fa2c507cc7e058f91c763a6aa0","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec800","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e21","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420c","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x6a38276e6a2362cd532917f006e64410228bb18bd4a3f5ed3066fb66526b60bf"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xe93995241062b2ed46a9f1bf39194fc0bd93d0cd4a5fe33cfc0874bdd4b07271', '1', '41278', '1749040673', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405887', '0xd2c4b4473d85616fd40e7cd113ca2a7d213cd7b2eb6689ed3011561bf2beadd6', '0x968e0d6c7f1c606e5b1390caa3a2d009307e9876be6459e91d7d70e3122a4a13', '{"parentHash":"0x968e0d6c7f1c606e5b1390caa3a2d009307e9876be6459e91d7d70e3122a4a13","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xbe1485bf87d83b9b5ea7b74d47af14534d0abb9e2f1f2e88de6a2ddd3ad66648","transactionsRoot":"0xdf3ebf515a6f9abd2d2084dc7fc4a5e2bdd45f424414324397e54b474ece36d5","receiptsRoot":"0x050577a144328e59f84a3ea82786db2e7b604438fd089dd291ccc6cefb99e05e","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000004000000000000200000000002000000000000000002000000000000001002020000000000001000000000000000000000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000400000000000000000000004000000000000000000000000020000000000000000000000000008000000000800000000400000000000000000000","difficulty":"0x1","number":"0x9ec7ff","gasLimit":"0x1312d00","gasUsed":"0x1ef18","timestamp":"0x68403e20","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420c","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xd2c4b4473d85616fd40e7cd113ca2a7d213cd7b2eb6689ed3011561bf2beadd6"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xbe1485bf87d83b9b5ea7b74d47af14534d0abb9e2f1f2e88de6a2ddd3ad66648', '1', '126744', '1749040672', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405886', '0x968e0d6c7f1c606e5b1390caa3a2d009307e9876be6459e91d7d70e3122a4a13', '0x20526fca2bde7cc3a8efcf51f28da21e174eaa58e50eedc4a50a122fd56c93e0', '{"parentHash":"0x20526fca2bde7cc3a8efcf51f28da21e174eaa58e50eedc4a50a122fd56c93e0","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd05f57b3a0f0216c2ceed4eabbf4745401c6cd3595fab9e1954881377bba57d0","transactionsRoot":"0x4bd7e24a0a14263e50ebc3e743afa12fc53c45ff506163d338c6c1756758b11c","receiptsRoot":"0x0d5adf0a7f65fcdad23fc830f2612c799dfa7130b7a62c0de554988baee81ff8","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7fe","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e16","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420c","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x968e0d6c7f1c606e5b1390caa3a2d009307e9876be6459e91d7d70e3122a4a13"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd05f57b3a0f0216c2ceed4eabbf4745401c6cd3595fab9e1954881377bba57d0', '1', '41278', '1749040662', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405885', '0x20526fca2bde7cc3a8efcf51f28da21e174eaa58e50eedc4a50a122fd56c93e0', '0x057e3a6ad8036acfbb609c94d226a9e313cde7022c8320ace35486c74ed93ebf', '{"parentHash":"0x057e3a6ad8036acfbb609c94d226a9e313cde7022c8320ace35486c74ed93ebf","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xb4dc24c6524f1ecd887daca5878189e19659cedf1203ae95979e1683d2193e95","transactionsRoot":"0xcd54853e7d6590e22aa140a52b1a8b672384a5e7fcee871acb3cb28055eaebdf","receiptsRoot":"0x86695686b2655990737600e97f2b772e3a65fb247b5169276326297392d5d6a4","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7fd","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403e0c","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420c","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x20526fca2bde7cc3a8efcf51f28da21e174eaa58e50eedc4a50a122fd56c93e0"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xb4dc24c6524f1ecd887daca5878189e19659cedf1203ae95979e1683d2193e95', '1', '41278', '1749040652', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405884', '0x057e3a6ad8036acfbb609c94d226a9e313cde7022c8320ace35486c74ed93ebf', '0xfacac8334ed79251cc2171a7f94a9b041ff026c1a298e433705571d7beec13a9', '{"parentHash":"0xfacac8334ed79251cc2171a7f94a9b041ff026c1a298e433705571d7beec13a9","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x9a5d78cd9225fc4d182876aa0091394c6b398a665831da4b48a0a49f10ae0472","transactionsRoot":"0x81b2987e104dbfc0e87db5f0ed6bd3bc28c2638861c04e62af14d2fa54c33c20","receiptsRoot":"0x5153484422f11397b45947dfdffe38d88d8d66702fc5f26f0838ae98a1f3a33f","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7fc","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403dfb","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x057e3a6ad8036acfbb609c94d226a9e313cde7022c8320ace35486c74ed93ebf"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x9a5d78cd9225fc4d182876aa0091394c6b398a665831da4b48a0a49f10ae0472', '1', '38478', '1749040635', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405883', '0xfacac8334ed79251cc2171a7f94a9b041ff026c1a298e433705571d7beec13a9', '0xc73ba76842492f6f19d82552f0076a7f131c5f74faf259589fcf2190b14f08ac', '{"parentHash":"0xc73ba76842492f6f19d82552f0076a7f131c5f74faf259589fcf2190b14f08ac","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x9b2e6a51333c4d4277e62c2c40f5a8d420838251c523d8a9a90286a19c8f239d","transactionsRoot":"0x22924152934e4d4b0b7f587b97671f3129328e3d2de096a09530cf6229c51faa","receiptsRoot":"0x063c2c53250aa9bff386608a42a6b423448d3528fa8b20ba429356b39c2cd51f","logsBloom":"0x00000000000000000000000000002000020000000080000000000100000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000040000000000000000000000000020000000000010000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000008000080000000000000000000000000000000000000000000000000000000000000000000000000000004000000001000000000000000000000110000000000044040000040000000000000100000000000000000800200000000000000004000000000000000","difficulty":"0x1","number":"0x9ec7fb","gasLimit":"0x1312d00","gasUsed":"0x44ffc","timestamp":"0x68403dfa","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xfacac8334ed79251cc2171a7f94a9b041ff026c1a298e433705571d7beec13a9"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x9b2e6a51333c4d4277e62c2c40f5a8d420838251c523d8a9a90286a19c8f239d', '1', '282620', '1749040634', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405882', '0xc73ba76842492f6f19d82552f0076a7f131c5f74faf259589fcf2190b14f08ac', '0x78508d2dfc4c0a6a68518b3e95ba3316920bf047b9bb0f9a847fefbc08a14749', '{"parentHash":"0x78508d2dfc4c0a6a68518b3e95ba3316920bf047b9bb0f9a847fefbc08a14749","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xf8bb27e23ff70c70d078c3db188d593a2e8180e105600e19966b86780942d0ec","transactionsRoot":"0x76e4ca77c69038caecc436d178269a173385f7293b50f73076d2f190f23fab74","receiptsRoot":"0xfad2b29eefbd463cc19fcdac92738ab9541cb1233066bada883a2828fa34e9b7","logsBloom":"0x00000000000000000000000000000000000000000080000000000100000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000040000000000000000000004000020000000000010000000000000000009000000000000000000200000000000000000000000000000040000000800000000000004000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000001000000000000000000000110000000000044000000040000000000000100000000000000000800200000000000000004000000000000000","difficulty":"0x1","number":"0x9ec7fa","gasLimit":"0x1312d00","gasUsed":"0x44ffc","timestamp":"0x68403df8","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xc73ba76842492f6f19d82552f0076a7f131c5f74faf259589fcf2190b14f08ac"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xf8bb27e23ff70c70d078c3db188d593a2e8180e105600e19966b86780942d0ec', '1', '282620', '1749040632', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405881', '0x78508d2dfc4c0a6a68518b3e95ba3316920bf047b9bb0f9a847fefbc08a14749', '0xf6efada8cde9aeb1646c79a6356920b8f729b102245faf9dc4a72ad28f950687', '{"parentHash":"0xf6efada8cde9aeb1646c79a6356920b8f729b102245faf9dc4a72ad28f950687","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd116d45373faeff34c3799cf275ccecddc78cfdc3ddb0a9da2ada776d823d22f","transactionsRoot":"0x1ce962947544f7e8c1cb0b778e70ef649f046d2c3d7b4ca8ab6d0c80571da2f4","receiptsRoot":"0x5a496cb0fd35bb5f60018d396e52ef85398069a3e1b4ee5ed44464cda77bff5e","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7f9","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403def","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x78508d2dfc4c0a6a68518b3e95ba3316920bf047b9bb0f9a847fefbc08a14749"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd116d45373faeff34c3799cf275ccecddc78cfdc3ddb0a9da2ada776d823d22f', '1', '41278', '1749040623', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405880', '0xf6efada8cde9aeb1646c79a6356920b8f729b102245faf9dc4a72ad28f950687', '0xedf9ab1b6c3048297277fe3164ba7c3bc00ecde4239bcf7ee0955bfca2c25f02', '{"parentHash":"0xedf9ab1b6c3048297277fe3164ba7c3bc00ecde4239bcf7ee0955bfca2c25f02","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x9dcb8c83ea344f37ba615c7e8107ac65afad40121b7035f1a19c7ad3f6c85901","transactionsRoot":"0xf0fd30db1d38fc9fcce73f5e382d5f30bd7ec65aef6390cba0c50ea33cd152e9","receiptsRoot":"0x9905a0ace0572edafce575d389028ce6f34d9e23af872104be967a4abc8278c1","logsBloom":"0x00000000000000000000800002000000000000000000000000000000000000020000000000000000000000000000002000000000000000000000000000000000000000800000000000000000001000000480000020020000000000020000000100000020000000400000000000800802004101100000000000000108010400000000000000400000000000000000000020000000000000008000020000000000000000000000200000000000000000000000000000000800002000300000030000000000000000000000000000000000000000200000000000004000000000000000000000000000000000000000000001000040000000005000000008000004","difficulty":"0x1","number":"0x9ec7f8","gasLimit":"0x1312d00","gasUsed":"0x32a54","timestamp":"0x68403dee","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xf6efada8cde9aeb1646c79a6356920b8f729b102245faf9dc4a72ad28f950687"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x9dcb8c83ea344f37ba615c7e8107ac65afad40121b7035f1a19c7ad3f6c85901', '1', '207444', '1749040622', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405879', '0xedf9ab1b6c3048297277fe3164ba7c3bc00ecde4239bcf7ee0955bfca2c25f02', '0xcc575de0fff25ae812672ee31ca4ab6a0fda50eb01a298c66dcae125eef88b18', '{"parentHash":"0xcc575de0fff25ae812672ee31ca4ab6a0fda50eb01a298c66dcae125eef88b18","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd3a4c1e221a53c8a3a999aab87907419bee71f6c075c0006f6e41da6ed635b75","transactionsRoot":"0xae0e9616983cc42c48cb884f9bd554e0d56fa197719a73bd41a62ae05f14eda1","receiptsRoot":"0xbe7b6ca0bf5dde8608ea581e5ea5e86b14c6ce4285963fc26d4367ebedc20031","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7f7","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403de4","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xedf9ab1b6c3048297277fe3164ba7c3bc00ecde4239bcf7ee0955bfca2c25f02"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd3a4c1e221a53c8a3a999aab87907419bee71f6c075c0006f6e41da6ed635b75', '1', '41278', '1749040612', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405878', '0xcc575de0fff25ae812672ee31ca4ab6a0fda50eb01a298c66dcae125eef88b18', '0x05374e5fb1f264c06cf57fe6d6358ad10feda9adfa4a802df51d810c6e2472a0', '{"parentHash":"0x05374e5fb1f264c06cf57fe6d6358ad10feda9adfa4a802df51d810c6e2472a0","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x0b879aeda4de9abcd126e92d217f40908089585476908278ed9b4b1c5e4aeeec","transactionsRoot":"0x5968bec28f761b4af169aeaa4ae4135ea0e87850e8da275e75330b57e2aaf60b","receiptsRoot":"0xe8d5868e77fa84caa4b337e2f288c3c104155afddf4033ebf6f4a80de30a4a73","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7f6","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403de3","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420e","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xcc575de0fff25ae812672ee31ca4ab6a0fda50eb01a298c66dcae125eef88b18"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x0b879aeda4de9abcd126e92d217f40908089585476908278ed9b4b1c5e4aeeec', '1', '41278', '1749040611', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405877', '0x05374e5fb1f264c06cf57fe6d6358ad10feda9adfa4a802df51d810c6e2472a0', '0x4b1b5cd0d12256112ab173579166accef04ada4016a95d4debc9022fc76c3dc3', '{"parentHash":"0x4b1b5cd0d12256112ab173579166accef04ada4016a95d4debc9022fc76c3dc3","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x81e36bfdabaa2b4bb6ecda5bcf629273d8605ed196ddf2ce24fa742705ec1704","transactionsRoot":"0x80141a4e07d2cd386f8a9dda8f925146f7ac50d1b58685036c7008c7d61f8e4d","receiptsRoot":"0x1fb6a3ca77f7bb96604326ca7d51d7645745e7ce487e5f2a89161a1837f9a5f1","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec7f5","gasLimit":"0x1312d00","gasUsed":"0x94d6","timestamp":"0x68403de2","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420e","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x05374e5fb1f264c06cf57fe6d6358ad10feda9adfa4a802df51d810c6e2472a0"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x81e36bfdabaa2b4bb6ecda5bcf629273d8605ed196ddf2ce24fa742705ec1704', '1', '38102', '1749040610', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405876', '0x4b1b5cd0d12256112ab173579166accef04ada4016a95d4debc9022fc76c3dc3', '0x01eecd9be4867e5574edbc5f4bb451b14c000555e2027ed2528e1a97994b724a', '{"parentHash":"0x01eecd9be4867e5574edbc5f4bb451b14c000555e2027ed2528e1a97994b724a","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe880da59e096266cc6cd9cc7cf38e088811d777a9bb2cf3de4bd9aa744abe8e8","transactionsRoot":"0x017648197fa048cb6c775ccec301da7529c1dc99530e7673b23d62e9bf9d1b04","receiptsRoot":"0x725806b481bfd1727dd493d969a6d57b793b6185761f5452ecf38d8acbec1364","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec7f4","gasLimit":"0x1312d00","gasUsed":"0x94ee","timestamp":"0x68403de1","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420e","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x4b1b5cd0d12256112ab173579166accef04ada4016a95d4debc9022fc76c3dc3"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xe880da59e096266cc6cd9cc7cf38e088811d777a9bb2cf3de4bd9aa744abe8e8', '1', '38126', '1749040609', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405875', '0x01eecd9be4867e5574edbc5f4bb451b14c000555e2027ed2528e1a97994b724a', '0x69e9e70678e2b9c8c9be400457ff62fcc60d0246b087c723542764219f85655a', '{"parentHash":"0x69e9e70678e2b9c8c9be400457ff62fcc60d0246b087c723542764219f85655a","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x94a03c1f0734fb772d9169eb70c71d4515ea471783aee0f9c897f95b0b7524c8","transactionsRoot":"0x085579bd86b81297a9558c1631e77061879651fa22cdf43d28a69f0030e29933","receiptsRoot":"0x725806b481bfd1727dd493d969a6d57b793b6185761f5452ecf38d8acbec1364","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec7f3","gasLimit":"0x1312d00","gasUsed":"0x94ee","timestamp":"0x68403dda","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420e","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x01eecd9be4867e5574edbc5f4bb451b14c000555e2027ed2528e1a97994b724a"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x94a03c1f0734fb772d9169eb70c71d4515ea471783aee0f9c897f95b0b7524c8', '1', '38126', '1749040602', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405874', '0x69e9e70678e2b9c8c9be400457ff62fcc60d0246b087c723542764219f85655a', '0xb4707e05b6a94fcee97549a1948e3b62bfc5a99f06747dba2c0cb2f4d7e79813', '{"parentHash":"0xb4707e05b6a94fcee97549a1948e3b62bfc5a99f06747dba2c0cb2f4d7e79813","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x9f50354bd7286fd692af5ac7c926029e12ac43c20c4dc218a50bbcf633b532f8","transactionsRoot":"0x932a70b5c40cb41e6c9f171f9edf0d9cfa7ff6dfa55412a7ea8b8a5f89042724","receiptsRoot":"0xe442e83e289dc26dcd4f8c6c65a6c46bfdc1a5a97e6ba9a754971c3eba9895be","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7f2","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403dd0","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420e","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x69e9e70678e2b9c8c9be400457ff62fcc60d0246b087c723542764219f85655a"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x9f50354bd7286fd692af5ac7c926029e12ac43c20c4dc218a50bbcf633b532f8', '1', '41278', '1749040592', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405873', '0xb4707e05b6a94fcee97549a1948e3b62bfc5a99f06747dba2c0cb2f4d7e79813', '0x43c18a19a8768acdb77e41b49a43bdc49f12b791923096d7c41c04b912e9cb32', '{"parentHash":"0x43c18a19a8768acdb77e41b49a43bdc49f12b791923096d7c41c04b912e9cb32","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x48d2289fb261a4c36e5c97c1ec3042ad8e160f3ffa43e837494bba2fcef39664","transactionsRoot":"0x7939400fadb4a475ad113a180ee61cab5ba9ab49f3d311e2100d95902c66ca2d","receiptsRoot":"0xeb37012acdb53d5a6724a6bdbfe321dc09d2a5dc866c0ee71b03160ceccf9b98","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7f1","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403dbc","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420f","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xb4707e05b6a94fcee97549a1948e3b62bfc5a99f06747dba2c0cb2f4d7e79813"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x48d2289fb261a4c36e5c97c1ec3042ad8e160f3ffa43e837494bba2fcef39664', '1', '41278', '1749040572', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405872', '0x43c18a19a8768acdb77e41b49a43bdc49f12b791923096d7c41c04b912e9cb32', '0x92a398563f6633b630bd14c6b52d7ff3134f6fabebbf5310602337c3f319d35e', '{"parentHash":"0x92a398563f6633b630bd14c6b52d7ff3134f6fabebbf5310602337c3f319d35e","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7f63e2d929b89a0d759844ad9b87fddebad02554057c0f10db6abdde0c71ee03","transactionsRoot":"0x5d1a65fffc8773cf8d7ed8eefc3cb131250e923bb4440eb18024cff4980ea013","receiptsRoot":"0x442236c88c3523f8aae150fe6bd15b68a4f4dfd9f11c4f6f9d9f4d335c636056","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7f0","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403db2","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420f","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x43c18a19a8768acdb77e41b49a43bdc49f12b791923096d7c41c04b912e9cb32"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7f63e2d929b89a0d759844ad9b87fddebad02554057c0f10db6abdde0c71ee03', '1', '41278', '1749040562', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405871', '0x92a398563f6633b630bd14c6b52d7ff3134f6fabebbf5310602337c3f319d35e', '0x089e2bb4e07082cc9a1c24393a5a55a10ee23b4347c6166f23e897f8d24a911f', '{"parentHash":"0x089e2bb4e07082cc9a1c24393a5a55a10ee23b4347c6166f23e897f8d24a911f","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x6cf57c6e8adad1c7e476e9370f5080a485ecca78859736f2b10b9ceb05905cad","transactionsRoot":"0x660cb5d93b210743cb8be72c335f836217cfecccac66dc2a305a12f4349cf888","receiptsRoot":"0xbb2c9ed022a6dd6b28b749d2e453a5c6fe50788bc0269446755d00bdd1d3b3dc","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7ef","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403da8","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4210","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x92a398563f6633b630bd14c6b52d7ff3134f6fabebbf5310602337c3f319d35e"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x6cf57c6e8adad1c7e476e9370f5080a485ecca78859736f2b10b9ceb05905cad', '1', '38478', '1749040552', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405870', '0x089e2bb4e07082cc9a1c24393a5a55a10ee23b4347c6166f23e897f8d24a911f', '0xe0dbda5f14178caa917cc6925543eee22a9c442321ca374b595f4fbeb6166ad9', '{"parentHash":"0xe0dbda5f14178caa917cc6925543eee22a9c442321ca374b595f4fbeb6166ad9","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x1d0801740e6f005e671ac7dcdba1f0d78a034c687b85ee4ab4ba624dd0bab5c8","transactionsRoot":"0xc9725249bb2042b6fe796d4b8e73fa7c3e0bb8360157b2dc61a324c2abb52ad6","receiptsRoot":"0x08ebb26faf332ca98f35bc1d6bbc36c9dd3abccae0683f1e5863a0ed70624b79","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7ee","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d9e","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef420f","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x089e2bb4e07082cc9a1c24393a5a55a10ee23b4347c6166f23e897f8d24a911f"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x1d0801740e6f005e671ac7dcdba1f0d78a034c687b85ee4ab4ba624dd0bab5c8', '1', '41278', '1749040542', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405869', '0xe0dbda5f14178caa917cc6925543eee22a9c442321ca374b595f4fbeb6166ad9', '0xd20fe659b627e98f54460df69637d1daab7708ffba0f47ff7bdd3ae73d59351f', '{"parentHash":"0xd20fe659b627e98f54460df69637d1daab7708ffba0f47ff7bdd3ae73d59351f","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd3b9266c3a5fd9bb9f178355d9171291fb0bae019847c5a98838b9d5e9fa5df8","transactionsRoot":"0x5f15e592ce4107a52ae1c25d83d5c88c6e61c22c46c8bea753f595e8e6a90edb","receiptsRoot":"0x2ce530c37595faad1b8514265f7686f4ecdae29df582aacd830162ca67eebd3b","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7ed","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d9b","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4211","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xe0dbda5f14178caa917cc6925543eee22a9c442321ca374b595f4fbeb6166ad9"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd3b9266c3a5fd9bb9f178355d9171291fb0bae019847c5a98838b9d5e9fa5df8', '1', '41278', '1749040539', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405868', '0xd20fe659b627e98f54460df69637d1daab7708ffba0f47ff7bdd3ae73d59351f', '0x6e60c7ec087b69d9efe3c8ea976d4070d3de8222e47f49cd186922bf55fc2093', '{"parentHash":"0x6e60c7ec087b69d9efe3c8ea976d4070d3de8222e47f49cd186922bf55fc2093","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xf94bee03bbd1ba64aa62b0b9e3d34ad78270db8e98945130653d34dc780e9377","transactionsRoot":"0x732a7e2e6ec1b4d00d97f4c5dfe7412c732dc621038aa9b104ebebbe9ac7ceb2","receiptsRoot":"0x5335599f7ca9b8a0614a5e303a954a421aec48c738a44f14f9f7a67b39d54980","logsBloom":"0x00000000000000000000000200000000000000000080000000000100000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000400000000000000000000000040000000000000000000000000020000000000010000000000000000001000000000000000000200000000000000000000000000000040000000800000000000004000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000110000000000044000000040000000000000100000000000000000800200000000000000004000000000000000","difficulty":"0x1","number":"0x9ec7ec","gasLimit":"0x1312d00","gasUsed":"0x3ff08","timestamp":"0x68403d94","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4211","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xd20fe659b627e98f54460df69637d1daab7708ffba0f47ff7bdd3ae73d59351f"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xf94bee03bbd1ba64aa62b0b9e3d34ad78270db8e98945130653d34dc780e9377', '1', '261896', '1749040532', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405867', '0x6e60c7ec087b69d9efe3c8ea976d4070d3de8222e47f49cd186922bf55fc2093', '0xb5dfdbf522d5c213b593ec525f6cfaab88231d0f17fcc02bf739e68bfc23908f', '{"parentHash":"0xb5dfdbf522d5c213b593ec525f6cfaab88231d0f17fcc02bf739e68bfc23908f","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xfdb2d6a6d649d7411423e5933f98fd4e344a5a7595d94eb3c5f1c87eb39a5571","transactionsRoot":"0xbc2a442ea3a4ae88313338c605ff177286405610e3a01f19cecfa7e13dfcbd60","receiptsRoot":"0x89ac4df1aa1e66cab46d7ab74fbb55525d4e78ddfdbf0830b8bf6bda30e0e751","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7eb","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d80","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4212","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x6e60c7ec087b69d9efe3c8ea976d4070d3de8222e47f49cd186922bf55fc2093"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xfdb2d6a6d649d7411423e5933f98fd4e344a5a7595d94eb3c5f1c87eb39a5571', '1', '41278', '1749040512', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405866', '0xb5dfdbf522d5c213b593ec525f6cfaab88231d0f17fcc02bf739e68bfc23908f', '0x155ef397933ee406f9ae857088b4b994ac63634cd0c60d403799a0509f7502c3', '{"parentHash":"0x155ef397933ee406f9ae857088b4b994ac63634cd0c60d403799a0509f7502c3","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xad9b8963019671b6953ceec64b4cd588bd61700d2cd3ae5bca16a838298180e7","transactionsRoot":"0x1805d6340195f4455b99900b8c5f2ae51a81cfb1095e9b96f46e4633b01206ec","receiptsRoot":"0x2c2803ca335169b410b0dc4d7b56f9097be417803e1f5d47033d67c206406fb5","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7ea","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d76","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4212","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xb5dfdbf522d5c213b593ec525f6cfaab88231d0f17fcc02bf739e68bfc23908f"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xad9b8963019671b6953ceec64b4cd588bd61700d2cd3ae5bca16a838298180e7', '1', '41278', '1749040502', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405865', '0x155ef397933ee406f9ae857088b4b994ac63634cd0c60d403799a0509f7502c3', '0xb362aa01b234044e13b4a593c2799bc9beebaf7842f1b08c7392c7ad3cd66fb5', '{"parentHash":"0xb362aa01b234044e13b4a593c2799bc9beebaf7842f1b08c7392c7ad3cd66fb5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7e71c61d5df03ea493bb320a1090ca7ec133af6af968e0ec63241e33189a857b","transactionsRoot":"0xfb69b9098c0d9256cee25deb0de6ead3a4f36ce3fbda3e367caf8821840f35fc","receiptsRoot":"0x94f8636141f298253271ef05fd11f1d889dc9536a333639e1ef1758fd2ee6693","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e9","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d6c","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4213","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x155ef397933ee406f9ae857088b4b994ac63634cd0c60d403799a0509f7502c3"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7e71c61d5df03ea493bb320a1090ca7ec133af6af968e0ec63241e33189a857b', '1', '41278', '1749040492', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405864', '0xb362aa01b234044e13b4a593c2799bc9beebaf7842f1b08c7392c7ad3cd66fb5', '0xdabc00227ee30c895cbae5da1cbd9e6c0f0ca6cfd693032302eb746773454729', '{"parentHash":"0xdabc00227ee30c895cbae5da1cbd9e6c0f0ca6cfd693032302eb746773454729","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x0e61fa8122e769e84f578586c0c4669fcd029fca6757ac4a389ecdb48e8a2af5","transactionsRoot":"0x8b797d63c8fdc1c2a612569a3ba769cfc6c38eaeca6d769d8ec0747d0cded148","receiptsRoot":"0x1fd44fcac2c6ee82a11a8536ade8375b99e84ae2bdcc53417a70a72e04ba1899","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e8","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d62","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4212","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xb362aa01b234044e13b4a593c2799bc9beebaf7842f1b08c7392c7ad3cd66fb5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x0e61fa8122e769e84f578586c0c4669fcd029fca6757ac4a389ecdb48e8a2af5', '1', '41278', '1749040482', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405863', '0xdabc00227ee30c895cbae5da1cbd9e6c0f0ca6cfd693032302eb746773454729', '0x2d9aaadb9e90e153e1f1de5a88b5fe5b4fb9c54eb5a6aa52d09dcd345add7386', '{"parentHash":"0x2d9aaadb9e90e153e1f1de5a88b5fe5b4fb9c54eb5a6aa52d09dcd345add7386","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xb7f87906df869df6b0e12a6dafce0c8159a1569f9d1cbb251e2cb8e90b0fe4aa","transactionsRoot":"0xb8d68c4d2fa50892436b75422dfb6ce741f5e18399682da0a7907001c2f48f5c","receiptsRoot":"0x39f3c98cb8e66cc17abe431b22c5f133138a20b908f43ca654c9defc7ff627eb","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e7","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403d58","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4213","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xdabc00227ee30c895cbae5da1cbd9e6c0f0ca6cfd693032302eb746773454729"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xb7f87906df869df6b0e12a6dafce0c8159a1569f9d1cbb251e2cb8e90b0fe4aa', '1', '38478', '1749040472', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405862', '0x2d9aaadb9e90e153e1f1de5a88b5fe5b4fb9c54eb5a6aa52d09dcd345add7386', '0xcf0b95b760c8a7cf0dc26d60341e1ba26179fe7c52c33b2f50080c90b926fbcb', '{"parentHash":"0xcf0b95b760c8a7cf0dc26d60341e1ba26179fe7c52c33b2f50080c90b926fbcb","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd5fba4648bc54a5250316a318e7a896c1b476ffe2603c94f3cb6c5abfa0ca4f5","transactionsRoot":"0x2d3a32458bb0f8d4226c51efe7f586ca00e3f4e815c050e662ecf71645135956","receiptsRoot":"0xf5bcd433589a30ea84b3bf8b9d3f24cb9d1b823630245969213831b58e7442f1","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e6","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d44","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4213","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x2d9aaadb9e90e153e1f1de5a88b5fe5b4fb9c54eb5a6aa52d09dcd345add7386"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd5fba4648bc54a5250316a318e7a896c1b476ffe2603c94f3cb6c5abfa0ca4f5', '1', '41278', '1749040452', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405861', '0xcf0b95b760c8a7cf0dc26d60341e1ba26179fe7c52c33b2f50080c90b926fbcb', '0x3a374a7e65ea0547867a560438a84e1449b84f54e17df996bd561158199c88dc', '{"parentHash":"0x3a374a7e65ea0547867a560438a84e1449b84f54e17df996bd561158199c88dc","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xd9d984d299d387bc9c5a8c3d0c1f8bcfced89166a76170b7943b88506de3e68c","transactionsRoot":"0xefa7a1c94f7c3ce0aaed7100a55e062c53478dd4e3ddc2873d18a3db9ff6158c","receiptsRoot":"0x86007a6ec9afb5ce165ed8f1b2c0b18f8c5044cc2461dbb104b5aea0c721b424","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e5","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d3a","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4212","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xcf0b95b760c8a7cf0dc26d60341e1ba26179fe7c52c33b2f50080c90b926fbcb"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xd9d984d299d387bc9c5a8c3d0c1f8bcfced89166a76170b7943b88506de3e68c', '1', '41278', '1749040442', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405860', '0x3a374a7e65ea0547867a560438a84e1449b84f54e17df996bd561158199c88dc', '0x7695489289b89d2d34ca267a91da92804c80006c0a0ceeaefb760d749a4f08ef', '{"parentHash":"0x7695489289b89d2d34ca267a91da92804c80006c0a0ceeaefb760d749a4f08ef","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x8c729fd12682fc29a146cc1c21740e207916deeb30e654633beb6d307dad8355","transactionsRoot":"0xed6d1c9ff1888a88e02ad54b0dad35aecebae7b814c5a88a5c4b0871fa41fbb5","receiptsRoot":"0xe3fff8ac735117cfe66b679e36a7993e157e16d46bed2ab802aebe5450fe5c84","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e4","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d30","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4215","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x3a374a7e65ea0547867a560438a84e1449b84f54e17df996bd561158199c88dc"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x8c729fd12682fc29a146cc1c21740e207916deeb30e654633beb6d307dad8355', '1', '41278', '1749040432', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405859', '0x7695489289b89d2d34ca267a91da92804c80006c0a0ceeaefb760d749a4f08ef', '0x674a46f6b895251fcd6a0c84484093b7a4d7f4c09c50c31c0bc620391f0e3ba5', '{"parentHash":"0x674a46f6b895251fcd6a0c84484093b7a4d7f4c09c50c31c0bc620391f0e3ba5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x9904a69d35c7f6e2575433c7e7428dc0fa0d63d0164bb610934769f76eb9a8fb","transactionsRoot":"0xaaa961ed1746e55d07c29126bba9d8036751bfe614ff6505712c068714130378","receiptsRoot":"0x090347f5f7e63ad92b684192e36fe61b6135996f24356b0f1186f67b863c9ce5","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e3","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403d26","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4215","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x7695489289b89d2d34ca267a91da92804c80006c0a0ceeaefb760d749a4f08ef"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x9904a69d35c7f6e2575433c7e7428dc0fa0d63d0164bb610934769f76eb9a8fb', '1', '38478', '1749040422', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405858', '0x674a46f6b895251fcd6a0c84484093b7a4d7f4c09c50c31c0bc620391f0e3ba5', '0x63aa3c63c814b59eff6317df66c26707aefbf130fcad68ad50758666b599bcc6', '{"parentHash":"0x63aa3c63c814b59eff6317df66c26707aefbf130fcad68ad50758666b599bcc6","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x92d87b1488dd2f0c17d7cf051f0aa704ce473d067ead4659233cb8dd45c6e62f","transactionsRoot":"0x99623f2b16980692835096d6a902c13aa9d8553aee8cfdf3622fd23d14e338aa","receiptsRoot":"0x004824a84e77c65d42e4c418658327166cfe9508d67a6da611aefabb764b04ea","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e2","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d24","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4216","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x674a46f6b895251fcd6a0c84484093b7a4d7f4c09c50c31c0bc620391f0e3ba5"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x92d87b1488dd2f0c17d7cf051f0aa704ce473d067ead4659233cb8dd45c6e62f', '1', '41278', '1749040420', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405857', '0x63aa3c63c814b59eff6317df66c26707aefbf130fcad68ad50758666b599bcc6', '0x9b1fbd939f6b022ad5ab78e02fa4f0ec4f936ff3a46f2c921de61d09df481f3e', '{"parentHash":"0x9b1fbd939f6b022ad5ab78e02fa4f0ec4f936ff3a46f2c921de61d09df481f3e","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x9dd42d74eb88e506b927084620678f7e85c58e8dcabef33d743ebe15f79f6ff6","transactionsRoot":"0x0ddf99896f3e708f2f216d00f8a4383ca78b0d423079c23c4ade05e3e4d72cb7","receiptsRoot":"0x4d2b5006499a2036e04d1aadc45e25cc7936ee4ba0adbe74406350a0db84dc63","logsBloom":"0x00000000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000200000000000000000000000000002000000000000001002020000000000001000000000000200000000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000000002000000000480000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000002000000000004000000000000000000000000020000000000000000000000000008000000000000000040000000000000010000000","difficulty":"0x1","number":"0x9ec7e1","gasLimit":"0x1312d00","gasUsed":"0x1ef00","timestamp":"0x68403d1c","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4216","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x63aa3c63c814b59eff6317df66c26707aefbf130fcad68ad50758666b599bcc6"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x9dd42d74eb88e506b927084620678f7e85c58e8dcabef33d743ebe15f79f6ff6', '1', '126720', '1749040412', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405856', '0x9b1fbd939f6b022ad5ab78e02fa4f0ec4f936ff3a46f2c921de61d09df481f3e', '0x2f40c7fc0fa649e7ce9fb3cfda5f10f8bac2a3f3fdcef7629dbf57ad8d404eee', '{"parentHash":"0x2f40c7fc0fa649e7ce9fb3cfda5f10f8bac2a3f3fdcef7629dbf57ad8d404eee","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x7586fb4c0cb703967cee0dc4db8aa816d2808eccdf03f8151ecdcabc5434581f","transactionsRoot":"0x3304b51be28fb1c8f636d0f6f7a062727e3a7fff8c754f5a811a977aae1b0d07","receiptsRoot":"0x083d975d736295631f476530dff9ee654910642050ab1cbb40688c78cec1204c","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7e0","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403d0f","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4218","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x9b1fbd939f6b022ad5ab78e02fa4f0ec4f936ff3a46f2c921de61d09df481f3e"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x7586fb4c0cb703967cee0dc4db8aa816d2808eccdf03f8151ecdcabc5434581f', '1', '41278', '1749040399', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405855', '0x2f40c7fc0fa649e7ce9fb3cfda5f10f8bac2a3f3fdcef7629dbf57ad8d404eee', '0xc5f78095fcfa65f201dc56d63770d867a76ebc925ce62403bd1f0bec29494492', '{"parentHash":"0xc5f78095fcfa65f201dc56d63770d867a76ebc925ce62403bd1f0bec29494492","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x63ca6187e8b74cf4f319be1d6b7fcf0e42814fd0f017e74ae0dfba2f5167ad9e","transactionsRoot":"0x2bf7f185c1a0f17854973436c0b91b7fbb4fc968746131f120911c4374d50af5","receiptsRoot":"0x3ab0f92164ea453866176f956a72ec12c20386138bf4b7f0eb74b7354c282c5e","logsBloom":"0x00000000000000000000000000000000000000000004000000100000000000000000100000000000000000000000000000000020000200000000000000000000000000000000000000000001002000000000000001000000000000000200000000000000020000000000000000000800000000000400000000000000000000000000000000000000000000000000000000000480000000002000000000000000000200001000000000000000000000000000000000000000010000000000000000000000000000000000000000000000004000000000000000000000000020000000000000000000000080000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec7df","gasLimit":"0x1312d00","gasUsed":"0x1f9dc","timestamp":"0x68403d08","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4218","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x2f40c7fc0fa649e7ce9fb3cfda5f10f8bac2a3f3fdcef7629dbf57ad8d404eee"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x63ca6187e8b74cf4f319be1d6b7fcf0e42814fd0f017e74ae0dfba2f5167ad9e', '1', '129500', '1749040392', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405854', '0xc5f78095fcfa65f201dc56d63770d867a76ebc925ce62403bd1f0bec29494492', '0x1440ca43be062a5961ae23be75eef5ae3af280218c3cb04aac0e5920064c12db', '{"parentHash":"0x1440ca43be062a5961ae23be75eef5ae3af280218c3cb04aac0e5920064c12db","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x29a1e68f63e521fbb26e7912c84e870c36f8b848618b88eecd24f25e97ec9de4","transactionsRoot":"0xf18ff8698da4f3e8d7ee7fcf36f6767233a597aeb67d9f906727002f2afab4df","receiptsRoot":"0xf24ceb0d70b0b964dc8b40504454952dcec8fe782a92a1fa7413dfdaa524071b","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7de","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403cfe","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4218","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xc5f78095fcfa65f201dc56d63770d867a76ebc925ce62403bd1f0bec29494492"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x29a1e68f63e521fbb26e7912c84e870c36f8b848618b88eecd24f25e97ec9de4', '1', '38478', '1749040382', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405853', '0x1440ca43be062a5961ae23be75eef5ae3af280218c3cb04aac0e5920064c12db', '0x70979d15b51921068c9e8270cb9ea3458741f69a58c308b9afe1788c5735b15d', '{"parentHash":"0x70979d15b51921068c9e8270cb9ea3458741f69a58c308b9afe1788c5735b15d","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xb39506e8afeddbf1e5f4fe275c074c440b31d69ebfb93ef2c7fd7af867e600e8","transactionsRoot":"0xc688eddf407fe76f9f111d38371fe002fd6f61dc939cf1e4a94c567fb8e96e13","receiptsRoot":"0xe6922e58e372c557ab6840d92cdf3c0ff7fdfa240b6d968f0c10113287143042","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7dd","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403cf4","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4218","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x1440ca43be062a5961ae23be75eef5ae3af280218c3cb04aac0e5920064c12db"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xb39506e8afeddbf1e5f4fe275c074c440b31d69ebfb93ef2c7fd7af867e600e8', '1', '41278', '1749040372', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405852', '0x70979d15b51921068c9e8270cb9ea3458741f69a58c308b9afe1788c5735b15d', '0x778a103849d7fe398b6d5ea258d9d34338f25cfc0745a6b649d460766d2ec9cd', '{"parentHash":"0x778a103849d7fe398b6d5ea258d9d34338f25cfc0745a6b649d460766d2ec9cd","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x27df003aeccbe5a854484d79a43f816561e05787eb0ae353357363c51773e0d5","transactionsRoot":"0x76604e7a00be688f9a462c1ed558e1823b82243d2b7043d9c39ace3dac77f152","receiptsRoot":"0xf76d84c87e33a9fc7523d4d0d0cb7805526600d1a7ba4f6ef79b50c595435833","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7dc","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403cea","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4218","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x70979d15b51921068c9e8270cb9ea3458741f69a58c308b9afe1788c5735b15d"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x27df003aeccbe5a854484d79a43f816561e05787eb0ae353357363c51773e0d5', '1', '38478', '1749040362', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405851', '0x778a103849d7fe398b6d5ea258d9d34338f25cfc0745a6b649d460766d2ec9cd', '0x68656da9f95e4042977770a1c5d032f2b861684b2c20b782327ccc8a913b855a', '{"parentHash":"0x68656da9f95e4042977770a1c5d032f2b861684b2c20b782327ccc8a913b855a","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x814c2c2fab0559aff68181ba8266fe273b48ce688ae7ab5423143697a2e3c223","transactionsRoot":"0x34797e376e52413b2193e8f6037760504b47d7b7f1873e7ba93cff04f400232d","receiptsRoot":"0x348b707ea70a6d1c86934ea691a3aca2e6c16f2da91516aad38d5cb5f4b43fc0","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7db","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ce0","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef4219","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x778a103849d7fe398b6d5ea258d9d34338f25cfc0745a6b649d460766d2ec9cd"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x814c2c2fab0559aff68181ba8266fe273b48ce688ae7ab5423143697a2e3c223', '1', '41278', '1749040352', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405850', '0x68656da9f95e4042977770a1c5d032f2b861684b2c20b782327ccc8a913b855a', '0x511907d2bf22d82be076415ba6476b76418325b08eacbcad64f1abf391b96e2c', '{"parentHash":"0x511907d2bf22d82be076415ba6476b76418325b08eacbcad64f1abf391b96e2c","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x344841bb9442b72a1939c291abb32041a39df676915cd2a29af579d86199f9d1","transactionsRoot":"0xda76575ad7bae6d598577fd7e5ad357c0ad1e9c8862c4f89fb349c1c9c7b9617","receiptsRoot":"0x190650f6f05cd627da30f1c71f1ff94854dfe979a57b9fc9047e7c5799f665da","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7da","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403ccc","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef421a","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x68656da9f95e4042977770a1c5d032f2b861684b2c20b782327ccc8a913b855a"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x344841bb9442b72a1939c291abb32041a39df676915cd2a29af579d86199f9d1', '1', '41278', '1749040332', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405849', '0x511907d2bf22d82be076415ba6476b76418325b08eacbcad64f1abf391b96e2c', '0x952f06bcbbc7f1fce60d4aad1109b043282a087f3f8132e9431c43838dafffde', '{"parentHash":"0x952f06bcbbc7f1fce60d4aad1109b043282a087f3f8132e9431c43838dafffde","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x62ae186cb6cab0a56439702b9abcca7de278191964ffddedc68be68fb7ce2fb0","transactionsRoot":"0xb338264d754d0e688f220cd99cedcc1eb2bbc3814a67c0521e66ba3652eefdb3","receiptsRoot":"0x86751021e7f67cff1b9848837159343f0f6ae07df16d0a9ee94e8a2f58d3d05f","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7d9","gasLimit":"0x1312d00","gasUsed":"0xa13e","timestamp":"0x68403cc2","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef421b","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x511907d2bf22d82be076415ba6476b76418325b08eacbcad64f1abf391b96e2c"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x62ae186cb6cab0a56439702b9abcca7de278191964ffddedc68be68fb7ce2fb0', '1', '41278', '1749040322', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405848', '0x952f06bcbbc7f1fce60d4aad1109b043282a087f3f8132e9431c43838dafffde', '0xf8fe3ad891923c8cf6336f6bd67745b39f5830cf1a578baa8357daeede11c44b', '{"parentHash":"0xf8fe3ad891923c8cf6336f6bd67745b39f5830cf1a578baa8357daeede11c44b","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe0e78a504c708c23f12665567f606cb23b67c1fdfb17bb8435da827c32f233b7","transactionsRoot":"0xfb2e0f93a13fc1b904009f854060067baaa7e1ed269c968064e017ceb1dab343","receiptsRoot":"0x1c5119842f1f9266426330049a1b98c51aa02e58bb0628b9b9310e899c09d3d4","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7d8","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403cb8","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef421c","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0x952f06bcbbc7f1fce60d4aad1109b043282a087f3f8132e9431c43838dafffde"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xe0e78a504c708c23f12665567f606cb23b67c1fdfb17bb8435da827c32f233b7', '1', '38478', '1749040312', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405847', '0xf8fe3ad891923c8cf6336f6bd67745b39f5830cf1a578baa8357daeede11c44b', '0xfe49b92d0a8fabca00f1e5630d5085eb0e06a2e53b79358daf4874fdaeb53290', '{"parentHash":"0xfe49b92d0a8fabca00f1e5630d5085eb0e06a2e53b79358daf4874fdaeb53290","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x075fb214eb20d38e7e448f4ab44977b45cb905d94532d8e2c53d834159e44f50","transactionsRoot":"0x5c40249494982f5dd6bcefdf26b4c20163928e9059d75b1edd7e7050fb79dad2","receiptsRoot":"0x1cb76e00c127f1a895a8af78b00353350c40c1d224bebaa43bb7d7c8d73ad4c2","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000900000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000020000000000000000000","difficulty":"0x1","number":"0x9ec7d7","gasLimit":"0x1312d00","gasUsed":"0x964e","timestamp":"0x68403cb4","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef421d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xf8fe3ad891923c8cf6336f6bd67745b39f5830cf1a578baa8357daeede11c44b"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x075fb214eb20d38e7e448f4ab44977b45cb905d94532d8e2c53d834159e44f50', '1', '38478', '1749040308', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405846', '0xfe49b92d0a8fabca00f1e5630d5085eb0e06a2e53b79358daf4874fdaeb53290', '0xbf4294a7c70709c02f0b38bd532e3fb8c8485e34b598992049ef14aeac3d6daf', '{"parentHash":"0xbf4294a7c70709c02f0b38bd532e3fb8c8485e34b598992049ef14aeac3d6daf","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xba19b362738de826f2e19b7acabf2656ee33d5f10c7b83327309822c553f79e3","transactionsRoot":"0xa4430ced2fc593cc83d8a016c12b4574e59aa29b035c20f455893a67a658943f","receiptsRoot":"0xf889a1ea17b84acfb7789aa38182a24f314c4cb1a4f8146bbfaa9da1325ae949","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec7d6","gasLimit":"0x1312d00","gasUsed":"0x94e2","timestamp":"0x68403cb3","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef421d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xfe49b92d0a8fabca00f1e5630d5085eb0e06a2e53b79358daf4874fdaeb53290"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0xba19b362738de826f2e19b7acabf2656ee33d5f10c7b83327309822c553f79e3', '1', '38114', '1749040307', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); -INSERT INTO l2_block (number, hash, parent_hash, header, withdraw_root, - state_root, tx_num, gas_used, block_timestamp, row_consumption, - chunk_hash, transactions - ) VALUES ('10405845', '0xbf4294a7c70709c02f0b38bd532e3fb8c8485e34b598992049ef14aeac3d6daf', '0xff1ae0f43684296baf178282a9384365357b92c32053518e9e0979cd3732d632', '{"parentHash":"0xff1ae0f43684296baf178282a9384365357b92c32053518e9e0979cd3732d632","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x1ea586c73b2018dfb4689a6da99f02beea7312dfd49703a79a8923b260736a8a","transactionsRoot":"0xbf91258f8470977bebfa3189469c8db7ad5a05d1ddd11af41dd8d394a2653c88","receiptsRoot":"0xf889a1ea17b84acfb7789aa38182a24f314c4cb1a4f8146bbfaa9da1325ae949","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x1","number":"0x9ec7d5","gasLimit":"0x1312d00","gasUsed":"0x94e2","timestamp":"0x68403cb2","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":"0xef421d","withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"requestsHash":null,"hash":"0xbf4294a7c70709c02f0b38bd532e3fb8c8485e34b598992049ef14aeac3d6daf"}', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '0x1ea586c73b2018dfb4689a6da99f02beea7312dfd49703a79a8923b260736a8a', '1', '38114', '1749040306', '', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '[]'); diff --git a/database/localdbg/import_chunk.sql b/database/localdbg/import_chunk.sql deleted file mode 100644 index 4ff9566b5c..0000000000 --- a/database/localdbg/import_chunk.sql +++ /dev/null @@ -1,8 +0,0 @@ -INSERT INTO chunk ("index", hash, start_block_number, end_block_number, - start_block_hash, end_block_hash, total_l1_messages_popped_before, - total_l1_messages_popped_in_chunk, start_block_time, - parent_chunk_hash, state_root, parent_chunk_state_root, - withdraw_root, total_l2_tx_gas, total_l2_tx_num, - total_l1_commit_calldata_size, total_l1_commit_gas, - enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash - ) VALUES ('795824', '0x05cab11cc4054dc7c8b559d2c7fd412891f6c94512539db37456cadaca7fceeb', '10405845', '10405944', '0xbf4294a7c70709c02f0b38bd532e3fb8c8485e34b598992049ef14aeac3d6daf', '0x522d7f22665754abccab64dc67f1ae4b2dda9729613893f20117810f5092427d', '1067977', '2', '1749040306', '0xdbc3ec00148cb6f8369ac740006613ca9d0c4502a134eab0b19019c55bcca2ca', '0xbe7752f82ad42463b27e0ac06b2c86e853a2f1fdf36456c8496979fda2998896', '0x86c1756e36e88429f488999207317e04a1c15b52d47c568a149cc973061c74eb', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '5951574', '98', '0', '0', 'true', '0x588be45906ca9c9f7436a0d092603667e8cff81641115fb2e142714c00000000', '0x3223e4556c429f27f83e309efb061653e1624706f288fc85563bef8100000000'); diff --git a/database/localdbg/import_more_chunks.sql b/database/localdbg/import_more_chunks.sql deleted file mode 100644 index cdab846532..0000000000 --- a/database/localdbg/import_more_chunks.sql +++ /dev/null @@ -1,72 +0,0 @@ -INSERT INTO chunk ("index", hash, start_block_number, end_block_number, - start_block_hash, end_block_hash, total_l1_messages_popped_before, - total_l1_messages_popped_in_chunk, start_block_time, - parent_chunk_hash, state_root, parent_chunk_state_root, - withdraw_root, total_l2_tx_gas, total_l2_tx_num, - total_l1_commit_calldata_size, total_l1_commit_gas, - enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash - ) VALUES ('795823', '0xdbc3ec00148cb6f8369ac740006613ca9d0c4502a134eab0b19019c55bcca2ca', '10405745', '10405844', '0x9b89275494c743803843bd3df6b7b9ff43bbbef2ec1a67b9680681f73476feac', '0xff1ae0f43684296baf178282a9384365357b92c32053518e9e0979cd3732d632', '1067973', '4', '1749039452', '0x72f0cbeb2de49271ee5f102da89c1783e2baa5b01ce96f8bb1bbcdbb11f72e0e', '0x86c1756e36e88429f488999207317e04a1c15b52d47c568a149cc973061c74eb', '0x6a4bc0f6dcf544d18084595284bd6da0ad82bd3daa10d5924fe6cadc5980b889', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '9672856', '103', '0', '0', 'true', '0xac1cb1387af33778061a9301c10d4a4481d99452785714667695ebb400000000', '0x588be45906ca9c9f7436a0d092603667e8cff81641115fb2e142714c00000000'); -INSERT INTO chunk ("index", hash, start_block_number, end_block_number, - start_block_hash, end_block_hash, total_l1_messages_popped_before, - total_l1_messages_popped_in_chunk, start_block_time, - parent_chunk_hash, state_root, parent_chunk_state_root, - withdraw_root, total_l2_tx_gas, total_l2_tx_num, - total_l1_commit_calldata_size, total_l1_commit_gas, - enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash - ) VALUES ('795822', '0x72f0cbeb2de49271ee5f102da89c1783e2baa5b01ce96f8bb1bbcdbb11f72e0e', '10405645', '10405744', '0xca94e73dcf085bb4cf11e82a69a46a450d8a13b0ab100a36cf27235d08506a25', '0x17e5632b0e15e21b317fa27134fb24bb5097a925cf0b3a1441065474b8616741', '1067972', '1', '1749038511', '0x6d36cd65eddc355c504e28159844b7a671a2b627fabf83b5b1c9b0819aa800a5', '0x6a4bc0f6dcf544d18084595284bd6da0ad82bd3daa10d5924fe6cadc5980b889', '0x13e9d47953f0f6dae1a3625e5706e26f8897da0c86994426610e1d64918dd6dc', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '6897786', '105', '0', '0', 'true', '0xbf186c8c0b504aa5b01c72219f41cb317a5c774eb6876867bfb5f9cc00000000', '0xac1cb1387af33778061a9301c10d4a4481d99452785714667695ebb400000000'); -INSERT INTO chunk ("index", hash, start_block_number, end_block_number, - start_block_hash, end_block_hash, total_l1_messages_popped_before, - total_l1_messages_popped_in_chunk, start_block_time, - parent_chunk_hash, state_root, parent_chunk_state_root, - withdraw_root, total_l2_tx_gas, total_l2_tx_num, - total_l1_commit_calldata_size, total_l1_commit_gas, - enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash - ) VALUES ('795821', '0x6d36cd65eddc355c504e28159844b7a671a2b627fabf83b5b1c9b0819aa800a5', '10405545', '10405644', '0x13167bb858b1c6210c5965e72f55469e5bcc204a3ad94b585c9d4edee7583c32', '0xd0eb92204cbd8a4a44f0aa75b1554ca6d8e95a2da8460eaf2e4f2a85ae89f87a', '1067971', '1', '1749037722', '0x7d3db73a6a4503b6bf0acd269554c97928c08d0d8b0b258e8ab468bf1685d823', '0x13e9d47953f0f6dae1a3625e5706e26f8897da0c86994426610e1d64918dd6dc', '0x1a71a3b84ee819dd5827369cb905d05c66cd70ea0d00e996a0fc3b2a18beab78', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '9847682', '102', '0', '0', 'true', '0xd350c1d4bccade184fa3e1768b9865bf2ee0bf40108164c16287098b00000000', '0xbf186c8c0b504aa5b01c72219f41cb317a5c774eb6876867bfb5f9cc00000000'); -INSERT INTO chunk ("index", hash, start_block_number, end_block_number, - start_block_hash, end_block_hash, total_l1_messages_popped_before, - total_l1_messages_popped_in_chunk, start_block_time, - parent_chunk_hash, state_root, parent_chunk_state_root, - withdraw_root, total_l2_tx_gas, total_l2_tx_num, - total_l1_commit_calldata_size, total_l1_commit_gas, - enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash - ) VALUES ('795820', '0x7d3db73a6a4503b6bf0acd269554c97928c08d0d8b0b258e8ab468bf1685d823', '10405445', '10405544', '0xfab227c444916cc75ae161aed936f838ee1099d386098bfa8dd827e14d2707fb', '0x97f10e03c344086069e8854c3fe8496489978690b30f1f72f25f9d108c52c359', '1067971', '0', '1749036803', '0xe832fd69a7c60b6f7882b095970ff9af1945509b08f8a27c24d09b72f1065610', '0x1a71a3b84ee819dd5827369cb905d05c66cd70ea0d00e996a0fc3b2a18beab78', '0x52d34e124b415b90029d9689a588be66ed84aa3a17ee540efcb7dd179ccc2bf2', '0xee2216fa66e00af3c00c4f21172202c17560b7bd9dc661321f44988f428e2e7d', '9717230', '102', '0', '0', 'true', '0xd350c1d4bccade184fa3e1768b9865bf2ee0bf40108164c16287098b00000000', '0xd350c1d4bccade184fa3e1768b9865bf2ee0bf40108164c16287098b00000000'); -INSERT INTO chunk ("index", hash, start_block_number, end_block_number, - start_block_hash, end_block_hash, total_l1_messages_popped_before, - total_l1_messages_popped_in_chunk, start_block_time, - parent_chunk_hash, state_root, parent_chunk_state_root, - withdraw_root, total_l2_tx_gas, total_l2_tx_num, - total_l1_commit_calldata_size, total_l1_commit_gas, - enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash - ) VALUES ('795819', '0xe832fd69a7c60b6f7882b095970ff9af1945509b08f8a27c24d09b72f1065610', '10405345', '10405444', '0x1159e4f1e0d9263451d4fcb350fa3c40ac42e1167e7ee5ccd9f8f3c9bd63f7e2', '0x3cdb32ac5cc1a6ba55f63d7862a8ea111aa6736a54577a37d2a2a7ca5ed27e77', '1067968', '3', '1749035912', '0x0140216f406c4d7c656e138c2a292aed2feecd3b298449f210c3dd8a94b20cbe', '0x52d34e124b415b90029d9689a588be66ed84aa3a17ee540efcb7dd179ccc2bf2', '0xb3be5e60afe9e45f04a3ee5173e099f791fc8b3318b8dc87ffb2fc58f0cf0051', '0xa565f3fdd399dc23aa34602405ff543a7628d36e4c51f232cfa42ad8ead16a5c', '7947615', '99', '0', '0', 'true', '0x701631a081e57a034fc4901a2502ec45233faeb52d4ee95a3c358ccc00000000', '0xd350c1d4bccade184fa3e1768b9865bf2ee0bf40108164c16287098b00000000'); -INSERT INTO chunk ("index", hash, start_block_number, end_block_number, - start_block_hash, end_block_hash, total_l1_messages_popped_before, - total_l1_messages_popped_in_chunk, start_block_time, - parent_chunk_hash, state_root, parent_chunk_state_root, - withdraw_root, total_l2_tx_gas, total_l2_tx_num, - total_l1_commit_calldata_size, total_l1_commit_gas, - enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash - ) VALUES ('795818', '0x0140216f406c4d7c656e138c2a292aed2feecd3b298449f210c3dd8a94b20cbe', '10405245', '10405344', '0xcbd0bf8de84d031b9ea27e0cdc35ba1886b65e823f4df361dbbab747bd2445da', '0xb0b40d064a9a6ec6b2234397eea1cd9baa643cabadea7b9c5ebbd8e22e52c350', '1067968', '0', '1749034972', '0x4c900747837da5d70e0933e1482c92731da16c35ce0f6926a4f409c219143fc5', '0xb3be5e60afe9e45f04a3ee5173e099f791fc8b3318b8dc87ffb2fc58f0cf0051', '0xb20143ddfb4277e957555292ea72be3d50e30f3f185bad011b6d10b29faeefd2', '0xa565f3fdd399dc23aa34602405ff543a7628d36e4c51f232cfa42ad8ead16a5c', '5931635', '103', '0', '0', 'true', '0x701631a081e57a034fc4901a2502ec45233faeb52d4ee95a3c358ccc00000000', '0x701631a081e57a034fc4901a2502ec45233faeb52d4ee95a3c358ccc00000000'); -INSERT INTO chunk ("index", hash, start_block_number, end_block_number, - start_block_hash, end_block_hash, total_l1_messages_popped_before, - total_l1_messages_popped_in_chunk, start_block_time, - parent_chunk_hash, state_root, parent_chunk_state_root, - withdraw_root, total_l2_tx_gas, total_l2_tx_num, - total_l1_commit_calldata_size, total_l1_commit_gas, - enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash - ) VALUES ('795817', '0x4c900747837da5d70e0933e1482c92731da16c35ce0f6926a4f409c219143fc5', '10405145', '10405244', '0x7571f7779a8078a176cd9458ffdc9c75a6ff4056f88e47ba72ff96a6d165e1bc', '0x083750d7664c98f10ce3042890c26643d68fb7bbf6fe582deb75caaa80618d4d', '1067967', '1', '1749033992', '0x6e6da747415600904d5b29241618de67760b2fbd8cbbd3a58efb27718b549c36', '0xb20143ddfb4277e957555292ea72be3d50e30f3f185bad011b6d10b29faeefd2', '0x131fe9cfc6d92555efc3e1b222c81968e2b6f13595513188140d6da48a5ee0a4', '0xa565f3fdd399dc23aa34602405ff543a7628d36e4c51f232cfa42ad8ead16a5c', '5354644', '104', '0', '0', 'true', '0x421ad11af2c169fff8f376e3838b644032fa00417634bbfba4557ec300000000', '0x701631a081e57a034fc4901a2502ec45233faeb52d4ee95a3c358ccc00000000'); -INSERT INTO chunk ("index", hash, start_block_number, end_block_number, - start_block_hash, end_block_hash, total_l1_messages_popped_before, - total_l1_messages_popped_in_chunk, start_block_time, - parent_chunk_hash, state_root, parent_chunk_state_root, - withdraw_root, total_l2_tx_gas, total_l2_tx_num, - total_l1_commit_calldata_size, total_l1_commit_gas, - enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash - ) VALUES ('795816', '0x6e6da747415600904d5b29241618de67760b2fbd8cbbd3a58efb27718b549c36', '10405045', '10405144', '0xa2cc3ea845ffa14c0b392dd391f0215867267bef9c6d68008ba2d430ef69be32', '0x8c6fbd3a543c08d604ed6330c62c635132de0c3431d632f4c26f00da3d36f07f', '1067964', '3', '1749033192', '0x7c8b5eb58109ed7947bc90c1ba36ab7e02fa59512e34c5af1db69e01a7a2f72a', '0x131fe9cfc6d92555efc3e1b222c81968e2b6f13595513188140d6da48a5ee0a4', '0x86590a1c0de788f0cab33135eaf79c59172da157cd175670695074e7aeb75ea3', '0xa565f3fdd399dc23aa34602405ff543a7628d36e4c51f232cfa42ad8ead16a5c', '8354632', '102', '0', '0', 'true', '0x8f7b703da3b65cd87a10314594d8906ef41273a67e855d5fb247bf1800000000', '0x421ad11af2c169fff8f376e3838b644032fa00417634bbfba4557ec300000000'); -INSERT INTO chunk ("index", hash, start_block_number, end_block_number, - start_block_hash, end_block_hash, total_l1_messages_popped_before, - total_l1_messages_popped_in_chunk, start_block_time, - parent_chunk_hash, state_root, parent_chunk_state_root, - withdraw_root, total_l2_tx_gas, total_l2_tx_num, - total_l1_commit_calldata_size, total_l1_commit_gas, - enable_compress, prev_l1_message_queue_hash, post_l1_message_queue_hash - ) VALUES ('795815', '0x7c8b5eb58109ed7947bc90c1ba36ab7e02fa59512e34c5af1db69e01a7a2f72a', '10404945', '10405044', '0x806f53f6c2ef7d880b1b422428dfc4b655e66827aa2853443b7061f50807a2e8', '0xff8f1c3f2dd77c24313b5689a72478c3090349103e668065df2c1afc6e67f947', '1067962', '2', '1749032332', '0x627211154cdac0037baf7541dced64ef88454fa27861b57fa3fa501a3b52ee8e', '0x86590a1c0de788f0cab33135eaf79c59172da157cd175670695074e7aeb75ea3', '0x25bf485ee5e3b6d440571521dbd8ee990795a4c1089e39afecb9ea571e15311d', '0xa565f3fdd399dc23aa34602405ff543a7628d36e4c51f232cfa42ad8ead16a5c', '7143030', '102', '0', '0', 'true', '0x1b6df8ca8be3757e5d0415e09963b984f7560cb9b32be9c5e75b702600000000', '0x8f7b703da3b65cd87a10314594d8906ef41273a67e855d5fb247bf1800000000'); From c3793dbfa61c8dd5ef5e849b927fa9139e953920 Mon Sep 17 00:00:00 2001 From: Ho Date: Fri, 27 Jun 2025 12:38:17 +0900 Subject: [PATCH 15/29] add missed fixing --- crates/libzkp_c/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/libzkp_c/src/lib.rs b/crates/libzkp_c/src/lib.rs index b297aa528e..6e8784085f 100644 --- a/crates/libzkp_c/src/lib.rs +++ b/crates/libzkp_c/src/lib.rs @@ -112,7 +112,7 @@ pub unsafe extern "C" fn gen_universal_task( let ret = libzkp::gen_universal_task(task_type, &task_json, c_char_to_str(fork_name), interpreter); - if let Ok((pi_hash, task_json, meta_json)) = ret { + if let Ok((pi_hash, meta_json, task_json)) = ret { let expected_pi_hash = pi_hash.0.map(|byte| byte as c_char); HandlingResult { ok: true as c_char, From c544a8eb0427f57cccdf408adff307284606913d Mon Sep 17 00:00:00 2001 From: Ho Date: Fri, 27 Jun 2025 12:41:21 +0900 Subject: [PATCH 16/29] resume resolution of issue #1667 --- .../logic/provertask/batch_prover_task.go | 60 +++++++++++++------ .../logic/provertask/bundle_prover_task.go | 60 +++++++++++++------ .../logic/provertask/chunk_prover_task.go | 59 ++++++++++++------ .../internal/logic/provertask/prover_task.go | 15 +++-- coordinator/internal/orm/prover_task.go | 8 +-- 5 files changed, 133 insertions(+), 69 deletions(-) diff --git a/coordinator/internal/logic/provertask/batch_prover_task.go b/coordinator/internal/logic/provertask/batch_prover_task.go index e355abde44..dc08f16dc8 100644 --- a/coordinator/internal/logic/provertask/batch_prover_task.go +++ b/coordinator/internal/logic/provertask/batch_prover_task.go @@ -83,10 +83,25 @@ func (bp *BatchProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato for i := 0; i < 5; i++ { var getTaskError error var tmpBatchTask *orm.Batch - tmpBatchTask, getTaskError = bp.batchOrm.GetAssignedBatch(ctx.Copy(), maxActiveAttempts, maxTotalAttempts) - if getTaskError != nil { - log.Error("failed to get assigned batch proving tasks", "height", getTaskParameter.ProverHeight, "err", getTaskError) - return nil, ErrCoordinatorInternalFailure + + if taskCtx.hasAssignedTask != nil { + tmpBatchTask, getTaskError = bp.batchOrm.GetBatchByHash(ctx.Copy(), taskCtx.hasAssignedTask.TaskID) + if getTaskError != nil { + log.Error("failed to get batch has assigned to prover", "taskID", taskCtx.hasAssignedTask.TaskID, "err", getTaskError) + return nil, ErrCoordinatorInternalFailure + } else if tmpBatchTask == nil { + // if the assigned batch dropped, there would be too much issue to assign another + return nil, fmt.Errorf("prover with publicKey %s is already assigned a dropped batch. ProverName: %s, ProverVersion: %s", + taskCtx.PublicKey, taskCtx.ProverName, taskCtx.ProverVersion) + } + } + + if tmpBatchTask == nil { + tmpBatchTask, getTaskError = bp.batchOrm.GetAssignedBatch(ctx.Copy(), maxActiveAttempts, maxTotalAttempts) + if getTaskError != nil { + log.Error("failed to get assigned batch proving tasks", "height", getTaskParameter.ProverHeight, "err", getTaskError) + return nil, ErrCoordinatorInternalFailure + } } // Why here need get again? In order to support a task can assign to multiple prover, need also assign `ProvingTaskAssigned` @@ -149,19 +164,24 @@ func (bp *BatchProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato } log.Info("start batch proof generation session", "task_id", batchTask.Hash, "public key", taskCtx.PublicKey, "prover name", taskCtx.ProverName) - proverTask := orm.ProverTask{ - TaskID: batchTask.Hash, - ProverPublicKey: taskCtx.PublicKey, - TaskType: int16(message.ProofTypeBatch), - ProverName: taskCtx.ProverName, - ProverVersion: taskCtx.ProverVersion, - ProvingStatus: int16(types.ProverAssigned), - FailureType: int16(types.ProverTaskFailureTypeUndefined), - // here why need use UTC time. see scroll/common/database/db.go - AssignedAt: utils.NowUTC(), + var proverTask *orm.ProverTask + if taskCtx.hasAssignedTask == nil { + proverTask = &orm.ProverTask{ + TaskID: batchTask.Hash, + ProverPublicKey: taskCtx.PublicKey, + TaskType: int16(message.ProofTypeBatch), + ProverName: taskCtx.ProverName, + ProverVersion: taskCtx.ProverVersion, + ProvingStatus: int16(types.ProverAssigned), + FailureType: int16(types.ProverTaskFailureTypeUndefined), + // here why need use UTC time. see scroll/common/database/db.go + AssignedAt: utils.NowUTC(), + } + } else { + proverTask = taskCtx.hasAssignedTask } - taskMsg, err := bp.formatProverTask(ctx.Copy(), &proverTask, batchTask, hardForkName) + taskMsg, err := bp.formatProverTask(ctx.Copy(), proverTask, batchTask, hardForkName) if err != nil { bp.recoverActiveAttempts(ctx, batchTask) log.Error("format prover task failure", "task_id", batchTask.Hash, "err", err) @@ -179,10 +199,12 @@ func (bp *BatchProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato } // Store session info. - if err = bp.proverTaskOrm.InsertProverTask(ctx.Copy(), &proverTask); err != nil { - bp.recoverActiveAttempts(ctx, batchTask) - log.Error("insert batch prover task info fail", "task_id", batchTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) - return nil, ErrCoordinatorInternalFailure + if taskCtx.hasAssignedTask == nil { + if err = bp.proverTaskOrm.InsertProverTask(ctx.Copy(), proverTask); err != nil { + bp.recoverActiveAttempts(ctx, batchTask) + log.Error("insert batch prover task info fail", "task_id", batchTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) + return nil, ErrCoordinatorInternalFailure + } } // notice uuid is set as a side effect of InsertProverTask taskMsg.UUID = proverTask.UUID.String() diff --git a/coordinator/internal/logic/provertask/bundle_prover_task.go b/coordinator/internal/logic/provertask/bundle_prover_task.go index 99090e98b6..445fe11e8a 100644 --- a/coordinator/internal/logic/provertask/bundle_prover_task.go +++ b/coordinator/internal/logic/provertask/bundle_prover_task.go @@ -81,10 +81,25 @@ func (bp *BundleProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinat for i := 0; i < 5; i++ { var getTaskError error var tmpBundleTask *orm.Bundle - tmpBundleTask, getTaskError = bp.bundleOrm.GetAssignedBundle(ctx.Copy(), maxActiveAttempts, maxTotalAttempts) - if getTaskError != nil { - log.Error("failed to get assigned bundle proving tasks", "height", getTaskParameter.ProverHeight, "err", getTaskError) - return nil, ErrCoordinatorInternalFailure + + if taskCtx.hasAssignedTask != nil { + tmpBundleTask, getTaskError = bp.bundleOrm.GetBundleByHash(ctx.Copy(), taskCtx.hasAssignedTask.TaskID) + if getTaskError != nil { + log.Error("failed to get bundle has assigned to prover", "taskID", taskCtx.hasAssignedTask.TaskID, "err", getTaskError) + return nil, ErrCoordinatorInternalFailure + } else if tmpBundleTask == nil { + // if the assigned chunk dropped, there would be too much issue to assign another + return nil, fmt.Errorf("prover with publicKey %s is already assigned a dropped bundle. ProverName: %s, ProverVersion: %s", + taskCtx.PublicKey, taskCtx.ProverName, taskCtx.ProverVersion) + } + } + + if tmpBundleTask == nil { + tmpBundleTask, getTaskError = bp.bundleOrm.GetAssignedBundle(ctx.Copy(), maxActiveAttempts, maxTotalAttempts) + if getTaskError != nil { + log.Error("failed to get assigned bundle proving tasks", "height", getTaskParameter.ProverHeight, "err", getTaskError) + return nil, ErrCoordinatorInternalFailure + } } // Why here need get again? In order to support a task can assign to multiple prover, need also assign `ProvingTaskAssigned` @@ -147,19 +162,24 @@ func (bp *BundleProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinat } log.Info("start bundle proof generation session", "task index", bundleTask.Index, "public key", taskCtx.PublicKey, "prover name", taskCtx.ProverName) - proverTask := orm.ProverTask{ - TaskID: bundleTask.Hash, - ProverPublicKey: taskCtx.PublicKey, - TaskType: int16(message.ProofTypeBundle), - ProverName: taskCtx.ProverName, - ProverVersion: taskCtx.ProverVersion, - ProvingStatus: int16(types.ProverAssigned), - FailureType: int16(types.ProverTaskFailureTypeUndefined), - // here why need use UTC time. see scroll/common/database/db.go - AssignedAt: utils.NowUTC(), + var proverTask *orm.ProverTask + if taskCtx.hasAssignedTask == nil { + proverTask = &orm.ProverTask{ + TaskID: bundleTask.Hash, + ProverPublicKey: taskCtx.PublicKey, + TaskType: int16(message.ProofTypeBundle), + ProverName: taskCtx.ProverName, + ProverVersion: taskCtx.ProverVersion, + ProvingStatus: int16(types.ProverAssigned), + FailureType: int16(types.ProverTaskFailureTypeUndefined), + // here why need use UTC time. see scroll/common/database/db.go + AssignedAt: utils.NowUTC(), + } + } else { + proverTask = taskCtx.hasAssignedTask } - taskMsg, err := bp.formatProverTask(ctx.Copy(), &proverTask, hardForkName) + taskMsg, err := bp.formatProverTask(ctx.Copy(), proverTask, hardForkName) if err != nil { bp.recoverActiveAttempts(ctx, bundleTask) log.Error("format bundle prover task failure", "task_id", bundleTask.Hash, "err", err) @@ -179,10 +199,12 @@ func (bp *BundleProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinat } // Store session info. - if err = bp.proverTaskOrm.InsertProverTask(ctx.Copy(), &proverTask); err != nil { - bp.recoverActiveAttempts(ctx, bundleTask) - log.Error("insert bundle prover task info fail", "task_id", bundleTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) - return nil, ErrCoordinatorInternalFailure + if taskCtx.hasAssignedTask == nil { + if err = bp.proverTaskOrm.InsertProverTask(ctx.Copy(), proverTask); err != nil { + bp.recoverActiveAttempts(ctx, bundleTask) + log.Error("insert bundle prover task info fail", "task_id", bundleTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) + return nil, ErrCoordinatorInternalFailure + } } // notice uuid is set as a side effect of InsertProverTask taskMsg.UUID = proverTask.UUID.String() diff --git a/coordinator/internal/logic/provertask/chunk_prover_task.go b/coordinator/internal/logic/provertask/chunk_prover_task.go index b7622a5b52..2aabab7614 100644 --- a/coordinator/internal/logic/provertask/chunk_prover_task.go +++ b/coordinator/internal/logic/provertask/chunk_prover_task.go @@ -79,12 +79,26 @@ func (cp *ChunkProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato for i := 0; i < 5; i++ { var getTaskError error var tmpChunkTask *orm.Chunk - tmpChunkTask, getTaskError = cp.chunkOrm.GetAssignedChunk(ctx.Copy(), maxActiveAttempts, maxTotalAttempts, getTaskParameter.ProverHeight) - if getTaskError != nil { - log.Error("failed to get assigned chunk proving tasks", "height", getTaskParameter.ProverHeight, "err", getTaskError) - return nil, ErrCoordinatorInternalFailure + if taskCtx.hasAssignedTask != nil { + log.Debug("retrived assigned task chunk", "taskID", taskCtx.hasAssignedTask.TaskID, "prover", taskCtx.ProverName) + tmpChunkTask, getTaskError = cp.chunkOrm.GetChunkByHash(ctx.Copy(), taskCtx.hasAssignedTask.TaskID) + if getTaskError != nil { + log.Error("failed to get chunk has assigned to prover", "taskID", taskCtx.hasAssignedTask.TaskID, "err", getTaskError) + return nil, ErrCoordinatorInternalFailure + } else if tmpChunkTask == nil { + // if the assigned chunk dropped, there would be too much issue to assign another + return nil, fmt.Errorf("prover with publicKey %s is already assigned a dropped chunk. ProverName: %s, ProverVersion: %s", + taskCtx.PublicKey, taskCtx.ProverName, taskCtx.ProverVersion) + } } + if tmpChunkTask == nil { + tmpChunkTask, getTaskError = cp.chunkOrm.GetAssignedChunk(ctx.Copy(), maxActiveAttempts, maxTotalAttempts, getTaskParameter.ProverHeight) + if getTaskError != nil { + log.Error("failed to get assigned chunk proving tasks", "height", getTaskParameter.ProverHeight, "err", getTaskError) + return nil, ErrCoordinatorInternalFailure + } + } // Why here need get again? In order to support a task can assign to multiple prover, need also assign `ProvingTaskAssigned` // chunk to prover. But use `proving_status in (1, 2)` will not use the postgres index. So need split the sql. if tmpChunkTask == nil { @@ -145,19 +159,24 @@ func (cp *ChunkProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato } log.Info("start chunk generation session", "task_id", chunkTask.Hash, "public key", taskCtx.PublicKey, "prover name", taskCtx.ProverName) - proverTask := orm.ProverTask{ - TaskID: chunkTask.Hash, - ProverPublicKey: taskCtx.PublicKey, - TaskType: int16(message.ProofTypeChunk), - ProverName: taskCtx.ProverName, - ProverVersion: taskCtx.ProverVersion, - ProvingStatus: int16(types.ProverAssigned), - FailureType: int16(types.ProverTaskFailureTypeUndefined), - // here why need use UTC time. see scroll/common/database/db.go - AssignedAt: utils.NowUTC(), + var proverTask *orm.ProverTask + if taskCtx.hasAssignedTask == nil { + proverTask = &orm.ProverTask{ + TaskID: chunkTask.Hash, + ProverPublicKey: taskCtx.PublicKey, + TaskType: int16(message.ProofTypeChunk), + ProverName: taskCtx.ProverName, + ProverVersion: taskCtx.ProverVersion, + ProvingStatus: int16(types.ProverAssigned), + FailureType: int16(types.ProverTaskFailureTypeUndefined), + // here why need use UTC time. see scroll/common/database/db.go + AssignedAt: utils.NowUTC(), + } + } else { + proverTask = taskCtx.hasAssignedTask } - taskMsg, err := cp.formatProverTask(ctx.Copy(), &proverTask, chunkTask, hardForkName) + taskMsg, err := cp.formatProverTask(ctx.Copy(), proverTask, chunkTask, hardForkName) if err != nil { cp.recoverActiveAttempts(ctx, chunkTask) log.Error("format prover task failure", "task_id", chunkTask.Hash, "err", err) @@ -175,10 +194,12 @@ func (cp *ChunkProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato proverTask.Metadata = metadata } - if err = cp.proverTaskOrm.InsertProverTask(ctx.Copy(), &proverTask); err != nil { - cp.recoverActiveAttempts(ctx, chunkTask) - log.Error("insert chunk prover task fail", "task_id", chunkTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) - return nil, ErrCoordinatorInternalFailure + if taskCtx.hasAssignedTask == nil { + if err = cp.proverTaskOrm.InsertProverTask(ctx.Copy(), proverTask); err != nil { + cp.recoverActiveAttempts(ctx, chunkTask) + log.Error("insert chunk prover task fail", "task_id", chunkTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) + return nil, ErrCoordinatorInternalFailure + } } // notice uuid is set as a side effect of InsertProverTask taskMsg.UUID = proverTask.UUID.String() diff --git a/coordinator/internal/logic/provertask/prover_task.go b/coordinator/internal/logic/provertask/prover_task.go index abe56b94ad..152a736fb1 100644 --- a/coordinator/internal/logic/provertask/prover_task.go +++ b/coordinator/internal/logic/provertask/prover_task.go @@ -57,10 +57,11 @@ type proverTaskContext struct { ProverProviderType uint8 HardForkNames map[string]struct{} - taskType message.ProofType - chunkTask *orm.Chunk - batchTask *orm.Batch - bundleTask *orm.Bundle + taskType message.ProofType + chunkTask *orm.Chunk + batchTask *orm.Batch + bundleTask *orm.Bundle + hasAssignedTask *orm.ProverTask } // hardForkName get the chunk/batch/bundle hard fork name @@ -175,14 +176,12 @@ func (b *BaseProverTask) checkParameter(ctx *gin.Context) (*proverTaskContext, e return nil, fmt.Errorf("public key %s is blocked from fetching tasks. ProverName: %s, ProverVersion: %s", publicKey, proverName, proverVersion) } - isAssigned, err := b.proverTaskOrm.IsProverAssigned(ctx.Copy(), publicKey.(string)) + assigned, err := b.proverTaskOrm.IsProverAssigned(ctx.Copy(), publicKey.(string)) if err != nil { return nil, fmt.Errorf("failed to check if prover %s is assigned a task, err: %w", publicKey.(string), err) } - if isAssigned { - return nil, fmt.Errorf("prover with publicKey %s is already assigned a task. ProverName: %s, ProverVersion: %s", publicKey, proverName, proverVersion) - } + ptc.hasAssignedTask = assigned return &ptc, nil } diff --git a/coordinator/internal/orm/prover_task.go b/coordinator/internal/orm/prover_task.go index ee7424a72b..6aa5907d0d 100644 --- a/coordinator/internal/orm/prover_task.go +++ b/coordinator/internal/orm/prover_task.go @@ -57,17 +57,17 @@ func (*ProverTask) TableName() string { } // IsProverAssigned checks if a prover with the given public key has been assigned a task. -func (o *ProverTask) IsProverAssigned(ctx context.Context, publicKey string) (bool, error) { +func (o *ProverTask) IsProverAssigned(ctx context.Context, publicKey string) (*ProverTask, error) { db := o.db.WithContext(ctx) var task ProverTask err := db.Where("prover_public_key = ? AND proving_status = ?", publicKey, types.ProverAssigned).First(&task).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { - return false, nil + return nil, nil } - return false, err + return nil, err } - return true, nil + return &task, nil } // GetProverTasks get prover tasks From c2ab08a47fdfc90f1e7bced6b277bd00a0f2cd04 Mon Sep 17 00:00:00 2001 From: Ho Date: Fri, 27 Jun 2025 13:40:40 +0900 Subject: [PATCH 17/29] fix attempt number for reassigned task --- .../logic/provertask/batch_prover_task.go | 48 +++++++++-------- .../logic/provertask/bundle_prover_task.go | 49 ++++++++++-------- .../logic/provertask/chunk_prover_task.go | 51 +++++++++++-------- coordinator/internal/orm/prover_task.go | 18 +++++++ zkvm-prover/.work/.gitignore | 3 +- 5 files changed, 105 insertions(+), 64 deletions(-) diff --git a/coordinator/internal/logic/provertask/batch_prover_task.go b/coordinator/internal/logic/provertask/batch_prover_task.go index dc08f16dc8..1315a5b699 100644 --- a/coordinator/internal/logic/provertask/batch_prover_task.go +++ b/coordinator/internal/logic/provertask/batch_prover_task.go @@ -129,29 +129,32 @@ func (bp *BatchProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato return nil, nil } - // Don't dispatch the same failing job to the same prover - proverTasks, getFailedTaskError := bp.proverTaskOrm.GetFailedProverTasksByHash(ctx.Copy(), message.ProofTypeBatch, tmpBatchTask.Hash, 2) - if getFailedTaskError != nil { - log.Error("failed to get prover tasks", "proof type", message.ProofTypeBatch.String(), "task ID", tmpBatchTask.Hash, "error", getFailedTaskError) - return nil, ErrCoordinatorInternalFailure - } - for i := 0; i < len(proverTasks); i++ { - if proverTasks[i].ProverPublicKey == taskCtx.PublicKey || - taskCtx.ProverProviderType == uint8(coordinatorType.ProverProviderTypeExternal) && cutils.IsExternalProverNameMatch(proverTasks[i].ProverName, taskCtx.ProverName) { - log.Debug("get empty batch, the prover already failed this task", "height", getTaskParameter.ProverHeight, "task ID", tmpBatchTask.Hash, "prover name", taskCtx.ProverName, "prover public key", taskCtx.PublicKey) - return nil, nil + // we are simply pick the chunk which has been assigned, so don't bother to update attempts or check failed before + if taskCtx.hasAssignedTask != nil { + // Don't dispatch the same failing job to the same prover + proverTasks, getFailedTaskError := bp.proverTaskOrm.GetFailedProverTasksByHash(ctx.Copy(), message.ProofTypeBatch, tmpBatchTask.Hash, 2) + if getFailedTaskError != nil { + log.Error("failed to get prover tasks", "proof type", message.ProofTypeBatch.String(), "task ID", tmpBatchTask.Hash, "error", getFailedTaskError) + return nil, ErrCoordinatorInternalFailure + } + for i := 0; i < len(proverTasks); i++ { + if proverTasks[i].ProverPublicKey == taskCtx.PublicKey || + taskCtx.ProverProviderType == uint8(coordinatorType.ProverProviderTypeExternal) && cutils.IsExternalProverNameMatch(proverTasks[i].ProverName, taskCtx.ProverName) { + log.Debug("get empty batch, the prover already failed this task", "height", getTaskParameter.ProverHeight, "task ID", tmpBatchTask.Hash, "prover name", taskCtx.ProverName, "prover public key", taskCtx.PublicKey) + return nil, nil + } } - } - rowsAffected, updateAttemptsErr := bp.batchOrm.UpdateBatchAttempts(ctx.Copy(), tmpBatchTask.Index, tmpBatchTask.ActiveAttempts, tmpBatchTask.TotalAttempts) - if updateAttemptsErr != nil { - log.Error("failed to update batch attempts", "height", getTaskParameter.ProverHeight, "err", updateAttemptsErr) - return nil, ErrCoordinatorInternalFailure - } + rowsAffected, updateAttemptsErr := bp.batchOrm.UpdateBatchAttempts(ctx.Copy(), tmpBatchTask.Index, tmpBatchTask.ActiveAttempts, tmpBatchTask.TotalAttempts) + if updateAttemptsErr != nil { + log.Error("failed to update batch attempts", "height", getTaskParameter.ProverHeight, "err", updateAttemptsErr) + return nil, ErrCoordinatorInternalFailure + } - if rowsAffected == 0 { - time.Sleep(100 * time.Millisecond) - continue + if rowsAffected == 0 { + time.Sleep(100 * time.Millisecond) + continue + } } batchTask = tmpBatchTask @@ -205,6 +208,11 @@ func (bp *BatchProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato log.Error("insert batch prover task info fail", "task_id", batchTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) return nil, ErrCoordinatorInternalFailure } + } else { + if err = bp.proverTaskOrm.UpdateProverTaskAssignedTime(ctx.Copy(), proverTask.UUID, utils.NowUTC()); err != nil { + log.Error("update assigned batch prover task fail", "task_id", batchTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) + return nil, ErrCoordinatorInternalFailure + } } // notice uuid is set as a side effect of InsertProverTask taskMsg.UUID = proverTask.UUID.String() diff --git a/coordinator/internal/logic/provertask/bundle_prover_task.go b/coordinator/internal/logic/provertask/bundle_prover_task.go index 445fe11e8a..ee8da78ca3 100644 --- a/coordinator/internal/logic/provertask/bundle_prover_task.go +++ b/coordinator/internal/logic/provertask/bundle_prover_task.go @@ -127,31 +127,33 @@ func (bp *BundleProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinat return nil, nil } - // Don't dispatch the same failing job to the same prover - proverTasks, getTaskError := bp.proverTaskOrm.GetFailedProverTasksByHash(ctx.Copy(), message.ProofTypeBundle, tmpBundleTask.Hash, 2) - if getTaskError != nil { - log.Error("failed to get prover tasks", "proof type", message.ProofTypeBundle.String(), "task ID", tmpBundleTask.Hash, "error", getTaskError) - return nil, ErrCoordinatorInternalFailure - } - for i := 0; i < len(proverTasks); i++ { - if proverTasks[i].ProverPublicKey == taskCtx.PublicKey || - taskCtx.ProverProviderType == uint8(coordinatorType.ProverProviderTypeExternal) && cutils.IsExternalProverNameMatch(proverTasks[i].ProverName, taskCtx.ProverName) { - log.Debug("get empty bundle, the prover already failed this task", "height", getTaskParameter.ProverHeight, "task ID", tmpBundleTask.Hash, "prover name", taskCtx.ProverName, "prover public key", taskCtx.PublicKey) - return nil, nil + // we are simply pick the chunk which has been assigned, so don't bother to update attempts or check failed before + if taskCtx.hasAssignedTask != nil { + // Don't dispatch the same failing job to the same prover + proverTasks, getTaskError := bp.proverTaskOrm.GetFailedProverTasksByHash(ctx.Copy(), message.ProofTypeBundle, tmpBundleTask.Hash, 2) + if getTaskError != nil { + log.Error("failed to get prover tasks", "proof type", message.ProofTypeBundle.String(), "task ID", tmpBundleTask.Hash, "error", getTaskError) + return nil, ErrCoordinatorInternalFailure + } + for i := 0; i < len(proverTasks); i++ { + if proverTasks[i].ProverPublicKey == taskCtx.PublicKey || + taskCtx.ProverProviderType == uint8(coordinatorType.ProverProviderTypeExternal) && cutils.IsExternalProverNameMatch(proverTasks[i].ProverName, taskCtx.ProverName) { + log.Debug("get empty bundle, the prover already failed this task", "height", getTaskParameter.ProverHeight, "task ID", tmpBundleTask.Hash, "prover name", taskCtx.ProverName, "prover public key", taskCtx.PublicKey) + return nil, nil + } } - } - rowsAffected, updateAttemptsErr := bp.bundleOrm.UpdateBundleAttempts(ctx.Copy(), tmpBundleTask.Hash, tmpBundleTask.ActiveAttempts, tmpBundleTask.TotalAttempts) - if updateAttemptsErr != nil { - log.Error("failed to update bundle attempts", "height", getTaskParameter.ProverHeight, "err", updateAttemptsErr) - return nil, ErrCoordinatorInternalFailure - } + rowsAffected, updateAttemptsErr := bp.bundleOrm.UpdateBundleAttempts(ctx.Copy(), tmpBundleTask.Hash, tmpBundleTask.ActiveAttempts, tmpBundleTask.TotalAttempts) + if updateAttemptsErr != nil { + log.Error("failed to update bundle attempts", "height", getTaskParameter.ProverHeight, "err", updateAttemptsErr) + return nil, ErrCoordinatorInternalFailure + } - if rowsAffected == 0 { - time.Sleep(100 * time.Millisecond) - continue + if rowsAffected == 0 { + time.Sleep(100 * time.Millisecond) + continue + } } - bundleTask = tmpBundleTask break } @@ -205,6 +207,11 @@ func (bp *BundleProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinat log.Error("insert bundle prover task info fail", "task_id", bundleTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) return nil, ErrCoordinatorInternalFailure } + } else { + if err = bp.proverTaskOrm.UpdateProverTaskAssignedTime(ctx.Copy(), proverTask.UUID, utils.NowUTC()); err != nil { + log.Error("update assigned bundle prover task fail", "task_id", bundleTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) + return nil, ErrCoordinatorInternalFailure + } } // notice uuid is set as a side effect of InsertProverTask taskMsg.UUID = proverTask.UUID.String() diff --git a/coordinator/internal/logic/provertask/chunk_prover_task.go b/coordinator/internal/logic/provertask/chunk_prover_task.go index 2aabab7614..dedb519119 100644 --- a/coordinator/internal/logic/provertask/chunk_prover_task.go +++ b/coordinator/internal/logic/provertask/chunk_prover_task.go @@ -80,7 +80,7 @@ func (cp *ChunkProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato var getTaskError error var tmpChunkTask *orm.Chunk if taskCtx.hasAssignedTask != nil { - log.Debug("retrived assigned task chunk", "taskID", taskCtx.hasAssignedTask.TaskID, "prover", taskCtx.ProverName) + log.Debug("retrieved assigned task chunk", "taskID", taskCtx.hasAssignedTask.TaskID, "prover", taskCtx.ProverName) tmpChunkTask, getTaskError = cp.chunkOrm.GetChunkByHash(ctx.Copy(), taskCtx.hasAssignedTask.TaskID) if getTaskError != nil { log.Error("failed to get chunk has assigned to prover", "taskID", taskCtx.hasAssignedTask.TaskID, "err", getTaskError) @@ -124,31 +124,33 @@ func (cp *ChunkProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato return nil, nil } - // Don't dispatch the same failing job to the same prover - proverTasks, getFailedTaskError := cp.proverTaskOrm.GetFailedProverTasksByHash(ctx.Copy(), message.ProofTypeChunk, tmpChunkTask.Hash, 2) - if getFailedTaskError != nil { - log.Error("failed to get prover tasks", "proof type", message.ProofTypeChunk.String(), "task ID", tmpChunkTask.Hash, "error", getFailedTaskError) - return nil, ErrCoordinatorInternalFailure - } - for i := 0; i < len(proverTasks); i++ { - if proverTasks[i].ProverPublicKey == taskCtx.PublicKey || - taskCtx.ProverProviderType == uint8(coordinatorType.ProverProviderTypeExternal) && cutils.IsExternalProverNameMatch(proverTasks[i].ProverName, taskCtx.ProverName) { - log.Debug("get empty chunk, the prover already failed this task", "height", getTaskParameter.ProverHeight, "task ID", tmpChunkTask.Hash, "prover name", taskCtx.ProverName, "prover public key", taskCtx.PublicKey) - return nil, nil + // we are simply pick the chunk which has been assigned, so don't bother to update attempts or check failed before + if taskCtx.hasAssignedTask != nil { + // Don't dispatch the same failing job to the same prover + proverTasks, getFailedTaskError := cp.proverTaskOrm.GetFailedProverTasksByHash(ctx.Copy(), message.ProofTypeChunk, tmpChunkTask.Hash, 2) + if getFailedTaskError != nil { + log.Error("failed to get prover tasks", "proof type", message.ProofTypeChunk.String(), "task ID", tmpChunkTask.Hash, "error", getFailedTaskError) + return nil, ErrCoordinatorInternalFailure + } + for i := 0; i < len(proverTasks); i++ { + if proverTasks[i].ProverPublicKey == taskCtx.PublicKey || + taskCtx.ProverProviderType == uint8(coordinatorType.ProverProviderTypeExternal) && cutils.IsExternalProverNameMatch(proverTasks[i].ProverName, taskCtx.ProverName) { + log.Debug("get empty chunk, the prover already failed this task", "height", getTaskParameter.ProverHeight, "task ID", tmpChunkTask.Hash, "prover name", taskCtx.ProverName, "prover public key", taskCtx.PublicKey) + return nil, nil + } } - } - rowsAffected, updateAttemptsErr := cp.chunkOrm.UpdateChunkAttempts(ctx.Copy(), tmpChunkTask.Index, tmpChunkTask.ActiveAttempts, tmpChunkTask.TotalAttempts) - if updateAttemptsErr != nil { - log.Error("failed to update chunk attempts", "height", getTaskParameter.ProverHeight, "err", updateAttemptsErr) - return nil, ErrCoordinatorInternalFailure - } + rowsAffected, updateAttemptsErr := cp.chunkOrm.UpdateChunkAttempts(ctx.Copy(), tmpChunkTask.Index, tmpChunkTask.ActiveAttempts, tmpChunkTask.TotalAttempts) + if updateAttemptsErr != nil { + log.Error("failed to update chunk attempts", "height", getTaskParameter.ProverHeight, "err", updateAttemptsErr) + return nil, ErrCoordinatorInternalFailure + } - if rowsAffected == 0 { - time.Sleep(100 * time.Millisecond) - continue + if rowsAffected == 0 { + time.Sleep(100 * time.Millisecond) + continue + } } - chunkTask = tmpChunkTask break } @@ -200,6 +202,11 @@ func (cp *ChunkProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato log.Error("insert chunk prover task fail", "task_id", chunkTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) return nil, ErrCoordinatorInternalFailure } + } else { + if err = cp.proverTaskOrm.UpdateProverTaskAssignedTime(ctx.Copy(), proverTask.UUID, utils.NowUTC()); err != nil { + log.Error("update assigned chunk prover task fail", "task_id", chunkTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) + return nil, ErrCoordinatorInternalFailure + } } // notice uuid is set as a side effect of InsertProverTask taskMsg.UUID = proverTask.UUID.String() diff --git a/coordinator/internal/orm/prover_task.go b/coordinator/internal/orm/prover_task.go index 6aa5907d0d..f6a3aee8d0 100644 --- a/coordinator/internal/orm/prover_task.go +++ b/coordinator/internal/orm/prover_task.go @@ -269,6 +269,24 @@ func (o *ProverTask) UpdateProverTaskProvingStatusAndFailureType(ctx context.Con return nil } +// UpdateProverTaskProvingStatusAndFailureType updates the proving_status of a specific ProverTask record. +func (o *ProverTask) UpdateProverTaskAssignedTime(ctx context.Context, uuid uuid.UUID, t time.Time, dbTX ...*gorm.DB) error { + db := o.db + if len(dbTX) > 0 && dbTX[0] != nil { + db = dbTX[0] + } + db = db.WithContext(ctx) + db = db.Model(&ProverTask{}) + db = db.Where("uuid = ?", uuid) + + updates := make(map[string]interface{}) + updates["assigned_at"] = t + if err := db.Updates(updates).Error; err != nil { + return fmt.Errorf("ProverTask.UpdateProverTaskAssignedTime error: %w, uuid:%s, status: %v", err, uuid, t) + } + return nil +} + // UpdateProverTaskFailureType update the prover task failure type func (o *ProverTask) UpdateProverTaskFailureType(ctx context.Context, uuid uuid.UUID, failureType types.ProverTaskFailureType, dbTX ...*gorm.DB) error { db := o.db diff --git a/zkvm-prover/.work/.gitignore b/zkvm-prover/.work/.gitignore index 88f0f3f95e..b928870525 100644 --- a/zkvm-prover/.work/.gitignore +++ b/zkvm-prover/.work/.gitignore @@ -3,4 +3,5 @@ *.sol cache db -*.json \ No newline at end of file +*.json +? \ No newline at end of file From fe1fa4c662782269c781b3287fd811b852c0c979 Mon Sep 17 00:00:00 2001 From: Ho Date: Fri, 27 Jun 2025 15:07:51 +0900 Subject: [PATCH 18/29] fix CI --- coordinator/conf/config.json | 5 +- .../internal/controller/api/get_task.go | 53 ++------------ .../internal/controller/api/l2_syncer.go | 71 +++++++++++++++++++ .../internal/controller/api/mock_syncer.go | 20 ++++++ coordinator/internal/logic/libzkp/lib.go | 8 --- .../logic/libzkp/mock_universal_task.go | 3 + .../internal/logic/libzkp/universal_task.go | 8 +++ .../logic/provertask/batch_prover_task.go | 2 +- .../logic/provertask/bundle_prover_task.go | 2 +- .../logic/provertask/chunk_prover_task.go | 2 +- coordinator/internal/logic/verifier/mock.go | 8 ++- coordinator/test/api_test.go | 3 +- 12 files changed, 123 insertions(+), 62 deletions(-) create mode 100644 coordinator/internal/controller/api/l2_syncer.go create mode 100644 coordinator/internal/controller/api/mock_syncer.go diff --git a/coordinator/conf/config.json b/coordinator/conf/config.json index 301f89e12c..64d8689d78 100644 --- a/coordinator/conf/config.json +++ b/coordinator/conf/config.json @@ -21,7 +21,10 @@ "maxIdleNum": 20 }, "l2": { - "chain_id": 111 + "chain_id": 111, + "l2geth": { + "endpoint": "not need to specified for mocking" + } }, "auth": { "secret": "prover secret key", diff --git a/coordinator/internal/controller/api/get_task.go b/coordinator/internal/controller/api/get_task.go index 37084dae90..514a56b491 100644 --- a/coordinator/internal/controller/api/get_task.go +++ b/coordinator/internal/controller/api/get_task.go @@ -4,13 +4,10 @@ import ( "errors" "fmt" "math/rand" - "sync" - "time" "github.com/gin-gonic/gin" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" - "github.com/scroll-tech/go-ethereum/ethclient" "github.com/scroll-tech/go-ethereum/log" "github.com/scroll-tech/go-ethereum/params" "gorm.io/gorm" @@ -29,12 +26,7 @@ type GetTaskController struct { getTaskAccessCounter *prometheus.CounterVec - l2gethClient *ethclient.Client - lastBlockNumber struct { - sync.RWMutex - data uint64 - t time.Time - } + l2syncer *l2Syncer } // NewGetTaskController create a get prover task controller @@ -55,50 +47,15 @@ func NewGetTaskController(cfg *config.Config, chainCfg *params.ChainConfig, db * ptc.proverTasks[message.ProofTypeBatch] = batchProverTask ptc.proverTasks[message.ProofTypeBundle] = bundleProverTask - if cfg.L2 == nil || cfg.L2.Endpoint == nil { - log.Crit("l2 endpoint is not set in config") + if syncer, err := createL2Syncer(cfg); err != nil { + log.Crit("can not init l2 syncer", "err", err) } else { - var err error - ptc.l2gethClient, err = ethclient.Dial(cfg.L2.Endpoint.Url) - if err != nil { - log.Crit("dial l2geth endpoint fail", "err", err) - } + ptc.l2syncer = syncer } return ptc } -// getLatestBlockNumber gets the latest block number, using cache if available and not expired -func (ptc *GetTaskController) getLatestBlockNumber(ctx *gin.Context) (uint64, error) { - // First check if we have a cached value that's still valid - ptc.lastBlockNumber.RLock() - if !ptc.lastBlockNumber.t.IsZero() && time.Since(ptc.lastBlockNumber.t) < time.Second*10 { - blockNumber := ptc.lastBlockNumber.data - ptc.lastBlockNumber.RUnlock() - return blockNumber, nil - } - ptc.lastBlockNumber.RUnlock() - - // If not cached or expired, fetch from the client - if ptc.l2gethClient == nil { - return 0, errors.New("L2 geth client not initialized") - } - - blockNumber, err := ptc.l2gethClient.BlockNumber(ctx) - if err != nil { - return 0, fmt.Errorf("failed to get latest block number: %w", err) - } - - // Update the cache - ptc.lastBlockNumber.Lock() - ptc.lastBlockNumber.data = blockNumber - ptc.lastBlockNumber.t = time.Now() - ptc.lastBlockNumber.Unlock() - - log.Debug("updated block height reference", "height", blockNumber) - return blockNumber, nil -} - func (ptc *GetTaskController) incGetTaskAccessCounter(ctx *gin.Context) error { publicKey, publicKeyExist := ctx.Get(coordinatorType.PublicKey) if !publicKeyExist { @@ -132,7 +89,7 @@ func (ptc *GetTaskController) GetTasks(ctx *gin.Context) { if getTaskParameter.ProverHeight == 0 { // help update the prover height with internal l2geth - if blk, err := ptc.getLatestBlockNumber(ctx); err == nil { + if blk, err := ptc.l2syncer.getLatestBlockNumber(ctx); err == nil { getTaskParameter.ProverHeight = blk } else { nerr := fmt.Errorf("inner l2geth failure, err:%w", err) diff --git a/coordinator/internal/controller/api/l2_syncer.go b/coordinator/internal/controller/api/l2_syncer.go new file mode 100644 index 0000000000..b675d0925f --- /dev/null +++ b/coordinator/internal/controller/api/l2_syncer.go @@ -0,0 +1,71 @@ +//go:build !mock_verifier + +package api + +import ( + "errors" + "fmt" + "sync" + "time" + + "github.com/gin-gonic/gin" + "github.com/scroll-tech/go-ethereum/ethclient" + "github.com/scroll-tech/go-ethereum/log" + + "scroll-tech/coordinator/internal/config" +) + +type l2Syncer struct { + l2gethClient *ethclient.Client + lastBlockNumber struct { + sync.RWMutex + data uint64 + t time.Time + } +} + +func createL2Syncer(cfg *config.Config) (*l2Syncer, error) { + + if cfg.L2 == nil || cfg.L2.Endpoint == nil { + return nil, fmt.Errorf("l2 endpoint is not set in config") + } else { + l2gethClient, err := ethclient.Dial(cfg.L2.Endpoint.Url) + if err != nil { + return nil, fmt.Errorf("dial l2geth endpoint fail, err: %s", err) + } + return &l2Syncer{ + l2gethClient: l2gethClient, + }, nil + } +} + +// getLatestBlockNumber gets the latest block number, using cache if available and not expired +func (syncer *l2Syncer) getLatestBlockNumber(ctx *gin.Context) (uint64, error) { + // First check if we have a cached value that's still valid + syncer.lastBlockNumber.RLock() + if !syncer.lastBlockNumber.t.IsZero() && time.Since(syncer.lastBlockNumber.t) < time.Second*10 { + blockNumber := syncer.lastBlockNumber.data + syncer.lastBlockNumber.RUnlock() + return blockNumber, nil + } + syncer.lastBlockNumber.RUnlock() + + // If not cached or expired, fetch from the client + if syncer.l2gethClient == nil { + return 0, errors.New("L2 geth client not initialized") + } + + blockNumber, err := syncer.l2gethClient.BlockNumber(ctx) + if err != nil { + return 0, fmt.Errorf("failed to get latest block number: %w", err) + } + + // Update the cache + syncer.lastBlockNumber.Lock() + syncer.lastBlockNumber.data = blockNumber + syncer.lastBlockNumber.t = time.Now() + syncer.lastBlockNumber.Unlock() + + log.Debug("updated block height reference", "height", blockNumber) + return blockNumber, nil +} diff --git a/coordinator/internal/controller/api/mock_syncer.go b/coordinator/internal/controller/api/mock_syncer.go new file mode 100644 index 0000000000..e7505dc1ef --- /dev/null +++ b/coordinator/internal/controller/api/mock_syncer.go @@ -0,0 +1,20 @@ +//go:build mock_verifier + +package api + +import ( + "scroll-tech/coordinator/internal/config" + + "github.com/gin-gonic/gin" +) + +type l2Syncer struct{} + +func createL2Syncer(_ *config.Config) (*l2Syncer, error) { + return &l2Syncer{}, nil +} + +// getLatestBlockNumber gets the latest block number, using cache if available and not expired +func (syncer *l2Syncer) getLatestBlockNumber(_ *gin.Context) (uint64, error) { + return 99999994, nil +} diff --git a/coordinator/internal/logic/libzkp/lib.go b/coordinator/internal/logic/libzkp/lib.go index 7920135b39..79846ef5b9 100644 --- a/coordinator/internal/logic/libzkp/lib.go +++ b/coordinator/internal/logic/libzkp/lib.go @@ -35,14 +35,6 @@ func InitVerifier(configJSON string) { C.init_verifier(cConfig) } -// Initialize the verifier -func InitL2geth(configJSON string) { - cConfig := goToCString(configJSON) - defer freeCString(cConfig) - - C.init_l2geth(cConfig) -} - // Verify a chunk proof func VerifyChunkProof(proofData, forkName string) bool { cProof := goToCString(proofData) diff --git a/coordinator/internal/logic/libzkp/mock_universal_task.go b/coordinator/internal/logic/libzkp/mock_universal_task.go index f8f78a29e3..83c4e3fe1e 100644 --- a/coordinator/internal/logic/libzkp/mock_universal_task.go +++ b/coordinator/internal/logic/libzkp/mock_universal_task.go @@ -11,6 +11,9 @@ import ( "github.com/scroll-tech/go-ethereum/common" ) +func InitL2geth(configJSON string) { +} + func generateUniversalTask(taskType int, taskJSON, forkName string) (bool, string, string, []byte) { fmt.Printf("call mocked generate universal task %d, taskJson %s\n", taskType, taskJSON) diff --git a/coordinator/internal/logic/libzkp/universal_task.go b/coordinator/internal/logic/libzkp/universal_task.go index b7ae53328a..5e2f4be31f 100644 --- a/coordinator/internal/logic/libzkp/universal_task.go +++ b/coordinator/internal/logic/libzkp/universal_task.go @@ -8,6 +8,14 @@ package libzkp */ import "C" //nolint:typecheck +// Initialize the handler for universal task +func InitL2geth(configJSON string) { + cConfig := goToCString(configJSON) + defer freeCString(cConfig) + + C.init_l2geth(cConfig) +} + func generateUniversalTask(taskType int, taskJSON, forkName string) (bool, string, string, []byte) { cTask := goToCString(taskJSON) cForkName := goToCString(forkName) diff --git a/coordinator/internal/logic/provertask/batch_prover_task.go b/coordinator/internal/logic/provertask/batch_prover_task.go index 1315a5b699..9223e9da7c 100644 --- a/coordinator/internal/logic/provertask/batch_prover_task.go +++ b/coordinator/internal/logic/provertask/batch_prover_task.go @@ -130,7 +130,7 @@ func (bp *BatchProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato } // we are simply pick the chunk which has been assigned, so don't bother to update attempts or check failed before - if taskCtx.hasAssignedTask != nil { + if taskCtx.hasAssignedTask == nil { // Don't dispatch the same failing job to the same prover proverTasks, getFailedTaskError := bp.proverTaskOrm.GetFailedProverTasksByHash(ctx.Copy(), message.ProofTypeBatch, tmpBatchTask.Hash, 2) if getFailedTaskError != nil { diff --git a/coordinator/internal/logic/provertask/bundle_prover_task.go b/coordinator/internal/logic/provertask/bundle_prover_task.go index ee8da78ca3..1b39ee2aa0 100644 --- a/coordinator/internal/logic/provertask/bundle_prover_task.go +++ b/coordinator/internal/logic/provertask/bundle_prover_task.go @@ -128,7 +128,7 @@ func (bp *BundleProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinat } // we are simply pick the chunk which has been assigned, so don't bother to update attempts or check failed before - if taskCtx.hasAssignedTask != nil { + if taskCtx.hasAssignedTask == nil { // Don't dispatch the same failing job to the same prover proverTasks, getTaskError := bp.proverTaskOrm.GetFailedProverTasksByHash(ctx.Copy(), message.ProofTypeBundle, tmpBundleTask.Hash, 2) if getTaskError != nil { diff --git a/coordinator/internal/logic/provertask/chunk_prover_task.go b/coordinator/internal/logic/provertask/chunk_prover_task.go index dedb519119..3604fc00dc 100644 --- a/coordinator/internal/logic/provertask/chunk_prover_task.go +++ b/coordinator/internal/logic/provertask/chunk_prover_task.go @@ -125,7 +125,7 @@ func (cp *ChunkProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato } // we are simply pick the chunk which has been assigned, so don't bother to update attempts or check failed before - if taskCtx.hasAssignedTask != nil { + if taskCtx.hasAssignedTask == nil { // Don't dispatch the same failing job to the same prover proverTasks, getFailedTaskError := cp.proverTaskOrm.GetFailedProverTasksByHash(ctx.Copy(), message.ProofTypeChunk, tmpChunkTask.Hash, 2) if getFailedTaskError != nil { diff --git a/coordinator/internal/logic/verifier/mock.go b/coordinator/internal/logic/verifier/mock.go index 0649dbdeaf..3aa2b2c80b 100644 --- a/coordinator/internal/logic/verifier/mock.go +++ b/coordinator/internal/logic/verifier/mock.go @@ -10,7 +10,13 @@ import ( // NewVerifier Sets up a mock verifier. func NewVerifier(cfg *config.VerifierConfig) (*Verifier, error) { - return &Verifier{cfg: cfg, OpenVMVkMap: map[string]struct{}{"mock_vk": {}}}, nil + return &Verifier{ + cfg: cfg, + OpenVMVkMap: map[string]struct{}{"mock_vk": {}}, + ChunkVk: map[string][]byte{"euclidV2": []byte("mock_vk")}, + BatchVk: map[string][]byte{"euclidV2": []byte("mock_vk")}, + BundleVk: map[string][]byte{}, + }, nil } // VerifyChunkProof return a mock verification result for a ChunkProof. diff --git a/coordinator/test/api_test.go b/coordinator/test/api_test.go index 68c5edbd68..48aed39a00 100644 --- a/coordinator/test/api_test.go +++ b/coordinator/test/api_test.go @@ -79,7 +79,8 @@ func setupCoordinator(t *testing.T, proversPerSession uint8, coordinatorURL stri tokenTimeout = 60 conf = &config.Config{ L2: &config.L2{ - ChainID: 111, + ChainID: 111, + Endpoint: &config.L2Endpoint{}, }, ProverManager: &config.ProverManager{ ProversPerSession: proversPerSession, From 991c60da65d9a294f3c2d80674a2836ac0d8c548 Mon Sep 17 00:00:00 2001 From: Ho Date: Fri, 27 Jun 2025 15:19:59 +0900 Subject: [PATCH 19/29] update go mod and rust toolchain --- .github/workflows/common.yml | 2 +- .github/workflows/coordinator.yml | 2 +- coordinator/go.mod | 30 ++++++++ coordinator/go.sum | 124 ++++++++++++++++++++++++++++++ 4 files changed, 156 insertions(+), 2 deletions(-) diff --git a/.github/workflows/common.yml b/.github/workflows/common.yml index d89053cf99..8b032dbf4a 100644 --- a/.github/workflows/common.yml +++ b/.github/workflows/common.yml @@ -29,7 +29,7 @@ jobs: steps: - uses: actions-rs/toolchain@v1 with: - toolchain: nightly-2024-12-06 + toolchain: nightly-2025-02-14 override: true components: rustfmt, clippy - name: Install Go diff --git a/.github/workflows/coordinator.yml b/.github/workflows/coordinator.yml index 53b1b98bd5..ae65aad171 100644 --- a/.github/workflows/coordinator.yml +++ b/.github/workflows/coordinator.yml @@ -33,7 +33,7 @@ jobs: steps: - uses: actions-rs/toolchain@v1 with: - toolchain: nightly-2023-12-03 + toolchain: nightly-2025-02-14 override: true components: rustfmt, clippy - name: Install Go diff --git a/coordinator/go.mod b/coordinator/go.mod index 9cd2f15e1d..ffb28f54fb 100644 --- a/coordinator/go.mod +++ b/coordinator/go.mod @@ -46,6 +46,7 @@ require ( ) require ( + github.com/VictoriaMetrics/fastcache v1.12.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.20.0 // indirect github.com/btcsuite/btcd v0.20.1-beta // indirect @@ -55,28 +56,57 @@ require ( github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect github.com/crate-crypto/go-kzg-4844 v1.1.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea // indirect + github.com/edsrzf/mmap-go v1.0.0 // indirect github.com/ethereum/c-kzg-4844 v1.0.3 // indirect + github.com/fjl/memsize v0.0.2 // indirect + github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-stack/stack v1.8.1 // indirect + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect + github.com/gorilla/websocket v1.4.2 // indirect + github.com/hashicorp/go-bexpr v0.1.10 // indirect + github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect + github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/uint256 v1.3.2 // indirect + github.com/huin/goupnp v1.0.2 // indirect github.com/iden3/go-iden3-crypto v0.0.17 // indirect + github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 // indirect github.com/klauspost/compress v1.17.9 // indirect + github.com/mattn/go-colorable v0.1.8 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mitchellh/pointerstructure v1.2.0 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.5.0 // indirect github.com/prometheus/common v0.48.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect + github.com/prometheus/tsdb v0.7.1 // indirect + github.com/rivo/uniseg v0.4.4 // indirect + github.com/rjeczalik/notify v0.9.1 // indirect + github.com/rs/cors v1.7.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/scroll-tech/zktrie v0.8.4 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 // indirect github.com/supranational/blst v0.3.13 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.9.0 // indirect + github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect + go.uber.org/atomic v1.7.0 // indirect + go.uber.org/multierr v1.9.0 // indirect golang.org/x/crypto v0.32.0 // indirect golang.org/x/sync v0.11.0 // indirect golang.org/x/sys v0.30.0 // indirect + golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect + gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect + gopkg.in/urfave/cli.v1 v1.20.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect rsc.io/tmplfunc v0.0.3 // indirect ) diff --git a/coordinator/go.sum b/coordinator/go.sum index e4033978bb..c2fe5eb55e 100644 --- a/coordinator/go.sum +++ b/coordinator/go.sum @@ -1,12 +1,18 @@ +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/agiledragon/gomonkey/v2 v2.12.0 h1:ek0dYu9K1rSV+TgkW5LvNNPRWyDZVIxGMCFI6Pz9o38= github.com/agiledragon/gomonkey/v2 v2.12.0/go.mod h1:ap1AmDzcVOAz1YpeJ3TCzIgstoaWLA6jbbgxfB4w2iY= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/appleboy/gin-jwt/v2 v2.9.1 h1:l29et8iLW6omcHltsOP6LLk4s3v4g2FbFs0koxGWVZs= github.com/appleboy/gin-jwt/v2 v2.9.1/go.mod h1:jwcPZJ92uoC9nOUTOKWoN/f6JZOgMSKlFSHw5/FrRUk= github.com/appleboy/gofight/v2 v2.1.2 h1:VOy3jow4vIK8BRQJoC/I9muxyYlJ2yb9ht2hZoS3rf4= github.com/appleboy/gofight/v2 v2.1.2/go.mod h1:frW+U1QZEdDgixycTj4CygQ48yLTUhplt43+Wczp3rw= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bits-and-blooms/bitset v1.20.0 h1:2F+rfL86jE2d/bmw7OhqUg2Sj/1rURkBn3MdfoPyRVU= @@ -24,6 +30,9 @@ github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1 github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.1 h1:7a1wuFXL1cMy7a3f7/VFcEtriuXQnUBhtoVfOZiaysc= github.com/bytedance/sonic v1.10.1/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= +github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= @@ -45,16 +54,32 @@ github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea h1:j4317fAZh7X6GqbFowYdYdI0L9bwxL07jyPZIdepyZ0= +github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/ethereum/c-kzg-4844 v1.0.3 h1:IEnbOHwjixW2cTvKRUlAAUOeleV7nNM/umJR+qy4WDs= github.com/ethereum/c-kzg-4844 v1.0.3/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= +github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= @@ -73,19 +98,31 @@ github.com/go-playground/validator/v10 v10.15.5 h1:LEBecTWb/1j5TNY1YYG2RcOUN3R7N github.com/go-playground/validator/v10 v10.15.5/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -93,13 +130,24 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= +github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA= github.com/holiman/uint256 v1.3.2/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= +github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= +github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/iden3/go-iden3-crypto v0.0.17 h1:NdkceRLJo/pI4UpcjVah4lN/a3yzxRUGXqxbWcYh9mY= github.com/iden3/go-iden3-crypto v0.0.17/go.mod h1:dLpM4vEPJ3nDHzhWFXDjzkn1qHoBeOT/3UEhXsEsP3E= +github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 h1:6OvNmYgJyexcZ3pYbTI9jWx5tHo1Dee/tWbLMfPe2TA= +github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= @@ -115,6 +163,7 @@ github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02 github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= @@ -129,14 +178,22 @@ github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= @@ -145,36 +202,55 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE= github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= +github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/scroll-tech/da-codec v0.1.3-0.20250626091118-58b899494da6 h1:vb2XLvQwCf+F/ifP6P/lfeiQrHY6+Yb/E3R4KHXLqSE= @@ -187,9 +263,15 @@ github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKl github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -216,6 +298,8 @@ github.com/tklauser/numcpus v0.9.0 h1:lmyCHtANi8aRUgkckBgoDk1nHCux3n2cgkJLXdQGPD github.com/tklauser/numcpus v0.9.0/go.mod h1:SN6Nq1O3VychhC1npsWostA+oW+VOQTxZrS604NSRyI= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZW24CsNJDfeh9Ex6Pm0Rcpc7qrgKBiL44vF4= +github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= @@ -227,11 +311,16 @@ github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsr github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.5.0 h1:jpGode6huXQxcskEIpOCvrU+tzo81b6+oFLUYXWtH/Y= golang.org/x/arch v0.5.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -240,7 +329,10 @@ golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -250,13 +342,25 @@ golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -269,36 +373,56 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= +gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From b73aaf5cc828c94a5e07413943f1be1e64b38eb2 Mon Sep 17 00:00:00 2001 From: Ho Date: Fri, 27 Jun 2025 21:41:02 +0900 Subject: [PATCH 20/29] reverting according to review: no update is applied for redeliver task --- coordinator/internal/logic/provertask/batch_prover_task.go | 5 ----- coordinator/internal/logic/provertask/bundle_prover_task.go | 5 ----- coordinator/internal/logic/provertask/chunk_prover_task.go | 5 ----- 3 files changed, 15 deletions(-) diff --git a/coordinator/internal/logic/provertask/batch_prover_task.go b/coordinator/internal/logic/provertask/batch_prover_task.go index cd35afb4bd..785239815b 100644 --- a/coordinator/internal/logic/provertask/batch_prover_task.go +++ b/coordinator/internal/logic/provertask/batch_prover_task.go @@ -208,11 +208,6 @@ func (bp *BatchProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato log.Error("insert batch prover task info fail", "task_id", batchTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) return nil, ErrCoordinatorInternalFailure } - } else { - if err = bp.proverTaskOrm.UpdateProverTaskAssignedTime(ctx.Copy(), proverTask.UUID, utils.NowUTC()); err != nil { - log.Error("update assigned batch prover task fail", "task_id", batchTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) - return nil, ErrCoordinatorInternalFailure - } } // notice uuid is set as a side effect of InsertProverTask taskMsg.UUID = proverTask.UUID.String() diff --git a/coordinator/internal/logic/provertask/bundle_prover_task.go b/coordinator/internal/logic/provertask/bundle_prover_task.go index 1b39ee2aa0..9c02c466a4 100644 --- a/coordinator/internal/logic/provertask/bundle_prover_task.go +++ b/coordinator/internal/logic/provertask/bundle_prover_task.go @@ -207,11 +207,6 @@ func (bp *BundleProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinat log.Error("insert bundle prover task info fail", "task_id", bundleTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) return nil, ErrCoordinatorInternalFailure } - } else { - if err = bp.proverTaskOrm.UpdateProverTaskAssignedTime(ctx.Copy(), proverTask.UUID, utils.NowUTC()); err != nil { - log.Error("update assigned bundle prover task fail", "task_id", bundleTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) - return nil, ErrCoordinatorInternalFailure - } } // notice uuid is set as a side effect of InsertProverTask taskMsg.UUID = proverTask.UUID.String() diff --git a/coordinator/internal/logic/provertask/chunk_prover_task.go b/coordinator/internal/logic/provertask/chunk_prover_task.go index 3604fc00dc..ab4df671dc 100644 --- a/coordinator/internal/logic/provertask/chunk_prover_task.go +++ b/coordinator/internal/logic/provertask/chunk_prover_task.go @@ -202,11 +202,6 @@ func (cp *ChunkProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato log.Error("insert chunk prover task fail", "task_id", chunkTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) return nil, ErrCoordinatorInternalFailure } - } else { - if err = cp.proverTaskOrm.UpdateProverTaskAssignedTime(ctx.Copy(), proverTask.UUID, utils.NowUTC()); err != nil { - log.Error("update assigned chunk prover task fail", "task_id", chunkTask.Hash, "publicKey", taskCtx.PublicKey, "err", err) - return nil, ErrCoordinatorInternalFailure - } } // notice uuid is set as a side effect of InsertProverTask taskMsg.UUID = proverTask.UUID.String() From f19e3b1cd54ead8406396f67ec7865fcfc66fb04 Mon Sep 17 00:00:00 2001 From: Ho Date: Sat, 28 Jun 2025 09:39:46 +0900 Subject: [PATCH 21/29] update configuration of verifier@coordinator --- coordinator/cmd/api/app/mock_app.go | 10 ++--- coordinator/cmd/tool/verify.go | 5 ++- coordinator/conf/config.json | 11 +++--- coordinator/internal/config/config.go | 13 ++++--- coordinator/internal/logic/auth/login.go | 12 +++--- .../internal/logic/verifier/verifier.go | 26 +++++++++---- coordinator/test/api_test.go | 10 ++--- crates/libzkp/src/verifier.rs | 37 +++++++++++-------- zkvm-prover/config.json.template | 8 +++- 9 files changed, 79 insertions(+), 53 deletions(-) diff --git a/coordinator/cmd/api/app/mock_app.go b/coordinator/cmd/api/app/mock_app.go index 5fa8eb3af4..e9181a34cd 100644 --- a/coordinator/cmd/api/app/mock_app.go +++ b/coordinator/cmd/api/app/mock_app.go @@ -90,12 +90,12 @@ func (c *CoordinatorApp) MockConfig(store bool) error { cfg.ProverManager = &coordinatorConfig.ProverManager{ ProversPerSession: 1, Verifier: &coordinatorConfig.VerifierConfig{ - HighVersionCircuit: &coordinatorConfig.CircuitConfig{ - AssetsPath: "", - ForkName: "euclidV2", - MinProverVersion: "v4.4.89", + MinProverVersion: "v4.4.89", + Verifiers: []coordinatorConfig.AssetConfig{{ + AssetsPath: "", + ForkName: "euclidV2", }, - }, + }}, BatchCollectionTimeSec: 60, ChunkCollectionTimeSec: 60, SessionAttempts: 10, diff --git a/coordinator/cmd/tool/verify.go b/coordinator/cmd/tool/verify.go index b31000ba9c..ebda7714ae 100644 --- a/coordinator/cmd/tool/verify.go +++ b/coordinator/cmd/tool/verify.go @@ -13,13 +13,14 @@ import ( "scroll-tech/common/types/message" + "github.com/scroll-tech/go-ethereum/log" "github.com/urfave/cli/v2" ) func verify(cCtx *cli.Context) error { var forkName, proofType, proofPath string if cCtx.Args().Len() <= 2 { - forkName = cfg.ProverManager.Verifier.HighVersionCircuit.ForkName + forkName = cfg.ProverManager.Verifier.Verifiers[0].ForkName proofType = cCtx.Args().First() proofPath = cCtx.Args().Get(1) } else { @@ -27,7 +28,7 @@ func verify(cCtx *cli.Context) error { proofType = cCtx.Args().Get(1) proofPath = cCtx.Args().Get(2) } - fmt.Println("verify proof in: ", proofPath, "type", proofType, "forkName", forkName) + log.Info("verify proof in: ", proofPath, "type", proofType, "forkName", forkName) // Load the content of the proof file data, err := os.ReadFile(filepath.Clean(proofPath)) diff --git a/coordinator/conf/config.json b/coordinator/conf/config.json index 64d8689d78..196c46b4b1 100644 --- a/coordinator/conf/config.json +++ b/coordinator/conf/config.json @@ -7,11 +7,12 @@ "batch_collection_time_sec": 180, "chunk_collection_time_sec": 180, "verifier": { - "high_version_circuit": { - "assets_path": "assets", - "fork_name": "euclidV2", - "min_prover_version": "v4.4.45" - } + "assets_path": "assets", + "min_prover_version": "v4.4.45", + "accept_vks": [{ + "file": "euclidvk.json", + "fork_name": "euclidV2" + }] } }, "db": { diff --git a/coordinator/internal/config/config.go b/coordinator/internal/config/config.go index 851bac49d3..4cb91ab57b 100644 --- a/coordinator/internal/config/config.go +++ b/coordinator/internal/config/config.go @@ -55,16 +55,17 @@ type Config struct { Auth *Auth `json:"auth"` } -// CircuitConfig circuit items. -type CircuitConfig struct { - AssetsPath string `json:"assets_path"` - ForkName string `json:"fork_name"` - MinProverVersion string `json:"min_prover_version"` +// AssetConfig contain assets configurated for each fork, the defaul vkfile name is "OpenVmVk.json". +type AssetConfig struct { + AssetsPath string `json:"assets_path"` + ForkName string `json:"fork_name"` + Vkfile string `json:"vk_file,omitempty"` } // VerifierConfig load zk verifier config. type VerifierConfig struct { - HighVersionCircuit *CircuitConfig `json:"high_version_circuit"` + MinProverVersion string `json:"min_prover_version"` + Verifiers []AssetConfig `json:"verifiers"` } // NewConfig returns a new instance of Config. diff --git a/coordinator/internal/logic/auth/login.go b/coordinator/internal/logic/auth/login.go index 3ed0f004ed..f5c01a2dfe 100644 --- a/coordinator/internal/logic/auth/login.go +++ b/coordinator/internal/logic/auth/login.go @@ -31,9 +31,11 @@ type LoginLogic struct { func NewLoginLogic(db *gorm.DB, cfg *config.Config, vf *verifier.Verifier) *LoginLogic { proverVersionHardForkMap := make(map[string][]string) - var highHardForks []string - highHardForks = append(highHardForks, cfg.ProverManager.Verifier.HighVersionCircuit.ForkName) - proverVersionHardForkMap[cfg.ProverManager.Verifier.HighVersionCircuit.MinProverVersion] = highHardForks + var hardForks []string + for _, cfg := range cfg.ProverManager.Verifier.Verifiers { + hardForks = append(hardForks, cfg.ForkName) + } + proverVersionHardForkMap[cfg.ProverManager.Verifier.MinProverVersion] = hardForks return &LoginLogic{ cfg: cfg, @@ -56,8 +58,8 @@ func (l *LoginLogic) Check(login *types.LoginParameter) error { return errors.New("auth message verify failure") } - if !version.CheckScrollRepoVersion(login.Message.ProverVersion, l.cfg.ProverManager.Verifier.HighVersionCircuit.MinProverVersion) { - return fmt.Errorf("incompatible prover version. please upgrade your prover, minimum allowed version: %s, actual version: %s", l.cfg.ProverManager.Verifier.HighVersionCircuit.MinProverVersion, login.Message.ProverVersion) + if !version.CheckScrollRepoVersion(login.Message.ProverVersion, l.cfg.ProverManager.Verifier.MinProverVersion) { + return fmt.Errorf("incompatible prover version. please upgrade your prover, minimum allowed version: %s, actual version: %s", l.cfg.ProverManager.Verifier.MinProverVersion, login.Message.ProverVersion) } vks := make(map[string]struct{}) diff --git a/coordinator/internal/logic/verifier/verifier.go b/coordinator/internal/logic/verifier/verifier.go index 4aa407c9ed..f9d8249c05 100644 --- a/coordinator/internal/logic/verifier/verifier.go +++ b/coordinator/internal/logic/verifier/verifier.go @@ -26,7 +26,7 @@ type rustCircuitConfig struct { AssetsPath string `json:"assets_path"` } -func newRustCircuitConfig(cfg *config.CircuitConfig) *rustCircuitConfig { +func newRustCircuitConfig(cfg config.AssetConfig) *rustCircuitConfig { return &rustCircuitConfig{ ForkName: cfg.ForkName, AssetsPath: cfg.AssetsPath, @@ -37,13 +37,17 @@ func newRustCircuitConfig(cfg *config.CircuitConfig) *rustCircuitConfig { // Define a brand new struct here is to eliminate side effects in case fields // in `*config.VerifierConfig` being changed type rustVerifierConfig struct { - HighVersionCircuit *rustCircuitConfig `json:"high_version_circuit"` + Circuits []*rustCircuitConfig `json:"circuits"` } func newRustVerifierConfig(cfg *config.VerifierConfig) *rustVerifierConfig { - return &rustVerifierConfig{ - HighVersionCircuit: newRustCircuitConfig(cfg.HighVersionCircuit), + + out := &rustVerifierConfig{} + + for _, cfg := range cfg.Verifiers { + out.Circuits = append(out.Circuits, newRustCircuitConfig(cfg)) } + return out } type rustVkDump struct { @@ -70,8 +74,10 @@ func NewVerifier(cfg *config.VerifierConfig) (*Verifier, error) { BundleVk: make(map[string][]byte), } - if err := v.loadOpenVMVks(cfg.HighVersionCircuit); err != nil { - return nil, err + for _, cfg := range cfg.Verifiers { + if err := v.loadOpenVMVks(cfg); err != nil { + return nil, err + } } return v, nil @@ -124,9 +130,13 @@ func (v *Verifier) VerifyBundleProof(proof *message.OpenVMBundleProof, forkName // return base64.StdEncoding.EncodeToString(byt), nil // } -func (v *Verifier) loadOpenVMVks(cfg *config.CircuitConfig) error { +func (v *Verifier) loadOpenVMVks(cfg config.AssetConfig) error { - vkFile := path.Join(cfg.AssetsPath, "openVmVk.json") + vkFileName := cfg.Vkfile + if vkFileName == "" { + vkFileName = "openVmVk.json" + } + vkFile := path.Join(cfg.AssetsPath, vkFileName) f, err := os.Open(filepath.Clean(vkFile)) if err != nil { diff --git a/coordinator/test/api_test.go b/coordinator/test/api_test.go index 48aed39a00..88d5b6081e 100644 --- a/coordinator/test/api_test.go +++ b/coordinator/test/api_test.go @@ -85,11 +85,11 @@ func setupCoordinator(t *testing.T, proversPerSession uint8, coordinatorURL stri ProverManager: &config.ProverManager{ ProversPerSession: proversPerSession, Verifier: &config.VerifierConfig{ - HighVersionCircuit: &config.CircuitConfig{ - AssetsPath: "", - ForkName: "euclidV2", - MinProverVersion: "v4.4.89", - }, + MinProverVersion: "v4.4.89", + Verifiers: []config.AssetConfig{{ + AssetsPath: "", + ForkName: "euclidV2", + }}, }, BatchCollectionTimeSec: 10, ChunkCollectionTimeSec: 10, diff --git a/crates/libzkp/src/verifier.rs b/crates/libzkp/src/verifier.rs index 4abd348ebe..90da7c8cac 100644 --- a/crates/libzkp/src/verifier.rs +++ b/crates/libzkp/src/verifier.rs @@ -5,6 +5,7 @@ use euclidv2::EuclidV2Verifier; use eyre::Result; use serde::{Deserialize, Serialize}; use std::{ + collections::HashMap, path::Path, sync::{Arc, Mutex, OnceLock}, }; @@ -46,36 +47,42 @@ pub struct CircuitConfig { #[derive(Debug, Serialize, Deserialize)] pub struct VerifierConfig { - pub high_version_circuit: CircuitConfig, + pub circuits: Vec, } type HardForkName = String; -struct VerifierPair(HardForkName, Arc>); -static VERIFIER_HIGH: OnceLock = OnceLock::new(); +type VerifierType = Arc>; +static VERIFIERS: OnceLock> = OnceLock::new(); pub fn init(config: VerifierConfig) { - let verifier = EuclidV2Verifier::new(&config.high_version_circuit.assets_path); + let mut verifiers: HashMap = Default::default(); - let ret = VERIFIER_HIGH - .set(VerifierPair( - config.high_version_circuit.fork_name.to_lowercase(), - Arc::new(Mutex::new(verifier)), - )) - .is_ok(); + for cfg in &config.circuits { + let verifier = EuclidV2Verifier::new(&cfg.assets_path); + let ret = verifiers.insert(cfg.fork_name.to_lowercase(), Arc::new(Mutex::new(verifier))); + assert!( + ret.is_none(), + "DO NOT init the same fork {} twice", + cfg.fork_name + ); + tracing::info!("load verifier config for fork {}", cfg.fork_name); + } + let ret = VERIFIERS.set(verifiers).is_ok(); assert!(ret); } pub fn get_verifier(fork_name: &str) -> Result>> { - if let Some(verifier) = VERIFIER_HIGH.get() { - if verifier.0 == fork_name { - return Ok(verifier.1.clone()); + if let Some(verifiers) = VERIFIERS.get() { + if let Some(verifier) = verifiers.get(fork_name) { + return Ok(verifier.clone()); } + Err(eyre::eyre!( - "failed to get verifier, key not found: {}, expected {}", + "failed to get verifier, key not found: {}, has {:?}", fork_name, - verifier.0, + verifiers.keys().collect::>(), )) } else { Err(eyre::eyre!( diff --git a/zkvm-prover/config.json.template b/zkvm-prover/config.json.template index a607e79a5e..529e1a9075 100644 --- a/zkvm-prover/config.json.template +++ b/zkvm-prover/config.json.template @@ -26,7 +26,11 @@ "circuits": { "euclidV2": { "hard_fork_name": "euclidV2", - "workspace_path": ".work" - } + "workspace_path": ".work/euclid" + }, + "feynman": { + "hard_fork_name": "feynman", + "workspace_path": ".work/feynman1" + }, } } \ No newline at end of file From 8d402ddd2f4506ee399f999e6cfb63dd25abba48 Mon Sep 17 00:00:00 2001 From: Ho Date: Sat, 28 Jun 2025 10:10:27 +0900 Subject: [PATCH 22/29] resume missed commition --- .../src/zk_circuits_handler/euclidV2.rs | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs b/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs index 583f61a8a5..c406d61515 100644 --- a/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs +++ b/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs @@ -80,16 +80,18 @@ impl CircuitsHandler for Arc> { async fn get_proof_data(&self, prove_request: ProveRequest) -> Result { let u_task: ProvingTask = serde_json::from_str(&prove_request.input)?; let handler_self = self.try_lock().unwrap(); - let expected_vk = handler_self.get_vk_and_cache(prove_request.proof_type); - if BASE64_STANDARD.encode(&u_task.vk) != expected_vk { - eyre::bail!( - "vk is not match!, prove type {:?}, expected {}, get {}", - prove_request.proof_type, - expected_vk, - BASE64_STANDARD.encode(&u_task.vk), - ); - } - + // current coordinator do not send vk and in fact it has been checked while login + // checking here is not need unless considering a malicious coordinator + /* let expected_vk = handler_self.get_vk_and_cache(prove_request.proof_type); + if BASE64_STANDARD.encode(&u_task.vk) != expected_vk { + eyre::bail!( + "vk is not match!, prove type {:?}, expected {}, get {}", + prove_request.proof_type, + expected_vk, + BASE64_STANDARD.encode(&u_task.vk), + ); + } + */ let proof = match prove_request.proof_type { ProofType::Chunk => handler_self .chunk_prover From 30e72e4b40221d2bcf5600899ba65c9ff5ecef7f Mon Sep 17 00:00:00 2001 From: Ho Date: Sun, 29 Jun 2025 22:03:39 +0900 Subject: [PATCH 23/29] fix according to review --- crates/libzkp/src/tasks.rs | 30 +++++++++++++++++- crates/libzkp/src/tasks/batch.rs | 32 +++++--------------- crates/libzkp/src/tasks/bundle.rs | 20 +----------- crates/prover-bin/src/zk_circuits_handler.rs | 14 ++++----- 4 files changed, 43 insertions(+), 53 deletions(-) diff --git a/crates/libzkp/src/tasks.rs b/crates/libzkp/src/tasks.rs index 6054e21e3c..7b62ab0052 100644 --- a/crates/libzkp/src/tasks.rs +++ b/crates/libzkp/src/tasks.rs @@ -9,10 +9,38 @@ pub use chunk::{ChunkProvingTask, ChunkTask}; pub use chunk_interpreter::ChunkInterpreter; pub use scroll_zkvm_types::task::ProvingTask; -use crate::proofs::{BatchProofMetadata, BundleProofMetadata, ChunkProofMetadata}; +use crate::proofs::{self, BatchProofMetadata, BundleProofMetadata, ChunkProofMetadata}; use sbv_primitives::B256; use scroll_zkvm_types::public_inputs::{ForkName, MultiVersionPublicInputs}; +fn check_aggregation_proofs(proofs: &[proofs::WrappedProof], fork_name: ForkName) + -> eyre::Result<()> + where Metadata : proofs::ProofMetadata, +{ + use std::panic::{self, AssertUnwindSafe}; + + panic::catch_unwind(AssertUnwindSafe(|| { + for w in proofs.windows(2) { + w[1].metadata + .pi_hash_info() + .validate(w[0].metadata.pi_hash_info(), fork_name); + } + })) + .map_err(|e| { + let error_msg = if let Some(string) = e.downcast_ref::() { + string.clone() + } else if let Some(str) = e.downcast_ref::<&str>() { + str.to_string() + } else { + "Unknown validation error occurred".to_string() + }; + eyre::eyre!("Chunk data validation failed: {}", error_msg) + })?; + + Ok(()) + +} + /// Generate required staff for chunk proving pub fn gen_universal_chunk_task( mut task: ChunkProvingTask, diff --git a/crates/libzkp/src/tasks/batch.rs b/crates/libzkp/src/tasks/batch.rs index 59c9c5d2a5..4ed6399a82 100644 --- a/crates/libzkp/src/tasks/batch.rs +++ b/crates/libzkp/src/tasks/batch.rs @@ -120,12 +120,12 @@ impl BatchProvingTask { EnvelopeV6::from(self.blob_bytes.as_slice()).challenge_digest(versioned_hash) } BatchHeaderV::V7(_) => { - assert_eq!( - fork_name, - ForkName::EuclidV2, - "hardfork mismatch for da-codec@v7 header: found={fork_name:?}, expected={:?}", - ForkName::EuclidV2, - ); + match fork_name { + ForkName::EuclidV2 => (), + _ => unreachable!("hardfork mismatch for da-codec@v6 header: found={fork_name:?}, expected={:?}", + [ForkName::EuclidV2], + ), + } let padded_blob_bytes = { let mut padded_blob_bytes = self.blob_bytes.to_vec(); padded_blob_bytes.resize(N_BLOB_BYTES, 0); @@ -174,8 +174,6 @@ impl BatchProvingTask { } pub fn precheck_and_build_metadata(&self) -> Result { - use scroll_zkvm_types::public_inputs::MultiVersionPublicInputs; - use std::panic::{self, AssertUnwindSafe}; let fork_name = ForkName::from(self.fork_name.as_str()); // for every aggregation task, there are two steps needed to build the metadata: @@ -189,23 +187,7 @@ impl BatchProvingTask { .map_err(|e| eyre::eyre!("access archieved batch witness fail: {e}"))?; let metadata: BatchInfo = archieved_witness.into(); - panic::catch_unwind(AssertUnwindSafe(|| { - for w in self.chunk_proofs.windows(2) { - w[1].metadata - .chunk_info - .validate(&w[0].metadata.chunk_info, fork_name); - } - })) - .map_err(|e| { - let error_msg = if let Some(string) = e.downcast_ref::() { - string.clone() - } else if let Some(str) = e.downcast_ref::<&str>() { - str.to_string() - } else { - "Unknown validation error occurred".to_string() - }; - eyre::eyre!("Chunk data validation failed: {}", error_msg) - })?; + super::check_aggregation_proofs(self.chunk_proofs.as_slice(), fork_name)?; Ok(metadata) } diff --git a/crates/libzkp/src/tasks/bundle.rs b/crates/libzkp/src/tasks/bundle.rs index bd86f155a0..daba2878dc 100644 --- a/crates/libzkp/src/tasks/bundle.rs +++ b/crates/libzkp/src/tasks/bundle.rs @@ -51,8 +51,6 @@ impl BundleProvingTask { } pub fn precheck_and_build_metadata(&self) -> Result { - use scroll_zkvm_types::public_inputs::MultiVersionPublicInputs; - use std::panic::{self, AssertUnwindSafe}; let fork_name = ForkName::from(self.fork_name.as_str()); // for every aggregation task, there are two steps needed to build the metadata: @@ -66,23 +64,7 @@ impl BundleProvingTask { .map_err(|e| eyre::eyre!("access archieved bundle witness fail: {e}"))?; let metadata: BundleInfo = archieved_witness.into(); - panic::catch_unwind(AssertUnwindSafe(|| { - for w in self.batch_proofs.windows(2) { - w[1].metadata - .batch_info - .validate(&w[0].metadata.batch_info, fork_name); - } - })) - .map_err(|e| { - let error_msg = if let Some(string) = e.downcast_ref::() { - string.clone() - } else if let Some(str) = e.downcast_ref::<&str>() { - str.to_string() - } else { - "Unknown validation error occurred".to_string() - }; - eyre::eyre!("Batch data validation failed: {}", error_msg) - })?; + super::check_aggregation_proofs(self.batch_proofs.as_slice(), fork_name)?; Ok(metadata) } diff --git a/crates/prover-bin/src/zk_circuits_handler.rs b/crates/prover-bin/src/zk_circuits_handler.rs index fc8349adcb..dbb4e262dd 100644 --- a/crates/prover-bin/src/zk_circuits_handler.rs +++ b/crates/prover-bin/src/zk_circuits_handler.rs @@ -54,14 +54,12 @@ impl Phase { let dir_cache = Some(workspace_path.join("cache")); let path_app_config = workspace_path.join("bundle/openvm.toml"); let segment_len = Some((1 << 22) - 100); - match self { - Phase::EuclidV2 => ProverConfig { - dir_cache, - path_app_config, - segment_len, - path_app_exe: workspace_path.join("bundle/app.vmexe"), - ..Default::default() - }, + ProverConfig { + dir_cache, + path_app_config, + segment_len, + path_app_exe: workspace_path.join("bundle/app.vmexe"), + ..Default::default() } } } From fdafbb5e1956422a255b534255476a2002c4deb6 Mon Sep 17 00:00:00 2001 From: Ho Date: Sun, 29 Jun 2025 22:05:06 +0900 Subject: [PATCH 24/29] fmt --- crates/libzkp/src/tasks.rs | 10 ++++++---- crates/libzkp/src/tasks/batch.rs | 1 - crates/libzkp/src/tasks/bundle.rs | 1 - 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/libzkp/src/tasks.rs b/crates/libzkp/src/tasks.rs index 7b62ab0052..4d984884a0 100644 --- a/crates/libzkp/src/tasks.rs +++ b/crates/libzkp/src/tasks.rs @@ -13,9 +13,12 @@ use crate::proofs::{self, BatchProofMetadata, BundleProofMetadata, ChunkProofMet use sbv_primitives::B256; use scroll_zkvm_types::public_inputs::{ForkName, MultiVersionPublicInputs}; -fn check_aggregation_proofs(proofs: &[proofs::WrappedProof], fork_name: ForkName) - -> eyre::Result<()> - where Metadata : proofs::ProofMetadata, +fn check_aggregation_proofs( + proofs: &[proofs::WrappedProof], + fork_name: ForkName, +) -> eyre::Result<()> +where + Metadata: proofs::ProofMetadata, { use std::panic::{self, AssertUnwindSafe}; @@ -38,7 +41,6 @@ fn check_aggregation_proofs(proofs: &[proofs::WrappedProof], })?; Ok(()) - } /// Generate required staff for chunk proving diff --git a/crates/libzkp/src/tasks/batch.rs b/crates/libzkp/src/tasks/batch.rs index 4ed6399a82..78673dbd46 100644 --- a/crates/libzkp/src/tasks/batch.rs +++ b/crates/libzkp/src/tasks/batch.rs @@ -174,7 +174,6 @@ impl BatchProvingTask { } pub fn precheck_and_build_metadata(&self) -> Result { - let fork_name = ForkName::from(self.fork_name.as_str()); // for every aggregation task, there are two steps needed to build the metadata: // 1. generate data for metadata from the witness diff --git a/crates/libzkp/src/tasks/bundle.rs b/crates/libzkp/src/tasks/bundle.rs index daba2878dc..c7ceeda73e 100644 --- a/crates/libzkp/src/tasks/bundle.rs +++ b/crates/libzkp/src/tasks/bundle.rs @@ -51,7 +51,6 @@ impl BundleProvingTask { } pub fn precheck_and_build_metadata(&self) -> Result { - let fork_name = ForkName::from(self.fork_name.as_str()); // for every aggregation task, there are two steps needed to build the metadata: // 1. generate data for metadata from the witness From f8cf91a1afac8954c11b49b4d60cc24e536087d9 Mon Sep 17 00:00:00 2001 From: Ho Date: Sun, 29 Jun 2025 22:22:27 +0900 Subject: [PATCH 25/29] complete pi hash check --- crates/libzkp/src/proofs.rs | 11 ++++++----- crates/libzkp/src/verifier.rs | 6 ++++-- crates/libzkp/src/verifier/euclidv2.rs | 14 +++++++++++++- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/crates/libzkp/src/proofs.rs b/crates/libzkp/src/proofs.rs index 782d294a4f..358bfecf3c 100644 --- a/crates/libzkp/src/proofs.rs +++ b/crates/libzkp/src/proofs.rs @@ -179,7 +179,7 @@ impl WrappedProof { /// Sanity checks on the wrapped proof: /// /// - pi_hash computed in host does in fact match pi_hash computed in guest - pub fn sanity_check(&self, fork_name: ForkName) { + pub fn pi_hash_check(&self, fork_name: ForkName) -> bool { let proof_pi = self.proof.public_values(); let expected_pi = self @@ -192,10 +192,11 @@ impl WrappedProof { .map(|&v| v as u32) .collect::>(); - assert_eq!( - expected_pi, proof_pi, - "pi mismatch: expected={expected_pi:?}, found={proof_pi:?}" - ); + let ret = expected_pi != proof_pi; + if !ret { + tracing::warn!("pi mismatch: expected={expected_pi:?}, found={proof_pi:?}"); + } + ret } } diff --git a/crates/libzkp/src/verifier.rs b/crates/libzkp/src/verifier.rs index 90da7c8cac..df269ea2ab 100644 --- a/crates/libzkp/src/verifier.rs +++ b/crates/libzkp/src/verifier.rs @@ -59,8 +59,10 @@ pub fn init(config: VerifierConfig) { let mut verifiers: HashMap = Default::default(); for cfg in &config.circuits { - let verifier = EuclidV2Verifier::new(&cfg.assets_path); - let ret = verifiers.insert(cfg.fork_name.to_lowercase(), Arc::new(Mutex::new(verifier))); + let canonical_fork_name = cfg.fork_name.to_lowercase(); + + let verifier = EuclidV2Verifier::new(&cfg.assets_path, canonical_fork_name.as_str().into()); + let ret = verifiers.insert(canonical_fork_name, Arc::new(Mutex::new(verifier))); assert!( ret.is_none(), "DO NOT init the same fork {} twice", diff --git a/crates/libzkp/src/verifier/euclidv2.rs b/crates/libzkp/src/verifier/euclidv2.rs index 112bc1d3a8..1609639e5b 100644 --- a/crates/libzkp/src/verifier/euclidv2.rs +++ b/crates/libzkp/src/verifier/euclidv2.rs @@ -6,15 +6,17 @@ use crate::{ proofs::{AsRootProof, BatchProof, BundleProof, ChunkProof, IntoEvmProof}, utils::panic_catch, }; +use scroll_zkvm_types::public_inputs::ForkName; use scroll_zkvm_verifier_euclid::verifier::UniversalVerifier; use std::path::Path; pub struct EuclidV2Verifier { verifier: UniversalVerifier, + fork: ForkName, } impl EuclidV2Verifier { - pub fn new(assets_dir: &str) -> Self { + pub fn new(assets_dir: &str, fork: ForkName) -> Self { let verifier_bin = Path::new(assets_dir).join("verifier.bin"); let config = Path::new(assets_dir).join("root-verifier-vm-config"); let exe = Path::new(assets_dir).join("root-verifier-committed-exe"); @@ -22,6 +24,7 @@ impl EuclidV2Verifier { Self { verifier: UniversalVerifier::setup(&config, &exe, &verifier_bin) .expect("Setting up chunk verifier"), + fork, } } } @@ -31,18 +34,27 @@ impl ProofVerifier for EuclidV2Verifier { panic_catch(|| match task_type { TaskType::Chunk => { let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); + if !proof.pi_hash_check(self.fork) { + return false; + } self.verifier .verify_proof(proof.as_root_proof(), &proof.vk) .unwrap() } TaskType::Batch => { let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); + if !proof.pi_hash_check(self.fork) { + return false; + } self.verifier .verify_proof(proof.as_root_proof(), &proof.vk) .unwrap() } TaskType::Bundle => { let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); + if !proof.pi_hash_check(self.fork) { + return false; + } let vk = proof.vk.clone(); let evm_proof = proof.into_evm_proof(); self.verifier.verify_proof_evm(&evm_proof, &vk).unwrap() From 312489bc50c4b4caf2a8d6f1420bb9561eab17c0 Mon Sep 17 00:00:00 2001 From: Ho Date: Mon, 30 Jun 2025 15:04:01 +0900 Subject: [PATCH 26/29] add vk pre-validation for prover --- .../internal/controller/api/controller.go | 2 +- .../internal/controller/api/get_task.go | 9 ++++--- coordinator/internal/logic/libzkp/lib.go | 4 +-- coordinator/internal/logic/libzkp/libzkp.h | 8 +++++- .../logic/libzkp/mock_universal_task.go | 2 +- .../internal/logic/libzkp/universal_task.go | 11 ++++++-- .../logic/provertask/batch_prover_task.go | 4 ++- .../logic/provertask/bundle_prover_task.go | 3 ++- .../logic/provertask/chunk_prover_task.go | 3 ++- .../internal/logic/provertask/prover_task.go | 14 ++++++++--- crates/libzkp/src/lib.rs | 25 +++++++++++++++++-- crates/libzkp/src/verifier.rs | 2 +- crates/libzkp/src/verifier/euclidv2.rs | 8 +++--- crates/libzkp_c/src/lib.rs | 12 +++++++-- 14 files changed, 80 insertions(+), 27 deletions(-) diff --git a/coordinator/internal/controller/api/controller.go b/coordinator/internal/controller/api/controller.go index 974a99c718..ab8a191fa3 100644 --- a/coordinator/internal/controller/api/controller.go +++ b/coordinator/internal/controller/api/controller.go @@ -43,6 +43,6 @@ func InitController(cfg *config.Config, chainCfg *params.ChainConfig, db *gorm.D libzkp.InitL2geth(string(l2cfgBytes)) Auth = NewAuthController(db, cfg, vf) - GetTask = NewGetTaskController(cfg, chainCfg, db, reg) + GetTask = NewGetTaskController(cfg, chainCfg, db, vf, reg) SubmitProof = NewSubmitProofController(cfg, chainCfg, db, vf, reg) } diff --git a/coordinator/internal/controller/api/get_task.go b/coordinator/internal/controller/api/get_task.go index 514a56b491..c430f45ee3 100644 --- a/coordinator/internal/controller/api/get_task.go +++ b/coordinator/internal/controller/api/get_task.go @@ -17,6 +17,7 @@ import ( "scroll-tech/coordinator/internal/config" "scroll-tech/coordinator/internal/logic/provertask" + "scroll-tech/coordinator/internal/logic/verifier" coordinatorType "scroll-tech/coordinator/internal/types" ) @@ -30,10 +31,10 @@ type GetTaskController struct { } // NewGetTaskController create a get prover task controller -func NewGetTaskController(cfg *config.Config, chainCfg *params.ChainConfig, db *gorm.DB, reg prometheus.Registerer) *GetTaskController { - chunkProverTask := provertask.NewChunkProverTask(cfg, chainCfg, db, reg) - batchProverTask := provertask.NewBatchProverTask(cfg, chainCfg, db, reg) - bundleProverTask := provertask.NewBundleProverTask(cfg, chainCfg, db, reg) +func NewGetTaskController(cfg *config.Config, chainCfg *params.ChainConfig, db *gorm.DB, verifier *verifier.Verifier, reg prometheus.Registerer) *GetTaskController { + chunkProverTask := provertask.NewChunkProverTask(cfg, chainCfg, db, verifier.ChunkVk, reg) + batchProverTask := provertask.NewBatchProverTask(cfg, chainCfg, db, verifier.BatchVk, reg) + bundleProverTask := provertask.NewBundleProverTask(cfg, chainCfg, db, verifier.BundleVk, reg) ptc := &GetTaskController{ proverTasks: make(map[message.ProofType]provertask.ProverTask), diff --git a/coordinator/internal/logic/libzkp/lib.go b/coordinator/internal/logic/libzkp/lib.go index 79846ef5b9..8c3cde9d50 100644 --- a/coordinator/internal/logic/libzkp/lib.go +++ b/coordinator/internal/logic/libzkp/lib.go @@ -89,8 +89,8 @@ func fromMessageTaskType(taskType int) int { } // Generate a universal task -func GenerateUniversalTask(taskType int, taskJSON, forkName string) (bool, string, string, []byte) { - return generateUniversalTask(fromMessageTaskType(taskType), taskJSON, strings.ToLower(forkName)) +func GenerateUniversalTask(taskType int, taskJSON, forkName string, expectedVk []byte) (bool, string, string, []byte) { + return generateUniversalTask(fromMessageTaskType(taskType), taskJSON, strings.ToLower(forkName), expectedVk) } // Generate wrapped proof diff --git a/coordinator/internal/logic/libzkp/libzkp.h b/coordinator/internal/logic/libzkp/libzkp.h index 39c0b52b7b..1317ba4a87 100644 --- a/coordinator/internal/logic/libzkp/libzkp.h +++ b/coordinator/internal/logic/libzkp/libzkp.h @@ -32,7 +32,13 @@ typedef struct { // Generate a universal task based on task type and input JSON // Returns a struct containing task data, metadata, and expected proof hash -HandlingResult gen_universal_task(int task_type, char* task, char* fork_name); +HandlingResult gen_universal_task( + int task_type, + char* task, + char* fork_name, + const unsigned char* expected_vk, + size_t expected_vk_len +); // Release memory allocated for a HandlingResult returned by gen_universal_task void release_task_result(HandlingResult result); diff --git a/coordinator/internal/logic/libzkp/mock_universal_task.go b/coordinator/internal/logic/libzkp/mock_universal_task.go index 83c4e3fe1e..b4cee34de6 100644 --- a/coordinator/internal/logic/libzkp/mock_universal_task.go +++ b/coordinator/internal/logic/libzkp/mock_universal_task.go @@ -14,7 +14,7 @@ import ( func InitL2geth(configJSON string) { } -func generateUniversalTask(taskType int, taskJSON, forkName string) (bool, string, string, []byte) { +func generateUniversalTask(taskType int, taskJSON, forkName string, expectedVk []byte) (bool, string, string, []byte) { fmt.Printf("call mocked generate universal task %d, taskJson %s\n", taskType, taskJSON) var metadata interface{} diff --git a/coordinator/internal/logic/libzkp/universal_task.go b/coordinator/internal/logic/libzkp/universal_task.go index 5e2f4be31f..82292e6b68 100644 --- a/coordinator/internal/logic/libzkp/universal_task.go +++ b/coordinator/internal/logic/libzkp/universal_task.go @@ -7,6 +7,7 @@ package libzkp #include "libzkp.h" */ import "C" //nolint:typecheck +import "unsafe" // Initialize the handler for universal task func InitL2geth(configJSON string) { @@ -16,13 +17,19 @@ func InitL2geth(configJSON string) { C.init_l2geth(cConfig) } -func generateUniversalTask(taskType int, taskJSON, forkName string) (bool, string, string, []byte) { +func generateUniversalTask(taskType int, taskJSON, forkName string, expectedVk []byte) (bool, string, string, []byte) { cTask := goToCString(taskJSON) cForkName := goToCString(forkName) defer freeCString(cTask) defer freeCString(cForkName) - result := C.gen_universal_task(C.int(taskType), cTask, cForkName) + // Create a C array from Go slice + var cVk *C.uchar + if len(expectedVk) > 0 { + cVk = (*C.uchar)(unsafe.Pointer(&expectedVk[0])) + } + + result := C.gen_universal_task(C.int(taskType), cTask, cForkName, cVk, C.size_t(len(expectedVk))) defer C.release_task_result(result) // Check if the operation was successful diff --git a/coordinator/internal/logic/provertask/batch_prover_task.go b/coordinator/internal/logic/provertask/batch_prover_task.go index 785239815b..370ce18eec 100644 --- a/coordinator/internal/logic/provertask/batch_prover_task.go +++ b/coordinator/internal/logic/provertask/batch_prover_task.go @@ -36,12 +36,13 @@ type BatchProverTask struct { } // NewBatchProverTask new a batch collector -func NewBatchProverTask(cfg *config.Config, chainCfg *params.ChainConfig, db *gorm.DB, reg prometheus.Registerer) *BatchProverTask { +func NewBatchProverTask(cfg *config.Config, chainCfg *params.ChainConfig, db *gorm.DB, expectedVk map[string][]byte, reg prometheus.Registerer) *BatchProverTask { bp := &BatchProverTask{ BaseProverTask: BaseProverTask{ db: db, cfg: cfg, chainCfg: chainCfg, + expectedVk: expectedVk, blockOrm: orm.NewL2Block(db), chunkOrm: orm.NewChunk(db), batchOrm: orm.NewBatch(db), @@ -192,6 +193,7 @@ func (bp *BatchProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato } if getTaskParameter.Universal { var metadata []byte + taskMsg, metadata, err = bp.applyUniversal(taskMsg) if err != nil { bp.recoverActiveAttempts(ctx, batchTask) diff --git a/coordinator/internal/logic/provertask/bundle_prover_task.go b/coordinator/internal/logic/provertask/bundle_prover_task.go index 9c02c466a4..e852a7c09d 100644 --- a/coordinator/internal/logic/provertask/bundle_prover_task.go +++ b/coordinator/internal/logic/provertask/bundle_prover_task.go @@ -33,12 +33,13 @@ type BundleProverTask struct { } // NewBundleProverTask new a bundle collector -func NewBundleProverTask(cfg *config.Config, chainCfg *params.ChainConfig, db *gorm.DB, reg prometheus.Registerer) *BundleProverTask { +func NewBundleProverTask(cfg *config.Config, chainCfg *params.ChainConfig, db *gorm.DB, expectedVk map[string][]byte, reg prometheus.Registerer) *BundleProverTask { bp := &BundleProverTask{ BaseProverTask: BaseProverTask{ db: db, chainCfg: chainCfg, cfg: cfg, + expectedVk: expectedVk, blockOrm: orm.NewL2Block(db), chunkOrm: orm.NewChunk(db), batchOrm: orm.NewBatch(db), diff --git a/coordinator/internal/logic/provertask/chunk_prover_task.go b/coordinator/internal/logic/provertask/chunk_prover_task.go index ab4df671dc..66cc82da2f 100644 --- a/coordinator/internal/logic/provertask/chunk_prover_task.go +++ b/coordinator/internal/logic/provertask/chunk_prover_task.go @@ -33,12 +33,13 @@ type ChunkProverTask struct { } // NewChunkProverTask new a chunk prover task -func NewChunkProverTask(cfg *config.Config, chainCfg *params.ChainConfig, db *gorm.DB, reg prometheus.Registerer) *ChunkProverTask { +func NewChunkProverTask(cfg *config.Config, chainCfg *params.ChainConfig, db *gorm.DB, expectedVk map[string][]byte, reg prometheus.Registerer) *ChunkProverTask { cp := &ChunkProverTask{ BaseProverTask: BaseProverTask{ db: db, cfg: cfg, chainCfg: chainCfg, + expectedVk: expectedVk, chunkOrm: orm.NewChunk(db), blockOrm: orm.NewL2Block(db), proverTaskOrm: orm.NewProverTask(db), diff --git a/coordinator/internal/logic/provertask/prover_task.go b/coordinator/internal/logic/provertask/prover_task.go index 152a736fb1..d1f2bd51d5 100644 --- a/coordinator/internal/logic/provertask/prover_task.go +++ b/coordinator/internal/logic/provertask/prover_task.go @@ -38,9 +38,10 @@ type ProverTask interface { // BaseProverTask a base prover task which contain series functions type BaseProverTask struct { - cfg *config.Config - chainCfg *params.ChainConfig - db *gorm.DB + cfg *config.Config + chainCfg *params.ChainConfig + db *gorm.DB + expectedVk map[string][]byte batchOrm *orm.Batch chunkOrm *orm.Chunk @@ -186,7 +187,12 @@ func (b *BaseProverTask) checkParameter(ctx *gin.Context) (*proverTaskContext, e } func (b *BaseProverTask) applyUniversal(schema *coordinatorType.GetTaskSchema) (*coordinatorType.GetTaskSchema, []byte, error) { - ok, uTaskData, metadata, _ := libzkp.GenerateUniversalTask(schema.TaskType, schema.TaskData, schema.HardForkName) + expectedVk, ok := b.expectedVk[schema.HardForkName] + if !ok { + return nil, nil, fmt.Errorf("no expectedVk found from hardfork %s", schema.HardForkName) + } + + ok, uTaskData, metadata, _ := libzkp.GenerateUniversalTask(schema.TaskType, schema.TaskData, schema.HardForkName, expectedVk) if !ok { return nil, nil, fmt.Errorf("can not generate universal task, see coordinator log for the reason") } diff --git a/crates/libzkp/src/lib.rs b/crates/libzkp/src/lib.rs index 17b3bbff2b..f324e33e29 100644 --- a/crates/libzkp/src/lib.rs +++ b/crates/libzkp/src/lib.rs @@ -31,6 +31,7 @@ pub fn gen_universal_task( task_type: i32, task_json: &str, fork_name: &str, + expected_vk: &[u8], interpreter: Option, ) -> eyre::Result<(B256, String, String)> { use proofs::*; @@ -45,7 +46,7 @@ pub fn gen_universal_task( Bundle(BundleProofMetadata), } - let (pi_hash, metadata, u_task) = match task_type { + let (pi_hash, metadata, mut u_task) = match task_type { x if x == TaskType::Chunk as i32 => { let task = serde_json::from_str::(task_json)?; let (pi_hash, metadata, u_task) = @@ -65,6 +66,8 @@ pub fn gen_universal_task( _ => return Err(eyre::eyre!("unrecognized task type {task_type}")), }; + u_task.vk = Vec::from(expected_vk); + Ok(( pi_hash, serde_json::to_string(&metadata)?, @@ -107,7 +110,25 @@ pub fn verifier_init(config: &str) -> eyre::Result<()> { pub fn verify_proof(proof: Vec, fork_name: &str, task_type: TaskType) -> eyre::Result { let verifier = verifier::get_verifier(fork_name)?; - let ret = verifier.lock().unwrap().verify(task_type, proof)?; + let ret = verifier.lock().unwrap().verify(task_type, &proof)?; + + if let Ok(debug_value) = std::env::var("ZKVM_DEBUG_PROOF"){ + use std::time::{SystemTime, UNIX_EPOCH}; + if !ret && debug_value.to_lowercase() == "true" { + // Dump req.input to a temporary file + let timestamp = SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap_or_default() + .as_secs(); + let filename = format!("/tmp/proof_{}.json", timestamp); + if let Err(e) = std::fs::write(&filename, &proof) { + eprintln!("Failed to write proof to file {}: {}", filename, e); + } else { + println!("Dumped failed proof to {}", filename); + } + } + } + Ok(ret) } diff --git a/crates/libzkp/src/verifier.rs b/crates/libzkp/src/verifier.rs index df269ea2ab..753a77277c 100644 --- a/crates/libzkp/src/verifier.rs +++ b/crates/libzkp/src/verifier.rs @@ -35,7 +35,7 @@ pub struct VKDump { } pub trait ProofVerifier { - fn verify(&self, task_type: TaskType, proof: Vec) -> Result; + fn verify(&self, task_type: TaskType, proof: &[u8]) -> Result; fn dump_vk(&self, file: &Path); } diff --git a/crates/libzkp/src/verifier/euclidv2.rs b/crates/libzkp/src/verifier/euclidv2.rs index 1609639e5b..332cb2ccee 100644 --- a/crates/libzkp/src/verifier/euclidv2.rs +++ b/crates/libzkp/src/verifier/euclidv2.rs @@ -30,10 +30,10 @@ impl EuclidV2Verifier { } impl ProofVerifier for EuclidV2Verifier { - fn verify(&self, task_type: super::TaskType, proof: Vec) -> Result { + fn verify(&self, task_type: super::TaskType, proof: &[u8]) -> Result { panic_catch(|| match task_type { TaskType::Chunk => { - let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); + let proof = serde_json::from_slice::(proof).unwrap(); if !proof.pi_hash_check(self.fork) { return false; } @@ -42,7 +42,7 @@ impl ProofVerifier for EuclidV2Verifier { .unwrap() } TaskType::Batch => { - let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); + let proof = serde_json::from_slice::(proof).unwrap(); if !proof.pi_hash_check(self.fork) { return false; } @@ -51,7 +51,7 @@ impl ProofVerifier for EuclidV2Verifier { .unwrap() } TaskType::Bundle => { - let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); + let proof = serde_json::from_slice::(proof).unwrap(); if !proof.pi_hash_check(self.fork) { return false; } diff --git a/crates/libzkp_c/src/lib.rs b/crates/libzkp_c/src/lib.rs index 6e8784085f..93fc948b22 100644 --- a/crates/libzkp_c/src/lib.rs +++ b/crates/libzkp_c/src/lib.rs @@ -91,6 +91,8 @@ pub unsafe extern "C" fn gen_universal_task( task_type: i32, task: *const c_char, fork_name: *const c_char, + expected_vk: *const u8, + expected_vk_len: usize, ) -> HandlingResult { let mut interpreter = None; let task_json = if task_type == TaskType::Chunk as i32 { @@ -109,8 +111,14 @@ pub unsafe extern "C" fn gen_universal_task( } else { c_char_to_str(task).to_string() }; - let ret = - libzkp::gen_universal_task(task_type, &task_json, c_char_to_str(fork_name), interpreter); + + let expected_vk = if expected_vk_len > 0 { + std::slice::from_raw_parts(expected_vk, expected_vk_len) + } else { + &[] + }; + + let ret = libzkp::gen_universal_task(task_type, &task_json, c_char_to_str(fork_name), expected_vk, interpreter); if let Ok((pi_hash, meta_json, task_json)) = ret { let expected_pi_hash = pi_hash.0.map(|byte| byte as c_char); From d310d3a30f42b3220d14fdda47877ee8794e2242 Mon Sep 17 00:00:00 2001 From: Ho Date: Mon, 30 Jun 2025 15:04:41 +0900 Subject: [PATCH 27/29] fmt --- crates/libzkp/src/lib.rs | 3 +-- crates/libzkp_c/src/lib.rs | 12 +++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/libzkp/src/lib.rs b/crates/libzkp/src/lib.rs index f324e33e29..33f7d55b58 100644 --- a/crates/libzkp/src/lib.rs +++ b/crates/libzkp/src/lib.rs @@ -112,7 +112,7 @@ pub fn verify_proof(proof: Vec, fork_name: &str, task_type: TaskType) -> eyr let ret = verifier.lock().unwrap().verify(task_type, &proof)?; - if let Ok(debug_value) = std::env::var("ZKVM_DEBUG_PROOF"){ + if let Ok(debug_value) = std::env::var("ZKVM_DEBUG_PROOF") { use std::time::{SystemTime, UNIX_EPOCH}; if !ret && debug_value.to_lowercase() == "true" { // Dump req.input to a temporary file @@ -128,7 +128,6 @@ pub fn verify_proof(proof: Vec, fork_name: &str, task_type: TaskType) -> eyr } } } - Ok(ret) } diff --git a/crates/libzkp_c/src/lib.rs b/crates/libzkp_c/src/lib.rs index 93fc948b22..03dd87efef 100644 --- a/crates/libzkp_c/src/lib.rs +++ b/crates/libzkp_c/src/lib.rs @@ -111,14 +111,20 @@ pub unsafe extern "C" fn gen_universal_task( } else { c_char_to_str(task).to_string() }; - + let expected_vk = if expected_vk_len > 0 { std::slice::from_raw_parts(expected_vk, expected_vk_len) } else { &[] }; - - let ret = libzkp::gen_universal_task(task_type, &task_json, c_char_to_str(fork_name), expected_vk, interpreter); + + let ret = libzkp::gen_universal_task( + task_type, + &task_json, + c_char_to_str(fork_name), + expected_vk, + interpreter, + ); if let Ok((pi_hash, meta_json, task_json)) = ret { let expected_pi_hash = pi_hash.0.map(|byte| byte as c_char); From 79cc0302832cc12404fbff17672b6416ae288e0f Mon Sep 17 00:00:00 2001 From: Ho Date: Mon, 30 Jun 2025 15:19:41 +0900 Subject: [PATCH 28/29] resume vk verify in prover-bin --- .../src/zk_circuits_handler/euclidV2.rs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs b/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs index c406d61515..40191d6956 100644 --- a/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs +++ b/crates/prover-bin/src/zk_circuits_handler/euclidV2.rs @@ -74,24 +74,24 @@ impl EuclidV2Handler { #[async_trait] impl CircuitsHandler for Arc> { fn get_vk(&self, task_type: ProofType) -> String { - self.try_lock().unwrap().get_vk_and_cache(task_type) + self.try_lock() + .expect("get vk is on called before other entry is used") + .get_vk_and_cache(task_type) } async fn get_proof_data(&self, prove_request: ProveRequest) -> Result { + let handler_self = self.lock().await; let u_task: ProvingTask = serde_json::from_str(&prove_request.input)?; - let handler_self = self.try_lock().unwrap(); - // current coordinator do not send vk and in fact it has been checked while login - // checking here is not need unless considering a malicious coordinator - /* let expected_vk = handler_self.get_vk_and_cache(prove_request.proof_type); - if BASE64_STANDARD.encode(&u_task.vk) != expected_vk { - eyre::bail!( - "vk is not match!, prove type {:?}, expected {}, get {}", - prove_request.proof_type, - expected_vk, - BASE64_STANDARD.encode(&u_task.vk), - ); - } - */ + let expected_vk = handler_self.get_vk_and_cache(prove_request.proof_type); + if BASE64_STANDARD.encode(&u_task.vk) != expected_vk { + eyre::bail!( + "vk is not match!, prove type {:?}, expected {}, get {}", + prove_request.proof_type, + expected_vk, + BASE64_STANDARD.encode(&u_task.vk), + ); + } + let proof = match prove_request.proof_type { ProofType::Chunk => handler_self .chunk_prover From 7748995a512d46c86634889de4bf59b4b8d2581e Mon Sep 17 00:00:00 2001 From: Ho Date: Mon, 30 Jun 2025 17:02:38 +0900 Subject: [PATCH 29/29] fixing according to reviews --- coordinator/cmd/tool/verify.go | 2 +- coordinator/conf/config.json | 5 ++--- coordinator/internal/config/config_test.go | 8 ++++---- coordinator/internal/logic/verifier/verifier_test.go | 10 +++++----- crates/libzkp/src/proofs.rs | 2 +- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/coordinator/cmd/tool/verify.go b/coordinator/cmd/tool/verify.go index ebda7714ae..ce92a16b09 100644 --- a/coordinator/cmd/tool/verify.go +++ b/coordinator/cmd/tool/verify.go @@ -113,6 +113,6 @@ func verify(cCtx *cli.Context) error { if err != nil { return err } - fmt.Println("verified:", ret) + log.Info("verified:", "ret", ret) return nil } diff --git a/coordinator/conf/config.json b/coordinator/conf/config.json index 196c46b4b1..26fb233fd8 100644 --- a/coordinator/conf/config.json +++ b/coordinator/conf/config.json @@ -7,10 +7,9 @@ "batch_collection_time_sec": 180, "chunk_collection_time_sec": 180, "verifier": { - "assets_path": "assets", "min_prover_version": "v4.4.45", - "accept_vks": [{ - "file": "euclidvk.json", + "verifiers": [{ + "assets_path": "assets", "fork_name": "euclidV2" }] } diff --git a/coordinator/internal/config/config_test.go b/coordinator/internal/config/config_test.go index 1fde0598a8..f6be505f6b 100644 --- a/coordinator/internal/config/config_test.go +++ b/coordinator/internal/config/config_test.go @@ -20,11 +20,11 @@ func TestConfig(t *testing.T) { "batch_collection_time_sec": 180, "chunk_collection_time_sec": 180, "verifier": { - "high_version_circuit": { + "min_prover_version": "v4.4.45", + "verifiers": [{ "assets_path": "assets", - "fork_name": "euclidV2", - "min_prover_version": "v4.4.45" - } + "fork_name": "euclidV2" + }] }, "max_verifier_workers": 4 }, diff --git a/coordinator/internal/logic/verifier/verifier_test.go b/coordinator/internal/logic/verifier/verifier_test.go index 696ff40d40..fd69de5cb1 100644 --- a/coordinator/internal/logic/verifier/verifier_test.go +++ b/coordinator/internal/logic/verifier/verifier_test.go @@ -29,11 +29,11 @@ func TestFFI(t *testing.T) { as := assert.New(t) cfg := &config.VerifierConfig{ - HighVersionCircuit: &config.CircuitConfig{ - AssetsPath: *assetsPathHi, - ForkName: "euclidV2", - MinProverVersion: "", - }, + MinProverVersion: "", + Verifiers: []config.AssetConfig{{ + AssetsPath: *assetsPathHi, + ForkName: "euclidV2", + }}, } v, err := NewVerifier(cfg) diff --git a/crates/libzkp/src/proofs.rs b/crates/libzkp/src/proofs.rs index 358bfecf3c..fba75d6392 100644 --- a/crates/libzkp/src/proofs.rs +++ b/crates/libzkp/src/proofs.rs @@ -192,7 +192,7 @@ impl WrappedProof { .map(|&v| v as u32) .collect::>(); - let ret = expected_pi != proof_pi; + let ret = expected_pi == proof_pi; if !ret { tracing::warn!("pi mismatch: expected={expected_pi:?}, found={proof_pi:?}"); }