diff --git a/fluffy/README.md b/fluffy/README.md index ca9a71f95..701fd66f4 100644 --- a/fluffy/README.md +++ b/fluffy/README.md @@ -91,6 +91,19 @@ make fluffy-tools ./build/blockwalk --block-hash:0xf6bfad56d1a45d1661506343dd1e511b5d7e17565b3ec293125ff0890b9709e5 ``` +One can also use the `eth-data-exporter` tool to download history data from +local geth instance into the format which is suitable for propagating data into +fluffy client e.g: + +```bash +make fluffy-tools + +./build/eth_data_exporter --initial-block:1 --end-block: 10 --data-dir:"/userDirectory/" +``` + +Will download blocks from 1 to 10 into user provided director in one json file. + + ### Run fluffy test suite ```bash # From the nimbus-eth1 repository diff --git a/fluffy/populate_db.nim b/fluffy/populate_db.nim index 4815f9ef4..dee8445b5 100644 --- a/fluffy/populate_db.nim +++ b/fluffy/populate_db.nim @@ -71,11 +71,8 @@ func readBlockData( return err("Invalid hex for rlp block data, number " & $blockData.number & ": " & e.msg) - # The data is currently formatted as an rlp encoded `EthBlock`, thus - # containing header, txs and uncles: [header, txs, uncles]. No receipts are - # available. - # TODO: Change to format to rlp data as it gets stored and send over the - # network over the network. I.e. [header, [txs, uncles], receipts] + # Data is formatted as it gets stored and send over the + # network. I.e. [header, [txs, uncles], receipts] if rlp.enterList(): var blockHash: BlockHash try: @@ -106,24 +103,16 @@ func readBlockData( contentType: blockBody, blockBodyKey: contentKeyType) - # Note: Temporary until the data format gets changed. - let blockBody = BlockBody( - transactions: rlp.read(seq[Transaction]), - uncles: rlp.read(seq[BlockHeader])) - let rlpdata = encode(blockBody) + res.add((contentKey, @(rlp.rawData()))) + rlp.skipElem() - res.add((contentKey, rlpdata)) - # res.add((contentKey, @(rlp.rawData()))) - # rlp.skipElem() + block: + let contentKey = ContentKey( + contentType: receipts, + receiptsKey: contentKeyType) - # Note: No receipts yet in the data set - # block: - # let contentKey = ContentKey( - # contentType: receipts, - # receiptsKey: contentKeyType) - - # res.add((contentKey, @(rlp.rawData()))) - # rlp.skipElem() + res.add((contentKey, @(rlp.rawData()))) + rlp.skipElem() except RlpError as e: return err("Invalid rlp data, number " & $blockData.number & ": " & e.msg) diff --git a/fluffy/scripts/test_data/mainnet_blocks_selected.json b/fluffy/scripts/test_data/mainnet_blocks_selected.json index 0d0c5943c..8e7f1b094 100644 --- a/fluffy/scripts/test_data/mainnet_blocks_selected.json +++ b/fluffy/scripts/test_data/mainnet_blocks_selected.json @@ -1,42 +1,42 @@ { "0x88e96d4537bea4d9c05d12549907b32561d3bf31f45aae734cdc119f13406cb6": { - "rlp": "0xf90216f90211a0d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479405a56e2d52c817161883f50c441c3228cfe54d9fa0d67e4d450343046425ae4271474353857ab860dbc0a1dde64b41b5cd3a532bf3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503ff80000001821388808455ba422499476574682f76312e302e302f6c696e75782f676f312e342e32a0969b900de27b6ac6a67742365dd65f55a0526c41fd18e1b16f1a1215c2e66f5988539bd4979fef1ec4c0c0", + "rlp": "0xf90218f90211a0d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479405a56e2d52c817161883f50c441c3228cfe54d9fa0d67e4d450343046425ae4271474353857ab860dbc0a1dde64b41b5cd3a532bf3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503ff80000001821388808455ba422499476574682f76312e302e302f6c696e75782f676f312e342e32a0969b900de27b6ac6a67742365dd65f55a0526c41fd18e1b16f1a1215c2e66f5988539bd4979fef1ec4c2c0c0c0", "number": 1 }, "0xb495a1d7e6663152ae92708da4843337b958146015a2802f4193a410044698c9": { - "rlp": "0xf9021df90218a088e96d4537bea4d9c05d12549907b32561d3bf31f45aae734cdc119f13406cb6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794dd2f1e6e498202e86d8f5442af596580a4f03c2ca04943d941637411107494da9ec8bc04359d731bfd08b72b4d0edcbd4cd2ecb341a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503ff00100002821388808455ba4241a0476574682f76312e302e302d30636463373634372f6c696e75782f676f312e34a02f0790c5aa31ab94195e1f6443d645af5b75c46c04fbf9911711198a0ce8fdda88b853fa261a86aa9ec0c0", + "rlp": "0xf9021ff90218a088e96d4537bea4d9c05d12549907b32561d3bf31f45aae734cdc119f13406cb6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794dd2f1e6e498202e86d8f5442af596580a4f03c2ca04943d941637411107494da9ec8bc04359d731bfd08b72b4d0edcbd4cd2ecb341a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503ff00100002821388808455ba4241a0476574682f76312e302e302d30636463373634372f6c696e75782f676f312e34a02f0790c5aa31ab94195e1f6443d645af5b75c46c04fbf9911711198a0ce8fdda88b853fa261a86aa9ec2c0c0c0", "number": 2 }, "0x3d6122660cc824376f11ee842f83addc3525e2dd6756b9bcf0affa6aa88cf741": { - "rlp": "0xf90434f90218a0b495a1d7e6663152ae92708da4843337b958146015a2802f4193a410044698c9a06b17b938c6e4ef18b26ad81b9ca3515f27fd9c4e82aac56a1fd8eab288785e41945088d623ba0fcf0131e0897a91734a4d83596aa0a076ab0b899e8387436ff2658e2988f83cbf1af1590b9fe9feca3714f8d1824940a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503fe802ffe03821388808455ba4260a0476574682f76312e302e302d66633739643332642f6c696e75782f676f312e34a065e12eec23fe6555e6bcdb47aa25269ae106e5f16b54e1e92dcee25e1c8ad037882e9344e0cbde83cec0f90215f90212a0d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794c8ebccc5f5689fa8659d83713341e5ad19349448a01e6e030581fd1873b4784280859cd3b3c04aa85520f08c304cf5ee63d3935adda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503ff80000001821388808455ba42429a59617465732052616e64616c6c202d2045746865724e696e6a61a0f8c94dfe61cf26dcdf8cffeda337cf6a903d65c449d7691a022837f6e2d994598868b769c5451a7aea", + "rlp": "0xf90438f90218a0b495a1d7e6663152ae92708da4843337b958146015a2802f4193a410044698c9a06b17b938c6e4ef18b26ad81b9ca3515f27fd9c4e82aac56a1fd8eab288785e41945088d623ba0fcf0131e0897a91734a4d83596aa0a076ab0b899e8387436ff2658e2988f83cbf1af1590b9fe9feca3714f8d1824940a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503fe802ffe03821388808455ba4260a0476574682f76312e302e302d66633739643332642f6c696e75782f676f312e34a065e12eec23fe6555e6bcdb47aa25269ae106e5f16b54e1e92dcee25e1c8ad037882e9344e0cbde83cef90219c0f90215f90212a0d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794c8ebccc5f5689fa8659d83713341e5ad19349448a01e6e030581fd1873b4784280859cd3b3c04aa85520f08c304cf5ee63d3935adda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503ff80000001821388808455ba42429a59617465732052616e64616c6c202d2045746865724e696e6a61a0f8c94dfe61cf26dcdf8cffeda337cf6a903d65c449d7691a022837f6e2d994598868b769c5451a7aeac0", "number": 3 }, "0x23adf5a3be0f5235b36941bcb29b62504278ec5b9cdfa277b992ba4a7a3cd3a2": { - "rlp": "0xf90434f90212a03d6122660cc824376f11ee842f83addc3525e2dd6756b9bcf0affa6aa88cf741a083a8da8965660cb6bdf0c37f1b111778e49753c4213bf7c3e280fccfde89f2b594c8ebccc5f5689fa8659d83713341e5ad19349448a0e6d9f6e95a05ee69719c718c6157d0759049ef3dffdba2d48f015d7c8b9933d8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503fe005ff904821388808455ba427d9a59617465732052616e64616c6c202d2045746865724e696e6a61a006ba40902198357cbeac24a86b2ef11e9fdff48d28a421a0055e26476e3ac59f88c2535b5efca9bee0c0f9021bf90218a0d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347945088d623ba0fcf0131e0897a91734a4d83596aa0a09a6597b26adc0e5915cfcca537ba493a647cad1c3c923d406cdec6ca49a0a06da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503ff80000001821388808455ba4237a0476574682f76312e302e302d66633739643332642f6c696e75782f676f312e34a0d045b852770160da169ec793ec0c6e6ff562e473b2bf3f8192dc59842e36f75488db821a775bf9dace", + "rlp": "0xf90438f90212a03d6122660cc824376f11ee842f83addc3525e2dd6756b9bcf0affa6aa88cf741a083a8da8965660cb6bdf0c37f1b111778e49753c4213bf7c3e280fccfde89f2b594c8ebccc5f5689fa8659d83713341e5ad19349448a0e6d9f6e95a05ee69719c718c6157d0759049ef3dffdba2d48f015d7c8b9933d8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503fe005ff904821388808455ba427d9a59617465732052616e64616c6c202d2045746865724e696e6a61a006ba40902198357cbeac24a86b2ef11e9fdff48d28a421a0055e26476e3ac59f88c2535b5efca9bee0f9021fc0f9021bf90218a0d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347945088d623ba0fcf0131e0897a91734a4d83596aa0a09a6597b26adc0e5915cfcca537ba493a647cad1c3c923d406cdec6ca49a0a06da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503ff80000001821388808455ba4237a0476574682f76312e302e302d66633739643332642f6c696e75782f676f312e34a0d045b852770160da169ec793ec0c6e6ff562e473b2bf3f8192dc59842e36f75488db821a775bf9dacec0", "number": 4 }, "0xf37c632d361e0a93f08ba29b1a2c708d9caa3ee19d1ee8d2a02612bffe49f0a9": { - "rlp": "0xf90216f90211a023adf5a3be0f5235b36941bcb29b62504278ec5b9cdfa277b992ba4a7a3cd3a2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479405a56e2d52c817161883f50c441c3228cfe54d9fa04470f3dc1cc8097394a4ae85302eac3368462b3c1cfa523ffca942c1dd478220a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503fe80200405821388808455ba428399476574682f76312e302e302f6c696e75782f676f312e342e32a017b85b5ec310c4868249fa2f378c83b4f330e2d897e5373a8195946c71d1d19e88fba9d0cff9dc5cf3c0c0", + "rlp": "0xf90218f90211a023adf5a3be0f5235b36941bcb29b62504278ec5b9cdfa277b992ba4a7a3cd3a2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479405a56e2d52c817161883f50c441c3228cfe54d9fa04470f3dc1cc8097394a4ae85302eac3368462b3c1cfa523ffca942c1dd478220a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503fe80200405821388808455ba428399476574682f76312e302e302f6c696e75782f676f312e342e32a017b85b5ec310c4868249fa2f378c83b4f330e2d897e5373a8195946c71d1d19e88fba9d0cff9dc5cf3c2c0c0c0", "number": 5 }, "0x97b4b78c42e6d108e1174aabeb0f99b3ba5592e6e7bfe0348d3a5a94f8cad175": { - "rlp": "0xf905abf9021aa031568223eb0aff7ed01b2ef77d3c61b051ef00781032e00537a7a17176d5e67da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479404700c5ecbe35ef32fce25f473d0d85c8c128ffca04549cbc3a7d91539f3851ece84e2f86e08aec34b02aeb242db9f7f1038bc6397a0f342e388d436ee49e6b7da364169a1f62b8b67de1ee16b46fe253eab6b7cf817a0891754d9f260840b3f503a0e2d2a5c7fb877b87e1621751964d53ce429c078b4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860ad8707a77b3830f1b31832fefd8830290408456bd18709ad983010303844765746887676f312e352e318777696e646f7773a09dd95b661a4cf386ef7c2451c66ca767bde5b7e2a5ace1f521aa7d8431812a8888b2f89a03a10bd49af9038af87083028701850ba43b740083015f9094503dd3b61cd01c150401043ab4f086c9d41004d38884b3d16160936400801ca09893a0ccec47a952ca0e08aa805f31548dd7578a2c841ac56ad4e3fd89aea86aa01faef9e06f9a56ea17fbd06e84942d93ea67be7002879365ffc474b064dd06a7f87083028702850ba43b740083015f90943d0da82be6d123b2daab2386b6aff2caaf72003c8885be8ac25c85c800801ba03bb070dfa8d62527ce8dec55425d3b74e6aaea266e64d3ff97c94974f9dd29e9a01369c60d7a59a2200aeb6c4329b52d59fec62a97468b892d90a3d5526d124f7df87083028703850ba43b740083015f90947dacc11f25142e28842b56d9dca7911b22b83cba8885120ebef871f400801ca0bcd8d0e07e96fe2f10d86d392f74396b33905337e540c893c61b13db48283d58a0096d33d1dd02eea7ce7a3ee4353ddc70c364781ed56f1d81ccf97ed23e241190f86e02850ba43b740083015f9094773a6712ce8003e5d27ca4c567413ecc8ed656d089050aa25f43cf540000801ca0c1c12c9fbd8d57105f5cfa88b2577183e546b2cbb2bca1db6b26a5376022ff9da011d5b16181e20f78b4a8d22fb23f0ca8c9f748dbbd049ea1e181c1a3a44a759cf87083028704850ba43b740083015f9094557c2806b6cea65a66f415bb2ed1ce897b340745887b96b3c6e5152800801ba0d0c5f7d9016a7333336bc6fb06bb472648b7d0f13da44f0a682175f7701d8d11a07269f1cd90b7930b4e7bcbf2ad212b13d3e804f4e0b1649403a2fcfe53924b6ff86c01850ba43b740083015f90942a2d2af8cffc5c08c0929d41ca39b41c0cf9aa7787470de4df820000801ba0c66b3f6cbc449056ac8a22f253fcbf23c07ace75187b816bc3fec80bce66a0e9a00f991c81098ce70240285ec8e5b06413c040e36caeefac46e9e90be338e6f7ecf870821f0f850ba43b7400830186a0949987eb508b87d3a371dd8570e82667dfe26997588901a043a59465d78000801ca0948556c14f264b81ce41956e4660738e7a2bde5330a00c5f34831b1dce1db9aea054a7eaac6e9c76de224c221721ac88fef7d41982b92c2e19e5eb2174c9eada2af87083028705850ba43b740083015f909483d471a8b398c8b97b094a7f362fbe5e571ef689888669a840d280ec00801ca0687170c7e3643c6310c06155cc52bba36474d14638b0ea5f512a55a8916e6857a04ea439c2f96b3e7f9bf8f6185fb7e3506aa912a797b5640bae69e4719a1a22adc0", + "rlp": "0xf90f0ef9021aa031568223eb0aff7ed01b2ef77d3c61b051ef00781032e00537a7a17176d5e67da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479404700c5ecbe35ef32fce25f473d0d85c8c128ffca04549cbc3a7d91539f3851ece84e2f86e08aec34b02aeb242db9f7f1038bc6397a0f342e388d436ee49e6b7da364169a1f62b8b67de1ee16b46fe253eab6b7cf817a0891754d9f260840b3f503a0e2d2a5c7fb877b87e1621751964d53ce429c078b4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860ad8707a77b3830f1b31832fefd8830290408456bd18709ad983010303844765746887676f312e352e318777696e646f7773a09dd95b661a4cf386ef7c2451c66ca767bde5b7e2a5ace1f521aa7d8431812a8888b2f89a03a10bd49af9038ef9038af87083028701850ba43b740083015f9094503dd3b61cd01c150401043ab4f086c9d41004d38884b3d16160936400801ca09893a0ccec47a952ca0e08aa805f31548dd7578a2c841ac56ad4e3fd89aea86aa01faef9e06f9a56ea17fbd06e84942d93ea67be7002879365ffc474b064dd06a7f87083028702850ba43b740083015f90943d0da82be6d123b2daab2386b6aff2caaf72003c8885be8ac25c85c800801ba03bb070dfa8d62527ce8dec55425d3b74e6aaea266e64d3ff97c94974f9dd29e9a01369c60d7a59a2200aeb6c4329b52d59fec62a97468b892d90a3d5526d124f7df87083028703850ba43b740083015f90947dacc11f25142e28842b56d9dca7911b22b83cba8885120ebef871f400801ca0bcd8d0e07e96fe2f10d86d392f74396b33905337e540c893c61b13db48283d58a0096d33d1dd02eea7ce7a3ee4353ddc70c364781ed56f1d81ccf97ed23e241190f86e02850ba43b740083015f9094773a6712ce8003e5d27ca4c567413ecc8ed656d089050aa25f43cf540000801ca0c1c12c9fbd8d57105f5cfa88b2577183e546b2cbb2bca1db6b26a5376022ff9da011d5b16181e20f78b4a8d22fb23f0ca8c9f748dbbd049ea1e181c1a3a44a759cf87083028704850ba43b740083015f9094557c2806b6cea65a66f415bb2ed1ce897b340745887b96b3c6e5152800801ba0d0c5f7d9016a7333336bc6fb06bb472648b7d0f13da44f0a682175f7701d8d11a07269f1cd90b7930b4e7bcbf2ad212b13d3e804f4e0b1649403a2fcfe53924b6ff86c01850ba43b740083015f90942a2d2af8cffc5c08c0929d41ca39b41c0cf9aa7787470de4df820000801ba0c66b3f6cbc449056ac8a22f253fcbf23c07ace75187b816bc3fec80bce66a0e9a00f991c81098ce70240285ec8e5b06413c040e36caeefac46e9e90be338e6f7ecf870821f0f850ba43b7400830186a0949987eb508b87d3a371dd8570e82667dfe26997588901a043a59465d78000801ca0948556c14f264b81ce41956e4660738e7a2bde5330a00c5f34831b1dce1db9aea054a7eaac6e9c76de224c221721ac88fef7d41982b92c2e19e5eb2174c9eada2af87083028705850ba43b740083015f909483d471a8b398c8b97b094a7f362fbe5e571ef689888669a840d280ec00801ca0687170c7e3643c6310c06155cc52bba36474d14638b0ea5f512a55a8916e6857a04ea439c2f96b3e7f9bf8f6185fb7e3506aa912a797b5640bae69e4719a1a22adc0f9095df90128a04309a78658f4abcd16a291d88b0fd59b82b5e0335077b7ce1d4b2e40bb483ad6825208b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90128a00e5aa0f77864b12a8b3878470fdd70dcbc078129721b75b4e99790d8acd3ec4a82a410b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90128a0a905873cab8cd7cb6f3f9b84530dfd89b60e1b3b5abfbfd2990e2aefa97cfd8582f618b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a022321b61ce9faa6b3c35a1518a4da332fb1de6cc69214a285f0ab5679801e52783014820b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a0e247fc161f1164471031c8c91a27acfa39af2a645712ad9dc26ca3e7472a15f483019a28b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a06271dbca16b5fc5ed1889fa62c76a7410d12720a72a71fe6a89bbd3c6f9b705e8301ec30b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a0757da44975ab5b6b06dd1a9c999cc680e7618cd45af8d688257242d29921133983023e38b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a049566ae5acbc02b374c405c9d37c6ae4eddbcad3876ec604dff4bd96494825b583029040b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", "number": 990001 }, "0xe0256e6f894f2060e682988097cb55fae6a1dc21c600dda98646031f7f07a38c": { - "rlp": "0xf9028ff90217a097b4b78c42e6d108e1174aabeb0f99b3ba5592e6e7bfe0348d3a5a94f8cad175a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942a65aca4d5fc5b5c859090a6c34d164135398226a0dc8efd68358e1a077b89535dfecabb00e79f0250a186c942368299a58e7b5198a087b268df15871c2ad1977b386d15e81162a102e7bfaddcb6885be09864349bbaa019c6934811649b862b706822c81674bb7dea80502b6cd0f6bc7c4c90d0ed635ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860ad7156c68e5830f1b32832fefd88252088456bd188298d783010303844765746887676f312e352e31856c696e7578a0f3afd47a86b2c60b1e398f6a6a42fbbe38c6956a1f2616719ff153fd6f40817d88ebde530493797266f872f87083028706850ba43b740083015f9094d0df24fd0dfcdc3850d1590daa1d03ca7706b11b888c0d43e4ce4e6c00801ca0d2935086f85abb41544bd79e4257e5c9c9087cb9aaa2f27b8df92742fff8f0e5a058902a6b0bd363a10b0a191578a6103eb30a0804e14c9d8eec4636bacdb0fe8fc0", + "rlp": "0xf903bff90217a097b4b78c42e6d108e1174aabeb0f99b3ba5592e6e7bfe0348d3a5a94f8cad175a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942a65aca4d5fc5b5c859090a6c34d164135398226a0dc8efd68358e1a077b89535dfecabb00e79f0250a186c942368299a58e7b5198a087b268df15871c2ad1977b386d15e81162a102e7bfaddcb6885be09864349bbaa019c6934811649b862b706822c81674bb7dea80502b6cd0f6bc7c4c90d0ed635ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860ad7156c68e5830f1b32832fefd88252088456bd188298d783010303844765746887676f312e352e31856c696e7578a0f3afd47a86b2c60b1e398f6a6a42fbbe38c6956a1f2616719ff153fd6f40817d88ebde530493797266f875f872f87083028706850ba43b740083015f9094d0df24fd0dfcdc3850d1590daa1d03ca7706b11b888c0d43e4ce4e6c00801ca0d2935086f85abb41544bd79e4257e5c9c9087cb9aaa2f27b8df92742fff8f0e5a058902a6b0bd363a10b0a191578a6103eb30a0804e14c9d8eec4636bacdb0fe8fc0f9012bf90128a081195c936b45ba141056ad4c3da76511b9a10a04d28f6e88fd0cc12d97ec8c0c825208b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", "number": 990002 }, "0xd8e9e73fc12bc363e42ce6fe5d611e5c1a7c8b7c6f323a05f961644ed506705d": { - "rlp": "0xf90456f90218a0e0256e6f894f2060e682988097cb55fae6a1dc21c600dda98646031f7f07a38ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942a65aca4d5fc5b5c859090a6c34d164135398226a0512e6196439beba28ea208bb3a9fac63c6811fcaeb765a8ecfa98915b2ad6744a0da05d28b6beb101daeef2680b3e8270336afae7510dbdd8f834020b31e094742a014144aa601ec364276b74785ca9acca459ca192b754b375d5765999c14ba5f5fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860ad5ba89bbd8830f1b33832fefd883019a288456bd189b98d783010303844765746887676f312e352e31856c696e7578a04fca508e999a08e8cc73d4b4d33a538a5aa4d4e3011df4e9d1064758d959be8188b241536d16ef98c9f90237f86f8204ed85746a52880082520894cd50d4a1eec9c9b0ef61f8d9f24925fc9b9387aa890936221f05b4273000801ca0c12845b5339378a00febebd21688110a064ea88c26104eb7fe6bef9960160c99a071a74ae821532b749527b4106e99c6ee592d190e301b74a76766b8d98e3b5ea2f87083028707850ba43b740083015f90948f585ea95fb57a9bf5266c5c940fdfd5e2ba6e4e8887b73e985e844800801ba0cb834cf02fd0b4999d5c4fed893eea9547515e807c5cb018e2300c7a44b77303a07b322643b5460a3a2bb3fe826b1d6706c798a192f6e93150e117cbff6c01a8def87083028708850ba43b740083015f9094aa052bcdeb7172523ff44efc493ca8bdbf7037968881e814c93af9b000801ba0ff6c3262026ab78aca0533409f3a53149d1738215736d57dff5c079334d30395a03a07a8de200873483c22e78df58497d603bb5715555514e64d03ae1253282735f86f82249c850ba43b740083015f9094789f40d61bb6436254d5b5f9cbb8cefb76916d46880fe831c0f635e400801ca086fb421ab9fff593fbd17e16d7d9dd529313656c14e93073764b807368397e28a01dd31546935a7b1f0e25518d8f1ecfc3114c814a3326fdb8dddf8a89d22119bef86f821f10850ba43b7400830186a094fb00cd2168bd40dc80912a86156198a8fc9a8afe888ab55f8b52078000801ba0c864ff206590afa6ad62c825518a60ebc977c969ced649d006bd74e97c52dacaa041d1bdc8f02233c55c76e8223eaa2af8cbe173a42e1338d645b6731e4290ab3dc0", + "rlp": "0xf90a35f90218a0e0256e6f894f2060e682988097cb55fae6a1dc21c600dda98646031f7f07a38ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942a65aca4d5fc5b5c859090a6c34d164135398226a0512e6196439beba28ea208bb3a9fac63c6811fcaeb765a8ecfa98915b2ad6744a0da05d28b6beb101daeef2680b3e8270336afae7510dbdd8f834020b31e094742a014144aa601ec364276b74785ca9acca459ca192b754b375d5765999c14ba5f5fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860ad5ba89bbd8830f1b33832fefd883019a288456bd189b98d783010303844765746887676f312e352e31856c696e7578a04fca508e999a08e8cc73d4b4d33a538a5aa4d4e3011df4e9d1064758d959be8188b241536d16ef98c9f9023bf90237f86f8204ed85746a52880082520894cd50d4a1eec9c9b0ef61f8d9f24925fc9b9387aa890936221f05b4273000801ca0c12845b5339378a00febebd21688110a064ea88c26104eb7fe6bef9960160c99a071a74ae821532b749527b4106e99c6ee592d190e301b74a76766b8d98e3b5ea2f87083028707850ba43b740083015f90948f585ea95fb57a9bf5266c5c940fdfd5e2ba6e4e8887b73e985e844800801ba0cb834cf02fd0b4999d5c4fed893eea9547515e807c5cb018e2300c7a44b77303a07b322643b5460a3a2bb3fe826b1d6706c798a192f6e93150e117cbff6c01a8def87083028708850ba43b740083015f9094aa052bcdeb7172523ff44efc493ca8bdbf7037968881e814c93af9b000801ba0ff6c3262026ab78aca0533409f3a53149d1738215736d57dff5c079334d30395a03a07a8de200873483c22e78df58497d603bb5715555514e64d03ae1253282735f86f82249c850ba43b740083015f9094789f40d61bb6436254d5b5f9cbb8cefb76916d46880fe831c0f635e400801ca086fb421ab9fff593fbd17e16d7d9dd529313656c14e93073764b807368397e28a01dd31546935a7b1f0e25518d8f1ecfc3114c814a3326fdb8dddf8a89d22119bef86f821f10850ba43b7400830186a094fb00cd2168bd40dc80912a86156198a8fc9a8afe888ab55f8b52078000801ba0c864ff206590afa6ad62c825518a60ebc977c969ced649d006bd74e97c52dacaa041d1bdc8f02233c55c76e8223eaa2af8cbe173a42e1338d645b6731e4290ab3dc0f905d9f90128a0db5a872669de9451c39d5566478479269b01805e13b9e2c03aca1844fd992d2b825208b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90128a0a132a187128568cd7c6770b231bbc754968d1dab18328da786a8e3823e38659682a410b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90128a0a11d6bec69a747ee3dc434d02c8024f35ccdb3e85172408c2535dabe16aeb70582f618b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a0926c8096f4634d2b49f94482aa4b255966f8820810202d3bed93f98e2570fd5483014820b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a04580edcaec167c3220901a0d5ca9b2631ad0b0743c989dca32f5b77715f7237983019a28b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", "number": 990003 }, "0x702f25c1616a087ff1e201383e479a8e482e273efdfb6b02472529e3eb374ab5": { - "rlp": "0xf9044ef90218a0d8e9e73fc12bc363e42ce6fe5d611e5c1a7c8b7c6f323a05f961644ed506705da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479468795c4aa09d6f4ed3e5deddf8c2ad3049a601daa0d20b25d441291ecf67ff13d100e258f0c3d804beeff4c27414752c35020ab308a0ae69ca41d9bc225175796b4e1c932a8dd58e00678a0d0c749fd9cafc67b4f935a0b652d785f512d87c949bc3ec4d69f9920c31a5484f13237ddbdbef84b3692c51b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860ad45fd26b21830f1b34832fefd883019a288456bd18b398d783010400844765746887676f312e352e31856c696e7578a06f87e89a7c0c7e32fdeab86c68db86d399ceefb17acae0cec588ee955d658fa788c50781dd304585e6f9022ff86e820fec850ba43b74008256229467d450285c5bb88fe9fe0b0ecd317891584bbfa8880ddb34fc27fd2000801ca06156678dd4480e030b6d7b858daa3a1497a1041d7524fa75846f355f52fe945ea02a0c14a19a446521738ecb75ac3fecce97899ad92d40cf4a25d65c2c8200a7d2f86c821462850ba43b740082520894f31377d694a5acda2527f3d55c5b03708e89abc486460cd25cd691801ba0f36753077db442129cc9d1e14c4a99f8daed45590ca4d25a57186017c7001644a00fb258520aa11b4ced37bcbcbb69845fefd387e8c273859911b43e17dbd5652bf87083028709850ba43b740083015f909413ed72698182ad937d2ac19da03d612201825cb588813f36cd581d8400801ca07f1ddfee6f76ae66de2cc061c7101d4a7cea84c650973794e78a67732d4316e0a059a447d208bf050ecd0f313ef206bf95e41bd7e997faef1af78b971079d47112f86d80850ba43b740082520894c66a4c605536c50b2c845dd57992627ee4d580278909105dba22ed500000801ca0ee2a4d519b9e7f7a9593c6b42c8426bf776871c20ef67af5dbe8ebfd6c9f936ca01c6de9eb06f7c523c9d1b7234483203e387b40afd0489ed5287eef3625272ab8f86e820fed850ba43b7400825622944bb6d9135bf5640b8bae522832fab10a7d422fab884563918244f40000801ba0db1e80cc71adf76397338c16b0e51fa3cc9a41ffed38256bf422c1245abdeb5ca03101a76fe4d5b05cb801ba812f847e10b7a8877d0f9031dd436e9a3e24b6c3fbc0", + "rlp": "0xf90a2df90218a0d8e9e73fc12bc363e42ce6fe5d611e5c1a7c8b7c6f323a05f961644ed506705da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479468795c4aa09d6f4ed3e5deddf8c2ad3049a601daa0d20b25d441291ecf67ff13d100e258f0c3d804beeff4c27414752c35020ab308a0ae69ca41d9bc225175796b4e1c932a8dd58e00678a0d0c749fd9cafc67b4f935a0b652d785f512d87c949bc3ec4d69f9920c31a5484f13237ddbdbef84b3692c51b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860ad45fd26b21830f1b34832fefd883019a288456bd18b398d783010400844765746887676f312e352e31856c696e7578a06f87e89a7c0c7e32fdeab86c68db86d399ceefb17acae0cec588ee955d658fa788c50781dd304585e6f90233f9022ff86e820fec850ba43b74008256229467d450285c5bb88fe9fe0b0ecd317891584bbfa8880ddb34fc27fd2000801ca06156678dd4480e030b6d7b858daa3a1497a1041d7524fa75846f355f52fe945ea02a0c14a19a446521738ecb75ac3fecce97899ad92d40cf4a25d65c2c8200a7d2f86c821462850ba43b740082520894f31377d694a5acda2527f3d55c5b03708e89abc486460cd25cd691801ba0f36753077db442129cc9d1e14c4a99f8daed45590ca4d25a57186017c7001644a00fb258520aa11b4ced37bcbcbb69845fefd387e8c273859911b43e17dbd5652bf87083028709850ba43b740083015f909413ed72698182ad937d2ac19da03d612201825cb588813f36cd581d8400801ca07f1ddfee6f76ae66de2cc061c7101d4a7cea84c650973794e78a67732d4316e0a059a447d208bf050ecd0f313ef206bf95e41bd7e997faef1af78b971079d47112f86d80850ba43b740082520894c66a4c605536c50b2c845dd57992627ee4d580278909105dba22ed500000801ca0ee2a4d519b9e7f7a9593c6b42c8426bf776871c20ef67af5dbe8ebfd6c9f936ca01c6de9eb06f7c523c9d1b7234483203e387b40afd0489ed5287eef3625272ab8f86e820fed850ba43b7400825622944bb6d9135bf5640b8bae522832fab10a7d422fab884563918244f40000801ba0db1e80cc71adf76397338c16b0e51fa3cc9a41ffed38256bf422c1245abdeb5ca03101a76fe4d5b05cb801ba812f847e10b7a8877d0f9031dd436e9a3e24b6c3fbc0f905d9f90128a010a370f9e9f7f9290f08b97aca26530f208fc9c3931edee690cfe7ea1d166fc2825208b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90128a0dea1035e61deb71662f2bfb6367bfeaa023197a99f9c1cf687ca38aca617059e82a410b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90128a04b0ee4bd95cbddf8acb80accd7d9346b1f851e7b8a82b8b7750a2d9e71d1b1bb82f618b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a06553e8102e82790d6fbded4a2c6224727e66b1df8c8dc48380b60af0002afec283014820b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a08c3b195f2b044c2bd4a886939847f56f1728b9df13b4cd7c518a2533f462c92f83019a28b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", "number": 990004 }, "0xce8f770a56203e10afe19c7dd7e2deafc356e6cce0a560a30a85add03da56137": { - "rlp": "0xf910baf90218a07d7701cadd868037f2d6e2898fcaa03e9e892dfac9f85d046b00bcf6bb786ad9a0bf34d0addf61b0e6cd483d6396cadaae438346dc5d8e0a0f3d9135b52a0f11a1944bb96091ee9d802ed039c4d1a5f6216f90f81b01a030e3d6c1021ecb806a1022e07f6e1491a5a2c17f3aaa9efbe1afe2325f9ba241a0fcf98a24af539c43988cec8e157ceec62b6c3ffa7ccc62c41e6b5d63d7af9e24a058656d3e1b463465ded49b02b74ec7dc6700870b5fafee285b49ac5789c39f46b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860acef5f96bd8830f1b40832fefd883075e308456bd199d98d783010400844765746887676f312e352e31856c696e7578a0ea6f705561212f5523522114b40c77fc735a159eafb0d2c9f134ae33b8e4915088e67c3494e678ba87f90c7ef86e8204ee85746a528800825208944d15e32435180fa21907e0d23a4c0021415fc21f88016345785d8a0000801ba04eeb6205a94672c865a68f7962ab0a4f4d5e152ea0b2ce3fa9821776a6e4d7fea0597fa300bf2dfa6b5631062d119a3b1c407e3a2ca5b2e3c4af4cd597f8aab0e8f907ed8227ac85104c533c00830f4240941194e966965418c7d73a42cceeb254d87586035601b90784d5064ed1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000012455552555344000000000000000000000000000000000000000000000000000047425055534400000000000000000000000000000000000000000000000000005553444a505900000000000000000000000000000000000000000000000000005841555553440000000000000000000000000000000000000000000000000000584147555344000000000000000000000000000000000000000000000000000053503530300000000000000000000000000000000000000000000000000000004e415344415100000000000000000000000000000000000000000000000000004141504c00000000000000000000000000000000000000000000000000000000474f4f47000000000000000000000000000000000000000000000000000000004d53465400000000000000000000000000000000000000000000000000000000474d0000000000000000000000000000000000000000000000000000000000004745000000000000000000000000000000000000000000000000000000000000574d54000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000005400000000000000000000000000000000000000000000000000000000000000555344545f455448000000000000000000000000000000000000000000000000555344545f4254430000000000000000000000000000000000000000000000004254435f45544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000001144b400000000000000000000000000000000000000000000000000000000001617dc0000000000000000000000000000000000000000000000000000000006b3d5e8000000000000000000000000000000000000000000000000000000004a324b740000000000000000000000000000000000000000000000000000000000f0ebc8000000000000000000000000000000000000000000000000000000006d058bc0000000000000000000000000000000000000000000000000000000007fffffff000000000000000000000000000000000000000000000000000000000595bfa00000000000000000000000000000000000000000000000000000000028b76e700000000000000000000000000000000000000000000000000000000002f6359000000000000000000000000000000000000000000000000000000000019a76200000000000000000000000000000000000000000000000000000000001a2da900000000000000000000000000000000000000000000000000000000003e4b43f0000000000000000000000000000000000000000000000000000000000aa70d0000000000000000000000000000000000000000000000000000000000228855000000000000000000000000000000000000000000000000000000000005b8d80000000000000000000000000000000000000000000000000000000001724398f0000000000000000000000000000000000000000000000000000000000003e5000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19800000000000000000000000000000000000000000000000000000000056bd19800000000000000000000000000000000000000000000000000000000056bd19801ca01c66b2eb640b6af2df8c10de464eb08dd3a7ebfa808a9a3e285ba4efc98eabc7a00ee135bb46d3e99077e623aac3c5d9a5d46bf7665a75f2cf8cb561eb18a71895f86f820fee850ba43b740082562294fbd95cee484181c01b519906a953624acffb7172890fb5eaaf9d05c44800801ca0a20d248c7cf304b6464d5814c856b547ebf769fccf0080a0910d477f78f758fca00ee62d774a181a917e8555b60e418e496aed05421ed1ec8bed45ede7c1967474f87083028717850ba43b740083015f9094354662bcd38883b6e67497f06fc4fee20339e57488540791be2c8a5c00801ba067550f26c0bbf939532d93c25418dbb58324c8adc4d131683332d84b79a50bafa07bd92d2ac686de38635bd30d8445f08a0c2c1fdbf4d26f05e05035abb4574313f86e820fef850ba43b740082562294fd3a935174aeb79b8d5d3935de1188e37427561f888aa39c121a270000801ca00168095256eaec4fdd074470d02f32c017947010813ca51568d42c720ad439f7a03b2fe84a971e46a83011fddc66acd225c05b8ae75de1b41ccfb2946413a7e111f87083028718850ba43b740083015f909407d71bfc263af5758225fab79e1656a22ac9824a8854195f5b7434e800801ba041e5a49b9db51829041ea32fd0fbf4da8b79b7933c25f513aee8a678bffb3ac1a06758def764e58b71bca0f8507b93631a9980fb73d193e6073dd5aa71187f5720f87083028719850ba43b740083015f909477f190fc96c507f40dc13aadc48d2cafcde5358b882239e735fb73a400801ca049be4e119b1f25f2e7d8d1c8c0ba38b2f90e5a800d18a3d34fee51244d4e7fbca04c1748a1aae6a4316039aa89a43f46908d4a4b3eb53f435a81d003db136ced2bf9010c825907850a7a3582008307a120943375ee30428b2a71c428afa5e89e427905f95f7e80b8a47d242ae5000000000000000000000000000000000000000000000000000097951b766aaa000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000221220b38db07e10542ae76234e4efbde58897c8502b3bed7c5740129f173fa97c000e0000000000000000000000000000000000000000000000000000000000001ca0f8486eb8fe36b4e5e300346fc6d2ca71366dbe8bd4492e94adf7bfe6093f76aba05294c7096a206200f59a341ba2f730a6b2b2b77ed995e1c4684c1fd28b503314f86a827ae00a83015f90948b687892c6cf88925ddd772718782a864e5353df8844b5a0318a73d038801ba054df5dcb8c2bf3e09b6a4a783e2933164351d5bfd5e2abbc4b585524b0c13c9ea035df380bafa2beb16543c70b216d3d9bbd663f4ff61c5c35d2837eaf44513b35f86a827ae10a83015f90948850522874c32a49c3a2c65035c5dfb049334caf8844c99175caf20000801ba079195b9ec5b735de194ac4811bb7270c405d865ef285b63c2b8565ad912f1df9a0647f97c5ec482301853330ce69e9f545f54592ad488b3712cac7d752bf1a883ef9021bf90218a07a6e5d44a6651ff0d954584b3c481c71887361e9b50ee07ff981b9e363042bc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942a65aca4d5fc5b5c859090a6c34d164135398226a04e9811a2f1329b469835d279dfbbaea95095ffcedd3f55eb16dc68c82f343d7da027e7fa8561b7f12072d5685196a5669b5586e16c4144ca2ab882d161f92eb95da06914d51d84d4a47310bb541056d64c913a7e5ddce99fb7fbf317ca15b4e0a864b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860ad304994503830f1b3d832fefd8830148208456bd193c98d783010303844765746887676f312e352e31856c696e7578a0f5b92fa9266dd54f08bea6cf98e4bce3af23d874fd20ea4a850d8454e552712d88e66214db217b12f6", + "rlp": "0xf91c77f90218a07d7701cadd868037f2d6e2898fcaa03e9e892dfac9f85d046b00bcf6bb786ad9a0bf34d0addf61b0e6cd483d6396cadaae438346dc5d8e0a0f3d9135b52a0f11a1944bb96091ee9d802ed039c4d1a5f6216f90f81b01a030e3d6c1021ecb806a1022e07f6e1491a5a2c17f3aaa9efbe1afe2325f9ba241a0fcf98a24af539c43988cec8e157ceec62b6c3ffa7ccc62c41e6b5d63d7af9e24a058656d3e1b463465ded49b02b74ec7dc6700870b5fafee285b49ac5789c39f46b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860acef5f96bd8830f1b40832fefd883075e308456bd199d98d783010400844765746887676f312e352e31856c696e7578a0ea6f705561212f5523522114b40c77fc735a159eafb0d2c9f134ae33b8e4915088e67c3494e678ba87f90e9ff90c7ef86e8204ee85746a528800825208944d15e32435180fa21907e0d23a4c0021415fc21f88016345785d8a0000801ba04eeb6205a94672c865a68f7962ab0a4f4d5e152ea0b2ce3fa9821776a6e4d7fea0597fa300bf2dfa6b5631062d119a3b1c407e3a2ca5b2e3c4af4cd597f8aab0e8f907ed8227ac85104c533c00830f4240941194e966965418c7d73a42cceeb254d87586035601b90784d5064ed1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000012455552555344000000000000000000000000000000000000000000000000000047425055534400000000000000000000000000000000000000000000000000005553444a505900000000000000000000000000000000000000000000000000005841555553440000000000000000000000000000000000000000000000000000584147555344000000000000000000000000000000000000000000000000000053503530300000000000000000000000000000000000000000000000000000004e415344415100000000000000000000000000000000000000000000000000004141504c00000000000000000000000000000000000000000000000000000000474f4f47000000000000000000000000000000000000000000000000000000004d53465400000000000000000000000000000000000000000000000000000000474d0000000000000000000000000000000000000000000000000000000000004745000000000000000000000000000000000000000000000000000000000000574d54000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000005400000000000000000000000000000000000000000000000000000000000000555344545f455448000000000000000000000000000000000000000000000000555344545f4254430000000000000000000000000000000000000000000000004254435f45544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000001144b400000000000000000000000000000000000000000000000000000000001617dc0000000000000000000000000000000000000000000000000000000006b3d5e8000000000000000000000000000000000000000000000000000000004a324b740000000000000000000000000000000000000000000000000000000000f0ebc8000000000000000000000000000000000000000000000000000000006d058bc0000000000000000000000000000000000000000000000000000000007fffffff000000000000000000000000000000000000000000000000000000000595bfa00000000000000000000000000000000000000000000000000000000028b76e700000000000000000000000000000000000000000000000000000000002f6359000000000000000000000000000000000000000000000000000000000019a76200000000000000000000000000000000000000000000000000000000001a2da900000000000000000000000000000000000000000000000000000000003e4b43f0000000000000000000000000000000000000000000000000000000000aa70d0000000000000000000000000000000000000000000000000000000000228855000000000000000000000000000000000000000000000000000000000005b8d80000000000000000000000000000000000000000000000000000000001724398f0000000000000000000000000000000000000000000000000000000000003e5000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19780000000000000000000000000000000000000000000000000000000056bd19800000000000000000000000000000000000000000000000000000000056bd19800000000000000000000000000000000000000000000000000000000056bd19801ca01c66b2eb640b6af2df8c10de464eb08dd3a7ebfa808a9a3e285ba4efc98eabc7a00ee135bb46d3e99077e623aac3c5d9a5d46bf7665a75f2cf8cb561eb18a71895f86f820fee850ba43b740082562294fbd95cee484181c01b519906a953624acffb7172890fb5eaaf9d05c44800801ca0a20d248c7cf304b6464d5814c856b547ebf769fccf0080a0910d477f78f758fca00ee62d774a181a917e8555b60e418e496aed05421ed1ec8bed45ede7c1967474f87083028717850ba43b740083015f9094354662bcd38883b6e67497f06fc4fee20339e57488540791be2c8a5c00801ba067550f26c0bbf939532d93c25418dbb58324c8adc4d131683332d84b79a50bafa07bd92d2ac686de38635bd30d8445f08a0c2c1fdbf4d26f05e05035abb4574313f86e820fef850ba43b740082562294fd3a935174aeb79b8d5d3935de1188e37427561f888aa39c121a270000801ca00168095256eaec4fdd074470d02f32c017947010813ca51568d42c720ad439f7a03b2fe84a971e46a83011fddc66acd225c05b8ae75de1b41ccfb2946413a7e111f87083028718850ba43b740083015f909407d71bfc263af5758225fab79e1656a22ac9824a8854195f5b7434e800801ba041e5a49b9db51829041ea32fd0fbf4da8b79b7933c25f513aee8a678bffb3ac1a06758def764e58b71bca0f8507b93631a9980fb73d193e6073dd5aa71187f5720f87083028719850ba43b740083015f909477f190fc96c507f40dc13aadc48d2cafcde5358b882239e735fb73a400801ca049be4e119b1f25f2e7d8d1c8c0ba38b2f90e5a800d18a3d34fee51244d4e7fbca04c1748a1aae6a4316039aa89a43f46908d4a4b3eb53f435a81d003db136ced2bf9010c825907850a7a3582008307a120943375ee30428b2a71c428afa5e89e427905f95f7e80b8a47d242ae5000000000000000000000000000000000000000000000000000097951b766aaa000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000221220b38db07e10542ae76234e4efbde58897c8502b3bed7c5740129f173fa97c000e0000000000000000000000000000000000000000000000000000000000001ca0f8486eb8fe36b4e5e300346fc6d2ca71366dbe8bd4492e94adf7bfe6093f76aba05294c7096a206200f59a341ba2f730a6b2b2b77ed995e1c4684c1fd28b503314f86a827ae00a83015f90948b687892c6cf88925ddd772718782a864e5353df8844b5a0318a73d038801ba054df5dcb8c2bf3e09b6a4a783e2933164351d5bfd5e2abbc4b585524b0c13c9ea035df380bafa2beb16543c70b216d3d9bbd663f4ff61c5c35d2837eaf44513b35f86a827ae10a83015f90948850522874c32a49c3a2c65035c5dfb049334caf8844c99175caf20000801ba079195b9ec5b735de194ac4811bb7270c405d865ef285b63c2b8565ad912f1df9a0647f97c5ec482301853330ce69e9f545f54592ad488b3712cac7d752bf1a883ef9021bf90218a07a6e5d44a6651ff0d954584b3c481c71887361e9b50ee07ff981b9e363042bc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942a65aca4d5fc5b5c859090a6c34d164135398226a04e9811a2f1329b469835d279dfbbaea95095ffcedd3f55eb16dc68c82f343d7da027e7fa8561b7f12072d5685196a5669b5586e16c4144ca2ab882d161f92eb95da06914d51d84d4a47310bb541056d64c913a7e5ddce99fb7fbf317ca15b4e0a864b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860ad304994503830f1b3d832fefd8830148208456bd193c98d783010303844765746887676f312e352e31856c696e7578a0f5b92fa9266dd54f08bea6cf98e4bce3af23d874fd20ea4a850d8454e552712d88e66214db217b12f6f90bb7f90128a05879cc9bb1b63f28493300c7d2ab6eda50487cd14255661e52287f56e457fec6825208b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a0a8892365c5f7d48bb7979f40f304d593139c88968aa6918c0304920ea2bacfc28303f735b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a01cef075979cdff0692a2c9cc3c0009fdfc5f225db0c91dc746a18783b05c330d8304493db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a0ae9b051a50ea66ada1b71a19c5f23c12a576c131371faba59b978589c20d001983049b45b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a080007d613cec57228338d5c70dbb1cd2d9462b6d53b19b5f0bccb88868f649ec8304ed4db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a093b357397f62c279ef538050d31fc90097659a05f629739eb97bee41acdfa04283053f55b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a070de2004c27aac1311d7084d749db6637c631f76eb3cf26e2d876c447e23f0328305915db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a0edc5fb798fb43992a1f8019c81ccceb4468d43c4e8586924f53b4688638bf78a8306ba20b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a05ee6946d6b94ce0c74fc1d3f8cf48e194fbd7de102ae678fa77919abc9b9f88183070c28b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f90129a007076f5fbf84924032494a0fd4891ed06bcf3f724416c707769737c9d3f2a0ac83075e30b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", "number": 990016 } } diff --git a/fluffy/tests/blocks/mainnet_blocks_1-2.json b/fluffy/tests/blocks/mainnet_blocks_1-2.json index 3a25abc1e..21d03b22d 100644 --- a/fluffy/tests/blocks/mainnet_blocks_1-2.json +++ b/fluffy/tests/blocks/mainnet_blocks_1-2.json @@ -1,10 +1,10 @@ { "0x88e96d4537bea4d9c05d12549907b32561d3bf31f45aae734cdc119f13406cb6": { - "rlp": "0xf90216f90211a0d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479405a56e2d52c817161883f50c441c3228cfe54d9fa0d67e4d450343046425ae4271474353857ab860dbc0a1dde64b41b5cd3a532bf3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503ff80000001821388808455ba422499476574682f76312e302e302f6c696e75782f676f312e342e32a0969b900de27b6ac6a67742365dd65f55a0526c41fd18e1b16f1a1215c2e66f5988539bd4979fef1ec4c0c0", + "rlp": "0xf90218f90211a0d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479405a56e2d52c817161883f50c441c3228cfe54d9fa0d67e4d450343046425ae4271474353857ab860dbc0a1dde64b41b5cd3a532bf3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503ff80000001821388808455ba422499476574682f76312e302e302f6c696e75782f676f312e342e32a0969b900de27b6ac6a67742365dd65f55a0526c41fd18e1b16f1a1215c2e66f5988539bd4979fef1ec4c2c0c0c0", "number": 1 }, "0xb495a1d7e6663152ae92708da4843337b958146015a2802f4193a410044698c9": { - "rlp": "0xf9021df90218a088e96d4537bea4d9c05d12549907b32561d3bf31f45aae734cdc119f13406cb6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794dd2f1e6e498202e86d8f5442af596580a4f03c2ca04943d941637411107494da9ec8bc04359d731bfd08b72b4d0edcbd4cd2ecb341a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503ff00100002821388808455ba4241a0476574682f76312e302e302d30636463373634372f6c696e75782f676f312e34a02f0790c5aa31ab94195e1f6443d645af5b75c46c04fbf9911711198a0ce8fdda88b853fa261a86aa9ec0c0", + "rlp": "0xf9021ff90218a088e96d4537bea4d9c05d12549907b32561d3bf31f45aae734cdc119f13406cb6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794dd2f1e6e498202e86d8f5442af596580a4f03c2ca04943d941637411107494da9ec8bc04359d731bfd08b72b4d0edcbd4cd2ecb341a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503ff00100002821388808455ba4241a0476574682f76312e302e302d30636463373634372f6c696e75782f676f312e34a02f0790c5aa31ab94195e1f6443d645af5b75c46c04fbf9911711198a0ce8fdda88b853fa261a86aa9ec2c0c0c0", "number": 2 } } diff --git a/fluffy/tools/eth_data_exporter.nim b/fluffy/tools/eth_data_exporter.nim new file mode 100644 index 000000000..3e638862d --- /dev/null +++ b/fluffy/tools/eth_data_exporter.nim @@ -0,0 +1,157 @@ +# Nimbus +# Copyright (c) 2022 Status Research & Development GmbH +# Licensed and distributed under either of +# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). +# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). +# at your option. This file may not be copied, modified, or distributed except according to those terms. + +# Tool to download chain history data from local node, and save it to the json +# file. +# Data of each block is rlp encoded list of: +# [blockHeader, [block_transactions, block_uncles], block_receipts] +# Json file has following format: +# { +# "hexEncodedBlockHash: { +# "rlp": "hex of rlp encoded list [blockHeader, [block_transactions, block_uncles], block_receipts]", +# "number": "block number" +# }, +# ..., +# ..., +# } +# +# + +{.push raises: [Defect].} + +import + std/[json, typetraits, strutils, os], + confutils, + stew/[byteutils, io2], + json_serialization, + faststreams, chronicles, + eth/[common, rlp], chronos, + eth/common/eth_types_json_serialization, + ../../premix/downloader + +proc defaultDataDir*(): string = + let dataDir = when defined(windows): + "AppData" / "Roaming" / "EthData" + elif defined(macosx): + "Library" / "Application Support" / "EthData" + else: + ".cache" / "ethData" + + getHomeDir() / dataDir + +const + defaultDataDirDesc = defaultDataDir() + defaultFileName = "eth-history-data.json" + +type + ExporterConf* = object + logLevel* {. + defaultValue: LogLevel.INFO + defaultValueDesc: $LogLevel.INFO + desc: "Sets the log level" + name: "log-level" .}: LogLevel + initialBlock* {. + desc: "Number of first block which should be downloaded" + defaultValue: 0 + name: "initial-block" .}: uint64 + endBlock* {. + desc: "Number of last block which should be downloaded" + defaultValue: 0 + name: "end-block" .}: uint64 + dataDir* {. + desc: "The directory where generated file will be placed" + defaultValue: defaultDataDir() + defaultValueDesc: $defaultDataDirDesc + name: "data-dir" .}: OutDir + filename* {. + desc: "default name of the file with history data" + defaultValue: defaultFileName + name: "filename" .}: string + + DataRecord = object + rlp: string + number: uint64 + +proc writeBlock(writer: var JsonWriter, blck: Block) {.raises: [IOError, Defect].} = + let + enc = rlp.encodeList(blck.header, blck.body, blck.receipts) + asHex = to0xHex(enc) + dataRecord = DataRecord(rlp: asHex, number: cast[uint64](blck.header.blockNumber)) + headerHash = to0xHex(rlpHash(blck.header).data) + + writer.writeField(headerHash, dataRecord) + +proc downloadBlock(i: uint64): Block = + let num = u256(i) + try: + # premix has hardcoded making request to local host which is "127.0.0.1:8545" + # which is defult port of geth json rpc server + return requestBlock(num, flags = {DownloadReceipts}) + except CatchableError as e: + fatal "Error while requesting Block", error = e.msg + quit 1 + +proc createAndOpenFile(config: ExporterConf): OutputStreamHandle = + # Creates directory and file specified in config, if file already exists + # program is aborted with info to user, to avoid losing data + + let filePath = config.dataDir / config.filename + + if isFile(filePath): + fatal "File under provided path already exists and would be overwritten", + path = filePath + quit 1 + + let res = createPath(distinctBase(config.dataDir)) + + if res.isErr(): + fatal "Error occurred while creating directory", error = res.error + quit 1 + + try: + # this means that each time file be overwritten, but it is ok for such one + # off toll + return fileOutput(filePath) + except IOError as e: + fatal "Error occurred while opening the file", error = e.msg + quit 1 + +proc run(config: ExporterConf) = + let fh = createAndOpenFile(config) + + try: + var writer = JsonWriter[DefaultFlavor].init(fh.s) + writer.beginRecord() + for i in config.initialBlock..config.endBlock: + let blck = downloadBlock(i) + writer.writeBlock(blck) + writer.endRecord() + info "File successfully written" + except IOError as e: + fatal "Error occoured while writing to file", error = e.msg + quit 1 + finally: + try: + fh.close() + except IOError as e: + fatal "Error occoured while closing file", error = e.msg + quit 1 + +when isMainModule: + {.pop.} + let config = ExporterConf.load() + {.push raises: [Defect].} + + if (config.endBlock < config.initialBlock): + fatal "Initial block number should be smaller than end block number", + initialBlock = config.initialBlock, + endBlock = config.endBlock + quit 1 + + setLogLevel(config.logLevel) + + run(config) diff --git a/nimbus.nimble b/nimbus.nimble index 69e6f0c74..97615dc30 100644 --- a/nimbus.nimble +++ b/nimbus.nimble @@ -67,6 +67,7 @@ task fluffy, "Build fluffy": task fluffy_tools, "Build fluffy tools": buildBinary "portalcli", "fluffy/tools/", "-d:chronicles_log_level=TRACE -d:chronosStrictException" buildBinary "blockwalk", "fluffy/tools/", "-d:chronicles_log_level=TRACE -d:chronosStrictException" + buildBinary "eth_data_exporter", "fluffy/tools/", "-d:chronicles_log_level=TRACE -d:chronosStrictException" task utp_test_app, "Build uTP test app": buildBinary "utp_test_app", "fluffy/tools/utp_testing/", "-d:chronicles_log_level=TRACE -d:chronosStrictException"