block witness new spec impl

This commit is contained in:
jangko 2020-05-14 11:09:01 +07:00
parent 4a0b3c4f16
commit 61c60abdf2
No known key found for this signature in database
GPG Key ID: 31702AE10541E6B9
17 changed files with 3659 additions and 3572 deletions

View File

@ -1,27 +0,0 @@
{
"version": "0x01",
"metadata": "0x00",
"rootHash": "0xb629598af09d10fde456989823c057fd43f3e1bdb89edf2fb03db28e3db2e7e6",
"error": false,
"tree": [
{
"nodeType": "0x02",
"accountType": "0x01",
"nibblesLen": "0x40",
"nibbles": "0xa07af6d1916daa43b026a3ed4dd13ede4bb6564c533079f656a1914977f53b20",
"address": "0x4105c32aa5078e4c5a5cdc3963191cd6742f89a6",
"balance": "0x76c2193f6e05e17d5e57ea46ac608248bf517ee093cdfc4b23a92bbf4a1198de",
"nonce": "0x000000000000000000000000000000000000000000000000fd3a49b23e5c4d37",
"codeLen": "0x00000065",
"code": "0x70a92f12189c6d8a3d42aa6d43fed21c096611ddfec2712d1ccad9bb3025f52c1d3a2c698c54aa620c535c23cfff68adab866d3db0c4eeec6a3bc3cddbb2f0d2526a89b0e216c031bd7e79d3d92aa48aaa7d918130d6170c0097eab79a8a0a865f35ad7996",
"storage": [
{
"nodeType": "0x03",
"data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
}
],
"debugDepth": "0x00",
"debugHash": "0xb629598af09d10fde456989823c057fd43f3e1bdb89edf2fb03db28e3db2e7e6"
}
]
}

View File

@ -0,0 +1,26 @@
{
"version": "0x01",
"metadata": "0x00",
"rootHash": "0x3ef071a43e07a7a209d4a67f9edd05477e8e3ac30af64656cfe784961fd2433a",
"error": false,
"tree": [
{
"nodeType": "0x02",
"accountType": "0x01",
"address": "0x720ef0ee74f1b3b8252eb3270d484b223f775810",
"balance": "0x3886e813098fc1b3ffd126f9497f5c570f82cfc0fb9b3466c8124a5e2cf3a133",
"nonce": "0x00000000000000000000000000000000000000000000000056dd64d09a2ac1ad",
"codeType": "0x00",
"codeLen": "0x0000003d",
"code": "0x09ddefda93a915fe9ac8998e195a5fe0bb85a2474e676551e8978cba5b5ea3af0dc90606fd0e6d4f07b0262ada94b579676f51e4226b2dc456be061e99",
"storage": [
{
"nodeType": "0x03",
"data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
}
],
"debugDepth": "0x00",
"debugHash": "0x3ef071a43e07a7a209d4a67f9edd05477e8e3ac30af64656cfe784961fd2433a"
}
]
}

View File

@ -0,0 +1,29 @@
{
"version": "0x01",
"metadata": "0x00",
"rootHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d",
"error": false,
"tree": [
{
"nodeType": "0x02",
"accountType": "0x01",
"address": "0x205aea15c1e739b4acdae0cc3b57c34f55907a73",
"balance": "0x674f431a1b20188b16000137d50ed2d4a2bb921f43bbef4d099250163c42528c",
"nonce": "0x000000000000000000000000000000000000000000000000cead972e584734a3",
"codeType": "0x01",
"codeLen": "0x0000005e",
"codeHash": {
"nodeType": "0x03",
"data": "0x8dd74346f58c605477239378ca66f42e8a75b9cc8aea3287ad30c8a5932a92da"
},
"storage": [
{
"nodeType": "0x03",
"data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
}
],
"debugDepth": "0x00",
"debugHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d"
}
]
}

View File

@ -1,19 +1,17 @@
{
"version": "0x01",
"metadata": "0x00",
"rootHash": "0x2cb26cf92076431e8549bdad4c81cfb37134cfcea04c3618bfb053e0278f84d4",
"rootHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4",
"error": false,
"tree": [
{
"nodeType": "0x02",
"accountType": "0x00",
"nibblesLen": "0x40",
"nibbles": "0x5a8c577c20f79ce03b2ee5755d3c933cb066d1fd7a34da5da38ae442307d00ce",
"address": "0xa18c851c300dc383bc1b4617e329e06c0de4a0dd",
"balance": "0x918bfb1039de884aa3360be3e7aaf2cd8532e58325079a976182f696ce2a747f",
"nonce": "0x000000000000000000000000000000000000000000000000c4568a0c22badf95",
"address": "0x080e7dabd304f1acd44786d3ac613a5f2ff66b77",
"balance": "0xe8b24dc9385b1dcad704974b2ce4ede595594dd70d72de713c2ab7ff3e31fc0c",
"nonce": "0x0000000000000000000000000000000000000000000000005eb7a6f01f20fa63",
"debugDepth": "0x00",
"debugHash": "0x2cb26cf92076431e8549bdad4c81cfb37134cfcea04c3618bfb053e0278f84d4"
"debugHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4"
}
]
}

View File

@ -1,30 +0,0 @@
{
"version": "0x01",
"metadata": "0x00",
"rootHash": "0x7606196682dd424ec6eefb69e61e876066caacc128c5512781f8a99ccd31466e",
"error": false,
"tree": [
{
"nodeType": "0x02",
"accountType": "0x02",
"nibblesLen": "0x40",
"nibbles": "0x04189264d135c92ef0a3f28012ac29fd1606b207ad1dc20a6e7cb94f020aa851",
"address": "0x44ae06bf1d2c4ec0d1b32f5c231817acffafff3a",
"balance": "0x88e7daf3c42e645edc66102f736e1f411a59ceeaef060384800471cdb7924b64",
"nonce": "0x00000000000000000000000000000000000000000000000071f4ab8ce322bf60",
"codeHash": {
"nodeType": "0x03",
"data": "0x5472554f2f4e2e3939fed9720dcaff5f8e4359e5ee8a6376e42bb94218449710"
},
"codeLen": "0x00000031",
"storage": [
{
"nodeType": "0x03",
"data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
}
],
"debugDepth": "0x00",
"debugHash": "0x7606196682dd424ec6eefb69e61e876066caacc128c5512781f8a99ccd31466e"
}
]
}

View File

@ -1,26 +1,29 @@
{
"version": "0x01",
"metadata": "0x00",
"rootHash": "0x6b7a89f83333a21042df2fbeed69f85800278b3c9a02af68b9c31e19808bf505",
"rootHash": "0x0e90a5b7a3cb36d99e318df559f7516e97fbf779bfaa83c7487bef343908f608",
"error": false,
"tree": [
{
"nodeType": "0x02",
"accountType": "0x01",
"nibblesLen": "0x40",
"nibbles": "0x6acb512a5750d737c3ab7d040617934b15e0b5874e2e5fe976ed87498e53c430",
"address": "0x02c391005fb75ad7c7bfdd17514257918c9408ef",
"balance": "0x1da1cbddf6d6f1881a3b4425729c28f2376140aa0cb5c6f053c19f4423873191",
"nonce": "0x0000000000000000000000000000000000000000000000008efea63d92fe33cf",
"codeLen": "0x00000000",
"address": "0x2a425b119d8bfa8fdb9852f731aaacec27ea76b1",
"balance": "0xc658f54abbd8739eca0f2067116e395edfc3d2961af34a4e42c261ab28776a6e",
"nonce": "0x000000000000000000000000000000000000000000000000d69f8b58337e75e5",
"codeType": "0x00",
"codeLen": "0x00000040",
"code": "0x3841c4b026645417401c750b610b3571de8fa8c219933057df4d1b890091a67b2480d3e07459bfa475156f691e0c56c2558c3d01370d15b7f5ceb6f672770899",
"storage": [
{
"nodeType": "0x03",
"data": "0xba3718b0e569473fe0738a3b9002d9f98a0bc006e32c3b9169c41d8aefa98389"
"nodeType": "0x02",
"key": "0x37e5d5966c3a6e98d9502ae2fe458ce543761384abf07621534a3c8c419bd00b",
"value": "0xd48881272c825d7755d2b88842ab99e8d7ed122050fe3aef9660a0095712bec7",
"debugDepth": "0x00",
"debugHash": "0x77e607b809ddcd8b02a5e1a274d178c8df487ce70667bab68cf1033a721009af"
}
],
"debugDepth": "0x00",
"debugHash": "0x6b7a89f83333a21042df2fbeed69f85800278b3c9a02af68b9c31e19808bf505"
"debugHash": "0x0e90a5b7a3cb36d99e318df559f7516e97fbf779bfaa83c7487bef343908f608"
}
]
}

View File

@ -0,0 +1,29 @@
{
"version": "0x01",
"metadata": "0x00",
"rootHash": "0x27e1adcca01a43ba9addd0309b170dbe54a13fd6fc8db32d603ff8acc74c114a",
"error": false,
"tree": [
{
"nodeType": "0x02",
"accountType": "0x01",
"address": "0x1f6d2e14d36e46ed0ffd4bc8f7a99c215c37a987",
"balance": "0xafa0c589b3bfba6603024d4a891fdc82ed2f3b366224536aa7096f700d7f61b9",
"nonce": "0x00000000000000000000000000000000000000000000000011b728ae6a01f54f",
"codeType": "0x01",
"codeLen": "0x00000042",
"codeHash": {
"nodeType": "0x03",
"data": "0x8617fb2d49a06427c5982b03b581f1c7c9bfa7ab4da2e67ca665f21ecc2f70f4"
},
"storage": [
{
"nodeType": "0x03",
"data": "0xe36ab8ab77009fccb7763c179b8bd1c9d87999e60969de56f96c45d868e1c300"
}
],
"debugDepth": "0x00",
"debugHash": "0x27e1adcca01a43ba9addd0309b170dbe54a13fd6fc8db32d603ff8acc74c114a"
}
]
}

View File

@ -1,368 +1,304 @@
{
"version": "0x01",
"metadata": "0x00",
"rootHash": "0x1339b5d780ff5c4713b6a6d38faf4448cf5afd4b616ffe3c88d15f38d2c575ac",
"rootHash": "0x4b7082248440f9d040a2f7f55a4177c4f25a70f671aa0cb371b7bf189cc4fc68",
"error": false,
"tree": [
{
"nodeType": "0x02",
"accountType": "0x02",
"nibblesLen": "0x40",
"nibbles": "0xa57728d9ff180513d0f4a43a19487dc761e3a1a855a8ebf69a2539a0701feae6",
"address": "0x8a2dd1126fcff91b18f4a4c39d44d5dbc67c39fc",
"balance": "0x3112cc29335cf1b5f3c06a4931b324b36d4968e52aecbbe757dd2d972a876f00",
"nonce": "0x0000000000000000000000000000000000000000000000000e428f438a0c77af",
"codeHash": {
"nodeType": "0x03",
"data": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"
},
"codeLen": "0x00000000",
"accountType": "0x01",
"address": "0x06852d62c3a302f0cec4a92908f1040f6c1a9357",
"balance": "0x00f2eb881340b5631ae774251783b5bd8404433c01c1c91694616140350c5ef5",
"nonce": "0x000000000000000000000000000000000000000000000000aa9a63db44f791ce",
"codeType": "0x00",
"codeLen": "0x0000001a",
"code": "0xd0936ffd3b2a2867f12c8251f72b4997b3080d0f168d34860cb8",
"storage": [
{
"nodeType": "0x00",
"mask": "0xF775",
"mask": "0xF9FF",
"debugDepth": "0x00",
"debugHash": "0xd6b117fadf28c9270701aed45935300890d9ad9e49f9e357f7f3b507ea6a9720"
"debugHash": "0xa8a27dea0be0d4138a6da655a7f5694cb2a0802bba453f7276fb33dd160a5945"
},
{
"nodeType": "0x00",
"mask": "0x0060",
"mask": "0x0108",
"debugDepth": "0x01",
"debugHash": "0x38aa0f0b22bc6f5a56493334f8e45ccc8a9b1af635db4aae2eb1e74e259c6d53"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0x670ec6cb145c744027c61392367a6295d103b422dd59736cdfce88b02a10fc",
"key": "0xd47303578066f85f494628ecbbdbfce93934b0c88b57000ef475d5a932e0e614",
"value": "0x1d10ff79b7b0669088fa516d4231b5768cde9e5331852fe19175473e647afd02",
"debugDepth": "0x02",
"debugHash": "0x4d236fe1cf06227aaa78d93391635312f08c0b175a946902fc280aeffc12a72d"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0x36ee270a10f395a3ba43efc7a6fe7beca941b22423a36fd13aa435161eb9df",
"key": "0x51a2287382f8ac3a56ae9836ba516a8960b1684b7445e6e0f88f0382855dff46",
"value": "0xfe3bd104e8ba40ffce7fe51f8bd0055b8eb4e223a9e160526c43165647dc84ac",
"debugDepth": "0x02",
"debugHash": "0x2f6c0056e0133db054d02978bdf777484f2d4c095e0e1470e8751f6ddc2700fd"
"debugHash": "0x376834c93db082a8620b021d9a1e3ac5cb14c237d36ded719061153c68d22ae5"
},
{
"nodeType": "0x00",
"mask": "0x88A4",
"debugDepth": "0x01",
"debugHash": "0xb0010cee8b764bf1de83ff22402f50467e915982eb23a70f11dff5d34c9fc6d3"
"mask": "0x4800",
"debugDepth": "0x02",
"debugHash": "0xd9e37be3b9a0c1fa3d53d0c679ccc5401db5a47701c95f2be3f4a084e7a3f27b"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0xb1123325eff75f1b1068bff50b94305d0b41a46b362ce68e667539ed2836bf",
"key": "0x805e8ae7acddfc2e458dd7635fa4b56c86889163334b37032607315d0ca7a6e9",
"value": "0x7471c619144edeeca438052ce4d5f9229dd71f02e7135898fda4035421d935e7",
"debugDepth": "0x02",
"debugHash": "0xaf87d5710f7a6e22a42de8d5acb887c81ff3ae048caf4a5a4e7ce221fa1fde55"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0x15af5858ac6d05f3d8be1ea71b2f6fa30efc8c16b19fc7d286d589bd66af80",
"key": "0x05d8aa012a701b4efd4efb4c120519f163952b90e21340c6ef1173fe956ddef4",
"value": "0xc1720d16624c82fd76a363fc18bc4c87d7e565031ced6ec1820b6578a0f4c81c",
"debugDepth": "0x02",
"debugHash": "0x8e14a0921e13c2a523b6df04c37021a871b44c467d4830dda68f3ae07ee25d21"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0x66aaf0c3b22227acc68b729c59cdbf683c277bb7af3a707f8f585b40874ff3",
"key": "0x9a019ba831a4c0210320bf1889028db5ae90b7bd11ab10dc4a3ddde8ee84d14c",
"value": "0xc683ade70bffc7ef21fd8551307e5b20fce6bfd9711ec075b3f1c96d41033152",
"debugDepth": "0x02",
"debugHash": "0x487bf79cb03594d96cf2e8a04d9e6fa8b851c32a803103b378b5c709e419b39f"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0x23e0151c7fcb23426f2da041d4f6019c6f6eb13c1499ecc50194710891a7e6",
"key": "0xe5f78889ca7f3dbfe969d8a7a010aa6295633d8a48b230656dfd8d66920fc1ea",
"value": "0x95a04bb13a597ff974c4a29cdb75247e23cc8edbd22675e552dbf5af98e40202",
"debugDepth": "0x02",
"debugHash": "0x888b26ca068a203d42cc03a5f1abdc05318ce1b9c60a10f9e26beb8c2ef1d556"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0x92133c50c4750f77d1919381bbac96d3d6b547a04fbfc491f2a09acf5341f7",
"key": "0x0362fc5636f51d7d599e38b03c04335ee4f25ff3a57836770ec15aef3c5b1dc6",
"value": "0xc1a218145629baa10e8e240bf441b885b07334b2524385832af163453ef2a579",
"debugDepth": "0x02",
"debugHash": "0xaee90a9ec4acbd77c9994392ab04bcdb5c3948e9fb7db0dc4f28a68ca1dd41c4"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3F",
"nibbles": "0x492c255d77b7c939c4ac0d4e7e454a6097a7069e4dbe8b64a09ede2ff2946090",
"key": "0xb399be595c10390baec326c817989157fba6a9a79b2f3353932145282e4fca2b",
"value": "0xd8f3398e619934b608690ca8a2c28f1ac6640c8b8ad62ad4cc8f3414ceb33d53",
"debugDepth": "0x01",
"debugHash": "0x9b08aa2850104aef77f08ad2b762f8f4ae6a9befaadf533fde71bbeb73810397"
},
{
"nodeType": "0x00",
"mask": "0x4100",
"debugDepth": "0x01",
"debugHash": "0x6bbb61d3afb91adc479f566515a528f957a363c98988ebc4553811486a11a5e8"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0xa859d85f4d223a3358edd3556de6d301310926ac690c4d13dceaaa15b05b17",
"key": "0xfedf29d1f7ff6065f56a548c7da12a6b4ee2cd6b088940b32a82bbb1b6ff395d",
"value": "0xb47d2ae9ab9971ab268cc111f0fac015b66def89fa91b44d077af6cc18b1b948",
"debugDepth": "0x02",
"debugHash": "0x0d1348b49bd2189cff90ac7482ffb5f448ff67a4b5ee4ea52fa6cd243183d6fc"
},
{
"nodeType": "0x00",
"mask": "0x0092",
"debugDepth": "0x02",
"debugHash": "0x63d2a41df24fd6273e1af812dd9b63714916ee77c9992c1ca530892099361af6"
},
{
"nodeType": "0x00",
"mask": "0x4080",
"key": "0xaa217d9dd11ad18dd431cb5e2270b64c88f9557ef1800f6243c20ed1ae7e3dea",
"value": "0xe13cbcd714d9b1943eec9c6b84062d38f1009fdedf2a52b258cc051d4c4b1e09",
"debugDepth": "0x03",
"debugHash": "0x57916fd66b5b9034e6cbdb1e372581d9a4424f354001bdce453609f74f8e8154"
"debugHash": "0x0a4fa8d829c222e87bc33df9aadd790434a78997fc56a3fb6ae85b7341e2641d"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3C",
"nibbles": "0xe51ecd3ca9d839e76cecb1899605d9823042d0c7e952677889d60c85a470",
"key": "0x173418876815874e12e0cf64ee8e715fa50206e3701b609d7492794c4ccd5ccf",
"value": "0x278583f4b39f083e342a4fb9e73f5e960574cc3d169f8dba489323b096846c46",
"debugDepth": "0x04",
"debugHash": "0xf2da2f0f6a12c2608cf9e0f74aeb1c810fbb78333dfd693998e283bbf0b2d9e7"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3C",
"nibbles": "0x058b46b73db3148a9a602ca3ca61c84ae6910ff52dee0a6a8496847b06d5",
"key": "0x0f26d7f25a28e42c0dccb25ffe80b8b5809c959b3569c3846cff92fcb0c9fe78",
"value": "0x4565d0128407097f6501663f4d4dcbc5dda8de6d0f94e011fc5047fadd0a0300",
"debugDepth": "0x04",
"debugHash": "0xe2522da28a84aaeb27559b46ae11a0178aab3d037fe0afeb8c841cf4c67e3f18"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3D",
"nibbles": "0x0b5dbc85adfa492866bba900002898da8bc62c304741a9c6f5a86197a48dd0",
"key": "0x6bf8a2cfb8a1145e1f15bfaba4bed473c587e83c5ea9b4c301ad377ca34eba5b",
"value": "0xca4a36a0492a335c3e8c514fe22636ddafeeda2dbf165d1e5eceb5bfb3829c64",
"key": "0x2fe189467d5c589df80c15868d154f45647f477ed50cc1989b53555c6c4cfda9",
"value": "0xb792e2a1f4dfc913c45583b1982727a603a4f3a2bdaf2037b38d15664413bbe7",
"debugDepth": "0x03",
"debugHash": "0x98ea9a4289c03dd2e159425974fbcd33ff7d0dc5a8a7fce3cd7560f866d7f2bd"
"debugHash": "0x288d92ade25c3ceb2cca22ddbf2732f174f7e1d217163893091a4b287ef0fb4b"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3D",
"nibbles": "0x1d8579629c13701a44923e49f90bfa26f68e945794cbba0a786440996a4f90",
"key": "0x339db4aef12c6c97fcf9c0b6b15b311fab3e3f3e20638bee68b240a69e2f8adb",
"value": "0x0281eba07ad0a496b31ee78cdfb31e288e62955a863c571a1427a0c1c2a95fd9",
"debugDepth": "0x03",
"debugHash": "0x69d5b64fe7d673dbbcdf19dbaaae6cfb82c2757be0493647645f28ad7ffaf37a"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3F",
"nibbles": "0x38569ce15d242a83b80dc88dcc23d9f992546f3937aaa1d5647b4d764ba40550",
"key": "0xd1c1388e9002ace271300b3be4d770e019f1111e893f1b9584687e63cc2c5a17",
"value": "0xef019bf1216665c77c65b2340d8c15ffaed389986a93cf9b93ab27c73ef3321e",
"debugDepth": "0x01",
"debugHash": "0x2ee61de4a374d6e41db18773574381184e82c23aced8c2f0300de22ffb556cd4"
"key": "0xcc70ae02ac6b231c46b6f605d2ace7e5eb0d9944abe28a158e209bbc9afd0c5a",
"value": "0x3dd88f3b80115f0289e52e52f2cfcf04190d1c972ba2314d099ee7a7bc92a1c3",
"debugDepth": "0x02",
"debugHash": "0x1d880ea9b065359bff4373d94b696572bf689d76500377760f460a23af737ae7"
},
{
"nodeType": "0x00",
"mask": "0x6080",
"mask": "0xC140",
"debugDepth": "0x01",
"debugHash": "0x8edad43d497090bad60736a22ee2392157e329006155e2310b78d0a54dcba5ce"
},
{
"nodeType": "0x00",
"mask": "0x3000",
"debugDepth": "0x02",
"debugHash": "0x307fc7ba651c35a1fa257d978e0841bf5399226fb81dc1e06483cc9be829e4e1"
"debugHash": "0x5e481953f2e2a5b52c2c7857f4ea0dcc318d4d74482632c35c22923331e0c304"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3D",
"nibbles": "0xcadb4169ff5ce8ae9b4ca06179e2502aaf828313cb0013f6e914c38d3d9bd0",
"key": "0x8ffe8b9343b6bc02f514f476b13628f38534e92ac97ded5276facc4f4cfa8250",
"value": "0x0a9d9838420e37b10ad52beb5be1559c1bcb2f093f234397a5e654c69bb9f190",
"key": "0x0e90d4692a812cace9cc53a41c094309bc5f2698066d22187fe658f0fb12aa0a",
"value": "0xc4e820a2d7865ab420db28c3bbafde4d710b18b722403e1e8f6ae88508ff8978",
"debugDepth": "0x02",
"debugHash": "0xf9499523f940aafd0c360880769a33bdbc1ef1f9d55e3ee01b11360fffbccdd4"
},
{
"nodeType": "0x02",
"key": "0xe950abb124a710179726d8ae3443b17f93a67472a20aebee84104c77f6c4cc78",
"value": "0x2d61084050ba6f779324acc8a0ec615ed0bd76e599b4c3b60026bb65bd7e5a9b",
"debugDepth": "0x02",
"debugHash": "0x68cd75fdd8506d48fc81d3e05b3dc7567edd5633787d902283c88eeee0c54694"
},
{
"nodeType": "0x02",
"key": "0xccf524783653b1a14f93d97531222f1a800778fb171c131d3d6774d61325e6bd",
"value": "0x5cb6b329a21ff21795368dd94a2cd50213b5f1daa79f031dbffa66b85a61b348",
"debugDepth": "0x02",
"debugHash": "0x9394b13fc593ee3eff55c8089dc09c6a63cebe879a1717d422f29ed86b344768"
},
{
"nodeType": "0x02",
"key": "0x9e65049f8e10b9388af2a91c131813d960c627f318e10673cf85195cc1656573",
"value": "0x259bc2273654b6da367eba244b38262eec21ba0f07908a22bf3c2dbf080c2465",
"debugDepth": "0x02",
"debugHash": "0x10e97f103bbfe03db4e90ed4441272f535528258c17c16a388f33722e80b046d"
},
{
"nodeType": "0x00",
"mask": "0x8044",
"debugDepth": "0x01",
"debugHash": "0xe1f5c7cd519df9104a4733797d1c3fa748fcd2b3dec935bc4de49db359189cc1"
},
{
"nodeType": "0x02",
"key": "0x5adb66219b58e831bd3723486a3856ae459918527e1414a907d7752c3a528104",
"value": "0x510ddd96fd0fc7919cee9b45b722eb1e58472b39030dc834f107729cd5aeb3e2",
"debugDepth": "0x02",
"debugHash": "0xf0d1de3adf7f429fb2b917ff73d179e801610249bca7eb0bc2855650bcf8dff9"
},
{
"nodeType": "0x02",
"key": "0x162830d8f8deefd4b54836aecad18e6be06c75368ce3856995bf3f95a27bb1dd",
"value": "0x3ac191252ff512e11fc02542185b9fc77160b11d748fd37e6548ef3b4f3b383e",
"debugDepth": "0x02",
"debugHash": "0x02c1bd87d0012905bb8775b5ea773192ab89221e0889e14c33425cb4439a5e94"
},
{
"nodeType": "0x02",
"key": "0xace41e727612c5e12460dd04b2fd0300318b6939572ac5454e4626131b23423a",
"value": "0x40d970c83de360a739f0fedd9d0187ef1c53d258a3927445fedb3320b77c9c9d",
"debugDepth": "0x02",
"debugHash": "0x8bd758a0867e0b61c5adba329379f0e789935f64632924fbf728fc0968be180e"
},
{
"nodeType": "0x02",
"key": "0x5128809b5b57dad7da874ef299779dbb001b3783569ac074d59c50c943d8d198",
"value": "0xcdf46d3f3f58d88f8a614c904e133891f71f136041416f47a52bb751e4c5e563",
"debugDepth": "0x01",
"debugHash": "0xadcbec6b5b96a3a1968bc47904b0a7c725a3e564abb7ceb6ab1df73715a2f54a"
},
{
"nodeType": "0x00",
"mask": "0x2150",
"debugDepth": "0x01",
"debugHash": "0x90891286049642bb7a5e30320d18c6a3f0d27555963d8c6287a05fedc90ec57c"
},
{
"nodeType": "0x02",
"key": "0xc7bb062663c3cbdfaeea8d5a9bc5cf0418bc13a4f9d614fa7dededcba471d7ea",
"value": "0x0a4accc3049d45e5a1c3c53d95d835e0fe78ea8f2da23235fee53fabb5c856b1",
"debugDepth": "0x02",
"debugHash": "0x20d0c7f141867307fbf4423598b7eb9bc5697f85b11d6c8e95c8dd09a2f9005d"
},
{
"nodeType": "0x02",
"key": "0x2df9e20b09b850841177f8cc2e2454f199b2f1ca9d8165879cac6e4e199e4381",
"value": "0x1d3316148b02384ceee672189743dc48b464632e1ce10bf5a747f7bcca63e5b8",
"debugDepth": "0x02",
"debugHash": "0xd36a5b199aeb50b4c540599ec1992cc6d4ed76f4453e0305ae95c9681be27661"
},
{
"nodeType": "0x02",
"key": "0x0cfe461cb96c37e35c97b7c9b0e1cfa4d64133cd9be6b7deb88da316520e534b",
"value": "0x048eef6d6bc92290f3a0fb903c332bb8b89ad3393293e5c74af19190ef634eaa",
"debugDepth": "0x02",
"debugHash": "0x2bb074cb43c3afb0e6c0dcd709ea1943d462932ece4e6677a0bb527a21c1c62a"
},
{
"nodeType": "0x00",
"mask": "0x2040",
"debugDepth": "0x02",
"debugHash": "0xacd53be6d16856dda1b55eac2103188f11b8118b73dc43785f214d8bca184853"
},
{
"nodeType": "0x02",
"key": "0x8d938a0ec13be0f5541b141414293bf0b4aee794aa200530434edb878a577705",
"value": "0xe9f344e60c2353f2781346b26aac0e8bc3fcae11baed9490db849650cd38d0a8",
"debugDepth": "0x03",
"debugHash": "0x0341fc421bc0a7589bdfc068a4ade59bc6f186b3c438e24c646426aab179f854"
"debugHash": "0x166c1a8b7e76bbbe60a2dbe9cb9140dcdee74f18f40b36a8e0ca811a31cf0130"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3D",
"nibbles": "0x97605b517295134624827074186b88ad216329a24a6021faa56f590e2e4620",
"key": "0xec2dc7abea0ed2bf9fb0658b3bab68271e4497a88641a96ce105ae55ac4ea49a",
"value": "0x8aa06378b75cef01014f24059c69352d306acd08dacf06665ee72ee718dc2d6c",
"key": "0x890bfd8808f2338b91e2f294e2e80337c2bb485070eea237556201d3d5f46efb",
"value": "0xbea2f844de233796ec0ea2ac2c241c1e149e7bd5037514b0edd89d557aa47dad",
"debugDepth": "0x03",
"debugHash": "0x92789930301fb213ab4f6042f4f2e7a3ee3b5afba225abce7696e99af2c63ff7"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0xb88bca75c3618c9c09965bdbd9b51e1d9b5ba88681302b8b2bbff74e6ff4a4",
"key": "0xd8aeab934633fd7e3e450f14bd872460083d1de3c77646b90be32b185ff281f7",
"value": "0xb4be3be2bfb96e126a6f93aa3ea0a52d51e60438fa0e7d9659070ecacdf7af8e",
"debugDepth": "0x02",
"debugHash": "0xd181c045e343efc64cac28c95177c12008d28ececbbd89efc8b11a86768017f8"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0xfdecc844a495ac72a2deb78001aab6396cc1336ec686fe4e1d43af94f49766",
"key": "0x295746206953cbbab7ea0b19a4b44833cc0355715a2f70ec23106cb2683c250d",
"value": "0xdcaf2a863256a392a5d3033b3df492f6ef0d13b4ce87e443cc04b9f27af8f9e9",
"debugDepth": "0x02",
"debugHash": "0x51f8ced73dfae44084e80177da9e2c64a2851393f67ddafbff3f5135ac1685f2"
"debugHash": "0x6a1aa24523cf98745017656555e8adb7d443aff10f3db34e942dee58b6e76d32"
},
{
"nodeType": "0x00",
"mask": "0x1800",
"mask": "0x0804",
"debugDepth": "0x01",
"debugHash": "0x9e79a6c3e231c1f73238c630882f0598fe3a2494b1be9fb01a4c70f3d99534d9"
"debugHash": "0x3b0b7b29bfdccd1bb908c85768e9dc8d96b1eca5344a75d0e2bcdfb92ec7f3e3"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0x717b9e72c9f6e1fe46a73fb9ece0486c5c315e4312d89daabaa8f56679a505",
"key": "0x24b3cfaa33689e2c5d6ba7f8c745079a6e970b853626ffd3ff6e9becaaf8c4ed",
"value": "0xffbe98e3216fad147196eef602efd204edd66b29905a6c3c0715d4b0ac870953",
"key": "0x893135bb24b98b68f6c7bf2fc4d753dd6116f185e15c0f5ff0814224daafae8c",
"value": "0xbad1635b9ac609ebeede00d2a43ec80ee0d4186a59cb3d1bf0854cfa5bd46465",
"debugDepth": "0x02",
"debugHash": "0xbe2e89feda819f370ee9c38800b7a9f204f22493eaa3b94165134bfd47630ee4"
"debugHash": "0x61797d1f0b345e427676995ef359ac4da3f8400ac33d86584bc48eb783e4661e"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0x7a47a87a25fe4036884f4617fc08b10ce31de4519cbb697ecabc6b20a9a6cd",
"key": "0x965383b1aac06662174f12a830c8450d1720c990abc9e84f03e0c8cb7d302ace",
"value": "0x39c6d0dc737d09851cc33457173ad226bc2e2a6c48652640dc58c8688499517c",
"key": "0x20821aa715a79dc7f575d1daae8ee2064211f5e7f1eb19d35197234309191ffc",
"value": "0xe080c2e4c5eaa1d6ebac17bad0c7b1e2be2ea0c1a233f7e7e5a677fa883a6aa6",
"debugDepth": "0x02",
"debugHash": "0xb4691deec34163d079adee1f7b7352081b394835a4b64a9d071407c7c2280dd6"
"debugHash": "0x0f6c12390f8054a97d3a6cf5cf5d012ba33989b610af274c6fd215739342edf3"
},
{
"nodeType": "0x00",
"mask": "0xB010",
"mask": "0x0084",
"debugDepth": "0x01",
"debugHash": "0x87a9e46802cc57d7e0fb9a446c206f878184edfcb4fd65f1098cec0ee4e3cbb0"
"debugHash": "0xecd51e9ed1f6e86de3c6915f648aca3d19dccfffc1403012221d7f561b40b232"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0xf1c64c60a7378e7ff606ec7b0bc9478fab2aa8a6997716a0a2ae70b71fc1a7",
"key": "0x679e6657894cd6490e4b1e324e432b2e0503926425e9c2366008d96af1ae8107",
"value": "0x00b8a87b3ecd85957e4d838db426cc071d3eade358facecd1007d8b50f4e5ec4",
"key": "0x4ce1880bb013748d79562267a41a55146ab63a9486b80f32b76a9fd368ac383a",
"value": "0x008d79d6b57c0a4d31b0707a3cc09131825ddeda6fa6768fe92408e93b430364",
"debugDepth": "0x02",
"debugHash": "0xdab2d5f2c4f5655ed4c5999577fd91e1abaa12fa8f16ee2775d3ccbed7b1050a"
"debugHash": "0x5b211f8844398de4a853e07965b9230655532d4ea6702386992ac165399176c8"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0x6ee282483aa94e5bfad3a454bbce74252ace5047ab53510d048a6fbeabe246",
"key": "0xe9a7a5de344d9613bbd89869bec0ef5ecf27da5d25fb4798e87ac536093f0219",
"value": "0xa00f88b6abd0b009bd7588276c20ff7c022f5f262fa94b101af23e4568c71d77",
"key": "0x73e5dfe909c2e65e055c8817548f1606e3d3ea5264cef9e9b0d904c33b83fe86",
"value": "0xbe14ee00a056882b3d7a4d172af274bcdba7100b43dd5f4c1519c67151e9b042",
"debugDepth": "0x02",
"debugHash": "0xc3d0a14d3586743c0e46934eceeeb27fa318278d8fd3c73353bdf03228d4ffd0"
"debugHash": "0xb66189f5ba1b5921352c5ea8657cfcb2c3f5fe6b047af3ee9ac3a6dda3b26069"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0xe083b63a7e214b9332a0425184a1fff969a41b8b3d7ad722788560ec3ddb6e",
"key": "0x4ae89c3f9baf604b2a7577e2fb777234eceaef38a2e1d9c43f31a285860dd7ae",
"value": "0x2e941e13d3e10058b9a51c55a5dede81503bf251fe88c998e4773a7cd2444210",
"debugDepth": "0x02",
"debugHash": "0x9618fa5b387166dac0c5730072df1c6c049a3377409d3f73f12545af5de679cb"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0x48c88b69e4b28061ab6ef96e3deb32ee2baeef3d95d60182af3282c011a73c",
"key": "0xca91b36bc6f1dbc05de1c192d295a1ec0b63e5aa242e938500fbd5e22a1d79d7",
"value": "0x71c624a3514d58477cf2d7de820e86aaab76801bfb5efa33c0f0a8dc5c93540d",
"debugDepth": "0x02",
"debugHash": "0x3fa774bb0791206032f45e46bb3ddbe0469af43c3bcb34f50e967f691b631024"
"key": "0xe4ea4d108992ebb8cda227aa8ce91dd38ab66678c2f4e7ecb522619edfec83ca",
"value": "0xc34e633c1f9d2b04c457277b0da9c31098d8d81a02d12ae8194927b9d92be240",
"debugDepth": "0x01",
"debugHash": "0x9a3c86ac04cff263de7b4ef056c6b6e74903a359f64c284f98b82a8a5bd551e7"
},
{
"nodeType": "0x00",
"mask": "0x0204",
"mask": "0x0042",
"debugDepth": "0x01",
"debugHash": "0xdd5c358287de72f92177c363b4168138c8c1065876b9ec86edfaaf7fab52a29e"
"debugHash": "0x770756b645c662e497e5f0dc240b5baa9ab9459c87b0f09a1547f1f377257e56"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3E",
"nibbles": "0x6cafca256c143fc834bdaaa2bef8ba11524017ef21a5f6f14627fe358c0199",
"key": "0x2d8f35e61403a3cdb3a500ecc8ba7f38ed131bf9332e489acfbea7a526ed2998",
"value": "0x55dfa122dcb9ec9a355dccd5ad980eef647997f0c8d8416b3ad3a5c1f73aeee8",
"key": "0x6c25538cacf9f7df86f7ed93eac5a56df604f520c5354e04b849a754e92d3406",
"value": "0x0111bded60a83c16f8c75728ae8ea949a823feb9a2f509ec77a454477e550cbe",
"debugDepth": "0x02",
"debugHash": "0xd92bc164e7a3cf5706b86f69234939490c3380a2fba47fd40c806c49bf196c2a"
"debugHash": "0xb0e2c050a871f02b05990890fc9c713f67dcad76bde574d9a212e0f884345bb0"
},
{
"nodeType": "0x02",
"key": "0x850a0fde14f360af8a6599f99ccb2d5c6609ef848db2d7caca60476a4b5d476c",
"value": "0xb8c5474632b02c967c98fbc7b96d32c6afa3ea67228c7e6873e79916f0150f8c",
"debugDepth": "0x02",
"debugHash": "0xff4a54e6393b0ebb761138933dd551ad7367cc5d4254dc1742fe47da9db33d6d"
},
{
"nodeType": "0x00",
"mask": "0x2800",
"mask": "0x2100",
"debugDepth": "0x01",
"debugHash": "0x44bbc4a59fe05c72c24c7f978a388df249933d82c21d10e2ba3a881985f058d0"
},
{
"nodeType": "0x02",
"key": "0x7b3ad2728d8167702b0975e32b881cbbae7f5f8cb2c384372bcb218f400bf34b",
"value": "0x25e6f3859659b65fe4e110e41ccc704aa9562b0e0ec8c11ebf0b2c9de1e4b558",
"debugDepth": "0x02",
"debugHash": "0xea45093605710f0f3caecfbccf866604b6f9f4d4b6aff15401a81b3e8028d81e"
"debugHash": "0x6cb83a539fe400b0c89105e150dfe86bd5363e37456d02d64ba1f46122f295ff"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3D",
"nibbles": "0x62fcb48dad8fde60aa65c56fcde7f42d29ab0f26ffc65d6ebafce1a599d230",
"key": "0x39d9e036e274a15b9b3995e5abeaacff6a16ecc6a7cdac267bdd68ff30f4fe92",
"value": "0x29281a7408424d86a1d03d34944c41c7119568957bb83368e4943b19da821639",
"debugDepth": "0x03",
"debugHash": "0x3a372e5dcca1838848d69daae87e0e600b0ee93d91e3353aaac5cca660b4ea8f"
"key": "0xa9e36fa3f11cad78f92146effddc9983175781527abad56821ba325a9b07ec8f",
"value": "0x93dabe158e5d4de4c752cee95e20bcf896bd9e6e94a41f27277124c3b051e9b0",
"debugDepth": "0x02",
"debugHash": "0x70eb6ee011384f47bb370a3808cf679840fb804358b36b112d861e3d7f607a16"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3D",
"nibbles": "0x2c77fe45326219bc001b2289094ff91cf31b54cd094e088724ae86ec422710",
"key": "0x86c484bd02cd510673437bad7e1311476357cf79c22aa39940aa346bbe422c82",
"value": "0x9cff6938b49d23ad4aafcc1287a1dc4b92a4ae6d8b2a19e2eb2dbf69cb832c6f",
"debugDepth": "0x03",
"debugHash": "0xc8453e3fedf4a978147c46c3cf79e948578c65d5cfc8c383bfd961c6c406537b"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3F",
"nibbles": "0x85a7bf6131d98e5ff192f2de020362355d25eca26ad7cd0a102a2d0b75e539f0",
"key": "0xeb1447a26ff7a6774c0829023d035a00c5692a5a3f2674b5fdcb8cf7dff1f076",
"value": "0x7f66777ee81441a2e40f8f63bbdce7212efea7e71c0a1822029cf242dd76a83c",
"key": "0xa40b51651e9723b9a7c912b96e210b49534188f35d05942aabd87e2b04f337d7",
"value": "0xa293648270a4e3b87140a279d8d169b0cc49b27596a8fff90bfa38a6492f1977",
"debugDepth": "0x01",
"debugHash": "0x5506f096d6aad311f63c3859ca99914add436af18b5d8548fdf71d5f10634eb5"
"debugHash": "0x12248a11dd27983addce5267b17d6ef210d78b232a53a3ff84d842c3c7446a28"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3F",
"nibbles": "0xc03a5a73bf46960cf0faf50744a498bb3f859030474126168938a6a34accb690",
"key": "0x5d3d053e01934e396430f5acbbc02a830386535c0a9bd703c8af6433b31c66ba",
"value": "0x3f7cd3b23789334d059c04e73dba087e308df6290b027d6362975e70383da845",
"key": "0x69d4da4813c2c4f421a6e86f34989a1c5792b271d74b18e474678054b3c5d410",
"value": "0xd73141b5219ced97e71cd5f09e603439b83358d42e1d0d13054e96fb898b897a",
"debugDepth": "0x01",
"debugHash": "0x4bf8c9b2c727abc65fa1c7da36af8f729ef3724996a4c047fdbbe989fdc84cae"
"debugHash": "0xb34a23b3999eff09e70284480f09fe7821829f734300577d8580ec5a38f8afd6"
},
{
"nodeType": "0x00",
"mask": "0x8004",
"debugDepth": "0x01",
"debugHash": "0x3e7b136950036ffd956a5aa800861e8578c505bfae051505637ea55959b4dec6"
},
{
"nodeType": "0x02",
"nibblesLen": "0x3F",
"nibbles": "0xa8b7f66172e2fb3a7280af6fd79a568396ba20ceb096c7ccd6cde239f00ffa50",
"key": "0x4eeae1d7c640f79f8eb64db23114e1b02295937597216e317016a16066f0a7ae",
"value": "0x20dff778776c5a927feb12c2fdb789fc1e2e61059cf84cdec2d39c83858892fe",
"key": "0xcf4a5c8979d764e5cb47226dd8fe5971a13a97e84dc15f5151dabcb132f29f41",
"value": "0x228d8126026eec55f79ef977ec11ba5bb2c8afc68c589c71d989086fe7f39013",
"debugDepth": "0x02",
"debugHash": "0xc41a210065dfc6c2166a0d3a5a1f4300c6c6c01820b66a1ad143401fb3d41eb6"
},
{
"nodeType": "0x02",
"key": "0x1eb5b1d559ad696037a8b6254927200ffafb4f21e55f23470844bf580a8f6c10",
"value": "0x077390e527bedacc743328b2d57a5e04401a94ab7bb671cbc3e1d00d33e56ef2",
"debugDepth": "0x02",
"debugHash": "0x08dfaeea00282b2a7ec8bd615fba98aaa789a6114fc0d129720215b1c3408667"
},
{
"nodeType": "0x02",
"key": "0x23dc4eb4f09b99fc8a22ec960d5de31f2a9144e48046201ead186a60189ca4ac",
"value": "0x3644f85fa6f69f31236d3f57a9eb33c9b6215f3599c3ab765f7e5885660cbb12",
"debugDepth": "0x01",
"debugHash": "0xd25c39394a76913e380c010e4816b6fa1442e27d7323de9b5388bbc538b7b203"
"debugHash": "0x9216bc6261f0cf48198c006164f9e5a0a05032e8e658f506ce64b006d02e2331"
}
],
"debugDepth": "0x00",
"debugHash": "0x1339b5d780ff5c4713b6a6d38faf4448cf5afd4b616ffe3c88d15f38d2c575ac"
"debugHash": "0x4b7082248440f9d040a2f7f55a4177c4f25a70f671aa0cb371b7bf189cc4fc68"
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -142,66 +142,75 @@ proc writeHashNode(wb: var WitnessBuilder, node: openArray[byte], name: string)
proc getBranchRecurse(wb: var WitnessBuilder, z: var StackElem)
proc writeAccountNode(wb: var WitnessBuilder, kd: KeyData, acc: Account, nibbles: NibblesSeq, node: openArray[byte], depth: int) =
proc writeByteCode(wb: var WitnessBuilder, kd: KeyData, acc: Account) =
if not kd.codeTouched:
# the account have code but not touched by the EVM
# in current block execution
wb.writeByte(CodeUntouched, "codeType")
let code = get(wb.db, contractHashKey(acc.codeHash).toOpenArray)
if wfEIP170 in wb.flags and code.len > EIP170_CODE_SIZE_LIMIT:
raise newException(ContractCodeError, "code len exceed EIP170 code size limit")
wb.writeU32(code.len, "codeLen")
wb.writeHashNode(acc.codeHash.data, "codeHash")
# no need to write 'code' here
return
wb.writeByte(CodeTouched, "codeType")
if acc.codeHash == blankStringHash:
# no code
wb.writeU32(0'u32, "codeLen")
return
# the account have code and the EVM use it
let code = get(wb.db, contractHashKey(acc.codeHash).toOpenArray)
if wfEIP170 in wb.flags and code.len > EIP170_CODE_SIZE_LIMIT:
raise newException(ContractCodeError, "code len exceed EIP170 code size limit")
wb.writeU32(code.len, "codeLen")
wb.write(code, "code")
proc writeStorage(wb: var WitnessBuilder, kd: KeyData, acc: Account) =
wb.pushArray("storage")
if kd.storageKeys.isNil:
# the account have storage but not touched by EVM
wb.writeHashNode(acc.storageRoot.data)
elif acc.storageRoot != emptyRlpHash:
# the account have storage and the EVM use it
var zz = StackElem(
node: wb.db.get(acc.storageRoot.data),
parentGroup: kd.storageKeys.initGroup(),
keys: kd.storageKeys,
depth: 0, # set depth to zero
storageMode: true # switch to storage mode
)
getBranchRecurse(wb, zz)
else:
# no storage at all
wb.writeHashNode(emptyRlpHash.data)
wb.pop()
proc writeAccountNode(wb: var WitnessBuilder, kd: KeyData, acc: Account, node: openArray[byte], depth: int) =
wb.addObject()
wb.writeByte(AccountNodeType, "nodeType")
doAssert(nibbles.len == 64 - depth)
var accountType = if acc.codeHash == blankStringHash and acc.storageRoot == emptyRlpHash: SimpleAccountType
else: ExtendedAccountType
if not kd.codeTouched:
accountType = CodeUntouched
wb.writeByte(accountType, "accountType")
wb.writeNibbles(nibbles)
wb.write(kd.address, "address")
wb.write(acc.balance.toBytesBE, "balance")
wb.write(acc.nonce.u256.toBytesBE, "nonce")
if accountType != SimpleAccountType:
if not kd.codeTouched:
wb.writeHashNode(acc.codeHash.data, "codeHash")
let code = get(wb.db, contractHashKey(acc.codeHash).toOpenArray)
if wfEIP170 in wb.flags and code.len > EIP170_CODE_SIZE_LIMIT:
raise newException(ContractCodeError, "code len exceed EIP170 code size limit")
wb.writeU32(code.len, "codeLen")
elif acc.codeHash != blankStringHash:
let code = get(wb.db, contractHashKey(acc.codeHash).toOpenArray)
if wfEIP170 in wb.flags and code.len > EIP170_CODE_SIZE_LIMIT:
raise newException(ContractCodeError, "code len exceed EIP170 code size limit")
wb.writeU32(code.len, "codeLen")
wb.write(code, "code")
else:
wb.writeU32(0'u32, "codeLen")
wb.pushArray("storage")
if kd.storageKeys.isNil:
wb.writeHashNode(acc.storageRoot.data)
elif acc.storageRoot != emptyRlpHash:
var zz = StackElem(
node: wb.db.get(acc.storageRoot.data),
parentGroup: kd.storageKeys.initGroup(),
keys: kd.storageKeys,
depth: 0, # reset depth
storageMode: true # switch to storage mode
)
getBranchRecurse(wb, zz)
else:
wb.writeHashNode(emptyRlpHash.data)
wb.pop()
wb.writeByteCode(kd, acc)
wb.writeStorage(kd, acc)
wb.writeByte(depth, "debugDepth")
wb.write(keccak(node).data, "debugHash")
wb.pop()
proc writeAccountStorageLeafNode(wb: var WitnessBuilder, key: openArray[byte], val: UInt256, nibbles: NibblesSeq, node: openArray[byte], depth: int) =
doAssert(nibbles.len == 64 - depth)
proc writeAccountStorageLeafNode(wb: var WitnessBuilder, key: openArray[byte], val: UInt256, node: openArray[byte], depth: int) =
wb.addObject()
wb.writeByte(StorageLeafNodeType, "nodeType")
wb.writeNibbles(nibbles)
wb.write(key, "key")
wb.write(val.toBytesBE, "value")
wb.writeByte(depth, "debugDepth")
@ -240,10 +249,10 @@ proc getBranchRecurse(wb: var WitnessBuilder, z: var StackElem) =
let kd = z.keys.visitMatch(mg, z.depth, k)
if z.storageMode:
doAssert(kd.storageMode)
writeAccountStorageLeafNode(wb, kd.storageSlot, value.toBytes.decode(UInt256), k, z.node, z.depth)
writeAccountStorageLeafNode(wb, kd.storageSlot, value.toBytes.decode(UInt256), z.node, z.depth)
else:
doAssert(not kd.storageMode)
writeAccountNode(wb, kd, value.toBytes.decode(Account), k, z.node, z.depth)
writeAccountNode(wb, kd, value.toBytes.decode(Account), z.node, z.depth)
of 17:
let branchMask = rlpListToBitmask(nodeRlp)

View File

@ -1,7 +1,7 @@
import
unittest2, os, json, strutils,
eth/[common, rlp], eth/trie/[hexary, db, trie_defs],
stew/byteutils, faststreams/input_stream,
stew/byteutils, faststreams/inputs,
../tests/[test_helpers, test_config],
../nimbus/db/accounts_cache, ./witness_types,
../stateless/[witness_from_tree, tree_from_witness],

View File

@ -37,11 +37,25 @@ proc processStorage(t: var Tester, tree: JsonNode) =
for x in tree:
t.processNode(x, true)
proc processByteCode(t: var Tester, x: JsonNode) =
let codeType = x["codeType"].getStr()
t.write(codeType)
case codeType
of "0x00":
let codeLen = x["codeLen"].getStr()
t.write(codeLen)
if codeLen != "0x00000000":
t.write(x["code"])
of "0x01":
t.write(x["codeLen"])
t.write("0x03")
t.processHashNode(x["codeHash"])
else:
doAssert(false, "wrong bytecode type")
proc processAccountNode(t: var Tester, x: JsonNode) =
let accountType = x["accountType"].getStr()
t.write(accountType)
t.write(x["nibbles"])
t.write(x["address"])
t.write(x["balance"])
t.write(x["nonce"])
@ -50,21 +64,12 @@ proc processAccountNode(t: var Tester, x: JsonNode) =
of "0x00":
discard
of "0x01":
let codeLen = x["codeLen"].getStr()
t.write(codeLen)
if codeLen != "0x00000000":
t.write(x["code"])
t.processStorage(x["storage"])
of "0x02":
t.write("0x03")
t.processHashNode(x["codeHash"])
t.write(x["codeLen"])
t.processByteCode(x)
t.processStorage(x["storage"])
else:
doAssert(false, "wrong account type")
proc processStorageLeafNode(t: var Tester, x: JsonNode) =
t.write(x["nibbles"])
t.write(x["key"])
t.write(x["value"])

View File

@ -1,7 +1,7 @@
import
randutils, random, unittest, stew/byteutils,
eth/[common, rlp], eth/trie/[hexary, db, trie_defs, nibbles],
faststreams/input_stream, nimcrypto/sysrand,
faststreams/inputs, nimcrypto/sysrand,
../stateless/[witness_from_tree, tree_from_witness],
../nimbus/db/storage_types, ./witness_types, ./multi_keys

View File

@ -1,6 +1,6 @@
import
typetraits,
faststreams/input_stream, eth/[common, rlp], stint, stew/endians2,
faststreams/inputs, eth/[common, rlp], stint, stew/endians2,
eth/trie/[db, trie_defs], nimcrypto/[keccak, hash],
./witness_types, stew/byteutils, ../nimbus/constants
@ -243,27 +243,41 @@ proc branchNode(t: var TreeBuilder, depth: int, storageMode: bool): NodeKey =
debugEcho "DEPTH: ", depth
debugEcho "result: ", result.data.toHex, " vs. ", hash.data.toHex
func hexPrefix(r: var RlpWriter, x: openArray[byte], nibblesLen: int, isLeaf: static[bool] = false) =
func hexPrefixExtension(r: var RlpWriter, x: openArray[byte], nibblesLen: int) =
# extension hexPrefix
doAssert(nibblesLen >= 1 and nibblesLen <= 64)
var bytes: array[33, byte]
let last = nibblesLen div 2
if (nibblesLen mod 2) == 0: # even
when isLeaf:
bytes[0] = 0b0010_0000.byte
else:
bytes[0] = 0.byte
bytes[0] = 0.byte
var i = 1
for y in x:
bytes[i] = y
inc i
else: # odd
when isLeaf:
bytes[0] = 0b0011_0000.byte or (x[0] shr 4)
else:
bytes[0] = 0b0001_0000.byte or (x[0] shr 4)
var last = nibblesLen div 2
bytes[0] = 0b0001_0000.byte or (x[0] shr 4)
for i in 1..last:
bytes[i] = (x[i-1] shl 4) or (x[i] shr 4)
r.append toOpenArray(bytes, 0, last)
func hexPrefixLeaf(r: var RlpWriter, x: openArray[byte], depth: int) =
# leaf hexPrefix
doAssert(depth >= 0 and depth <= 64)
let nibblesLen = 64 - depth
var bytes: array[33, byte]
var start = depth div 2
if (nibblesLen mod 2) == 0: # even
bytes[0] = 0b0010_0000.byte
else: # odd
bytes[0] = 0b0011_0000.byte or (x[start] and 0x0F)
inc start
var i = 1
for z in start..31:
bytes[i] = x[z]
inc i
r.append toOpenArray(bytes, 0, nibblesLen div 2)
proc extensionNode(t: var TreeBuilder, depth: int, storageMode: bool): NodeKey =
@ -273,7 +287,7 @@ proc extensionNode(t: var TreeBuilder, depth: int, storageMode: bool): NodeKey =
var r = initRlpList(2)
let pathLen = nibblesLen div 2 + nibblesLen mod 2
safeReadBytes(t, pathLen):
r.hexPrefix(t.read(pathLen), nibblesLen)
r.hexPrefixExtension(t.read(pathLen), nibblesLen)
when defined(debugDepth):
let readDepth = t.safeReadByte().int
@ -298,11 +312,13 @@ proc extensionNode(t: var TreeBuilder, depth: int, storageMode: bool): NodeKey =
doAssert(result == hash, "EXT HASH DIFF " & result.data.toHex & " vs. " & hash.data.toHex)
func toAddress(x: openArray[byte]): EthAddress =
result[0..19] = result[0..19]
result[0..19] = x[0..19]
proc readAddress(t: var TreeBuilder) =
proc readAddress(t: var TreeBuilder): Hash256 =
safeReadBytes(t, 20):
t.keys.add AccountAndSlots(address: toAddress(t.read(20)))
let address = toAddress(t.read(20))
result = keccak(address)
t.keys.add AccountAndSlots(address: address)
proc readCodeLen(t: var TreeBuilder): int =
let codeLen = t.safeReadU32()
@ -317,6 +333,23 @@ proc readHashNode(t: var TreeBuilder): NodeKey =
raise newException(ParsingError, "hash node expected but got " & $nodeType)
result = t.hashNode()
proc readByteCode(t: var TreeBuilder, acc: var Account) =
let bytecodeType = safeReadEnum(t, BytecodeType)
case bytecodeType
of CodeTouched:
let codeLen = t.readCodeLen()
safeReadBytes(t, codeLen):
acc.codeHash = t.writeCode(t.read(codeLen))
of CodeUntouched:
# readCodeLen already save the codeLen
# along with recovered address
# we could discard it here
discard t.readCodeLen()
let codeHash = t.readHashNode()
doAssert(codeHash.usedBytes == 32)
acc.codeHash.data = codeHash.data
proc accountNode(t: var TreeBuilder, depth: int): NodeKey =
assert(depth < 65)
@ -330,14 +363,10 @@ proc accountNode(t: var TreeBuilder, depth: int): NodeKey =
doAssert(readDepth == depth, "accountNode " & $readDepth & " vs. " & $depth)
let accountType = safeReadEnum(t, AccountType)
let nibblesLen = 64 - depth
let addressHash = t.readAddress()
var r = initRlpList(2)
let pathLen = nibblesLen div 2 + nibblesLen mod 2
safeReadBytes(t, pathLen):
r.hexPrefix(t.read(pathLen), nibblesLen, true)
t.readAddress()
r.hexPrefixLeaf(addressHash.data, depth)
safeReadBytes(t, 64):
var acc = Account(
@ -351,28 +380,13 @@ proc accountNode(t: var TreeBuilder, depth: int): NodeKey =
acc.codeHash = blankStringHash
acc.storageRoot = emptyRlpHash
of ExtendedAccountType:
let codeLen = t.readCodeLen()
safeReadBytes(t, codeLen):
acc.codeHash = t.writeCode(t.read(codeLen))
t.readByteCode(acc)
# switch to account storage parsing mode
# and reset the depth
let storageRoot = t.treeNode(0, storageMode = true)
doAssert(storageRoot.usedBytes == 32)
acc.storageRoot.data = storageRoot.data
of CodeUntouched:
let codeHash = t.readHashNode()
doAssert(codeHash.usedBytes == 32)
acc.codeHash.data = codeHash.data
# readCodeLen already save the codeLen
# along with recovered address
# we could discard it here
discard t.readCodeLen()
let storageRoot = t.treeNode(0, storageMode = true)
doAssert(storageRoot.usedBytes == 32)
acc.storageRoot.data = storageRoot.data
r.append rlp.encode(acc)
@ -381,6 +395,9 @@ proc accountNode(t: var TreeBuilder, depth: int): NodeKey =
when defined(debugHash):
if result != nodeKey:
debugEcho "Address: ", t.keys[^1].address.toHex
debugEcho "addressHash: ", addressHash.data.toHex
debugEcho "depth: ", depth
debugEcho "result.usedBytes: ", result.usedBytes
debugEcho "nodeKey.usedBytes: ", nodeKey.usedBytes
var rlpa = rlpFromBytes(node)
@ -395,11 +412,13 @@ proc accountNode(t: var TreeBuilder, depth: int): NodeKey =
doAssert(result == nodeKey, "account node parsing error")
func toStorageSlot(x: openArray[byte]): StorageSlot =
result[0..31] = result[0..31]
result[0..31] = x[0..31]
proc readStorageSlot(t: var TreeBuilder) =
proc readStorageSlot(t: var TreeBuilder): Hash256 =
safeReadBytes(t, 32):
t.keys[^1].slots.add toStorageSlot(t.read(32))
let slot = toStorageSlot(t.read(32))
result = keccak(slot)
t.keys[^1].slots.add slot
proc accountStorageLeafNode(t: var TreeBuilder, depth: int): NodeKey =
assert(depth < 65)
@ -413,13 +432,9 @@ proc accountStorageLeafNode(t: var TreeBuilder, depth: int): NodeKey =
let readDepth = t.safeReadByte().int
doAssert(readDepth == depth, "accountNode " & $readDepth & " vs. " & $depth)
let nibblesLen = 64 - depth
var r = initRlpList(2)
let pathLen = nibblesLen div 2 + nibblesLen mod 2
safeReadBytes(t, pathLen):
r.hexPrefix(t.read(pathLen), nibblesLen, true)
t.readStorageSlot()
let slotHash = t.readStorageSlot()
r.hexPrefixLeaf(slotHash.data, depth)
safeReadBytes(t, 32):
let val = UInt256.fromBytesBE(t.read(32))

View File

@ -2,7 +2,7 @@ import
stew/[byteutils, endians2],
nimcrypto/[keccak, hash], eth/[common, rlp],
eth/trie/[trie_defs, nibbles, db],
faststreams/output_stream,
faststreams/outputs,
./witness_types, ../nimbus/constants,
../nimbus/db/storage_types, ./multi_keys
@ -52,7 +52,7 @@ proc rlpListToBitmask(r: var Rlp): uint =
r.position = 0
template write(wb: var WitnessBuilder, x: untyped) =
wb.output.append(x)
wb.output.write(x)
proc writeU32Impl(wb: var WitnessBuilder, x: uint32) =
wb.write(toBytesBE(x))
@ -120,7 +120,51 @@ proc writeHashNode(wb: var WitnessBuilder, node: openArray[byte]) =
proc getBranchRecurse(wb: var WitnessBuilder, z: var StackElem) {.raises: [ContractCodeError, IOError, Defect, CatchableError, Exception].}
proc writeAccountNode(wb: var WitnessBuilder, kd: KeyData, acc: Account, nibbles: NibblesSeq,
proc writeByteCode(wb: var WitnessBuilder, kd: KeyData, acc: Account) =
if not kd.codeTouched:
# the account have code but not touched by the EVM
# in current block execution
wb.writeByte(CodeUntouched)
let code = get(wb.db, contractHashKey(acc.codeHash).toOpenArray)
if wfEIP170 in wb.flags and code.len > EIP170_CODE_SIZE_LIMIT:
raise newException(ContractCodeError, "code len exceed EIP170 code size limit")
wb.writeU32(code.len)
wb.writeHashNode(acc.codeHash.data)
# no need to write 'code' here
return
wb.writeByte(CodeTouched)
if acc.codeHash == blankStringHash:
# no code
wb.writeU32(0'u32)
return
# the account have code and the EVM use it
let code = get(wb.db, contractHashKey(acc.codeHash).toOpenArray)
if wfEIP170 in wb.flags and code.len > EIP170_CODE_SIZE_LIMIT:
raise newException(ContractCodeError, "code len exceed EIP170 code size limit")
wb.writeU32(code.len)
wb.write(code)
proc writeStorage(wb: var WitnessBuilder, kd: KeyData, acc: Account) =
if kd.storageKeys.isNil:
# the account have storage but not touched by EVM
wb.writeHashNode(acc.storageRoot.data)
elif acc.storageRoot != emptyRlpHash:
# the account have storage and the EVM use it
var zz = StackElem(
node: wb.db.get(acc.storageRoot.data),
parentGroup: kd.storageKeys.initGroup(),
keys: kd.storageKeys,
depth: 0, # set depth to zero
storageMode: true # switch to storage mode
)
getBranchRecurse(wb, zz)
else:
# no storage at all
wb.writeHashNode(emptyRlpHash.data)
proc writeAccountNode(wb: var WitnessBuilder, kd: KeyData, acc: Account,
node: openArray[byte], depth: int) {.raises: [ContractCodeError, IOError, Defect, CatchableError, Exception].} =
# write type
@ -133,66 +177,22 @@ proc writeAccountNode(wb: var WitnessBuilder, kd: KeyData, acc: Account, nibbles
when defined(debugDepth):
wb.writeByte(depth)
doAssert(nibbles.len == 64 - depth)
var accountType = if acc.codeHash == blankStringHash and acc.storageRoot == emptyRlpHash: SimpleAccountType
else: ExtendedAccountType
if not kd.codeTouched:
accountType = CodeUntouched
wb.writeByte(accountType)
wb.writeNibbles(nibbles, false)
wb.write(kd.address)
wb.write(acc.balance.toBytesBE)
wb.write(acc.nonce.u256.toBytesBE)
if accountType != SimpleAccountType:
if not kd.codeTouched:
# the account have code but not touched by the EVM
# in current block execution
wb.writeHashNode(acc.codeHash.data)
let code = get(wb.db, contractHashKey(acc.codeHash).toOpenArray)
if wfEIP170 in wb.flags and code.len > EIP170_CODE_SIZE_LIMIT:
raise newException(ContractCodeError, "code len exceed EIP170 code size limit")
wb.writeU32(code.len)
# no code here
elif acc.codeHash != blankStringHash:
# the account have code and the EVM use it
let code = get(wb.db, contractHashKey(acc.codeHash).toOpenArray)
if wfEIP170 in wb.flags and code.len > EIP170_CODE_SIZE_LIMIT:
raise newException(ContractCodeError, "code len exceed EIP170 code size limit")
wb.writeU32(code.len)
wb.write(code)
else:
# no code
wb.writeU32(0'u32)
wb.writeByteCode(kd, acc)
wb.writeStorage(kd, acc)
if kd.storageKeys.isNil:
# the account have storage but not touched by EVM
wb.writeHashNode(acc.storageRoot.data)
elif acc.storageRoot != emptyRlpHash:
# the account have storage and the EVM use it
var zz = StackElem(
node: wb.db.get(acc.storageRoot.data),
parentGroup: kd.storageKeys.initGroup(),
keys: kd.storageKeys,
depth: 0, # set depth to zero
storageMode: true # switch to storage mode
)
getBranchRecurse(wb, zz)
else:
# no storage at all
wb.writeHashNode(emptyRlpHash.data)
#0x00 address:<Address> balance:<Bytes32> nonce:<Bytes32>
#0x01 address:<Address> balance:<Bytes32> nonce:<Bytes32> bytecode:<Bytecode> storage:<Tree_Node(0,1)>
# rule 0x01 and 0x02 can be optimized again to save some bytes
# nibbles can be removed to save space, it can be constructed by the parser
# using depth dan hash of address with `nibblesLen = 64-depth` (right side bytes)
#0x00 pathnibbles:<Nibbles(64-d)> address:<Address> balance:<Bytes32> nonce:<Bytes32>
#0x01 pathnibbles:<Nibbles(64-d)> address:<Address> balance:<Bytes32> nonce:<Bytes32> bytecode:<Bytecode> storage:<Tree_Node(0,1)>
#0x02 pathnibbles:<Nibbles(64-d)> address:<Address> balance:<Bytes32> nonce:<Bytes32> codehash:<Bytes32> codesize:<U32> storage:<Account_Storage_Tree_Node(0)>
proc writeAccountStorageLeafNode(wb: var WitnessBuilder, key: openArray[byte], val: UInt256, nibbles: NibblesSeq, node: openArray[byte], depth: int) =
proc writeAccountStorageLeafNode(wb: var WitnessBuilder, key: openArray[byte], val: UInt256, node: openArray[byte], depth: int) =
wb.writeByte(StorageLeafNodeType)
when defined(debugHash):
@ -202,15 +202,10 @@ proc writeAccountStorageLeafNode(wb: var WitnessBuilder, key: openArray[byte], v
when defined(debugDepth):
wb.writeByte(depth)
doAssert(nibbles.len == 64 - depth)
# nibbles can be removed to save space, it can be constructed by the parser
# using depth dan hash of key with `nibblesLen = 64-depth` (right side bytes)
wb.writeNibbles(nibbles, false)
wb.write(key)
wb.write(val.toBytesBE)
#<Storage_Leaf_Node(d<65)> := pathnibbles:<Nibbles(64-d))> key:<Bytes32> val:<Bytes32>
#<Storage_Leaf_Node(d<65)> := key:<Bytes32> val:<Bytes32>
proc getBranchRecurse(wb: var WitnessBuilder, z: var StackElem) =
if z.node.len == 0: return
@ -244,10 +239,10 @@ proc getBranchRecurse(wb: var WitnessBuilder, z: var StackElem) =
let kd = z.keys.visitMatch(mg, z.depth, k)
if z.storageMode:
doAssert(kd.storageMode)
writeAccountStorageLeafNode(wb, kd.storageSlot, value.toBytes.decode(UInt256), k, z.node, z.depth)
writeAccountStorageLeafNode(wb, kd.storageSlot, value.toBytes.decode(UInt256), z.node, z.depth)
else:
doAssert(not kd.storageMode)
writeAccountNode(wb, kd, value.toBytes.decode(Account), k, z.node, z.depth)
writeAccountNode(wb, kd, value.toBytes.decode(Account), z.node, z.depth)
of 17:
let branchMask = rlpListToBitmask(nodeRlp)

View File

@ -10,6 +10,9 @@ type
AccountType* = enum
SimpleAccountType
ExtendedAccountType
BytecodeType* = enum
CodeTouched
CodeUntouched
WitnessFlag* = enum
@ -50,4 +53,3 @@ iterator nonEmpty*(branchMask: uint): int =
# we skip an empty elem
continue
yield i