From ad7d0f5718403ae05ed3e417ca76b9c9eee1903f Mon Sep 17 00:00:00 2001 From: laisolizq Date: Mon, 10 Oct 2022 15:28:36 +0200 Subject: [PATCH 01/40] Fix check EIP3607 --- src/processor.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/processor.js b/src/processor.js index 2dc3e500..6c7bb4b7 100644 --- a/src/processor.js +++ b/src/processor.js @@ -328,6 +328,13 @@ module.exports = class Processor { continue; } + const fromHashBytecode = await stateUtils.getContractHashBytecode(currenTx.from, this.smt, this.currentStateRoot); + if (fromHashBytecode !== Constants.BYTECODE_EMPTY) { + currentDecodedTx.isInvalid = true; + currentDecodedTx.reason = 'TX INVALID: EIP3607 Do not allow transactions for which tx.sender has any code deployed'; + continue; + } + // Run tx in the EVM const evmTx = Transaction.fromTxData({ nonce: currenTx.nonce, From c209fc51d50af20a95a93cba0616792993bc392b Mon Sep 17 00:00:00 2001 From: Stephen D <81497928+eigmax@users.noreply.github.com> Date: Wed, 19 Oct 2022 16:08:09 +0800 Subject: [PATCH 02/40] Bump ffjavascript to 0.2.55 The toObject function is missed in 0.2.46. https://github.com/iden3/ffjavascript/blob/v0.2.46/src/f1field.js. Keep ffjavascript's version the same to 0.2.55 in zkevm-proverjs and commonjs. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f7e0385d..2a12acff 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@polygon-hermez/vm": "5.7.22", "ethereumjs-util": "^7.1.4", "ethers": "^5.5.4", - "ffjavascript": "^0.2.46", + "ffjavascript": "^0.2.55", "lodash": "^4.17.21" } } From 8d390137dcfbad64e8e0e089074f1bfaa1107f79 Mon Sep 17 00:00:00 2001 From: laisolizq Date: Tue, 25 Oct 2022 10:49:16 +0200 Subject: [PATCH 03/40] review fixes --- src/processor.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/processor.js b/src/processor.js index 6c7bb4b7..f7734b45 100644 --- a/src/processor.js +++ b/src/processor.js @@ -328,8 +328,8 @@ module.exports = class Processor { continue; } - const fromHashBytecode = await stateUtils.getContractHashBytecode(currenTx.from, this.smt, this.currentStateRoot); - if (fromHashBytecode !== Constants.BYTECODE_EMPTY) { + const bytecodeLength = await stateUtils.getContractBytecodeLength(currenTx.from, this.smt, this.currentStateRoot); + if (bytecodeLength > 0) { currentDecodedTx.isInvalid = true; currentDecodedTx.reason = 'TX INVALID: EIP3607 Do not allow transactions for which tx.sender has any code deployed'; continue; @@ -376,7 +376,7 @@ module.exports = class Processor { } else currentDecodedTx.reason = txResult.execResult.exceptionError; // UPDATE sender account adding the nonce and substracting the gas spended - const senderAcc = await this.vm.stateManager.getAccount(txResult.execResult.runState.caller); + const senderAcc = await this.vm.stateManager.getAccount(Address.fromString(currenTx.from)); this.updatedAccounts[currenTx.from] = senderAcc; // Update smt with touched accounts this.currentStateRoot = await stateUtils.setAccountState( From 7d69a0573bd1bd8c36fbc3a3c633b73752fbaba7 Mon Sep 17 00:00:00 2001 From: Ignasirv Date: Tue, 18 Oct 2022 23:14:47 +0200 Subject: [PATCH 04/40] Support legacy txs --- package.json | 2 +- src/processor-utils.js | 17 ++++++++++------- src/processor.js | 19 +++++++++++-------- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index f7e0385d..0bf0c52b 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@ethereumjs/block": "^3.6.2", "@ethereumjs/common": "^2.6.0", "@ethereumjs/tx": "^3.4.0", - "@polygon-hermez/vm": "5.7.22", + "@polygon-hermez/vm": "^5.7.23", "ethereumjs-util": "^7.1.4", "ethers": "^5.5.4", "ffjavascript": "^0.2.46", diff --git a/src/processor-utils.js b/src/processor-utils.js index 2d090497..9192bc6a 100644 --- a/src/processor-utils.js +++ b/src/processor-utils.js @@ -239,15 +239,18 @@ function decodeCustomRawTxProverMethod(encodedTransactions) { offset += decodedData.consumed; txDecoded.data = decodedData.result; - // chainID READ - const decodedChainID = decodeNextShortStringRLP(encodedTxBytes, offset); - offset += decodedChainID.consumed; - txDecoded.chainID = decodedChainID.result; + // Don't decode chainId if tx is legacy + if (txListLength + headerLength !== offset) { + // chainID READ + const decodedChainID = decodeNextShortStringRLP(encodedTxBytes, offset); + offset += decodedChainID.consumed; + txDecoded.chainID = decodedChainID.result; - if ((encodedTxBytes[offset] !== 0x80) || encodedTxBytes[offset + 1] !== 0x80) { - throw new Error('The last 2 values should be 0x8080'); + if ((encodedTxBytes[offset] !== 0x80) || encodedTxBytes[offset + 1] !== 0x80) { + throw new Error('The last 2 values should be 0x8080'); + } + offset += 2; } - offset += 2; if (txListLength + headerLength !== offset) { throw new Error('Invalid list length'); diff --git a/src/processor.js b/src/processor.js index f7734b45..18613fdb 100644 --- a/src/processor.js +++ b/src/processor.js @@ -75,6 +75,7 @@ module.exports = class Processor { this.vm = vm; this.evmSteps = []; this.updatedAccounts = {}; + this.isLegacyTx = false; } /** @@ -147,10 +148,11 @@ module.exports = class Processor { continue; } txDecoded.from = undefined; - txDecoded.chainID = Number(txDecoded.chainID); - // B: Valid chainID - if (txDecoded.chainID !== this.chainID) { + // B: Valid chainID if EIP-155 + this.isLegacyTx = typeof txDecoded.chainID === 'undefined'; + txDecoded.chainID = this.isLegacyTx ? txDecoded.chainID : Number(txDecoded.chainID); + if (!this.isLegacyTx && txDecoded.chainID !== this.chainID) { this.decodedTxs.push({ isInvalid: true, reason: 'TX INVALID: Chain ID does not match', tx: txDecoded }); continue; } @@ -327,6 +329,7 @@ module.exports = class Processor { currentDecodedTx.reason = 'TX INVALID: Not enough funds to pay total transaction cost'; continue; } + const v = this.isLegacyTx ? currenTx.v : Number(currenTx.v) - 27 + currenTx.chainID * 2 + 35; const bytecodeLength = await stateUtils.getContractBytecodeLength(currenTx.from, this.smt, this.currentStateRoot); if (bytecodeLength > 0) { @@ -343,7 +346,7 @@ module.exports = class Processor { to: currenTx.to, value: currenTx.value, data: currenTx.data, - v: Number(currenTx.v) - 27 + currenTx.chainID * 2 + 35, + v, r: currenTx.r, s: currenTx.s, }); @@ -454,8 +457,8 @@ module.exports = class Processor { const sto = await this.vm.stateManager.dumpStorage(addressInstance); const storage = {}; - const keys = Object.keys(sto).map((v) => `0x${v}`); - const values = Object.values(sto).map((v) => `0x${v}`); + const keys = Object.keys(sto).map((k) => `0x${k}`); + const values = Object.values(sto).map((k) => `0x${k}`); for (let k = 0; k < keys.length; k++) { storage[keys[k]] = ethers.utils.RLP.decode(values[k]); } @@ -478,8 +481,8 @@ module.exports = class Processor { if (Object.keys(sto).length > 0) { const keyDumpStorage = Scalar.add(Constants.DB_ADDRESS_STORAGE, Scalar.fromString(address, 16)); const storage = {}; - const keys = Object.keys(sto).map((v) => `0x${v}`); - const values = Object.values(sto).map((v) => `0x${v}`); + const keys = Object.keys(sto).map((k) => `0x${k}`); + const values = Object.values(sto).map((k) => `0x${k}`); for (let k = 0; k < keys.length; k++) { storage[keys[k]] = ethers.utils.RLP.decode(values[k]); } From c614417a462918dd1d447541eeb023724f660519 Mon Sep 17 00:00:00 2001 From: Ignasirv Date: Fri, 21 Oct 2022 14:19:15 +0200 Subject: [PATCH 05/40] Update selfdestruct --- .../test-vectors/selfdestruct/selfdestruct.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/helpers/test-vectors/selfdestruct/selfdestruct.json b/test/helpers/test-vectors/selfdestruct/selfdestruct.json index 48881ec9..aeccba76 100644 --- a/test/helpers/test-vectors/selfdestruct/selfdestruct.json +++ b/test/helpers/test-vectors/selfdestruct/selfdestruct.json @@ -90,7 +90,7 @@ "rawTx": "0xf86a02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880842b68b9c68207f4a0f5b684b995dd9549bb5fd2ed23d3b388f75f559b14110277b4ae7de5bd7775efa01be51078330d1ef03f0e4fe0271e8e2502b6e98c1f7664a5e2aeae3ab04156d4" } ], - "expectedNewRoot": "0x7715d21009b1b81e0f19b90c2490c05e4b15f6054d88741f8caf80cad9c50be2", + "expectedNewRoot": "0xe5c6a1c7b9db378130a4d989c74abfb51808371ff9f7b3750ec81b75b4a4d6b4", "expectedNewLeafs": { "0x0000000000000000000000000000000000000000": { "balance": "0", @@ -111,7 +111,7 @@ "bytecodeLength": 0 }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { - "balance": "100000116508000000000", + "balance": "100000140508000000000", "nonce": "1", "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -124,11 +124,11 @@ "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x075bcd15" }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 + "hashBytecode": "0xbbebd914926f549bcc798e9081a339e3745b9831b3c3906fb8bb2bcf2e05a160", + "bytecodeLength": 574 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { - "balance": "199999883491876543211", + "balance": "199999859491876543211", "nonce": "3", "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -145,7 +145,7 @@ "batchL2Data": "0xf84a80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4718da7ee00000000000000000000000000000000000000000000000000000000000000018203e880800f169b9405991a5f4a96f9d1d726e43ab9d42e1d0b4daac7ec9b4797dd39e9b724cf48c46cbc1924dd25adc6536ef259bedcd822979734ae347e01d715303ad01cee01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9884075bcd15845cfb28e78203e88080b22ac440612ebcd45672cfc7dcbbbe7cde784294e5076827b1812f9ea9eee2736c3c774150514808053972653f74bbeb33918dc74aa9182cee7993283b1faa541bea02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880842b68b9c68203e88080f5b684b995dd9549bb5fd2ed23d3b388f75f559b14110277b4ae7de5bd7775ef1be51078330d1ef03f0e4fe0271e8e2502b6e98c1f7664a5e2aeae3ab04156d41c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x13ebec4ee2eb93d3431ecbfeb16399f4e6d26d17bf134148f3ed4b827ca46b82", + "inputHash": "0x2b71e21eac7f8300986f816e6d683df0df9aa8413ced21fae79d7566cd7b010f", "batchHashData": "0x1f9553beb9fe9b03b2e19a00c41dfd2d9b711afbc9c05d29ab00d430542d7d12", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 From 0160b61b102bfd223074920ee8a5e041dd47d537 Mon Sep 17 00:00:00 2001 From: Ignasirv Date: Thu, 27 Oct 2022 11:19:39 +0200 Subject: [PATCH 06/40] Remove unused selfdestruct checks --- src/processor.js | 33 ------------------- src/state-utils.js | 21 ++++-------- .../block-info/block-info-batches.json | 10 +++--- 3 files changed, 12 insertions(+), 52 deletions(-) diff --git a/src/processor.js b/src/processor.js index 18613fdb..d5aab93b 100644 --- a/src/processor.js +++ b/src/processor.js @@ -445,7 +445,6 @@ module.exports = class Processor { this.smt, this.currentStateRoot, smCode.toString('hex'), - false, ); // Set bytecode at db when smart contract is called const hashedBytecode = await smtUtils.hashContractBytecode(smCode.toString('hex')); @@ -475,38 +474,6 @@ module.exports = class Processor { storage, ); await this.db.setValue(keyDumpStorage, storage); - } else { - // handle self-destruct - const sto = await this.vm.stateManager.dumpStorage(addressInstance); - if (Object.keys(sto).length > 0) { - const keyDumpStorage = Scalar.add(Constants.DB_ADDRESS_STORAGE, Scalar.fromString(address, 16)); - const storage = {}; - const keys = Object.keys(sto).map((k) => `0x${k}`); - const values = Object.values(sto).map((k) => `0x${k}`); - for (let k = 0; k < keys.length; k++) { - storage[keys[k]] = ethers.utils.RLP.decode(values[k]); - } - this.currentStateRoot = await stateUtils.setContractStorage( - address, - this.smt, - this.currentStateRoot, - storage, - ); - await this.db.setValue(keyDumpStorage, storage); - } - - const oldHashBytecode = await stateUtils.getContractHashBytecode(address, this.smt, this.currentStateRoot); - - if (oldHashBytecode !== Constants.BYTECODE_EMPTY) { - // delete leaf bytecode - this.currentStateRoot = await stateUtils.setContractBytecode( - address, - this.smt, - this.currentStateRoot, - '0x', - true, - ); - } } } diff --git a/src/state-utils.js b/src/state-utils.js index 9af67d18..b17390a6 100644 --- a/src/state-utils.js +++ b/src/state-utils.js @@ -86,23 +86,16 @@ async function getContractBytecodeLength(ethAddr, smt, root) { * @param {Bool} flagDelete flag to set bytecode to 0 * @returns {Array[Field]} new state root */ -async function setContractBytecode(ethAddr, smt, root, bytecode, flagDelete) { +async function setContractBytecode(ethAddr, smt, root, bytecode) { const keyContractCode = await smtUtils.keyContractCode(ethAddr); const keyContractLength = await smtUtils.keyContractLength(ethAddr); - let res; - - if (flagDelete === true) { - res = await smt.set(root, keyContractCode, Scalar.e(0)); - res = await smt.set(res.newRoot, keyContractLength, Scalar.e(0)); - } else { - const hashByteCode = await smtUtils.hashContractBytecode(bytecode); - let parsedBytecode = bytecode.startsWith('0x') ? bytecode.slice(2) : bytecode.slice(); - parsedBytecode = (parsedBytecode.length % 2) ? `0${parsedBytecode}` : parsedBytecode; - const bytecodeLength = parsedBytecode.length / 2; - res = await smt.set(root, keyContractCode, Scalar.fromString(hashByteCode, 16)); - res = await smt.set(res.newRoot, keyContractLength, bytecodeLength); - } + const hashByteCode = await smtUtils.hashContractBytecode(bytecode); + let parsedBytecode = bytecode.startsWith('0x') ? bytecode.slice(2) : bytecode.slice(); + parsedBytecode = (parsedBytecode.length % 2) ? `0${parsedBytecode}` : parsedBytecode; + const bytecodeLength = parsedBytecode.length / 2; + let res = await smt.set(root, keyContractCode, Scalar.fromString(hashByteCode, 16)); + res = await smt.set(res.newRoot, keyContractLength, bytecodeLength); return res.newRoot; } diff --git a/test/helpers/test-vectors/block-info/block-info-batches.json b/test/helpers/test-vectors/block-info/block-info-batches.json index 12146b1c..030797ca 100644 --- a/test/helpers/test-vectors/block-info/block-info-batches.json +++ b/test/helpers/test-vectors/block-info/block-info-batches.json @@ -315,7 +315,7 @@ "rawTx": "0xf88a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018207f3a068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c4829a05695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef6" } ], - "expectedNewRoot": "0xddae01894acc0b4bed100e783636c83e1ef7c919716e1a44a58b97cdeac75a3c", + "expectedNewRoot": "0x55cf200f86f2e85c754a7631c958eddd6289df58d8386f76e7e2cfa43c8557a4", "expectedNewLeafs": { "0x0000000000000000000000000000000000000000": { "balance": "0", @@ -330,7 +330,7 @@ "nonce": "0" }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { - "balance": "199999545404000000000", + "balance": "199999548204000000000", "nonce": "14" }, "0x1275fbb540c8efc58b812ba83b0d0b8b9917ae98": { @@ -339,21 +339,21 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x73e6af6f", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x02", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x01c9c380", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x7ac5e9a0cdc631467c2e2e43d8d668016dbbf5b49d736cbace17cd1422de31ea" } }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { - "balance": "100000454596000000000", + "balance": "100000451796000000000", "nonce": "1" } }, "batchL2Data": "0xea07843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800be264304cfc20c400929c82d1435cfbaa18e9a49c34ce65274633820803c415132ab24e00f892d77ad39c87e897772100e3323f31915a3e5eb261e056d99bc31bea08843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e88080775e9a77a45dafb120ec840926129c5db8ad3843722de88f2c7f6df4383c92fe0176dcd120e97ff6a1a1d60150aac3fdbca81bbfd1e2e9349ed9da4fa3bd85a81bea09843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080f969b5ab22f54db86a57efcfa83f3369047d328d2c56044bd49d7f863e69ed2b5a95c2b1b41801a5b4d7bb548829fe5a51c72dd5e5a08bd2a56f49bc3246a3081cea0a843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080b60beddfce8bf365e93cb4f88f45ed0e5649659de56dbf52332e6c9c16aa10bd576fb90bd967e2495fe8fa09d75d58b82668c54dab54d91f5e4ab0d76d2649ae1bea0b843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e88080416d143b11a02e0c28344feb6af0f90ecb5b0bd5eec26047b25c0f775502be751e40d32fefe94aee39ad9b2605afeb2e86f31b56ac82874f841054c6a01331851bea0c843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080a1ec9b236321a7d3545cfe1a1baedf65d75e589223d732d424576756adb0396e74470d226d5b61895150d96dbd1b1ba8a8ad69a6bf9311a141ece602b6420d961cf84a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018203e8808068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c48295695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef61b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x70dbed216757212ab7ba9d4159a1b92c4dc1002a7b69031399789a436f64baab", + "inputHash": "0x3588ce94a095a85afcc1fc1f15233d6718fdf96b5f1e4c87629d61c128d1ec1d", "batchHashData": "0x6c8a80b510739fe5f5959dc03d074979d407915f5b4f9b1cb5ba97f469b85b08", "timestamp": 1944498031 } From 120ae0f3189d6dd5b07b12d268d372708b339d64 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Thu, 27 Oct 2022 11:30:56 +0200 Subject: [PATCH 07/40] no use further version of vm --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0bf0c52b..617e84c7 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@ethereumjs/block": "^3.6.2", "@ethereumjs/common": "^2.6.0", "@ethereumjs/tx": "^3.4.0", - "@polygon-hermez/vm": "^5.7.23", + "@polygon-hermez/vm": "5.7.23", "ethereumjs-util": "^7.1.4", "ethers": "^5.5.4", "ffjavascript": "^0.2.46", From 9da14fb1dc5db39e2d90fec0eebfdd646867e0d0 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Thu, 27 Oct 2022 11:46:32 +0200 Subject: [PATCH 08/40] update block-info test --- .../test-vectors/block-info/block-info-batches.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/helpers/test-vectors/block-info/block-info-batches.json b/test/helpers/test-vectors/block-info/block-info-batches.json index 030797ca..12146b1c 100644 --- a/test/helpers/test-vectors/block-info/block-info-batches.json +++ b/test/helpers/test-vectors/block-info/block-info-batches.json @@ -315,7 +315,7 @@ "rawTx": "0xf88a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018207f3a068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c4829a05695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef6" } ], - "expectedNewRoot": "0x55cf200f86f2e85c754a7631c958eddd6289df58d8386f76e7e2cfa43c8557a4", + "expectedNewRoot": "0xddae01894acc0b4bed100e783636c83e1ef7c919716e1a44a58b97cdeac75a3c", "expectedNewLeafs": { "0x0000000000000000000000000000000000000000": { "balance": "0", @@ -330,7 +330,7 @@ "nonce": "0" }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { - "balance": "199999548204000000000", + "balance": "199999545404000000000", "nonce": "14" }, "0x1275fbb540c8efc58b812ba83b0d0b8b9917ae98": { @@ -339,21 +339,21 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x73e6af6f", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x01", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x02", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x01c9c380", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x7ac5e9a0cdc631467c2e2e43d8d668016dbbf5b49d736cbace17cd1422de31ea" } }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { - "balance": "100000451796000000000", + "balance": "100000454596000000000", "nonce": "1" } }, "batchL2Data": "0xea07843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800be264304cfc20c400929c82d1435cfbaa18e9a49c34ce65274633820803c415132ab24e00f892d77ad39c87e897772100e3323f31915a3e5eb261e056d99bc31bea08843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e88080775e9a77a45dafb120ec840926129c5db8ad3843722de88f2c7f6df4383c92fe0176dcd120e97ff6a1a1d60150aac3fdbca81bbfd1e2e9349ed9da4fa3bd85a81bea09843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080f969b5ab22f54db86a57efcfa83f3369047d328d2c56044bd49d7f863e69ed2b5a95c2b1b41801a5b4d7bb548829fe5a51c72dd5e5a08bd2a56f49bc3246a3081cea0a843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080b60beddfce8bf365e93cb4f88f45ed0e5649659de56dbf52332e6c9c16aa10bd576fb90bd967e2495fe8fa09d75d58b82668c54dab54d91f5e4ab0d76d2649ae1bea0b843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e88080416d143b11a02e0c28344feb6af0f90ecb5b0bd5eec26047b25c0f775502be751e40d32fefe94aee39ad9b2605afeb2e86f31b56ac82874f841054c6a01331851bea0c843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080a1ec9b236321a7d3545cfe1a1baedf65d75e589223d732d424576756adb0396e74470d226d5b61895150d96dbd1b1ba8a8ad69a6bf9311a141ece602b6420d961cf84a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018203e8808068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c48295695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef61b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x3588ce94a095a85afcc1fc1f15233d6718fdf96b5f1e4c87629d61c128d1ec1d", + "inputHash": "0x70dbed216757212ab7ba9d4159a1b92c4dc1002a7b69031399789a436f64baab", "batchHashData": "0x6c8a80b510739fe5f5959dc03d074979d407915f5b4f9b1cb5ba97f469b85b08", "timestamp": 1944498031 } From 12ff90488a888b6e81cfffd3919299cf5e3c4fd5 Mon Sep 17 00:00:00 2001 From: Ignasirv Date: Mon, 24 Oct 2022 18:14:17 +0200 Subject: [PATCH 09/40] Support new system_address mapping for opnumber & opBlockHash --- package.json | 2 +- src/constants.js | 1 + src/processor.js | 111 ++++--- src/zkevm-db.js | 2 +- .../block-info/block-info-batches.json | 67 ++-- .../test-vectors/block-info/block-info.json | 20 +- .../end-to-end/state-transition.json | 24 +- .../processor/state-transition.json | 302 +++++++++--------- .../selfdestruct/selfdestruct.json | 15 +- .../zkevm-db/state-transition.json | 2 +- 10 files changed, 296 insertions(+), 250 deletions(-) diff --git a/package.json b/package.json index f2ea3b5c..335c6e4d 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@ethereumjs/block": "^3.6.2", "@ethereumjs/common": "^2.6.0", "@ethereumjs/tx": "^3.4.0", - "@polygon-hermez/vm": "5.7.23", + "@polygon-hermez/vm": "5.7.24", "ethereumjs-util": "^7.1.4", "ethers": "^5.5.4", "ffjavascript": "^0.2.55", diff --git a/src/constants.js b/src/constants.js index 7b527433..8852bbf0 100644 --- a/src/constants.js +++ b/src/constants.js @@ -37,3 +37,4 @@ module.exports.BATCH_GAS_LIMIT = 30000000; module.exports.BATCH_DIFFICULTY = 0; module.exports.ADDRESS_SYSTEM = '0x0000000000000000000000000000000000000000'; module.exports.STATE_ROOT_STORAGE_POS = 0; +module.exports.LAST_TX_STORAGE_POS = '0x0000000000000000000000000000000000000000000000000000000000000000'; diff --git a/src/processor.js b/src/processor.js index d5aab93b..f93f62e2 100644 --- a/src/processor.js +++ b/src/processor.js @@ -99,9 +99,6 @@ module.exports = class Processor { // Check the validity of rawTxs await this._decodeAndCheckRawTx(); - // Set oldStateRoot to system contract - await this._setBatchHash(); - // Set global exit root await this._setGlobalExitRoot(); @@ -185,47 +182,6 @@ module.exports = class Processor { } } - /** - * Set the old state root exit root in a specific storage slot of the system smart contract for both vm and SMT - * This will be performed before process the transactions - */ - async _setBatchHash() { - const newStorageEntry = {}; - const stateRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [this.batchNumber - 1, Constants.STATE_ROOT_STORAGE_POS]); - newStorageEntry[stateRootPos] = smtUtils.h4toString(this.oldStateRoot); - - this.currentStateRoot = await stateUtils.setContractStorage( - Constants.ADDRESS_SYSTEM, - this.smt, - this.currentStateRoot, - newStorageEntry, - ); - - const addressInstance = new Address(toBuffer(Constants.ADDRESS_SYSTEM)); - await this.vm.stateManager.putContractStorage( - addressInstance, - toBuffer(stateRootPos), - toBuffer(smtUtils.h4toString(this.oldStateRoot)), - ); - - // store data in internal DB - const keyDumpStorage = Scalar.add(Constants.DB_ADDRESS_STORAGE, Scalar.fromString(Constants.ADDRESS_SYSTEM, 16)); - - // add address to updatedAccounts - const account = await this.vm.stateManager.getAccount(addressInstance); - this.updatedAccounts[Constants.ADDRESS_SYSTEM.toLowerCase()] = account; - - // update its storage - const sto = await this.vm.stateManager.dumpStorage(addressInstance); - const storage = {}; - const keys = Object.keys(sto).map((v) => `0x${v}`); - const values = Object.values(sto).map((v) => `0x${v}`); - for (let k = 0; k < keys.length; k++) { - storage[keys[k]] = ethers.utils.RLP.decode(values[k]); - } - await this.db.setValue(keyDumpStorage, storage); - } - /** * Set the global exit root in a specific storage slot of the globalExitRootManagerL2 for both vm and SMT * This will be performed before process the transactions @@ -355,7 +311,6 @@ module.exports = class Processor { const blockData = {}; blockData.header = {}; blockData.header.timestamp = new BN(Scalar.e(this.timestamp)); - blockData.header.number = new BN(Scalar.e(this.batchNumber)); blockData.header.coinbase = new Address(toBuffer(this.sequencerAddress)); blockData.header.gasLimit = new BN(Scalar.e(Constants.BATCH_GAS_LIMIT)); blockData.header.difficulty = new BN(Scalar.e(Constants.BATCH_DIFFICULTY)); @@ -409,6 +364,8 @@ module.exports = class Processor { Scalar.e(accountSeq.nonce), ); + await this._updateSystemStorage(); + // Clear touched accounts this.vm.stateManager._customTouched.clear(); @@ -477,12 +434,76 @@ module.exports = class Processor { } } + await this._updateSystemStorage(); + // Clear touched accounts this.vm.stateManager._customTouched.clear(); } } } + /** + * Updates system storage with new state root after finishing transaction + */ + async _updateSystemStorage() { + // Set system addres storage with updated values + const lastTxCount = await stateUtils.getContractStorage( + Constants.ADDRESS_SYSTEM, + this.smt, + this.currentStateRoot, + [Constants.LAST_TX_STORAGE_POS], // Storage key of last tx count + ); + const newTxCount = ethers.BigNumber.from(lastTxCount[0] + 1n).toHexString(); + // Update smt with new last tx count + this.currentStateRoot = await stateUtils.setContractStorage( + Constants.ADDRESS_SYSTEM, + this.smt, + this.currentStateRoot, + { [Constants.LAST_TX_STORAGE_POS]: newTxCount }, + ); + // Update vm with new last tx count + const addressInstance = new Address(toBuffer(Constants.ADDRESS_SYSTEM)); + + await this.vm.stateManager.putContractStorage( + addressInstance, + toBuffer(Constants.LAST_TX_STORAGE_POS), + toBuffer(newTxCount.toString(16)), + ); + + // Update smt with new state root + const stateRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [newTxCount, Constants.STATE_ROOT_STORAGE_POS]); + this.currentStateRoot = await stateUtils.setContractStorage( + Constants.ADDRESS_SYSTEM, + this.smt, + this.currentStateRoot, + { [stateRootPos]: smtUtils.h4toString(this.currentStateRoot) }, + ); + + // Update vm with new state root + await this.vm.stateManager.putContractStorage( + addressInstance, + toBuffer(stateRootPos), + toBuffer(smtUtils.h4toString(this.currentStateRoot)), + ); + + // store data in internal DB + const keyDumpStorage = Scalar.add(Constants.DB_ADDRESS_STORAGE, Scalar.fromString(Constants.ADDRESS_SYSTEM, 16)); + + // add address to updatedAccounts + const account = await this.vm.stateManager.getAccount(addressInstance); + this.updatedAccounts[Constants.ADDRESS_SYSTEM.toLowerCase()] = account; + + // update its storage + const sto = await this.vm.stateManager.dumpStorage(addressInstance); + const storage = {}; + const keys = Object.keys(sto).map((k) => `0x${k}`); + const values = Object.values(sto).map((k) => `0x${k}`); + for (let k = 0; k < keys.length; k++) { + storage[keys[k]] = ethers.utils.RLP.decode(values[k]); + } + await this.db.setValue(keyDumpStorage, storage); + } + /** * Compute stark input */ diff --git a/src/zkevm-db.js b/src/zkevm-db.js index f0933041..e3e25de2 100644 --- a/src/zkevm-db.js +++ b/src/zkevm-db.js @@ -200,7 +200,7 @@ class ZkEVMDB { */ static async newZkEVM(db, poseidon, stateRoot, localExitRoot, genesis, vm, smt, chainID) { const common = Common.custom({ chainId: chainID }, { hardfork: Hardfork.Berlin }); - + common.setEIPs([3607]); const lastBatch = await db.getValue(Constants.DB_LAST_BATCH); // If it is null, instantiate a new evm-db if (lastBatch === null) { diff --git a/test/helpers/test-vectors/block-info/block-info-batches.json b/test/helpers/test-vectors/block-info/block-info-batches.json index 12146b1c..6fa017d5 100644 --- a/test/helpers/test-vectors/block-info/block-info-batches.json +++ b/test/helpers/test-vectors/block-info/block-info-batches.json @@ -157,21 +157,28 @@ "rawTx": "0xf88a06843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000008207f4a098f56115cad149a409a86e7610863248799a31d80e87d46582d08a3c0933a40aa025455a74fa3ca2ada0bf39dac88a172d032583bfec15061f39184ef9f7012677" } ], - "expectedNewRoot": "0x7ac5e9a0cdc631467c2e2e43d8d668016dbbf5b49d736cbace17cd1422de31ea", + "expectedNewRoot": "0xf60404eddfffdf6feae70912692684d1b3f905535c0e8d3822bde13a37421087", "expectedNewLeafs": { + "0xae4bb80be56b819606589de61d5ec3b522eeb032": { + "balance": "0", + "nonce": "0" + }, "0x0000000000000000000000000000000000000000": { "balance": "0", "nonce": "0", "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0xf5c30bbb2b8a1bdd2b881cc575b2acbd13578c7cd64250fe8b6770fa95f915b3" + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x07", + "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x4541d85b56f6cb70f907b5b1ca37ac40a38e896b9d7da523bf7fddc903a9bffb", + "0x2b232c97452f0950c94e2539fdc7e69d21166113cf7a9bcb99b220a3fe5d720a": "0x46bd873cb0567ab9b072721df832c2c2bbc7d54751697e3b30392750bc48b554", + "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x32c2d061ca69b1a8d7dafeca5d5a62c0853f4571b2193efa9cb15a306d0e0320", + "0x62103cf3131c85df57aad364d21cba02556d3092d6cb54c298c2e7726a7870bd": "0xa1de15e72d6b9fc1adc09e2226a40bb6aae3542b29b091b47fd6021c7b574ed1", + "0x870253054e3d98b71abec8fff9ebf8a15d167f15909091a800d4acaab9266d2b": "0xf60404eddfffdf6feae70912692684d1b3f905535c0e8d3822bde13a37421087", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xe8c577de5249dd03e916ee78ccc58dd3b87a41f3e85bc02e5b67fb9f92b1b0e3", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x105f23ed606db50013d457a612544dca7912842570c1c66f3c04c64f518f2a27" } }, - "0xae4bb80be56b819606589de61d5ec3b522eeb032": { - "balance": "0", - "nonce": "0" - }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { - "balance": "100000284192000000000", + "balance": "100000264292000000000", "nonce": "1" }, "0x1275fbb540c8efc58b812ba83b0d0b8b9917ae98": { @@ -180,21 +187,20 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x73e6af6f", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x01", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x03", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x01c9c380", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0xf5c30bbb2b8a1bdd2b881cc575b2acbd13578c7cd64250fe8b6770fa95f915b3" + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8" } }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { - "balance": "199999715808000000000", + "balance": "199999735708000000000", "nonce": "7" } }, "batchL2Data": "0xea80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800a62ce9876e027f7a954f96c485c63c9bf043bd1fe1012c5634cf959bf7743190a601eedbcfef58146bdda9845fea5d9356b09d667010d557c73f83353a119a61cea01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e880803c696d27506eebe00e52cd1c327eefd2ebb8c7a5d5309118ad18381630b2a5d47971958df81d8daa0d393daddb17a250c294452078db34b22d9e5ee85d2482e81bea02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080db91fc325e867faa9625a5c7c152dfaf207a992b6eea855fcabe264f489b043a431f20ba77bd0269a6aedb6287118d383305d0dd677478209e60f6d3af3b17201cea03843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080e0c0469634b096c3b190713c8a8faa9c4fccc8b2d83cc8da056a897a28a616277c5bf403ce3a4c77cb0c6ca14cdd24d8fa785b4a0bde1500abba55db7df7483a1bea04843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e8808057c7bfa7288275d862a91776d6d05c2290058a42840f08108b8b157f139120ce565bc8d0b5291e949c1c87e2f829b76d6a5d15e767e61716d1095dcc7cb5b44d1cea05843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080e255f868a61169a2330cb539671e1a66ee846bc06cc888ea8fcd7ae51cdc62940c6dec27e6f756dd84923bcebb1f85db125299c0b622eaa8d5722cb3dace239d1cf84a06843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000008203e8808098f56115cad149a409a86e7610863248799a31d80e87d46582d08a3c0933a40a25455a74fa3ca2ada0bf39dac88a172d032583bfec15061f39184ef9f70126771c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0xdacad7e8190fdd636dfcde9182ce3fa76ba8d34a5f799d18411bd3c5d1a45543", + "inputHash": "0x4ca728d72c5dda0b14d05963e49bd7f6fb5f397a700383610fd51b72f7e06598", "batchHashData": "0x2fce26f01fde186437d7a97a24f7744fc2c5d0087d5fa9e2157dbe9d2c383efc", "timestamp": 1944498031 }, @@ -315,16 +321,8 @@ "rawTx": "0xf88a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018207f3a068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c4829a05695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef6" } ], - "expectedNewRoot": "0xddae01894acc0b4bed100e783636c83e1ef7c919716e1a44a58b97cdeac75a3c", + "expectedNewRoot": "0x4b033599641e535e329aa5fad45dd6d97e7439518e96dac55bb616a428a3230a", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0xf5c30bbb2b8a1bdd2b881cc575b2acbd13578c7cd64250fe8b6770fa95f915b3", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x7ac5e9a0cdc631467c2e2e43d8d668016dbbf5b49d736cbace17cd1422de31ea" - } - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0" @@ -339,21 +337,42 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x73e6af6f", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x02", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0a", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x01c9c380", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x7ac5e9a0cdc631467c2e2e43d8d668016dbbf5b49d736cbace17cd1422de31ea" + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x105f23ed606db50013d457a612544dca7912842570c1c66f3c04c64f518f2a27" } }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "100000454596000000000", "nonce": "1" + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0e", + "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x4541d85b56f6cb70f907b5b1ca37ac40a38e896b9d7da523bf7fddc903a9bffb", + "0x2b232c97452f0950c94e2539fdc7e69d21166113cf7a9bcb99b220a3fe5d720a": "0x46bd873cb0567ab9b072721df832c2c2bbc7d54751697e3b30392750bc48b554", + "0x62103cf3131c85df57aad364d21cba02556d3092d6cb54c298c2e7726a7870bd": "0xa1de15e72d6b9fc1adc09e2226a40bb6aae3542b29b091b47fd6021c7b574ed1", + "0x7ca5987043ac53676c6e30f77ff1a34e98a5fae86b27e5d0cf74ac1711b8a8db": "0x6fe02fcace5318d26bca2b1099d3d7874dc4b5a3967e480b12bf84f4b15bd93c", + "0x870253054e3d98b71abec8fff9ebf8a15d167f15909091a800d4acaab9266d2b": "0xf60404eddfffdf6feae70912692684d1b3f905535c0e8d3822bde13a37421087", + "0x9115655cbcdb654012cf1b2f7e5dbf11c9ef14e152a19d5f8ea75a329092d5a6": "0xd138aeaa508786b63573ca5f577d8acf9a2efa58938321d8b176d02a3fcab85d", + "0xd0a75bf7ea87fba36ff8a17b4519c45fb727609e6c9161b106680b25b3e2705f": "0x53b2fab67833a51eca2281436b7686570b1f5c44fff723a86b66de104ed7cbb9", + "0xe9bc119772df33ac6a685b572c53e6a4988bbdde79a460a23bed029791109f39": "0x4b033599641e535e329aa5fad45dd6d97e7439518e96dac55bb616a428a3230a", + "0x324fdf7bfe7bd2828491073f0b7868a9a19ee3eff384c2805040be3e426447f5": "0xbe1505734ccca4477056d410f17fa79313fad7fb11f5e7d1beb4ac7204d3e97e", + "0x3e9abaca0aad9ede81f4474766c846d8539f70688e1c8f521bbe1597874e3dc4": "0x2b624bf75ccd7ef5190fecc83999773732a62fef8373c483feef168c6e033301", + "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x32c2d061ca69b1a8d7dafeca5d5a62c0853f4571b2193efa9cb15a306d0e0320", + "0x5b8b9143058ba3a137192c563ca6541845e62f0a2f9a667aac4db2fa3c334e3c": "0x403488044e6a53b26c4313811ebafb3c89233e16660337e4d66af36d73b6e79b", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xe8c577de5249dd03e916ee78ccc58dd3b87a41f3e85bc02e5b67fb9f92b1b0e3", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x105f23ed606db50013d457a612544dca7912842570c1c66f3c04c64f518f2a27" + } } }, "batchL2Data": "0xea07843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800be264304cfc20c400929c82d1435cfbaa18e9a49c34ce65274633820803c415132ab24e00f892d77ad39c87e897772100e3323f31915a3e5eb261e056d99bc31bea08843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e88080775e9a77a45dafb120ec840926129c5db8ad3843722de88f2c7f6df4383c92fe0176dcd120e97ff6a1a1d60150aac3fdbca81bbfd1e2e9349ed9da4fa3bd85a81bea09843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080f969b5ab22f54db86a57efcfa83f3369047d328d2c56044bd49d7f863e69ed2b5a95c2b1b41801a5b4d7bb548829fe5a51c72dd5e5a08bd2a56f49bc3246a3081cea0a843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080b60beddfce8bf365e93cb4f88f45ed0e5649659de56dbf52332e6c9c16aa10bd576fb90bd967e2495fe8fa09d75d58b82668c54dab54d91f5e4ab0d76d2649ae1bea0b843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e88080416d143b11a02e0c28344feb6af0f90ecb5b0bd5eec26047b25c0f775502be751e40d32fefe94aee39ad9b2605afeb2e86f31b56ac82874f841054c6a01331851bea0c843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080a1ec9b236321a7d3545cfe1a1baedf65d75e589223d732d424576756adb0396e74470d226d5b61895150d96dbd1b1ba8a8ad69a6bf9311a141ece602b6420d961cf84a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018203e8808068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c48295695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef61b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x70dbed216757212ab7ba9d4159a1b92c4dc1002a7b69031399789a436f64baab", + "inputHash": "0x59759c2f4f05968bc5dfa8e28de405ba5c0381c1443fbeaf4275be605b1c1897", "batchHashData": "0x6c8a80b510739fe5f5959dc03d074979d407915f5b4f9b1cb5ba97f469b85b08", "timestamp": 1944498031 } diff --git a/test/helpers/test-vectors/block-info/block-info.json b/test/helpers/test-vectors/block-info/block-info.json index eefadc17..125ea7ac 100644 --- a/test/helpers/test-vectors/block-info/block-info.json +++ b/test/helpers/test-vectors/block-info/block-info.json @@ -136,22 +136,28 @@ "rawTx": "0xf86a05843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708207f4a0e255f868a61169a2330cb539671e1a66ee846bc06cc888ea8fcd7ae51cdc6294a00c6dec27e6f756dd84923bcebb1f85db125299c0b622eaa8d5722cb3dace239d" } ], - "expectedNewRoot": "0x214a12bf80a1fe3db5f430b0bbf5d5cf6c05321e78d86aa2647c2c5c9e573bce", + "expectedNewRoot": "0xa1de15e72d6b9fc1adc09e2226a40bb6aae3542b29b091b47fd6021c7b574ed1", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { + "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0xf5c30bbb2b8a1bdd2b881cc575b2acbd13578c7cd64250fe8b6770fa95f915b3" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, - "0xae4bb80be56b819606589de61d5ec3b522eeb032": { + "0x0000000000000000000000000000000000000000": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x06", + "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x4541d85b56f6cb70f907b5b1ca37ac40a38e896b9d7da523bf7fddc903a9bffb", + "0x2b232c97452f0950c94e2539fdc7e69d21166113cf7a9bcb99b220a3fe5d720a": "0x46bd873cb0567ab9b072721df832c2c2bbc7d54751697e3b30392750bc48b554", + "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x32c2d061ca69b1a8d7dafeca5d5a62c0853f4571b2193efa9cb15a306d0e0320", + "0x62103cf3131c85df57aad364d21cba02556d3092d6cb54c298c2e7726a7870bd": "0xa1de15e72d6b9fc1adc09e2226a40bb6aae3542b29b091b47fd6021c7b574ed1", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xe8c577de5249dd03e916ee78ccc58dd3b87a41f3e85bc02e5b67fb9f92b1b0e3", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x105f23ed606db50013d457a612544dca7912842570c1c66f3c04c64f518f2a27" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -169,7 +175,7 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x73e6af6f", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x01", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x03", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x01c9c380", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8" }, @@ -187,7 +193,7 @@ "batchL2Data": "0xea80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800a62ce9876e027f7a954f96c485c63c9bf043bd1fe1012c5634cf959bf7743190a601eedbcfef58146bdda9845fea5d9356b09d667010d557c73f83353a119a61cea01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e880803c696d27506eebe00e52cd1c327eefd2ebb8c7a5d5309118ad18381630b2a5d47971958df81d8daa0d393daddb17a250c294452078db34b22d9e5ee85d2482e81bea02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080db91fc325e867faa9625a5c7c152dfaf207a992b6eea855fcabe264f489b043a431f20ba77bd0269a6aedb6287118d383305d0dd677478209e60f6d3af3b17201cea03843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080e0c0469634b096c3b190713c8a8faa9c4fccc8b2d83cc8da056a897a28a616277c5bf403ce3a4c77cb0c6ca14cdd24d8fa785b4a0bde1500abba55db7df7483a1bea04843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e8808057c7bfa7288275d862a91776d6d05c2290058a42840f08108b8b157f139120ce565bc8d0b5291e949c1c87e2f829b76d6a5d15e767e61716d1095dcc7cb5b44d1cea05843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080e255f868a61169a2330cb539671e1a66ee846bc06cc888ea8fcd7ae51cdc62940c6dec27e6f756dd84923bcebb1f85db125299c0b622eaa8d5722cb3dace239d1c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0xab1e6abe832f3ac46d4a098ba2202ac4f8ae851e01ba11e4c3cb8e5f520df20a", + "inputHash": "0x968ec985e95997442ab437df8653db76fe13b6856fda813b5c71f53195634510", "batchHashData": "0xc14b177061b0fff3a5a1d61a5b1d50319b59a26b864285ef5c4f67cac43a77ee", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 diff --git a/test/helpers/test-vectors/end-to-end/state-transition.json b/test/helpers/test-vectors/end-to-end/state-transition.json index 4dd409d5..b45ef6f2 100644 --- a/test/helpers/test-vectors/end-to-end/state-transition.json +++ b/test/helpers/test-vectors/end-to-end/state-transition.json @@ -173,17 +173,8 @@ "rawTx": "0xf9012f0480831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf55988880de0b6b3a7640000b8c4508935f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008207f3a0cb1a319474de4dbee7c198144a6a4767d8aad6649d83b2fd76c8793a74fdad82a04d536fdded69a0ea3909ff40c9242cc12c2f1efe95581647252861333e84bfed" } ], - "expectedNewRoot": "0xfbfd4ed8618af74ccccfaefe6f9afa6ce24055bc215200bb365f85cb879c6817", + "expectedNewRoot": "0x2b6bad53688f55d8eb28dd212818d98f8c6f6b2a8722c40351cb0f77a4aeaf04", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0xb33635210b9f5d07769cf70bf5a3cbf241ecbaf79a9b66ef79b28d920da1f776" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "1", @@ -195,6 +186,17 @@ "hashBytecode": "0xef2427249f0f776e1fb03a22fa9dc30b18372734b0742c63a0acb4a55c82e1a3", "bytecodeLength": 486 }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x2b6bad53688f55d8eb28dd212818d98f8c6f6b2a8722c40351cb0f77a4aeaf04", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xd22991f8c61a2efc00768d9380250fb29cce13fa2060c92f5e215c5ae40b9d44" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 + }, "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988": { "balance": "99991000000000000000000", "nonce": "2", @@ -275,7 +277,7 @@ "batchL2Data": "0xf905a80380831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf5598880b905845d5d326f00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000573768af52d1354a7b83fb784ecbacecf8fead6ad49f25af8909a35b0a7bba050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3021ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193440eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f839867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756afcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8923490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99cc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8beccda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d22733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618db8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32293237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7358448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a900000000000000000000000000000000000000000000000000000000000000008203e8808048480a57632d9de622b3b3fbfb56471b4b31e0b810dc753a794dfeb87c032bee7edbdf61ad83e3ed2bd98cb242c8924bb6983d823f485776895efd6dc76f16a61cf8ef0480831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf55988880de0b6b3a7640000b8c4508935f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008203e88080cb1a319474de4dbee7c198144a6a4767d8aad6649d83b2fd76c8793a74fdad824d536fdded69a0ea3909ff40c9242cc12c2f1efe95581647252861333e84bfed1b", "globalExitRoot": "0x5bf5ecd501710dc31809a1a9ffa9f832e5dc729361da93abd333b6611d123add", "newLocalExitRoot": "0x284215bd63e6ebdb90fd60b51c2da82dcc0dfe6c53ea6ef6995920da706a5897", - "inputHash": "0x4e7213de255cb776177fea7d427b5cfa2dcacbc73e5b9e0f170786619ea3d4eb", + "inputHash": "0x83fa42785fd942ae94057121ed40b6e5dd3af00c12ebafcb4e7497acd0bef713", "batchHashData": "0xd8604505cb2959d10bd0a1a19fe863a05fd280271ce19cf9f26738b1f7c33587", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 diff --git a/test/helpers/test-vectors/processor/state-transition.json b/test/helpers/test-vectors/processor/state-transition.json index 7d7f0bfb..1d982496 100644 --- a/test/helpers/test-vectors/processor/state-transition.json +++ b/test/helpers/test-vectors/processor/state-transition.json @@ -34,17 +34,8 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x5a52a0ee8577a03e831f627fead1921da142f3820f5880118e98ae6362626b3c", + "expectedNewRoot": "0x2437b34ce149828e5f5a443a2d502c1c948a17edecadb3d15b9eaf0be2cb2bdd", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -67,12 +58,22 @@ "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x2437b34ce149828e5f5a443a2d502c1c948a17edecadb3d15b9eaf0be2cb2bdd" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x6dcef8046ea49c2ffc910e13524b18727c1ef1520d3d7d477f9cd84cd7ac7dfb", + "inputHash": "0x4bf4410749f919a5ecbf8416a105c6a95fb2f2003a9cfcd56a0dab048908f106", "batchHashData": "0x9370689d3c20a5a4739f902a31e2ea20c7d7be121a0fc19468a2e1b5d87f4111", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -182,17 +183,8 @@ "rawTx": "0xf86c80843b9aca00830186a094abcced19d7f290b84608fec510bee872cc8f5112880de0b6b3a7640000801ba02c92035bc11227e9e94ba066a6d77a65c43d29dfb4a855c9464e1b60fabd6334a07171c6dc84816ffcf025040cd6193ecef3928a0c4e4964ddba320826b76c725d" } ], - "expectedNewRoot": "0x8e5389c78d997fb5116a6d6a7a374aa61836fe4b0ab68b3c842d3b16c782ba97", + "expectedNewRoot": "0xced2389fe7b06ac0694e356415af4935c91ae43582c50d66a0943848cc7be041", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x76b362a9afd679ea13a456ab103786492c65946be653589c1fd627841d0c6fdd" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -236,12 +228,23 @@ "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xced2389fe7b06ac0694e356415af4935c91ae43582c50d66a0943848cc7be041", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xb1b56b39f7644e2e9ce4024ad3a3dd0e1c71f428f41b30785c5db5885893761c" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731bef80843b9aca00830186a094187bd40226a7073b49163b1f6c2b73d8f2aa8478893635c9adc5dea00000808203e880806199f98970ea3e0e9a59e32184ea11ae9158b9b93d70906e11f60eb6ce0096023c1bbbb437e58ea5f7bebd344d61cccd161c6b8accff11b50ea44300d3ab58bd1bee80843b9aca00830186a094187bd40226a7073b49163b1f6c2b73d8f2aa8478880de0b6b3a7640000808203e8808074ecb6abb3d84c322a4905c60199b8f422b79b940e8a853d580869268009ae3123fb6caa5b3afc410b79d9b68bf851df1fd46fd6923cc481b3e273aeb92ce67d1cee80843b9aca00830186a094abcced19d7f290b84608fec510bee872cc8f5112880de0b6b3a7640000808203e88080432b1bc18d96dea596edfe17b249a68e42117f738ecfaea4e9f92aa77935fb4d5b9a983a5ba73c27cbaa4de62b1d8ab8b908a941926387927dcd2319d8b4dfb21cec80843b9aca00830186a094abcced19d7f290b84608fec510bee872cc8f5112880de0b6b3a764000080808080c58f68d4c65a9a131d17a426ab83da163a43e21f8811a70cd4ca79eb5d26f25d169e8e50ee8483669b2aef296e6dc68464e5af0dc582a54751ef50c2c9207b6b1c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0xd18171b48d0e6be1f17ade61317f56803544897111acb8fd356a12a1820e12bf", + "inputHash": "0xb4929f58db8cf6166afee8d05360db544bf2482745a2620b01e5e9b6750c13c8", "batchHashData": "0xb42e4971194ef84093a6db689ab04ef94ee29868c2b618408708285272f10aca", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -281,17 +284,8 @@ "customRawTx": "0xf080843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8a021e19e0c9bab2400000808203e8808069d48cb9ade9de851379987aa0f7f677cdaee1152ec785a3d3009f094c889be9368c3d198cdfe5b1e0100fe110ea60e77b1eb65e9363d96f7fb9c2b84a37c9b01c" } ], - "expectedNewRoot": "0x7c29e07c803e993311b3d1633e5e9dd9f6db8cf813b7b60117599c7d1d7b66bb", + "expectedNewRoot": "0xe9271cd6cf6d4178beaf4cf50ef2f7e9474c18d1a0bbc3c3d8061758e9069477", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -315,7 +309,7 @@ "batchL2Data": "0xf080843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8a021e19e0c9bab2400000808203e8808069d48cb9ade9de851379987aa0f7f677cdaee1152ec785a3d3009f094c889be9368c3d198cdfe5b1e0100fe110ea60e77b1eb65e9363d96f7fb9c2b84a37c9b01c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x974acb61a8c42a1633a51abd4850d34f99d6592b32728aaef008bfbdc934b771", + "inputHash": "0xceafb6438c8ab4a8ca1bb97c505f4346f641ce7d1a975952599a8712bf1af4de", "batchHashData": "0xf1a712e0d7cb35046bea1b8b977ef07232b7d006bf8f5f8c748a9478c5ca0f85", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -390,17 +384,8 @@ "customRawTx": "0xef80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff89056bc75e2d63100000808203e880806fac51f437890686cea7fc4d478e01f4650284d8b0c447d3a049ad799a938e855d76085acbdd3af82e205f070fd3f333d3f069ab3936323ac347003f07d9418a1b" } ], - "expectedNewRoot": "0x7c29e07c803e993311b3d1633e5e9dd9f6db8cf813b7b60117599c7d1d7b66bb", + "expectedNewRoot": "0xe9271cd6cf6d4178beaf4cf50ef2f7e9474c18d1a0bbc3c3d8061758e9069477", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -424,7 +409,7 @@ "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a00008082019180806e209c61ca92c2b980d6197e7ac9ccc3f547bf13be6455dfe682aa5dda9655ef16819a7edcc3fefec81ca97c7a6f3d10ec774440e409adbba693ce8b698d41f11cef80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff89056bc75e2d63100000808203e880806fac51f437890686cea7fc4d478e01f4650284d8b0c447d3a049ad799a938e855d76085acbdd3af82e205f070fd3f333d3f069ab3936323ac347003f07d9418a1b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x04c784104247158012050b7496228a76791906f7c0552e4b3ae0fae90ca1e74d", + "inputHash": "0xd43383bc749ee49d31620d827609f123e3be19580b53e989116e1cbe0edb52cd", "batchHashData": "0xe5f8356f91d4d5e6316257cb36687c2b678d5ad75f11580a4aa0e411d3f72fa9", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -465,17 +450,8 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x7c29e07c803e993311b3d1633e5e9dd9f6db8cf813b7b60117599c7d1d7b66bb", + "expectedNewRoot": "0xe9271cd6cf6d4178beaf4cf50ef2f7e9474c18d1a0bbc3c3d8061758e9069477", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -499,7 +475,7 @@ "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x8b7632b1847ce651bbc61bd5fd1dc5e09f88e7435b7e7e2495149575966d7056", + "inputHash": "0x72fc72093c9357dae16aee6352936c3fcfcfa3d5c1ac1942f04e27dd040f2f7b", "batchHashData": "0xd519b9786fa59e931526ccb9ea45d03affac1cef13f1e6a087fc7ea5e0f973bb", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -539,17 +515,8 @@ "customRawTx": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d88016345785d8a0000808203e88080cca9bd00c0a9af18cdc17e693951b88b293bae8ed236ff7dcf2684c478bc0b6a19cc9ed09ee5e1e2750abbea7ec8d2ed31df90c7d364d4e2f36c31eb410c10451b" } ], - "expectedNewRoot": "0x5e00165e52fe5d9554cc452422efaeaa00ba9637e933d915b0345535363ae825", + "expectedNewRoot": "0x39ef544fa693a502749976de4f25a16446fdb4d314a594abf3abafb7fd82cd53", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -572,12 +539,22 @@ "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x39ef544fa693a502749976de4f25a16446fdb4d314a594abf3abafb7fd82cd53" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d88016345785d8a0000808203e88080cca9bd00c0a9af18cdc17e693951b88b293bae8ed236ff7dcf2684c478bc0b6a19cc9ed09ee5e1e2750abbea7ec8d2ed31df90c7d364d4e2f36c31eb410c10451b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x14af73b726ad9a576041c06ec14462a6b3361affb0299a74879a35d265a8266d", + "inputHash": "0x8bad902ac9dabe1445cd301a7fbfd460d465a750928930a4a5693e056a4c2f74", "batchHashData": "0x76fa73a1392da97795dd5bd13828e60fc39e470a828e5b50724f455626cae832", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -656,17 +633,8 @@ "rawTx": "0xf86c80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff880de0b6b3a7640000801ba077f76b76aca6161db28545aa742536370e4f57f9a71651688631a423abcbe04aa0131474e130abe8bcc9ef39a44a877eb64b2d43132cb0907abe547aa605b641b8" } ], - "expectedNewRoot": "0x6547ef7c0a28d237e87bb463ffb09804c87afbc5e13efdc192c0ca54e983de97", + "expectedNewRoot": "0xb95b11cb9fa58551cfa708c0a52026051efbf6403bf882633311eec92a650d03", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -689,12 +657,22 @@ "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xb95b11cb9fa58551cfa708c0a52026051efbf6403bf882633311eec92a650d03" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xef80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff89056bc75e2d63100000808203e880806fac51f437890686cea7fc4d478e01f4650284d8b0c447d3a049ad799a938e855d76085acbdd3af82e205f070fd3f333d3f069ab3936323ac347003f07d9418a1bee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731bee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff880de0b6b3a7640000808203e880803317280d96c3ed303a42d9da2638805301351c96cad135380ffa544d3c2bc96a6a55cef2d3827323f134976dd99a33bebef27b5e99c454fb1f8d4a4861ac4e0f1cec80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff880de0b6b3a764000080808080f7e1e6f3cd95d27522592e8796afa8f419a066b7172e0ac3e7826705ad608c672731e14da1b190dab8c14e79e050e31da53fdb4a0e55ca48ee4faff859606d5a1b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x8eaa9abf8c4406ea28af18fee74ef82c23fdc54db703dc52db16bfc4c560e913", + "inputHash": "0xcc550422c1500cc353f375346d428e4f2eb7696d4c6d5c90ec17c6b65a6c08e7", "batchHashData": "0x07bc943150ed8ec52700dad23fa01022c90d0093541463a8bf3b247f0afc29b9", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -734,17 +712,8 @@ "customRawTx": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d88016345785d8a0000808203e88080cca9bd00c0a9af18cdc17e693951b88b293bae8ed236ff7dcf2684c478bc0b6a19cc9ed09ee5e1e2750abbea7ec8d2ed31df90c7d364d4e2f36c31eb410c10451b" } ], - "expectedNewRoot": "0xcbcec05248845b79355514270b0713a5e268c85c061dedb8a59bf3282758a1ae", + "expectedNewRoot": "0xef93c505150dfaaa101569227779e07cabf807ea204c07d5ef898d8ba3e767fc", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -767,12 +736,22 @@ "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xef93c505150dfaaa101569227779e07cabf807ea204c07d5ef898d8ba3e767fc" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d88016345785d8a0000808203e88080cca9bd00c0a9af18cdc17e693951b88b293bae8ed236ff7dcf2684c478bc0b6a19cc9ed09ee5e1e2750abbea7ec8d2ed31df90c7d364d4e2f36c31eb410c10451b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0xe1a98171d7abdc1017d8ac3e1ab62e72fdb468c368b1951f8c3a150019380cb0", + "inputHash": "0x5122aa5cab6e194ffa5b060d0484cb84890f380be7f9fa9ab381a361bdf3414f", "batchHashData": "0x6f70724ce6f47451d23b55925247248d9425b1e36e759ed8108535bfb58fa2b9", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -825,17 +804,8 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8806f05b59d3b20000808203e880809990717b4c80d955cacf4a765d3bfefd707511d66e0a482510906d119fa285c7232ccd442c5b618558b62175f01d9f45ff655d480f36394ea50a0b7dc52bc3331c" } ], - "expectedNewRoot": "0x819b4c3a481bec09372972b2d5cc3f9b7e455a2d63247bb962d6f412838cd914", + "expectedNewRoot": "0x3bcdc5336d1568bd1a2303148641c0e5d4bd218a1ecdd20ec5509d867fcdee5b", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x8397a02db0909df274170a8a1a4e45f6d7f24e66606976cd00960d8c6c850c97" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -858,12 +828,23 @@ "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x3bcdc5336d1568bd1a2303148641c0e5d4bd218a1ecdd20ec5509d867fcdee5b", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x68ea5f211ce52caedf2fb0862d38f7058d4d959f56ae0328e67b6ad27c39f0e3" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xf080862b4f29945e00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880802338447c58501088b071192ec4b44c696f2f1cdf4ff8182ecb8d0cd4ea83c428034c91620ac27f2870e1568e30e1db2ce9c0a05f2b03b20d017b3a0410edc6571cee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8806f05b59d3b20000808203e880809990717b4c80d955cacf4a765d3bfefd707511d66e0a482510906d119fa285c7232ccd442c5b618558b62175f01d9f45ff655d480f36394ea50a0b7dc52bc3331c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x06af46765475a04bdbddc08f136d47c942d42eb45c76eca9b381ce721846e766", + "inputHash": "0xbe474d18958df15856e736ed6a380aa31fec6d0129a47ea8fb2ee66ef2018e5f", "batchHashData": "0x22a6bee1dba88693c69e4f7e941a4ec4434b1c455c732e0cb0e4704c3a8112fb", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -942,17 +923,8 @@ "rawTx": "0xf86e03843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d8806f05b59d3b20000808207f3a047b4f7d735dfadefc585bf24d9bd2267438f9bc92d1ab4f65fa9a6d90cc33858a00720a7da26cad22c05bf1358011c95caec969b8b9177af91c0e90dac3d02f6b3" } ], - "expectedNewRoot": "0x2ff312edcaed6207129c4480b68156f7beb9811728038e4d4903be606bff2b9a", + "expectedNewRoot": "0x1728bbf4b26d2deed23828f754327918a09cfbf51b30aa0491262e1bd57b74ae", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -975,12 +947,25 @@ "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x04", + "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0xc0bffee6e1a84dcffcaa38b0be73df1042376c3d830ec6468d96822bd3a5bf", + "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x1728bbf4b26d2deed23828f754327918a09cfbf51b30aa0491262e1bd57b74ae", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xee4ac17453008a41c0c1bdab97ef6834205bd6c2d4172156ea72fb2ce0c41a91", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xb95b11cb9fa58551cfa708c0a52026051efbf6403bf882633311eec92a650d03" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731bee01843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d8806f05b59d3b20000808203e88080c15e7f0afea365929bff2dea9b1c219ce7d656e9829c30c5736bfa499fee328132ee39a354417f726d717e68b6b019214721808753aba88a68eea6c57ca136521cee02843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e88080bff0e780ba7db409339fd3f71969fa2cbf1b8535f6c725a1499d3318d3ef9c2b6340ddfab84add2c188f9efddb99771db1fe621c981846394ea4f035c85bcdd51bee03843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d8806f05b59d3b20000808203e8808047b4f7d735dfadefc585bf24d9bd2267438f9bc92d1ab4f65fa9a6d90cc338580720a7da26cad22c05bf1358011c95caec969b8b9177af91c0e90dac3d02f6b31b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0xe97f3a43133e9823c6677adf2ee6a73bcb4c362d5ec2d72845c3595d3ef95ab4", + "inputHash": "0xf7472b968abc368d488805dd0fbaa8dc94916df0382cbb4556aa3e5ba20bc35a", "batchHashData": "0x424ca9c22f473aa8474b37975ce1a94ffba84dec4a1b2b2dfaa1bf767152719e", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -1051,17 +1036,8 @@ "rawTx": "0xf86e80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808207f3a01cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e7a05d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad73" } ], - "expectedNewRoot": "0x2fca4b67b066c1be0240768cc749cd343796d2f7696de5179e0b9ff0a79442c4", + "expectedNewRoot": "0xc40f22fe974c6952e1cb169fee72f9f3d202c6c95b185c72b7cd9689837b4c52", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x7281dd8612498e474632eabb78a60346362053c5313a496edd646ca6db4f62ad" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -1094,12 +1070,23 @@ }, "hashBytecode": "0x062131fa38229aa99857628dfce11250ce3012071d0ec4c670667952350df87c", "bytecodeLength": 643 + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xc40f22fe974c6952e1cb169fee72f9f3d202c6c95b185c72b7cd9689837b4c52", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xf93dc8f1b12c9d999966ef14dcbd65cf20feeb3b3d92bde31b58ba3025c2b350" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xf84a80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a45ef3d3dd00000000000000000000000000000000000000000000000000000000000000078203e880803943e5a952e27d85c91f61610159fd8caf0dd68db76a1df7fb52934156d9ec935ceec6b0f908e36ee8b2c70350b3813d72558572ff95deac79069168e68726571cee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x1ae2ca703708b94165c47c3befbe1021c8e424934244141fc83230505d61c2ab", + "inputHash": "0x61b226decaeabd38d1a93f46fb5019097af0dfeb0e95cd17eb6a36108c68382c", "batchHashData": "0x74cd37dc6dde2c5d2b9f6eba15e7cb1c059df44cfbd9654c55b1557ca7aca031", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -1168,17 +1155,8 @@ "rawTx": "0xf8ab01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880b844494e4bc30000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff00000000000000000000000000000000000000000000000000038d7ea4c680008207f3a0c83069009c51e411569ca78a660bbcb64e4e6709909eb99c28395fb4c787da4ca02b846bf51fcf891fb293e36a0cf5f4efd1fe7c19b2c8a1220b8308b195e80156" } ], - "expectedNewRoot": "0xc18d837127224d10a414fa4b7e57d3ce19c5d566415630526e0ead7341f26677", + "expectedNewRoot": "0x9ce7e83b81a9ecf7ec102570ae45be487d469c946f259e842c2bff180274f21c", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x144bac90dd26abcbd923370ec5155b2416fac64f542d21ad0d5a50dc15598c78" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -1208,12 +1186,23 @@ "storage": {}, "hashBytecode": "0x4816a88058a9b03290d643c0c50e7117b563074c41579b38526e7fded1b3ad23", "bytecodeLength": 534 + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x9ce7e83b81a9ecf7ec102570ae45be487d469c946f259e842c2bff180274f21c", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x8c65dba54d23886e574784d322a4a9d7ea82b4943226d0118f823a495aa9761d" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xee80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9888016345785d8a0000808203e880800aec3714591ea85d38943922d16f5f592f10abd2834c43b06253314a8591107f00e81823e7864ba979b28a6ee5eb660dfce7aa857303691ba6759d9edc5378901cf86b01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880b844494e4bc30000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff00000000000000000000000000000000000000000000000000038d7ea4c680008203e88080c83069009c51e411569ca78a660bbcb64e4e6709909eb99c28395fb4c787da4c2b846bf51fcf891fb293e36a0cf5f4efd1fe7c19b2c8a1220b8308b195e801561b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x2cba864519a36cafe9b85103bef38d9b3ad0cb84765be691b8567cd960e36aa5", + "inputHash": "0x543b3ee0699399f4a81e6bd86793c7bfd52b3a7a4720e0d5d2bc8881ef49409f", "batchHashData": "0xedcefed860f6d77c3446ef42f9456cb73d69064223588fc44f17b5eb9b1aca69", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -1291,17 +1280,8 @@ "rawTx": "0xf88a01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4027e5d610000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff8207f3a0a04c0969f64f440a2c91e29bf9ea0b1cc8db9f33bda47c2c6899840ae46d36d7a00212c0a9f1bb015890ed0830c7fea6c52adaf85b0bf3d64448d3300c12c1bb16" } ], - "expectedNewRoot": "0xc0dcf04e5e2adb3ddeb3431855fa61fcd94b121c9b426f9374cae4a38f7ca746", + "expectedNewRoot": "0xd62c0b269ac8fb877b530fcbf1c11dcf84b7346da86d19b1446757b09ea2a8e0", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x2535fbb1a1509a05832eb23bd775b7bb726f6a24183283935b5fb1096ff88c28" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -1333,12 +1313,23 @@ }, "hashBytecode": "0xbfbd82130765fb7f1f8d2329c86aa82d679e04c896878ed0dbc8a151b4e696b8", "bytecodeLength": 574 + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xd62c0b269ac8fb877b530fcbf1c11dcf84b7346da86d19b1446757b09ea2a8e0", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x7862cc5ce2be4baee96a3f41e3903b00918a77e7d59f8f97939081eff34b40a6" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xee80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9888016345785d8a0000808203e880800aec3714591ea85d38943922d16f5f592f10abd2834c43b06253314a8591107f00e81823e7864ba979b28a6ee5eb660dfce7aa857303691ba6759d9edc5378901cf84a01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4027e5d610000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff8203e88080a04c0969f64f440a2c91e29bf9ea0b1cc8db9f33bda47c2c6899840ae46d36d70212c0a9f1bb015890ed0830c7fea6c52adaf85b0bf3d64448d3300c12c1bb161b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x4e4b628228f6c5aff26a72c5c9415b0133966f3e533771c637da019b9a0eff63", + "inputHash": "0x2383999c3a4443972e4ac466600f87cb92d3102da89b1b2a59d0e00f59737271", "batchHashData": "0xf28d5240092614f023fa7e231235b71ccce80515fb785f00469e6a0367c10a48", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 @@ -1416,17 +1407,8 @@ "rawTx": "0xf88a02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4027e5d610000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff8207f3a028e62eb40661fd098322a7211dca25a6b56f60eefb24ede9607d2603a09e4c65a03be289b7a729a18336e2f9f4a4f52c4fadc4274d1fd42dd8965deeb8634ddddc" } ], - "expectedNewRoot": "0xf02f68cf7b3dafb765e9dde78b91a40e7798a8d48edcd821ddbf9d4c3e289838", + "expectedNewRoot": "0x4ab76672016469aa1aefaa43b54538c776cf4a435554cadd3c79f23aa5fc79a2", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { - "balance": "0", - "nonce": "0", - "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x5321e97596347ed38932cf308e5346af6208deaaf459b5ecc18ca2b23d97d15c" - }, - "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", - "bytecodeLength": 0 - }, "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", @@ -1458,12 +1440,24 @@ }, "hashBytecode": "0x53ab04d3e34c23abaf57efc4acd9e54df7c39f82521e3928bebf6ce95ca6d6ca", "bytecodeLength": 574 + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x03", + "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x4ab76672016469aa1aefaa43b54538c776cf4a435554cadd3c79f23aa5fc79a2", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x86980b51ece595cd4e767b1dbcbeacd6a369dfab2b2edf96f686d6960acc3e64", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x4eb52943027ac58612df2bcdef48c0a3d52657a24a3fb49fd718a3d30fa9d061" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xf9032880843b9aca00830f42408080b90314608060405234801561001057600080fd5b506040516102f43803806102f483398181016040528101906100329190610054565b80600081905550506100a7565b60008151905061004e81610090565b92915050565b60006020828403121561006a5761006961008b565b5b60006100788482850161003f565b91505092915050565b6000819050919050565b600080fd5b61009981610081565b81146100a457600080fd5b50565b61023e806100b66000396000f3fe6080604052600436106100385760003560e01c8063027e5d6114610041578063aa8c217c1461006a578063d997ccb3146100955761003f565b3661003f57005b005b34801561004d57600080fd5b5061006860048036038101906100639190610123565b6100b3565b005b34801561007657600080fd5b5061007f6100ff565b60405161008c9190610189565b60405180910390f35b61009d610105565b6040516100aa919061016e565b60405180910390f35b8073ffffffffffffffffffffffffffffffffffffffff166108fc6000549081150290604051600060405180830381858888f193505050501580156100fb573d6000803e3d6000fd5b5050565b60005481565b60006001905090565b60008135905061011d816101f1565b92915050565b600060208284031215610139576101386101ec565b5b60006101478482850161010e565b91505092915050565b610159816101b6565b82525050565b610168816101e2565b82525050565b60006020820190506101836000830184610150565b92915050565b600060208201905061019e600083018461015f565b92915050565b60006101af826101c2565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b6101fa816101a4565b811461020557600080fd5b5056fea26469706673582212208cb33f54873dbf0b74ff9c230fc2e7522ca18ea82fcce1f4a1904abe1c1043fe64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000018203e88080579b8010f25b1f95158686736e9930d4ebd2a3c0ef4e604d0e76684e491f735d30eb46fe9a689148f3559c23bd5566fcaed97f61be389c4fb96f735b464ec5031cee01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9888016345785d8a0000808203e88080da8130f8fd64ed97277e306b9aca4f42ece0e2352d74823b0d31172fe0d8be686bbb35fb63de10207ea586da635ff92c0097acf501aef7940b733317ba4e0d751bf84a02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4027e5d610000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff8203e8808028e62eb40661fd098322a7211dca25a6b56f60eefb24ede9607d2603a09e4c653be289b7a729a18336e2f9f4a4f52c4fadc4274d1fd42dd8965deeb8634ddddc1b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0xc5a6c303491abf0ee5b349ec58c28d357b3b27798820803c0831206b7d98bbc8", + "inputHash": "0x4bf065652406ae036080835d6f8e0b08dac2b7dc8203664efcedd8c485eefe7a", "batchHashData": "0x6f9e2eecfdf9fc19be6be2b17fe3d9f498639ebdf225808adbe0a6fb55308d5d", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 diff --git a/test/helpers/test-vectors/selfdestruct/selfdestruct.json b/test/helpers/test-vectors/selfdestruct/selfdestruct.json index aeccba76..217feaf3 100644 --- a/test/helpers/test-vectors/selfdestruct/selfdestruct.json +++ b/test/helpers/test-vectors/selfdestruct/selfdestruct.json @@ -90,22 +90,25 @@ "rawTx": "0xf86a02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880842b68b9c68207f4a0f5b684b995dd9549bb5fd2ed23d3b388f75f559b14110277b4ae7de5bd7775efa01be51078330d1ef03f0e4fe0271e8e2502b6e98c1f7664a5e2aeae3ab04156d4" } ], - "expectedNewRoot": "0xe5c6a1c7b9db378130a4d989c74abfb51808371ff9f7b3750ec81b75b4a4d6b4", + "expectedNewRoot": "0x847ca0b65fb5c7907964d9712324dfab9ea8c242a324ac58aece531c2adb8e2c", "expectedNewLeafs": { - "0x0000000000000000000000000000000000000000": { + "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5": "0x2761798d338f390fa233a5ff12c7fd6a50ab8a82e559c25e2895516c3e4213c6" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, - "0xae4bb80be56b819606589de61d5ec3b522eeb032": { + "0x0000000000000000000000000000000000000000": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x03", + "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x847ca0b65fb5c7907964d9712324dfab9ea8c242a324ac58aece531c2adb8e2c", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x3aaec37b8653faa23ed271dcf8fbf6f2bf9267899091d58f7e13595ac08441b7", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x357565063d5cdb1fe70b7bb88f9f770721056ac7bcf8c438463bc43076de532c" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -145,7 +148,7 @@ "batchL2Data": "0xf84a80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4718da7ee00000000000000000000000000000000000000000000000000000000000000018203e880800f169b9405991a5f4a96f9d1d726e43ab9d42e1d0b4daac7ec9b4797dd39e9b724cf48c46cbc1924dd25adc6536ef259bedcd822979734ae347e01d715303ad01cee01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9884075bcd15845cfb28e78203e88080b22ac440612ebcd45672cfc7dcbbbe7cde784294e5076827b1812f9ea9eee2736c3c774150514808053972653f74bbeb33918dc74aa9182cee7993283b1faa541bea02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880842b68b9c68203e88080f5b684b995dd9549bb5fd2ed23d3b388f75f559b14110277b4ae7de5bd7775ef1be51078330d1ef03f0e4fe0271e8e2502b6e98c1f7664a5e2aeae3ab04156d41c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x2b71e21eac7f8300986f816e6d683df0df9aa8413ced21fae79d7566cd7b010f", + "inputHash": "0x3a897d2d0b7a582febb4265bb4ce372419db1d81f15d4d6b8a026c4d3c5d52fc", "batchHashData": "0x1f9553beb9fe9b03b2e19a00c41dfd2d9b711afbc9c05d29ab00d430542d7d12", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 diff --git a/test/helpers/test-vectors/zkevm-db/state-transition.json b/test/helpers/test-vectors/zkevm-db/state-transition.json index 13b64bb6..c31ec733 100644 --- a/test/helpers/test-vectors/zkevm-db/state-transition.json +++ b/test/helpers/test-vectors/zkevm-db/state-transition.json @@ -34,7 +34,7 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x5a52a0ee8577a03e831f627fead1921da142f3820f5880118e98ae6362626b3c", + "expectedNewRoot": "0x2437b34ce149828e5f5a443a2d502c1c948a17edecadb3d15b9eaf0be2cb2bdd", "expectedNewLeafs": { "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900000000000000000", From ba2775323adb56655be76e2879ccb91a5d605fe6 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Thu, 27 Oct 2022 15:57:05 +0200 Subject: [PATCH 10/40] update block-info test --- test/helpers/test-vectors/block-info/block-info-batches.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/helpers/test-vectors/block-info/block-info-batches.json b/test/helpers/test-vectors/block-info/block-info-batches.json index 6fa017d5..3657ede6 100644 --- a/test/helpers/test-vectors/block-info/block-info-batches.json +++ b/test/helpers/test-vectors/block-info/block-info-batches.json @@ -328,7 +328,7 @@ "nonce": "0" }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { - "balance": "199999545404000000000", + "balance": "199999548204000000000", "nonce": "14" }, "0x1275fbb540c8efc58b812ba83b0d0b8b9917ae98": { @@ -344,7 +344,7 @@ } }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { - "balance": "100000454596000000000", + "balance": "100000451796000000000", "nonce": "1" }, "0x0000000000000000000000000000000000000000": { From a8f59a0804dfa6d5f1d28ad3faaabd6087737ae1 Mon Sep 17 00:00:00 2001 From: Ignasirv Date: Thu, 27 Oct 2022 19:02:18 +0200 Subject: [PATCH 11/40] Fix bug at _updateSystemStorage --- src/processor.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/processor.js b/src/processor.js index f93f62e2..b0a450bb 100644 --- a/src/processor.js +++ b/src/processor.js @@ -472,6 +472,7 @@ module.exports = class Processor { // Update smt with new state root const stateRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [newTxCount, Constants.STATE_ROOT_STORAGE_POS]); + const tmpStateRoot = smtUtils.h4toString(this.currentStateRoot) this.currentStateRoot = await stateUtils.setContractStorage( Constants.ADDRESS_SYSTEM, this.smt, @@ -483,7 +484,7 @@ module.exports = class Processor { await this.vm.stateManager.putContractStorage( addressInstance, toBuffer(stateRootPos), - toBuffer(smtUtils.h4toString(this.currentStateRoot)), + toBuffer(tmpStateRoot), ); // store data in internal DB From e83d517776651b77309c2cdb2533e9834ddcbf1d Mon Sep 17 00:00:00 2001 From: krlosMata Date: Mon, 31 Oct 2022 12:40:40 +0100 Subject: [PATCH 12/40] minor changes --- src/constants.js | 2 +- src/processor.js | 8 ++-- .../block-info/block-info-batches.json | 48 +++++++++---------- .../test-vectors/block-info/block-info.json | 12 ++--- .../end-to-end/state-transition.json | 4 +- .../processor/state-transition.json | 42 ++++++++-------- .../selfdestruct/selfdestruct.json | 6 +-- 7 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src/constants.js b/src/constants.js index 8852bbf0..af5a7f89 100644 --- a/src/constants.js +++ b/src/constants.js @@ -37,4 +37,4 @@ module.exports.BATCH_GAS_LIMIT = 30000000; module.exports.BATCH_DIFFICULTY = 0; module.exports.ADDRESS_SYSTEM = '0x0000000000000000000000000000000000000000'; module.exports.STATE_ROOT_STORAGE_POS = 0; -module.exports.LAST_TX_STORAGE_POS = '0x0000000000000000000000000000000000000000000000000000000000000000'; +module.exports.LAST_TX_STORAGE_POS = 0; diff --git a/src/processor.js b/src/processor.js index b0a450bb..8d114651 100644 --- a/src/processor.js +++ b/src/processor.js @@ -453,7 +453,7 @@ module.exports = class Processor { this.currentStateRoot, [Constants.LAST_TX_STORAGE_POS], // Storage key of last tx count ); - const newTxCount = ethers.BigNumber.from(lastTxCount[0] + 1n).toHexString(); + const newTxCount = Number(Scalar.add(lastTxCount[Constants.LAST_TX_STORAGE_POS], 1n)); // Update smt with new last tx count this.currentStateRoot = await stateUtils.setContractStorage( Constants.ADDRESS_SYSTEM, @@ -466,13 +466,13 @@ module.exports = class Processor { await this.vm.stateManager.putContractStorage( addressInstance, - toBuffer(Constants.LAST_TX_STORAGE_POS), - toBuffer(newTxCount.toString(16)), + toBuffer(`0x${Constants.LAST_TX_STORAGE_POS.toString(16).padStart(64, '0')}`), + toBuffer(Number(newTxCount)), ); // Update smt with new state root const stateRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [newTxCount, Constants.STATE_ROOT_STORAGE_POS]); - const tmpStateRoot = smtUtils.h4toString(this.currentStateRoot) + const tmpStateRoot = smtUtils.h4toString(this.currentStateRoot); this.currentStateRoot = await stateUtils.setContractStorage( Constants.ADDRESS_SYSTEM, this.smt, diff --git a/test/helpers/test-vectors/block-info/block-info-batches.json b/test/helpers/test-vectors/block-info/block-info-batches.json index 3657ede6..573a4273 100644 --- a/test/helpers/test-vectors/block-info/block-info-batches.json +++ b/test/helpers/test-vectors/block-info/block-info-batches.json @@ -168,13 +168,13 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x07", - "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x4541d85b56f6cb70f907b5b1ca37ac40a38e896b9d7da523bf7fddc903a9bffb", - "0x2b232c97452f0950c94e2539fdc7e69d21166113cf7a9bcb99b220a3fe5d720a": "0x46bd873cb0567ab9b072721df832c2c2bbc7d54751697e3b30392750bc48b554", - "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x32c2d061ca69b1a8d7dafeca5d5a62c0853f4571b2193efa9cb15a306d0e0320", - "0x62103cf3131c85df57aad364d21cba02556d3092d6cb54c298c2e7726a7870bd": "0xa1de15e72d6b9fc1adc09e2226a40bb6aae3542b29b091b47fd6021c7b574ed1", - "0x870253054e3d98b71abec8fff9ebf8a15d167f15909091a800d4acaab9266d2b": "0xf60404eddfffdf6feae70912692684d1b3f905535c0e8d3822bde13a37421087", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xe8c577de5249dd03e916ee78ccc58dd3b87a41f3e85bc02e5b67fb9f92b1b0e3", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x105f23ed606db50013d457a612544dca7912842570c1c66f3c04c64f518f2a27" + "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x910ac9c544a5fd9d37389ed357857b935f9e253da947723ac4bd41d157d77f85", + "0x2b232c97452f0950c94e2539fdc7e69d21166113cf7a9bcb99b220a3fe5d720a": "0xe4a8194fd8125f2ef664599eaa40e29e013b38ef7dd8a339444960b23360f8ba", + "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x313821a316d9a47222243d1d76a96d8d138b2270cc15f57e9d13a8733a402761", + "0x62103cf3131c85df57aad364d21cba02556d3092d6cb54c298c2e7726a7870bd": "0x7444f8762809c84c95dd06538854f15cfd20e1b22e83dd3fadad22d0ad9d32d6", + "0x870253054e3d98b71abec8fff9ebf8a15d167f15909091a800d4acaab9266d2b": "0xc9b54782e6a158b1c7a4cba8bf5a03d05212fb0413df0fd83d884588b7a30cb5", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x446f50a0631f2ab906526ebce969d9184a36331e4b0612eeff6dc49be6ac1a2e", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4" } }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { @@ -321,7 +321,7 @@ "rawTx": "0xf88a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018207f3a068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c4829a05695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef6" } ], - "expectedNewRoot": "0x4b033599641e535e329aa5fad45dd6d97e7439518e96dac55bb616a428a3230a", + "expectedNewRoot": "0xef0503baaf368d410f58b375790b015f4c137aeb1cbfdab3bdbb96a66b10cfe3", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -340,7 +340,7 @@ "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0a", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x01c9c380", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x105f23ed606db50013d457a612544dca7912842570c1c66f3c04c64f518f2a27" + "0x0000000000000000000000000000000000000000000000000000000000000001": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4" } }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { @@ -352,27 +352,27 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0e", - "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x4541d85b56f6cb70f907b5b1ca37ac40a38e896b9d7da523bf7fddc903a9bffb", - "0x2b232c97452f0950c94e2539fdc7e69d21166113cf7a9bcb99b220a3fe5d720a": "0x46bd873cb0567ab9b072721df832c2c2bbc7d54751697e3b30392750bc48b554", - "0x62103cf3131c85df57aad364d21cba02556d3092d6cb54c298c2e7726a7870bd": "0xa1de15e72d6b9fc1adc09e2226a40bb6aae3542b29b091b47fd6021c7b574ed1", - "0x7ca5987043ac53676c6e30f77ff1a34e98a5fae86b27e5d0cf74ac1711b8a8db": "0x6fe02fcace5318d26bca2b1099d3d7874dc4b5a3967e480b12bf84f4b15bd93c", - "0x870253054e3d98b71abec8fff9ebf8a15d167f15909091a800d4acaab9266d2b": "0xf60404eddfffdf6feae70912692684d1b3f905535c0e8d3822bde13a37421087", - "0x9115655cbcdb654012cf1b2f7e5dbf11c9ef14e152a19d5f8ea75a329092d5a6": "0xd138aeaa508786b63573ca5f577d8acf9a2efa58938321d8b176d02a3fcab85d", - "0xd0a75bf7ea87fba36ff8a17b4519c45fb727609e6c9161b106680b25b3e2705f": "0x53b2fab67833a51eca2281436b7686570b1f5c44fff723a86b66de104ed7cbb9", - "0xe9bc119772df33ac6a685b572c53e6a4988bbdde79a460a23bed029791109f39": "0x4b033599641e535e329aa5fad45dd6d97e7439518e96dac55bb616a428a3230a", - "0x324fdf7bfe7bd2828491073f0b7868a9a19ee3eff384c2805040be3e426447f5": "0xbe1505734ccca4477056d410f17fa79313fad7fb11f5e7d1beb4ac7204d3e97e", - "0x3e9abaca0aad9ede81f4474766c846d8539f70688e1c8f521bbe1597874e3dc4": "0x2b624bf75ccd7ef5190fecc83999773732a62fef8373c483feef168c6e033301", - "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x32c2d061ca69b1a8d7dafeca5d5a62c0853f4571b2193efa9cb15a306d0e0320", - "0x5b8b9143058ba3a137192c563ca6541845e62f0a2f9a667aac4db2fa3c334e3c": "0x403488044e6a53b26c4313811ebafb3c89233e16660337e4d66af36d73b6e79b", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xe8c577de5249dd03e916ee78ccc58dd3b87a41f3e85bc02e5b67fb9f92b1b0e3", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x105f23ed606db50013d457a612544dca7912842570c1c66f3c04c64f518f2a27" + "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x910ac9c544a5fd9d37389ed357857b935f9e253da947723ac4bd41d157d77f85", + "0x2b232c97452f0950c94e2539fdc7e69d21166113cf7a9bcb99b220a3fe5d720a": "0xe4a8194fd8125f2ef664599eaa40e29e013b38ef7dd8a339444960b23360f8ba", + "0x62103cf3131c85df57aad364d21cba02556d3092d6cb54c298c2e7726a7870bd": "0x7444f8762809c84c95dd06538854f15cfd20e1b22e83dd3fadad22d0ad9d32d6", + "0x7ca5987043ac53676c6e30f77ff1a34e98a5fae86b27e5d0cf74ac1711b8a8db": "0x612fad8246cfe8c454d1eb62225c78d2415dfcc9d1c885771823f36849964ac1", + "0x870253054e3d98b71abec8fff9ebf8a15d167f15909091a800d4acaab9266d2b": "0xc9b54782e6a158b1c7a4cba8bf5a03d05212fb0413df0fd83d884588b7a30cb5", + "0x9115655cbcdb654012cf1b2f7e5dbf11c9ef14e152a19d5f8ea75a329092d5a6": "0x61e305096fd5925f5a0691f5a37298950c9c6f60d396762d5e2cf77ce5e684a1", + "0xd0a75bf7ea87fba36ff8a17b4519c45fb727609e6c9161b106680b25b3e2705f": "0x4f8e1a3450848b3ad47ec135de875ac316cea9a11d02a31f42d09b48d1b2d0d0", + "0xe9bc119772df33ac6a685b572c53e6a4988bbdde79a460a23bed029791109f39": "0xbcc6635fe6b1b2657a2d88abf8a1ff104442d6e49e2927bbbb92126481d3ecbe", + "0x324fdf7bfe7bd2828491073f0b7868a9a19ee3eff384c2805040be3e426447f5": "0xb0ff1afbfb2008012ac6d9dcac864da1a4a18aa82c59d448153ac98e1159e718", + "0x3e9abaca0aad9ede81f4474766c846d8539f70688e1c8f521bbe1597874e3dc4": "0x7696966fa5b737a59ead4d4a611231270cf25579496763d14e4e910b034fa6dd", + "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x313821a316d9a47222243d1d76a96d8d138b2270cc15f57e9d13a8733a402761", + "0x5b8b9143058ba3a137192c563ca6541845e62f0a2f9a667aac4db2fa3c334e3c": "0x9d5246dd4b947924ca64272861a4cf6c5bc9c402967b69ded98d9d91f9500fc0", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x446f50a0631f2ab906526ebce969d9184a36331e4b0612eeff6dc49be6ac1a2e", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4" } } }, "batchL2Data": "0xea07843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800be264304cfc20c400929c82d1435cfbaa18e9a49c34ce65274633820803c415132ab24e00f892d77ad39c87e897772100e3323f31915a3e5eb261e056d99bc31bea08843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e88080775e9a77a45dafb120ec840926129c5db8ad3843722de88f2c7f6df4383c92fe0176dcd120e97ff6a1a1d60150aac3fdbca81bbfd1e2e9349ed9da4fa3bd85a81bea09843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080f969b5ab22f54db86a57efcfa83f3369047d328d2c56044bd49d7f863e69ed2b5a95c2b1b41801a5b4d7bb548829fe5a51c72dd5e5a08bd2a56f49bc3246a3081cea0a843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080b60beddfce8bf365e93cb4f88f45ed0e5649659de56dbf52332e6c9c16aa10bd576fb90bd967e2495fe8fa09d75d58b82668c54dab54d91f5e4ab0d76d2649ae1bea0b843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e88080416d143b11a02e0c28344feb6af0f90ecb5b0bd5eec26047b25c0f775502be751e40d32fefe94aee39ad9b2605afeb2e86f31b56ac82874f841054c6a01331851bea0c843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080a1ec9b236321a7d3545cfe1a1baedf65d75e589223d732d424576756adb0396e74470d226d5b61895150d96dbd1b1ba8a8ad69a6bf9311a141ece602b6420d961cf84a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018203e8808068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c48295695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef61b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x59759c2f4f05968bc5dfa8e28de405ba5c0381c1443fbeaf4275be605b1c1897", + "inputHash": "0x93216487e1bcf71bef629afedcbf40f7f1c22f0af2326f7aa47f4c4a1bf1a4dd", "batchHashData": "0x6c8a80b510739fe5f5959dc03d074979d407915f5b4f9b1cb5ba97f469b85b08", "timestamp": 1944498031 } diff --git a/test/helpers/test-vectors/block-info/block-info.json b/test/helpers/test-vectors/block-info/block-info.json index 125ea7ac..58c7ebae 100644 --- a/test/helpers/test-vectors/block-info/block-info.json +++ b/test/helpers/test-vectors/block-info/block-info.json @@ -152,12 +152,12 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x06", - "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x4541d85b56f6cb70f907b5b1ca37ac40a38e896b9d7da523bf7fddc903a9bffb", - "0x2b232c97452f0950c94e2539fdc7e69d21166113cf7a9bcb99b220a3fe5d720a": "0x46bd873cb0567ab9b072721df832c2c2bbc7d54751697e3b30392750bc48b554", - "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x32c2d061ca69b1a8d7dafeca5d5a62c0853f4571b2193efa9cb15a306d0e0320", - "0x62103cf3131c85df57aad364d21cba02556d3092d6cb54c298c2e7726a7870bd": "0xa1de15e72d6b9fc1adc09e2226a40bb6aae3542b29b091b47fd6021c7b574ed1", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xe8c577de5249dd03e916ee78ccc58dd3b87a41f3e85bc02e5b67fb9f92b1b0e3", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x105f23ed606db50013d457a612544dca7912842570c1c66f3c04c64f518f2a27" + "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x910ac9c544a5fd9d37389ed357857b935f9e253da947723ac4bd41d157d77f85", + "0x2b232c97452f0950c94e2539fdc7e69d21166113cf7a9bcb99b220a3fe5d720a": "0xe4a8194fd8125f2ef664599eaa40e29e013b38ef7dd8a339444960b23360f8ba", + "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x313821a316d9a47222243d1d76a96d8d138b2270cc15f57e9d13a8733a402761", + "0x62103cf3131c85df57aad364d21cba02556d3092d6cb54c298c2e7726a7870bd": "0x7444f8762809c84c95dd06538854f15cfd20e1b22e83dd3fadad22d0ad9d32d6", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x446f50a0631f2ab906526ebce969d9184a36331e4b0612eeff6dc49be6ac1a2e", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 diff --git a/test/helpers/test-vectors/end-to-end/state-transition.json b/test/helpers/test-vectors/end-to-end/state-transition.json index b45ef6f2..6f1d47fe 100644 --- a/test/helpers/test-vectors/end-to-end/state-transition.json +++ b/test/helpers/test-vectors/end-to-end/state-transition.json @@ -191,8 +191,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x2b6bad53688f55d8eb28dd212818d98f8c6f6b2a8722c40351cb0f77a4aeaf04", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xd22991f8c61a2efc00768d9380250fb29cce13fa2060c92f5e215c5ae40b9d44" + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x9970e6a523824d444a6ba79b6980e99931b29252ff3d8c7953986218de5660be", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x459d9ffe9e0bf9233d667aa9c0cc4d37b22eb626e22dccc9b9a7bdf2958a790a" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 diff --git a/test/helpers/test-vectors/processor/state-transition.json b/test/helpers/test-vectors/processor/state-transition.json index 1d982496..fa7ddd32 100644 --- a/test/helpers/test-vectors/processor/state-transition.json +++ b/test/helpers/test-vectors/processor/state-transition.json @@ -64,7 +64,7 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x2437b34ce149828e5f5a443a2d502c1c948a17edecadb3d15b9eaf0be2cb2bdd" + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x2e4da9d4a701f08194a0a19935914180db9a0ef4405fae8aa5a16043dc661041" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -234,8 +234,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xced2389fe7b06ac0694e356415af4935c91ae43582c50d66a0943848cc7be041", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xb1b56b39f7644e2e9ce4024ad3a3dd0e1c71f428f41b30785c5db5885893761c" + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xab295c3f8b7d7be1e09d26c54af7aee4d92387228a8b109f38c8e05936980183", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x1f06a0244e9eb8952bc4fbbaf65d5c6b796b6aef99e3e1294d27679e79e91ac4" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -545,7 +545,7 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x39ef544fa693a502749976de4f25a16446fdb4d314a594abf3abafb7fd82cd53" + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xf7daaedd9bcff0e15bf146595e386a22e1e1282e3409eb4df8bbc03b91084901" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -663,7 +663,7 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xb95b11cb9fa58551cfa708c0a52026051efbf6403bf882633311eec92a650d03" + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x14295862abc2c972cfa9600e0230fa0683382845053457e06d41e340f67fa33e" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -742,7 +742,7 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xef93c505150dfaaa101569227779e07cabf807ea204c07d5ef898d8ba3e767fc" + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xd5572151c529633609f28d171070f4881f1768c2143013f418ed1ede6dfda442" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -834,8 +834,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x3bcdc5336d1568bd1a2303148641c0e5d4bd218a1ecdd20ec5509d867fcdee5b", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x68ea5f211ce52caedf2fb0862d38f7058d4d959f56ae0328e67b6ad27c39f0e3" + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xa73773a7a41567ff4a40a05e0acd18844427db20455ca8d84b6365a02072fefc", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x03a2a0b418a31e83241b34d0cb319306345979a3cbbecad95dc1ca347c4d8e8d" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -953,10 +953,10 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x04", - "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0xc0bffee6e1a84dcffcaa38b0be73df1042376c3d830ec6468d96822bd3a5bf", - "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x1728bbf4b26d2deed23828f754327918a09cfbf51b30aa0491262e1bd57b74ae", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xee4ac17453008a41c0c1bdab97ef6834205bd6c2d4172156ea72fb2ce0c41a91", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xb95b11cb9fa58551cfa708c0a52026051efbf6403bf882633311eec92a650d03" + "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0xe992bbdd0e4560a3744ef9d5a8a864f3a9a742c35202edd772999b93bf9ca653", + "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x05efb4dcc801881c0ebe4f60290141243574f8e776d67de8aabf93a93904a647", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x2710d11ecdc7a7d5c3981acb527e9f76f094c1eda5a630e05b51e4a948021023", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x14295862abc2c972cfa9600e0230fa0683382845053457e06d41e340f67fa33e" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1076,8 +1076,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xc40f22fe974c6952e1cb169fee72f9f3d202c6c95b185c72b7cd9689837b4c52", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xf93dc8f1b12c9d999966ef14dcbd65cf20feeb3b3d92bde31b58ba3025c2b350" + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x85f464ada4c2c3bbc746fe4540765e5a0c3f3e2a2ed12eb183e5172d70189553", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x64584d333ccc8964882d57ccf63c1820ad0fb1cc3857a23ce7b3233c3bf259eb" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1192,8 +1192,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x9ce7e83b81a9ecf7ec102570ae45be487d469c946f259e842c2bff180274f21c", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x8c65dba54d23886e574784d322a4a9d7ea82b4943226d0118f823a495aa9761d" + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x8cb4361a4dd1aa2c08f94dad702c4466d971e3c1cb0c5a8124e647bdd7d919", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xb8f600efdc058452c5fc97d1f4d4cdeeef5ae2ed09f375f76f2049b2d574c2a9" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1319,8 +1319,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xd62c0b269ac8fb877b530fcbf1c11dcf84b7346da86d19b1446757b09ea2a8e0", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x7862cc5ce2be4baee96a3f41e3903b00918a77e7d59f8f97939081eff34b40a6" + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xeb7d75218c4999342330c98c72223beb6f7b681e55c36acc76fe5b3780f9a34b", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x2fa66821b712f8d710d87366ea2023addb2569937d7825d09ae75bd82e64ad37" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1446,9 +1446,9 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x03", - "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x4ab76672016469aa1aefaa43b54538c776cf4a435554cadd3c79f23aa5fc79a2", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x86980b51ece595cd4e767b1dbcbeacd6a369dfab2b2edf96f686d6960acc3e64", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x4eb52943027ac58612df2bcdef48c0a3d52657a24a3fb49fd718a3d30fa9d061" + "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0xeb3afce0e8d6fd6a362928bd03a39f6bb74ed5f2c8531b1dda366a09cb442743", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x04a404e3bdfcaae8f863444c99b6723d8a7391c2b18a509bec8046fe19f662f2", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x16598cb5734432db3af62b8679d7d8e03c8ffce43186f1ee3f1721aeeda2170b" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 diff --git a/test/helpers/test-vectors/selfdestruct/selfdestruct.json b/test/helpers/test-vectors/selfdestruct/selfdestruct.json index 217feaf3..e63508c8 100644 --- a/test/helpers/test-vectors/selfdestruct/selfdestruct.json +++ b/test/helpers/test-vectors/selfdestruct/selfdestruct.json @@ -106,9 +106,9 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x03", - "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x847ca0b65fb5c7907964d9712324dfab9ea8c242a324ac58aece531c2adb8e2c", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x3aaec37b8653faa23ed271dcf8fbf6f2bf9267899091d58f7e13595ac08441b7", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x357565063d5cdb1fe70b7bb88f9f770721056ac7bcf8c438463bc43076de532c" + "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x13938fb8e32afb2e26525f686fb67ddfd8ad8d9ccfe03ff93c27b1d937ef4128", + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x08306cb24c2e6430e4758ad40037380e481024686cc6035c55e19271ab2178dc", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x6595623a07080ebd13ec7ca04a98478b25bf6d83cdc6b3e099612165d2b90866" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 From af1c19fc820d6de93879b4286f3f7c81751dae0b Mon Sep 17 00:00:00 2001 From: krlosMata Date: Fri, 21 Oct 2022 10:48:40 +0200 Subject: [PATCH 13/40] WIP --- src/constants.js | 3 +- src/contract-utils.js | 142 ++++++++++-------- src/processor.js | 67 ++++----- src/zkevm-db.js | 41 +++-- test/contract-utils.test.js | 68 ++++----- .../inputs-executor/input_executor.json | 24 +-- .../zkevm-db/state-transition.json | 3 +- test/zkevm-db.test.js | 17 ++- 8 files changed, 201 insertions(+), 164 deletions(-) diff --git a/src/constants.js b/src/constants.js index af5a7f89..46541bea 100644 --- a/src/constants.js +++ b/src/constants.js @@ -4,7 +4,8 @@ const { Scalar } = require('ffjavascript'); // Database keys module.exports.DB_LAST_BATCH = ethers.utils.id(('ZKEVM_DB_LAST_BATCH')); module.exports.DB_STATE_ROOT = ethers.utils.id(('ZKEVM_DB_STATE_ROOT')); -module.exports.DB_LOCAL_EXIT_ROOT = ethers.utils.id(('ZKEVM_DB_DB_LOCAL_EXIT_ROOT')); +module.exports.DB_ACC_INPUT_HASH = ethers.utils.id(('ZKEVM_DB_ACC_INPUT_HASH')); +module.exports.DB_LOCAL_EXIT_ROOT = ethers.utils.id(('ZKEVM_DB_LOCAL_EXIT_ROOT')); module.exports.DB_GLOBAL_EXIT_ROOT = ethers.utils.id(('ZKEVM_DB_GLOBAL_EXIT_ROOT')); module.exports.DB_ADDRESS_STORAGE = ethers.utils.id(('ZKEVM_DB_ADDRESS_STORAGE')); module.exports.DB_TOUCHED_ACCOUNTS = ethers.utils.id(('ZKEVM_DB_TOUCHED_ACCOUNTS')); diff --git a/src/contract-utils.js b/src/contract-utils.js index 84aeb200..d332704f 100644 --- a/src/contract-utils.js +++ b/src/contract-utils.js @@ -5,43 +5,31 @@ const { string2fea } = require('./smt-utils'); const getPoseidon = require('./poseidon'); /** - * Compute globalHash for STARK circuit - * @param {String} currentStateRoot - Current state Root - * @param {String} currentLocalExitRoot - Current local exit root - * @param {String} newStateRoot - New State root once the batch is processed - * @param {String} newLocalExitRoot - New local exit root once the batch is processed + * Compute accumulateInputHash = Keccak256(oldAccInputHash, batchHashData, globalExitRoot, timestamp, seqAddress) + * @param {String} oldAccInputHash - old accumulateInputHash * @param {String} batchHashData - Batch hash data - * @param {Number} numBatch - Batch number + * @param {String} globalExitRoot - Global Exit Root * @param {Number} timestamp - Block timestamp - * @param {Number} chainID - L2 chainID - * @returns {String} - global hash in hex encoding + * @param {String} sequencerAddress - Sequencer address + * @returns {String} - accumulateInputHash in hex encoding */ -function calculateStarkInput( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, +function calculateAccInputHash( + oldAccInputHash, batchHashData, - numBatch, + globalExitRoot, timestamp, - chainID, + sequencerAddress, ) { - const currentStateRootHex = `0x${Scalar.e(currentStateRoot).toString(16).padStart(64, '0')}`; - const currentLocalExitRootHex = `0x${Scalar.e(currentLocalExitRoot).toString(16).padStart(64, '0')}`; - const newStateRootHex = `0x${Scalar.e(newStateRoot).toString(16).padStart(64, '0')}`; - const newLocalExitRootHex = `0x${Scalar.e(newLocalExitRoot).toString(16).padStart(64, '0')}`; + const oldAccInputHashHex = `0x${Scalar.e(oldAccInputHash).toString(16).padStart(64, '0')}`; const hashKeccak = ethers.utils.solidityKeccak256( - ['bytes32', 'bytes32', 'bytes32', 'bytes32', 'bytes32', 'uint64', 'uint64', 'uint64'], + ['bytes32', 'bytes32', 'bytes32', 'uint64', 'address'], [ - currentStateRootHex, - currentLocalExitRootHex, - newStateRootHex, - newLocalExitRootHex, + oldAccInputHashHex, batchHashData, - numBatch, + globalExitRoot, timestamp, - chainID, + sequencerAddress, ], ); @@ -49,55 +37,89 @@ function calculateStarkInput( } /** - * Compute input for SNARK circuit - * @param {String} currentStateRoot - Current state Root - * @param {String} currentLocalExitRoot - Current local exit root + * Compute input for SNARK circuit: sha256(oldStateRoot, newStateRoot, oldAccInputHash, newAccInputHash, newLocalExitRoot, oldNumBatch, newNumBatch, chainID, aggrAddress) % FrSNARK + * @param {String} oldStateRoot - Current state Root * @param {String} newStateRoot - New State root once the batch is processed - * @param {String} newLocalExitRoot - New local exit root once the batch is processed - * @param {String} batchHashData - Batch hash data - * @param {Number} numBatch - Batch number - * @param {Number} timestamp - Block timestamp + * @param {String} oldAccInputHash - initial accumulateInputHash + * @param {String} newAccInputHash - final accumulateInputHash + * @param {String} newLocalExitRoot - New local exit root once the all batches is processed + * @param {Number} oldNumBatch - initial batch number + * @param {Number} newNumBatch - final batch number * @param {Number} chainID - L2 chainID * @param {String} aggregatorAddress - Aggregator Ethereum address in hex string - * @returns {String} - sha256(globalHash, aggregatorAddress) % FrSNARK in hex encoding + * @returns {String} - input snark in hex encoding */ async function calculateSnarkInput( - currentStateRoot, - currentLocalExitRoot, + oldStateRoot, newStateRoot, newLocalExitRoot, - batchHashData, - numBatch, - timestamp, + oldAccInputHash, + newAccInputHash, + oldNumBatch, + newNumBatch, chainID, aggregatorAddress, ) { const poseidon = await getPoseidon(); const { F } = poseidon; - const hashKeccak = calculateStarkInput( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, - numBatch, - timestamp, - chainID, + // 8 bytes each field element for oldStateRoot + const feaOldStateRoot = string2fea(F, oldStateRoot); + const strFeaOldStateRoot = feaOldStateRoot.reduce( + (previousValue, currentValue) => previousValue + padZeros(currentValue.toString(16), 16), + '', ); - // 20 bytes agggregator adsress - const strAggregatorAddress = padZeros((Scalar.fromString(aggregatorAddress, 16)).toString(16), 40); + // 8 bytes each field element for newStateRoot + const feaNewStateRoot = string2fea(F, newStateRoot); + const strFeaNewStateRoot = feaNewStateRoot.reduce( + (previousValue, currentValue) => previousValue + padZeros(currentValue.toString(16), 16), + '', + ); - // 8 bytes each field element - const feaHashKeccak = string2fea(F, hashKeccak); - const strFea = feaHashKeccak.reduce( + // 8 bytes each field element for oldAccInputHash + const feaOldAccInputHash = string2fea(F, oldAccInputHash); + const strFeaOldAccInputHash = feaOldAccInputHash.reduce( (previousValue, currentValue) => previousValue + padZeros(currentValue.toString(16), 16), '', ); + // 8 bytes each field element for newAccInputHash + const feaNewAccInputHash = string2fea(F, newAccInputHash); + const strFeaNewAccInputHash = feaNewAccInputHash.reduce( + (previousValue, currentValue) => previousValue + padZeros(currentValue.toString(16), 16), + '', + ); + + // 8 bytes each field element for newLocalExitRoot + const feaNewLocalExitRoot = string2fea(F, newLocalExitRoot); + const strFeaNewLocalExitRoot = feaNewLocalExitRoot.reduce( + (previousValue, currentValue) => previousValue + padZeros(currentValue.toString(16), 16), + '', + ); + + // 8 bytes for oldNumBatch + const strOldNumBatch = padZeros(Scalar.e(oldNumBatch).toString(16), 16); + + // 8 bytes for oldNumBatch + const strNewNumBatch = padZeros(Scalar.e(newNumBatch).toString(16), 16); + + // 8 bytes for oldNumBatch + const strChainID = padZeros(Scalar.e(chainID).toString(16), 16); + + // 20 bytes agggregator adsress + const strAggregatorAddress = padZeros((Scalar.fromString(aggregatorAddress, 16)).toString(16), 40); + // build final bytes sha256 - const finalStr = strAggregatorAddress.concat(strFea); + const finalStr = strFeaOldStateRoot + .concat(strFeaNewStateRoot) + .concat(strFeaOldAccInputHash) + .concat(strFeaNewAccInputHash) + .concat(strFeaNewLocalExitRoot) + .concat(strOldNumBatch) + .concat(strNewNumBatch) + .concat(strChainID) + .concat(strAggregatorAddress); return sha256Snark(finalStr); } @@ -105,23 +127,15 @@ async function calculateSnarkInput( /** * Batch hash data * @param {String} transactions - All raw transaction data concatenated - * @param {String} globalExitRoot - Global Exit Root - * @param {String} sequencerAddress - Sequencer address * @returns {String} - Batch hash data */ function calculateBatchHashData( transactions, - globalExitRoot, - sequencerAddress, ) { - const globalExitRootHex = `0x${Scalar.e(globalExitRoot).toString(16).padStart(64, '0')}`; - return ethers.utils.solidityKeccak256( - ['bytes', 'bytes32', 'address'], + ['bytes'], [ transactions, - globalExitRootHex, - sequencerAddress, ], ); } @@ -160,7 +174,7 @@ function generateSolidityInputs( } module.exports = { - calculateStarkInput, + calculateAccInputHash, calculateSnarkInput, calculateBatchHashData, generateSolidityInputs, diff --git a/src/processor.js b/src/processor.js index 8d114651..b9071d72 100644 --- a/src/processor.js +++ b/src/processor.js @@ -15,19 +15,19 @@ const stateUtils = require('./state-utils'); const smtUtils = require('./smt-utils'); const { getCurrentDB } = require('./smt-utils'); -const { calculateStarkInput, calculateSnarkInput, calculateBatchHashData } = require('./contract-utils'); +const { calculateAccInputHash, calculateSnarkInput, calculateBatchHashData } = require('./contract-utils'); const { decodeCustomRawTxProverMethod } = require('./processor-utils'); module.exports = class Processor { /** * constructor Processor class * @param {Object} db - database - * @param {Number} batchNumber - batch number + * @param {Number} numBatch - batch number * @param {Object} poseidon - hash function * @param {Number} maxNTx - maximum number of transaction allowed * @param {Array[Field]} root - state root * @param {String} sequencerAddress . sequencer address - * @param {Array[Field]} localExitRoot - local exit root + * @param {Array[Field]} accInputHash - accumulate input hash * @param {Array[Field]} globalExitRoot - global exit root * @param {Number} timestamp - Timestamp of the batch * @param {Number} chainID - L2 chainID @@ -35,19 +35,20 @@ module.exports = class Processor { */ constructor( db, - batchNumber, + numBatch, poseidon, maxNTx, root, sequencerAddress, - localExitRoot, + accInputHash, globalExitRoot, timestamp, chainID, vm, ) { this.db = db; - this.batchNumber = batchNumber; + this.newNumBatch = numBatch; + this.oldNumBatch = numBatch - 1; this.poseidon = poseidon; this.maxNTx = maxNTx; this.F = poseidon.F; @@ -61,8 +62,7 @@ module.exports = class Processor { this.contractsBytecode = {}; this.oldStateRoot = root; this.currentStateRoot = root; - this.oldLocalExitRoot = localExitRoot; - this.newLocalExitRoot = localExitRoot; + this.oldAccInputHash = accInputHash; this.globalExitRoot = globalExitRoot; this.batchHashData = '0x'; @@ -189,7 +189,7 @@ module.exports = class Processor { async _setGlobalExitRoot() { const newStorageEntry = {}; const globalExitRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [smtUtils.h4toString(this.globalExitRoot), Constants.GLOBAL_EXIT_ROOT_STORAGE_POS]); - newStorageEntry[globalExitRootPos] = this.batchNumber; + newStorageEntry[globalExitRootPos] = this.newNumBatch; this.currentStateRoot = await stateUtils.setContractStorage( Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2, this.smt, @@ -201,7 +201,7 @@ module.exports = class Processor { await this.vm.stateManager.putContractStorage( addressInstance, toBuffer(globalExitRootPos), - toBuffer(this.batchNumber), + toBuffer(this.newNumBatch), ); // store data in internal DB @@ -512,42 +512,40 @@ module.exports = class Processor { // compute circuit inputs const oldStateRoot = smtUtils.h4toString(this.oldStateRoot); const newStateRoot = smtUtils.h4toString(this.currentStateRoot); - const oldLocalExitRoot = smtUtils.h4toString(this.oldLocalExitRoot); + const oldAccInputHash = smtUtils.h4toString(this.oldAccInputHash); const newLocalExitRoot = smtUtils.h4toString(this.newLocalExitRoot); const globalExitRoot = smtUtils.h4toString(this.globalExitRoot); this.batchHashData = calculateBatchHashData( this.getBatchL2Data(), - globalExitRoot, - this.sequencerAddress, ); - this.inputHash = calculateStarkInput( - oldStateRoot, - oldLocalExitRoot, - newStateRoot, - newLocalExitRoot, + const newAccInputHash = calculateAccInputHash( + oldAccInputHash, this.batchHashData, - this.batchNumber, + globalExitRoot, this.timestamp, - this.chainID, + this.sequencerAddress, ); + this.newAccInputHash = smtUtils.stringToH4(newAccInputHash); + this.starkInput = { oldStateRoot, - db: await getCurrentDB(this.oldStateRoot, this.db, this.F), - sequencerAddr: this.sequencerAddress, + newStateRoot, // output + oldAccInputHash, + newAccInputHash, // output + newLocalExitRoot, // output + oldNumBatch: this.oldNumBatch, + newNumBatch: this.newNumBatch, // output + chainID: this.chainID, batchL2Data: this.getBatchL2Data(), - newStateRoot, - oldLocalExitRoot, - newLocalExitRoot, globalExitRoot, - batchHashData: this.batchHashData, - inputHash: this.inputHash, - numBatch: this.batchNumber, timestamp: this.timestamp, - chainID: this.chainID, + sequencerAddr: this.sequencerAddress, + batchHashData: this.batchHashData, // sanity check contractsBytecode: this.contractsBytecode, + db: await getCurrentDB(this.oldStateRoot, this.db, this.F), }; } @@ -560,17 +558,18 @@ module.exports = class Processor { // compute circuit inputs const oldStateRoot = smtUtils.h4toString(this.oldStateRoot); const newStateRoot = smtUtils.h4toString(this.currentStateRoot); - const oldLocalExitRoot = smtUtils.h4toString(this.oldLocalExitRoot); + const oldAccInputHash = smtUtils.h4toString(this.oldAccInputHash); + const newAccInputHash = smtUtils.h4toString(this.newAccInputHash); const newLocalExitRoot = smtUtils.h4toString(this.newLocalExitRoot); return calculateSnarkInput( oldStateRoot, - oldLocalExitRoot, newStateRoot, + oldAccInputHash, + newAccInputHash, newLocalExitRoot, - this.batchHashData, - this.batchNumber, - this.timestamp, + this.oldNumBatch, + this.newNumBatch, this.chainID, aggregatorAddress, ); diff --git a/src/zkevm-db.js b/src/zkevm-db.js index e3e25de2..cbac5537 100644 --- a/src/zkevm-db.js +++ b/src/zkevm-db.js @@ -20,13 +20,14 @@ const { const { h4toString, stringToH4, hashContractBytecode } = require('./smt-utils'); class ZkEVMDB { - constructor(db, lastBatch, stateRoot, localExitRoot, poseidon, vm, smt, chainID) { + constructor(db, lastBatch, stateRoot, accInputHash, localExitRoot, poseidon, vm, smt, chainID) { this.db = db; this.lastBatch = lastBatch || 0; this.poseidon = poseidon; this.F = poseidon.F; this.stateRoot = stateRoot || [this.F.zero, this.F.zero, this.F.zero, this.F.zero]; + this.accInputHash = accInputHash || [this.F.zero, this.F.zero, this.F.zero, this.F.zero]; this.localExitRoot = localExitRoot || [this.F.zero, this.F.zero, this.F.zero, this.F.zero]; this.chainID = chainID; @@ -49,7 +50,7 @@ class ZkEVMDB { maxNTx, this.stateRoot, sequencerAddress, - this.localExitRoot, + this.accInputHash, globalExitRoot, timestamp, this.chainID, @@ -62,7 +63,7 @@ class ZkEVMDB { * @param {Object} processor - Processor object */ async consolidate(processor) { - if (processor.batchNumber !== this.lastBatch + 1) { + if (processor.newNumBatch !== this.lastBatch + 1) { throw new Error('Updating the wrong batch'); } @@ -75,31 +76,38 @@ class ZkEVMDB { // set state root await this.db.setValue( - Scalar.add(Constants.DB_STATE_ROOT, processor.batchNumber), + Scalar.add(Constants.DB_STATE_ROOT, processor.newNumBatch), h4toString(processor.currentStateRoot), ); + // Set accumulate hash input + await this.db.setValue( + Scalar.add(Constants.DB_ACC_INPUT_HASH, processor.newNumBatch), + h4toString(processor.newAccInputHash), + ); + // Set local exit root await this.db.setValue( - Scalar.add(Constants.DB_LOCAL_EXIT_ROOT, processor.batchNumber), + Scalar.add(Constants.DB_LOCAL_EXIT_ROOT, processor.newNumBatch), h4toString(processor.newLocalExitRoot), ); // Set last batch number await this.db.setValue( Constants.DB_LAST_BATCH, - Scalar.toNumber(processor.batchNumber), + Scalar.toNumber(processor.newNumBatch), ); // Set all concatenated touched address await this.db.setValue( - Scalar.add(Constants.DB_TOUCHED_ACCOUNTS, processor.batchNumber), + Scalar.add(Constants.DB_TOUCHED_ACCOUNTS, processor.newNumBatch), processor.getUpdatedAccountsBatch(), ); // Update ZKEVMDB variables - this.lastBatch = processor.batchNumber; + this.lastBatch = processor.newNumBatch; this.stateRoot = processor.currentStateRoot; + this.accInputHash = processor.newAccInputHash; this.localExitRoot = processor.newLocalExitRoot; this.vm = processor.vm; } @@ -137,6 +145,14 @@ class ZkEVMDB { return this.localExitRoot; } + /** + * Get the current local exit root + * @returns {String} local exit root + */ + getCurrentAccInpuHash() { + return this.accInputHash; + } + /** * Get smart contract storage * @param {String} address - smart contract address in hex string @@ -191,14 +207,14 @@ class ZkEVMDB { * @param {Object} db - Mem db object * @param {Object} poseidon - Poseidon object * @param {Array[Fields]} stateRoot - state merkle root - * @param {Array[Fields]} localExitRoot - exit merkle root + * @param {Array[Fields]} accHashInput - accumulate hash input * @param {Object} genesis - genesis block accounts (address, nonce, balance, bytecode, storage) * @param {Object} vm - evm if already instantiated * @param {Object} smt - smt if already instantiated * @param {Number} chainID - L2 chainID * @returns {Object} ZkEVMDB object */ - static async newZkEVM(db, poseidon, stateRoot, localExitRoot, genesis, vm, smt, chainID) { + static async newZkEVM(db, poseidon, stateRoot, accHashInput, genesis, vm, smt, chainID) { const common = Common.custom({ chainId: chainID }, { hardfork: Hardfork.Berlin }); common.setEIPs([3607]); const lastBatch = await db.getValue(Constants.DB_LAST_BATCH); @@ -265,7 +281,8 @@ class ZkEVMDB { db, 0, newStateRoot, - localExitRoot, + accHashInput, + null, poseidon, newVm, newSmt, @@ -275,12 +292,14 @@ class ZkEVMDB { // Update current zkevm instance const DBStateRoot = await db.getValue(Scalar.add(Constants.DB_STATE_ROOT, lastBatch)); + const DBAccInputHash = await db.getValue(Scalar.add(Constants.DB_ACC_INPUT_HASH, lastBatch)); const DBLocalExitRoot = await db.getValue(Scalar.add(Constants.DB_LOCAL_EXIT_ROOT, lastBatch)); return new ZkEVMDB( db, lastBatch, stringToH4(DBStateRoot), + stringToH4(DBAccInputHash), stringToH4(DBLocalExitRoot), poseidon, vm, diff --git a/test/contract-utils.test.js b/test/contract-utils.test.js index 680f94b1..c4f22ecf 100644 --- a/test/contract-utils.test.js +++ b/test/contract-utils.test.js @@ -11,10 +11,10 @@ describe('contractUtils', function () { this.timeout(10000); let testVector; - const expectedBatchHashData = '0x9370689d3c20a5a4739f902a31e2ea20c7d7be121a0fc19468a2e1b5d87f4111'; - // input taken from pil-stark - const expectedSnarkInputHash = '10255818422543031151914919891467894274520264482506602925880735498991910195507'; - const expectedStarkHashExecutor = '0x55f4c373d62dd577ef6160a1980130db83f0686dab8afe5e32e641ca6abeab4c'; + const expectedBatchHashData = '0x80cc22bc1a205c21f2b8c87e6185e1215fb60e3d83c609fd3bf3cdc586a6244b'; + // TODO: input taken from pil-stark + const expectedStarkHashExecutor = '0x704d5cfd3e44b82028f7f8cae31168267a7422c5a447b90a65134116da5a8432'; + const expectedSnarkInputHash = '17495784446398463565336850903556670302680818979009718931527636126247722947873'; before(async () => { testVector = JSON.parse(fs.readFileSync(path.join(pathTestVectors, 'inputs-executor/input_executor.json'))); @@ -22,68 +22,60 @@ describe('contractUtils', function () { it('calculateBatchHashData', async () => { const { - batchL2Data, globalExitRoot, sequencerAddr, - + batchL2Data, } = testVector; const computedBatchHashData = await contractUtils.calculateBatchHashData( batchL2Data, - globalExitRoot, - sequencerAddr, ); expect(computedBatchHashData).to.be.equal(expectedBatchHashData); }); - it('calculateSnarkInput', async () => { - const aggregatorAddress = '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266'; - + it('calculateStarkInput', async () => { const { - oldLocalExitRoot, - newLocalExitRoot, - oldStateRoot, - newStateRoot, - numBatch, + oldAccInputHash, + globalExitRoot, timestamp, - chainID, + sequencerAddr, } = testVector; - const computedSnark = await contractUtils.calculateSnarkInput( - oldStateRoot, - oldLocalExitRoot, - newStateRoot, - newLocalExitRoot, + const computedGlobalHash = await contractUtils.calculateAccInputHash( + oldAccInputHash, expectedBatchHashData, - numBatch, + globalExitRoot, timestamp, - chainID, - aggregatorAddress, + sequencerAddr, ); - expect(computedSnark.toString()).to.be.equal(expectedSnarkInputHash.toString()); + expect(computedGlobalHash).to.be.equal(expectedStarkHashExecutor); }); - it('calculateStarkInput', async () => { + it('calculateSnarkInput', async () => { + const aggregatorAddress = '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266'; + const { - oldLocalExitRoot, - newLocalExitRoot, oldStateRoot, newStateRoot, - numBatch, - timestamp, - chainID, + newLocalExitRoot, + oldAccInputHash, + newAccInputHash, + oldNumBatch, + newNumBatch, + chainID } = testVector; - const computedGlobalHash = await contractUtils.calculateStarkInput( + const computedSnark = await contractUtils.calculateSnarkInput( oldStateRoot, - oldLocalExitRoot, newStateRoot, newLocalExitRoot, - expectedBatchHashData, - numBatch, - timestamp, + oldAccInputHash, + newAccInputHash, + oldNumBatch, + newNumBatch, chainID, + aggregatorAddress, ); - expect(computedGlobalHash).to.be.equal(expectedStarkHashExecutor); + expect(computedSnark.toString()).to.be.equal(expectedSnarkInputHash.toString()); }); }); diff --git a/test/helpers/test-vectors/inputs-executor/input_executor.json b/test/helpers/test-vectors/inputs-executor/input_executor.json index dd4a2681..d7da94de 100644 --- a/test/helpers/test-vectors/inputs-executor/input_executor.json +++ b/test/helpers/test-vectors/inputs-executor/input_executor.json @@ -1,5 +1,17 @@ { "oldStateRoot": "0x2dc4db4293af236cb329700be43f08ace740a05088f8c7654736871709687e90", + "newStateRoot": "0xbff23fc2c168c033aaac77503ce18f958e9689d5cdaebb88c5524ce5c0319de3", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newAccInputHash": "0x2c9d2c1b2ed8e4be0719f443235c3483f8d6288c6d057859e7210fe39acce682", + "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldNumBatch": 0, + "newNumBatch": 1, + "chainID": 1000, + "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b", + "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", + "timestamp": 1944498031, + "sequencerAddr": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", + "contractsBytecode": {}, "db": { "0x2dc4db4293af236cb329700be43f08ace740a05088f8c7654736871709687e90": [ "0000000000000000", @@ -67,15 +79,5 @@ "0000000000000000", "0000000000000000" ] - }, - "sequencerAddr": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", - "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b", - "newStateRoot": "0xbff23fc2c168c033aaac77503ce18f958e9689d5cdaebb88c5524ce5c0319de3", - "oldLocalExitRoot": "0x17c04c3760510b48c6012742c540a81aba4bca2f78b9d14bfd2f123e2e53ea3e", - "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", - "numBatch": 1, - "timestamp": 1944498031, - "chainID": 1000, - "contractsBytecode": {} + } } \ No newline at end of file diff --git a/test/helpers/test-vectors/zkevm-db/state-transition.json b/test/helpers/test-vectors/zkevm-db/state-transition.json index c31ec733..8f365f2a 100644 --- a/test/helpers/test-vectors/zkevm-db/state-transition.json +++ b/test/helpers/test-vectors/zkevm-db/state-transition.json @@ -50,7 +50,8 @@ "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "inputHash": "0x58dc76197a13d9a9f0894e3d5984098339944ad4fa2cff01945b053d39cd1c9e", "batchHashData": "0x3d53e7e5be04b00f66af647512af6d17e4e767a5e41fa1293010b885c9fe06db", - "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "expectedNewAccInputHash": "0x704d5cfd3e44b82028f7f8cae31168267a7422c5a447b90a65134116da5a8432", "timestamp": 1944498031 } ] \ No newline at end of file diff --git a/test/zkevm-db.test.js b/test/zkevm-db.test.js index cdc66d6e..91c7947f 100644 --- a/test/zkevm-db.test.js +++ b/test/zkevm-db.test.js @@ -34,7 +34,7 @@ describe('ZkEVMDB', function () { it('Check zkEVMDB basic functions', async () => { const sequencerAddress = '0x0000000000000000000000000000000000000000'; const genesisRoot = [F.zero, F.zero, F.zero, F.zero]; - const localExitRoot = [F.zero, F.zero, F.zero, F.zero]; + const accHashInput = [F.zero, F.zero, F.zero, F.zero]; const globalExitRoot = [F.zero, F.zero, F.zero, F.zero]; const timestamp = 1; const genesis = []; @@ -46,7 +46,7 @@ describe('ZkEVMDB', function () { db, poseidon, genesisRoot, - localExitRoot, + accHashInput, genesis, null, null, @@ -107,10 +107,12 @@ describe('ZkEVMDB', function () { txs, expectedNewRoot, sequencerAddress, - oldLocalExitRoot, globalExitRoot, timestamp, newLocalExitRoot, + oldAccInputHash, + expectedNewAccInputHash, + localExitRoot, chainID, } = testVectors[0]; @@ -218,7 +220,7 @@ describe('ZkEVMDB', function () { db, poseidon, genesisRoot, - smtUtils.stringToH4(oldLocalExitRoot), + smtUtils.stringToH4(oldAccInputHash), genesis, null, null, @@ -234,11 +236,14 @@ describe('ZkEVMDB', function () { await batch.executeTxs(); const newRoot = batch.currentStateRoot; + const { newAccInputHash } = batch; if (update) { testVectors[0].expectedNewRoot = smtUtils.h4toString(newRoot); + testVectors[0].expectedNewAccInputHash = smtUtils.h4toString(newAccInputHash); } else { expect(smtUtils.h4toString(newRoot)).to.be.equal(expectedNewRoot); + expect(smtUtils.h4toString(newAccInputHash)).to.be.equal(expectedNewAccInputHash); } // checks previous consolidate zkEVMDB @@ -260,6 +265,7 @@ describe('ZkEVMDB', function () { if (!update) { expect(smtUtils.h4toString(zkEVMDB.getCurrentStateRoot())).to.be.equal(expectedNewRoot); expect(smtUtils.h4toString(zkEVMDB.getCurrentLocalExitRoot())).to.be.equal(newLocalExitRoot); + expect(smtUtils.h4toString(zkEVMDB.getCurrentAccInpuHash())).to.be.equal(expectedNewAccInputHash); } const lastBatchDB = await db.getValue(Constants.DB_LAST_BATCH); @@ -271,6 +277,9 @@ describe('ZkEVMDB', function () { const localExitRootDB = await db.getValue(Scalar.add(Constants.DB_LOCAL_EXIT_ROOT, lastBatchDB)); expect(localExitRootDB).to.be.deep.equal(smtUtils.h4toString(zkEVMDB.getCurrentLocalExitRoot())); + const accHashInputDB = await db.getValue(Scalar.add(Constants.DB_ACC_INPUT_HASH, lastBatchDB)); + expect(accHashInputDB).to.be.deep.equal(smtUtils.h4toString(zkEVMDB.getCurrentAccInpuHash())); + if (update) { await fs.writeFileSync(pathZkevmDbTest, JSON.stringify(testVectors, null, 2)); } From ae54923ec0a7479817309f707a6597566e212d52 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Mon, 24 Oct 2022 14:00:20 +0200 Subject: [PATCH 14/40] test seq/verify multiple batches --- src/constants.js | 1 + src/zkevm-db.js | 86 +++++++ .../test-vectors/zkevm-db/recursive.json | 90 ++++++++ test/zkevm-db.test.js | 217 +++++++++++++++++- 4 files changed, 387 insertions(+), 7 deletions(-) create mode 100644 test/helpers/test-vectors/zkevm-db/recursive.json diff --git a/src/constants.js b/src/constants.js index 46541bea..260f117d 100644 --- a/src/constants.js +++ b/src/constants.js @@ -9,6 +9,7 @@ module.exports.DB_LOCAL_EXIT_ROOT = ethers.utils.id(('ZKEVM_DB_LOCAL_EXIT_ROOT') module.exports.DB_GLOBAL_EXIT_ROOT = ethers.utils.id(('ZKEVM_DB_GLOBAL_EXIT_ROOT')); module.exports.DB_ADDRESS_STORAGE = ethers.utils.id(('ZKEVM_DB_ADDRESS_STORAGE')); module.exports.DB_TOUCHED_ACCOUNTS = ethers.utils.id(('ZKEVM_DB_TOUCHED_ACCOUNTS')); +module.exports.DB_STARK_INPUT = ethers.utils.id(('ZKEVM_DB_STARK_INPUT')); // Default values and global constants module.exports.DEFAULT_MAX_TX = 1000; diff --git a/src/zkevm-db.js b/src/zkevm-db.js index cbac5537..2c50f95e 100644 --- a/src/zkevm-db.js +++ b/src/zkevm-db.js @@ -18,6 +18,7 @@ const { getContractBytecodeLength, } = require('./state-utils'); const { h4toString, stringToH4, hashContractBytecode } = require('./smt-utils'); +const { calculateSnarkInput } = require('./contract-utils'); class ZkEVMDB { constructor(db, lastBatch, stateRoot, accInputHash, localExitRoot, poseidon, vm, smt, chainID) { @@ -104,6 +105,12 @@ class ZkEVMDB { processor.getUpdatedAccountsBatch(), ); + // Set stark input + await this.db.setValue( + Scalar.add(Constants.DB_STARK_INPUT, processor.newNumBatch), + processor.starkInput, + ); + // Update ZKEVMDB variables this.lastBatch = processor.newNumBatch; this.stateRoot = processor.currentStateRoot; @@ -153,6 +160,85 @@ class ZkEVMDB { return this.accInputHash; } + /** + * Get batchL2Data for multiples batches + * @param {Number} initNumBatch - initial num batch + * @param {Number} finalNumBatch - final num batch + */ + async sequenceMultipleBatches(initNumBatch, finalNumBatch) { + const dataBatches = []; + + for (let i = initNumBatch; i <= finalNumBatch; i++) { + const keyInitInput = Scalar.add(Constants.DB_STARK_INPUT, i); + const value = await this.db.getValue(keyInitInput); + if (value === null) { + throw new Error(`Batch ${i} does not exist`); + } + + const dataBatch = { + transactions: value.batchL2Data, + globalExitRoot: value.globalExitRoot, + timestamp: value.timestamp, + forceBatchesTimestamp: [], + }; + + dataBatches.push(dataBatch); + } + + return dataBatches; + } + + /** + * Get batchL2Data for multiples batches + * @param {Number} initNumBatch - initial num batch + * @param {Number} finalNumBatch - final num batch + * @param {String} aggregatorAddress - aggregator Ethereum address + */ + async verifyMultipleBatches(initNumBatch, finalNumBatch, aggregatorAddress) { + const dataVerify = {}; + dataVerify.singleBatchData = []; + + for (let i = initNumBatch; i <= finalNumBatch; i++) { + const keyInitInput = Scalar.add(Constants.DB_STARK_INPUT, i); + const value = await this.db.getValue(keyInitInput); + if (value === null) { + throw new Error(`Batch ${i} does not exist`); + } + + if (i === initNumBatch) { + dataVerify.oldStateRoot = value.oldStateRoot; + dataVerify.oldAccInputHash = value.oldAccInputHash; + dataVerify.oldNumBatch = value.oldNumBatch; + } + + if (i === finalNumBatch) { + dataVerify.newStateRoot = value.newStateRoot; + dataVerify.newAccInputHash = value.newAccInputHash; + dataVerify.newLocalExitRoot = value.newLocalExitRoot; + dataVerify.newNumBatch = value.newNumBatch; + } + + dataVerify.singleBatchData.push(value); + } + + dataVerify.chainID = this.chainID; + dataVerify.aggregatorAddress = aggregatorAddress; + + dataVerify.inputSnark = `0x${Scalar.toString(await calculateSnarkInput( + dataVerify.oldStateRoot, + dataVerify.newStateRoot, + dataVerify.oldAccInputHash, + dataVerify.newAccInputHash, + dataVerify.newLocalExitRoot, + dataVerify.oldNumBatch, + dataVerify.newNumBatch, + dataVerify.chainID, + dataVerify.aggregatorAddress, + ), 16).padStart(64, '0')}`; + + return dataVerify; + } + /** * Get smart contract storage * @param {String} address - smart contract address in hex string diff --git a/test/helpers/test-vectors/zkevm-db/recursive.json b/test/helpers/test-vectors/zkevm-db/recursive.json new file mode 100644 index 00000000..ab958488 --- /dev/null +++ b/test/helpers/test-vectors/zkevm-db/recursive.json @@ -0,0 +1,90 @@ +[ + { + "id": 0, + "description": "2 accounts and 1 valid transaction.", + "chainID": 1000, + "sequencerAddress": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", + "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": 1944498031, + "aggregatorAddress": "0x0123456789012345678901234567890123456789", + "genesis": [ + { + "address": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", + "pvtKey": "0x28b2b0318721be8c8339199172cd7cc8f5e273800a35616ec893083a4b32c02e", + "balance": "100000000000000000000", + "nonce": "0" + }, + { + "address": "0x4d5Cf5032B2a844602278b01199ED191A86c93ff", + "pvtKey": "0x4d27a600dce8c29b7bd080e29a26972377dbb04d7a27d919adbb602bf13cfd23", + "balance": "200000000000000000000", + "nonce": "0" + } + ], + "expectedOldRoot": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d", + "batches": [ + { + "txs": [ + { + "id": 0, + "from": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", + "to": "0x4d5Cf5032B2a844602278b01199ED191A86c93ff", + "nonce": 0, + "value": "100000000000000000", + "gasLimit": 100000, + "gasPrice": "1000000000", + "chainId": 1000, + "rawTx": "0xf86d80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808207f5a01186622d03b6b8da7cf111d1ccba5bb185c56deae6a322cebc6dda0556f3cb979f910c26408b64b51c5da36ba2f38ef55ba1cee719d5a6c01225968799907432", + "reason": "", + "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" + } + ], + "expectedNewRoot": "0x5a52a0ee8577a03e831f627fead1921da142f3820f5880118e98ae6362626b3c", + "expectedNewAccInputHash": "0x704d5cfd3e44b82028f7f8cae31168267a7422c5a447b90a65134116da5a8432", + "expoectNewLocalExitRoot": "", + "expectedNewLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "expectedNewNumBatch": 1, + "expectedBatchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" + }, + { + "txs": [ + { + "id": 0, + "from": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", + "to": "0x4d5Cf5032B2a844602278b01199ED191A86c93ff", + "nonce": 1, + "value": "200000000000000000", + "gasLimit": 100000, + "gasPrice": "1000000000", + "chainId": 1000, + "rawTx": "0xf86d80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808207f5a01186622d03b6b8da7cf111d1ccba5bb185c56deae6a322cebc6dda0556f3cb979f910c26408b64b51c5da36ba2f38ef55ba1cee719d5a6c01225968799907432", + "reason": "", + "customRawTx": "0xee01843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8802c68af0bb140000808203e88080225fd92907efb068a8bee3f95a26f2c5d67db2750bb9993083e0df217ff3a2666f412c311280066d1717f309c248fdbd853ce738363db08775999b2f2d2a8d5e1c" + } + ], + "expectedNewRoot": "0x9d833776d495de5118faec8c9acfd5e1a8fd15dbe2a48b0ec7b0e3cb437bba5e", + "expectedNewAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", + "expoectNewLocalExitRoot": "", + "expectedNewLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "expectedNewNumBatch": 2, + "expectedBatchL2Data": "0xee01843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8802c68af0bb140000808203e88080225fd92907efb068a8bee3f95a26f2c5d67db2750bb9993083e0df217ff3a2666f412c311280066d1717f309c248fdbd853ce738363db08775999b2f2d2a8d5e1c" + } + ], + "finalNewLeafs": { + "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { + "balance": "99900000000000000000", + "nonce": "1" + }, + "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { + "balance": "200100000000000000000", + "nonce": "0" + } + }, + "finalStateRoot": "0x9d833776d495de5118faec8c9acfd5e1a8fd15dbe2a48b0ec7b0e3cb437bba5e", + "finalLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "finalAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", + "finalNumBatch": 2, + "inputSnark": "0x074170894ededcc53a78e0a29947112d83abc5f90098d64f9f124333bda92945" + } +] \ No newline at end of file diff --git a/test/zkevm-db.test.js b/test/zkevm-db.test.js index 91c7947f..f9e34ed6 100644 --- a/test/zkevm-db.test.js +++ b/test/zkevm-db.test.js @@ -16,17 +16,20 @@ const { pathTestVectors } = require('./helpers/test-utils'); describe('ZkEVMDB', function () { this.timeout(5000); const pathZkevmDbTest = path.join(pathTestVectors, 'zkevm-db/state-transition.json'); + const pathZkevmDbTestRecursive = path.join(pathTestVectors, 'zkevm-db/recursive.json'); let update; let poseidon; let F; let testVectors; + let testVectorsRecursive; before(async () => { poseidon = await getPoseidon(); F = poseidon.F; testVectors = JSON.parse(fs.readFileSync(pathZkevmDbTest)); + testVectorsRecursive = JSON.parse(fs.readFileSync(pathZkevmDbTestRecursive)); update = argv.update === true; }); @@ -57,12 +60,6 @@ describe('ZkEVMDB', function () { const batch = await zkEVMDB.buildBatch(timestamp, sequencerAddress, globalExitRoot); await batch.executeTxs(); - /* - * New root should be different because the will add in the mapping on globalExitRoot - * const newRoot = batch.currentStateRoot; - * expect(newRoot).to.be.equal(genesisRoot); - */ - // checks DB state previous consolidate zkEVMDB const lastBatch = await db.getValue(Constants.DB_LAST_BATCH); expect(lastBatch).to.be.equal(null); @@ -112,7 +109,6 @@ describe('ZkEVMDB', function () { newLocalExitRoot, oldAccInputHash, expectedNewAccInputHash, - localExitRoot, chainID, } = testVectors[0]; @@ -284,4 +280,211 @@ describe('ZkEVMDB', function () { await fs.writeFileSync(pathZkevmDbTest, JSON.stringify(testVectors, null, 2)); } }); + + it('Check zkEVMDB recursive functions', async () => { + const { + genesis, + expectedOldRoot, + batches, + sequencerAddress, + globalExitRoot, + timestamp, + oldAccInputHash, + chainID, + finalStateRoot, + finalLocalExitRoot, + finalAccInputHash, + finalNumBatch, + aggregatorAddress, + inputSnark, + } = testVectorsRecursive[0]; + + const db = new MemDB(F); + const smt = new SMT(db, poseidon, poseidon.F); + + const walletMap = {}; + const addressArray = []; + const amountArray = []; + const nonceArray = []; + + // create genesis block + for (let j = 0; j < genesis.length; j++) { + const { + address, pvtKey, balance, nonce, + } = genesis[j]; + + const newWallet = new ethers.Wallet(pvtKey); + expect(address).to.be.equal(newWallet.address); + + walletMap[address] = newWallet; + addressArray.push(address); + amountArray.push(Scalar.e(balance)); + nonceArray.push(Scalar.e(nonce)); + } + + // set genesis block + const genesisRoot = await stateUtils.setGenesisBlock(addressArray, amountArray, nonceArray, smt); + for (let j = 0; j < addressArray.length; j++) { + const currentState = await stateUtils.getState(addressArray[j], smt, genesisRoot); + + expect(currentState.balance).to.be.equal(amountArray[j]); + expect(currentState.nonce).to.be.equal(nonceArray[j]); + } + + if (update) { + testVectorsRecursive[0].expectedOldRoot = smtUtils.h4toString(genesisRoot); + } else { + expect(smtUtils.h4toString(genesisRoot)).to.be.equal(expectedOldRoot); + } + + /* + * build, sign transaction and generate rawTxs + * rawTxs would be the calldata inserted in the contract + */ + const rawBatches = []; + + for (let m = 0; m < batches.length; m++) { + const { txs } = batches[m]; + const rawTxs = []; + + for (let j = 0; j < txs.length; j++) { + const txData = txs[j]; + + const tx = { + to: txData.to, + nonce: txData.nonce, + value: ethers.utils.parseUnits(txData.value, 'wei'), + gasLimit: txData.gasLimit, + gasPrice: ethers.utils.parseUnits(txData.gasPrice, 'wei'), + chainId: txData.chainId, + data: txData.data || '0x', + }; + if (!ethers.utils.isAddress(tx.to) || !ethers.utils.isAddress(txData.from)) { + expect(txData.customRawTx).to.equal(undefined); + // eslint-disable-next-line no-continue + continue; + } + + try { + let customRawTx; + + if (tx.chainId === 0) { + const signData = ethers.utils.RLP.encode([ + processorUtils.toHexStringRlp(Scalar.e(tx.nonce)), + processorUtils.toHexStringRlp(tx.gasPrice), + processorUtils.toHexStringRlp(tx.gasLimit), + processorUtils.toHexStringRlp(tx.to), + processorUtils.toHexStringRlp(tx.value), + processorUtils.toHexStringRlp(tx.data), + processorUtils.toHexStringRlp(tx.chainId), + '0x', + '0x', + ]); + const digest = ethers.utils.keccak256(signData); + const signingKey = new ethers.utils.SigningKey(walletMap[txData.from].privateKey); + const signature = signingKey.signDigest(digest); + const r = signature.r.slice(2).padStart(64, '0'); // 32 bytes + const s = signature.s.slice(2).padStart(64, '0'); // 32 bytes + const v = (signature.v).toString(16).padStart(2, '0'); // 1 bytes + customRawTx = signData.concat(r).concat(s).concat(v); + } else { + const rawTxEthers = await walletMap[txData.from].signTransaction(tx); + customRawTx = processorUtils.rawTxToCustomRawTx(rawTxEthers); + } + + if (update) { + testVectorsRecursive[0].batches[m].txs[j].customRawTx = customRawTx; + } else { + expect(customRawTx).to.equal(txData.customRawTx); + } + + if (txData.encodeInvalidData) { + customRawTx = customRawTx.slice(0, -6); + } + rawTxs.push(customRawTx); + } catch (error) { + expect(txData.customRawTx).to.equal(undefined); + } + } + rawBatches.push(rawTxs); + } + + // create a zkEVMDB and build a batch + const zkEVMDB = await ZkEVMDB.newZkEVM( + db, + poseidon, + genesisRoot, + smtUtils.stringToH4(oldAccInputHash), + genesis, + null, + null, + chainID, + ); + + // create batches + for (let m = 0; m < rawBatches.length; m++) { + const rawTxs = rawBatches[m]; + const batch = await zkEVMDB.buildBatch(timestamp, sequencerAddress, smtUtils.stringToH4(globalExitRoot)); + for (let j = 0; j < rawTxs.length; j++) { + batch.addRawTx(rawTxs[j]); + } + await batch.executeTxs(); + await zkEVMDB.consolidate(batch); + + const newRoot = batch.currentStateRoot; + const { newAccInputHash, newNumBatch, newLocalExitRoot } = batch; + const batchL2Data = await batch.getBatchL2Data(); + + if (update) { + testVectorsRecursive[0].batches[m].expectedNewRoot = smtUtils.h4toString(newRoot); + testVectorsRecursive[0].batches[m].expectedNewAccInputHash = smtUtils.h4toString(newAccInputHash); + testVectorsRecursive[0].batches[m].expectedNewNumBatch = batch.newNumBatch; + testVectorsRecursive[0].batches[m].expectedNewLocalExitRoot = smtUtils.h4toString(newLocalExitRoot); + testVectorsRecursive[0].batches[m].expectedBatchL2Data = batchL2Data; + } else { + expect(smtUtils.h4toString(newRoot)).to.be.equal(batches[m].expectedNewRoot); + expect(smtUtils.h4toString(newAccInputHash)).to.be.equal(batches[m].expectedNewAccInputHash); + expect(newNumBatch).to.be.equal(batches[m].expectedNewNumBatch); + expect(smtUtils.h4toString(newLocalExitRoot)).to.be.equal(batches[m].expectedNewLocalExitRoot); + expect(batchL2Data).to.be.equal(batches[m].expectedBatchL2Data); + } + } + + // checks after consolidate zkEVMDB + if (!update) { + expect(smtUtils.h4toString(zkEVMDB.getCurrentStateRoot())).to.be.equal(finalStateRoot); + expect(smtUtils.h4toString(zkEVMDB.getCurrentLocalExitRoot())).to.be.equal(finalLocalExitRoot); + expect(smtUtils.h4toString(zkEVMDB.getCurrentAccInpuHash())).to.be.equal(finalAccInputHash); + expect(zkEVMDB.getCurrentNumBatch()).to.be.equal(finalNumBatch); + } else { + testVectorsRecursive[0].finalStateRoot = smtUtils.h4toString(zkEVMDB.getCurrentStateRoot()); + testVectorsRecursive[0].finalLocalExitRoot = smtUtils.h4toString(zkEVMDB.getCurrentLocalExitRoot()); + testVectorsRecursive[0].finalAccInputHash = smtUtils.h4toString(zkEVMDB.getCurrentAccInpuHash()); + testVectorsRecursive[0].finalNumBatch = zkEVMDB.getCurrentNumBatch(); + } + + // checks sequence multiple batches + const initBatch = 1; + const finalBatch = 2; + const seqBatches = await zkEVMDB.sequenceMultipleBatches(initBatch, finalBatch); + + for (let i = 0; i < (finalBatch - initBatch); i++) { + expect(seqBatches[i].timestamp).to.equal(timestamp); + expect(seqBatches[i].globalExitRoot).to.equal(globalExitRoot); + expect(seqBatches[i].transactions).to.equal(batches[i].expectedBatchL2Data); + } + + // checks snark input for multiple batches + const verifyBatches = await zkEVMDB.verifyMultipleBatches(initBatch, finalBatch, aggregatorAddress); + + if (update) { + testVectorsRecursive[0].inputSnark = verifyBatches.inputSnark; + } else { + expect(inputSnark).to.be.equal(verifyBatches.inputSnark); + } + + if (update) { + await fs.writeFileSync(pathZkevmDbTestRecursive, JSON.stringify(testVectorsRecursive, null, 2)); + } + }); }); From 039c496fa5482c4231465f0c784f17136f23e935 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Thu, 20 Oct 2022 18:10:45 +0200 Subject: [PATCH 15/40] update bridge aribitrary data --- src/mt-bridge-utils.js | 7 ++++--- tools/fill-genesis/generate-claim-exit-root.js | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/mt-bridge-utils.js b/src/mt-bridge-utils.js index 6060102b..70618095 100644 --- a/src/mt-bridge-utils.js +++ b/src/mt-bridge-utils.js @@ -38,16 +38,17 @@ function verifyMerkleProof(leaf, smtProof, index, root) { /** * Calculate leaf value + * @param {Number} leafType - Leaf Type * @param {Number} originNetwork - Original network - * @param {String} originTokenAddress - Token address + * @param {String} originAddress - Token address * @param {Number} destinationNetwork - Destination network * @param {String} destinationAddress - Destination address * @param {BigNumber} amount - Amount of tokens * @param {BigNumber} metadataHash - Hash of the metadata * @returns {Boolean} - Leaf value */ -function getLeafValue(originNetwork, originTokenAddress, destinationNetwork, destinationAddress, amount, metadataHash) { - return ethers.utils.solidityKeccak256(['uint32', 'address', 'uint32', 'address', 'uint256', 'bytes32'], [originNetwork, originTokenAddress, destinationNetwork, destinationAddress, amount, metadataHash]); +function getLeafValue(leafType, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadataHash) { + return ethers.utils.solidityKeccak256(['uint8', 'uint32', 'address', 'uint32', 'address', 'uint256', 'bytes32'], [leafType, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadataHash]); } module.exports = { diff --git a/tools/fill-genesis/generate-claim-exit-root.js b/tools/fill-genesis/generate-claim-exit-root.js index f1f3db89..7c265dfe 100644 --- a/tools/fill-genesis/generate-claim-exit-root.js +++ b/tools/fill-genesis/generate-claim-exit-root.js @@ -31,7 +31,7 @@ async function main() { // pre compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue(0, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); From 7466a7554fbcbb355ce1546a6b5cc584ed2ed7f5 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 24 Oct 2022 17:13:53 +0200 Subject: [PATCH 16/40] update geneiss --- tools/fill-genesis/genesis-gen.json | 6 ------ tools/fill-genesis/genesis.json | 8 +------- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/tools/fill-genesis/genesis-gen.json b/tools/fill-genesis/genesis-gen.json index ca2520db..5c6d7e4b 100644 --- a/tools/fill-genesis/genesis-gen.json +++ b/tools/fill-genesis/genesis-gen.json @@ -14,12 +14,6 @@ "pvtKey": "0xdfd01798f92667dbf91df722434e8fbe96af0211d4d1b82bbbbc8f1def7a814f", "balance": "0", "nonce": "0" - }, - { - "address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "pvtKey": "0x00", - "balance": "100000000000000000000000", - "nonce": "0" } ], "txs": [ diff --git a/tools/fill-genesis/genesis.json b/tools/fill-genesis/genesis.json index e14c0e2e..fc01424c 100644 --- a/tools/fill-genesis/genesis.json +++ b/tools/fill-genesis/genesis.json @@ -1,5 +1,5 @@ { - "root": "0xb33635210b9f5d07769cf70bf5a3cbf241ecbaf79a9b66ef79b28d920da1f776", + "root": "0x2e74f6d94403b0d39545d0b1e229fd9887f5d82336e71d6597496acd1309e365", "genesis": [ { "balance": "0", @@ -66,12 +66,6 @@ "address": "0xc949254d682d8c9ad5682521675b8f43b102aec4", "pvtKey": "0xdfd01798f92667dbf91df722434e8fbe96af0211d4d1b82bbbbc8f1def7a814f" }, - { - "balance": "100000000000000000000000", - "nonce": "0", - "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "pvtKey": "0x00" - }, { "balance": "0", "nonce": "1", From c46a01a67793da7fbaef0775c7f699259ace2648 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 26 Oct 2022 16:12:49 +0200 Subject: [PATCH 17/40] fix comments --- src/contract-utils.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/contract-utils.js b/src/contract-utils.js index d332704f..763bfe6f 100644 --- a/src/contract-utils.js +++ b/src/contract-utils.js @@ -101,13 +101,13 @@ async function calculateSnarkInput( // 8 bytes for oldNumBatch const strOldNumBatch = padZeros(Scalar.e(oldNumBatch).toString(16), 16); - // 8 bytes for oldNumBatch + // 8 bytes for newNumBatch const strNewNumBatch = padZeros(Scalar.e(newNumBatch).toString(16), 16); - // 8 bytes for oldNumBatch + // 8 bytes for chainID const strChainID = padZeros(Scalar.e(chainID).toString(16), 16); - // 20 bytes agggregator adsress + // 20 bytes agggregator address const strAggregatorAddress = padZeros((Scalar.fromString(aggregatorAddress, 16)).toString(16), 40); // build final bytes sha256 @@ -151,7 +151,7 @@ function generateSolidityInputs( publicSignals, ) { const proofA = [proof.pi_a[0], - proof.pi_a[1], + proof.pi_a[1], ]; const proofB = [ [ @@ -164,7 +164,7 @@ function generateSolidityInputs( ], ]; const proofC = [proof.pi_c[0], - proof.pi_c[1], + proof.pi_c[1], ]; const input = publicSignals; From 171402683cacc773970257b5a2ea76d24423754f Mon Sep 17 00:00:00 2001 From: krlosMata Date: Thu, 27 Oct 2022 15:34:35 +0200 Subject: [PATCH 18/40] bridge leag types as constants --- src/constants.js | 4 ++++ tools/fill-genesis/generate-claim-exit-root.js | 12 +++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/constants.js b/src/constants.js index 260f117d..cb8d1f5e 100644 --- a/src/constants.js +++ b/src/constants.js @@ -40,3 +40,7 @@ module.exports.BATCH_DIFFICULTY = 0; module.exports.ADDRESS_SYSTEM = '0x0000000000000000000000000000000000000000'; module.exports.STATE_ROOT_STORAGE_POS = 0; module.exports.LAST_TX_STORAGE_POS = 0; + +// Bridge Leaf Types +module.exports.BRIDGE_LEAF_TYPE_ASSET = 0; +module.exports.BRIDGE_LEAF_TYPE_MESSAGE = 1; diff --git a/tools/fill-genesis/generate-claim-exit-root.js b/tools/fill-genesis/generate-claim-exit-root.js index 7c265dfe..3a7c1107 100644 --- a/tools/fill-genesis/generate-claim-exit-root.js +++ b/tools/fill-genesis/generate-claim-exit-root.js @@ -8,6 +8,8 @@ const { getLeafValue, } = require('../../index').mtBridgeUtils; +const { Constants } = require('../../index'); + function calculateGlobalExitRoot(mainnetExitRoot, rollupExitRoot) { return ethers.utils.solidityKeccak256(['bytes32', 'bytes32'], [mainnetExitRoot, rollupExitRoot]); } @@ -31,7 +33,15 @@ async function main() { // pre compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(0, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue( + Constants.BRIDGE_LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); From 46804941043459ff2258dcc68a25ce898bc64ea9 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Thu, 27 Oct 2022 15:47:52 +0200 Subject: [PATCH 19/40] WIP reorder snark input --- src/contract-utils.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/contract-utils.js b/src/contract-utils.js index 763bfe6f..450c4102 100644 --- a/src/contract-utils.js +++ b/src/contract-utils.js @@ -122,6 +122,16 @@ async function calculateSnarkInput( .concat(strAggregatorAddress); return sha256Snark(finalStr); + + // aggreAddress + // oldStateRoot + // oldaccInputHash + // oldBatchNum + // chainID + // newStateroot + // newAcc + // newLocalExirRoot + // newBatchNum } /** From 95f96c551f77f16e5f51c3cd230c6483d0744bd8 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Thu, 27 Oct 2022 16:08:50 +0200 Subject: [PATCH 20/40] update create genesis --- package.json | 2 +- tools/fill-genesis/create-genesis.js | 19 ++++++++++++------- tools/fill-genesis/genesis.json | 4 ++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 335c6e4d..94aeec7c 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ }, "homepage": "https://github.com/0xPolygonHermez/zkevm-commonjs#readme", "devDependencies": { - "@0xpolygonhermez/contracts-zkevm": "github:0xPolygonHermez/zkevm-contracts#v0.0.7", + "@0xpolygonhermez/contracts-zkevm": "github:0xPolygonHermez/zkevm-contracts#feature/addAribitraryData", "@ethersproject/abi": "^5.6.4", "@nomiclabs/hardhat-ethers": "^2.1.0", "@nomiclabs/hardhat-waffle": "^2.0.2", diff --git a/tools/fill-genesis/create-genesis.js b/tools/fill-genesis/create-genesis.js index 834401dc..27907cf7 100644 --- a/tools/fill-genesis/create-genesis.js +++ b/tools/fill-genesis/create-genesis.js @@ -40,28 +40,33 @@ async function main() { const genesisGenerator = require(path.join(__dirname, inputPath)); const genesisOutput = {}; + const poseidon = await getPoseidon(); + const { F } = poseidon; + const genesisRoot = [F.zero, F.zero, F.zero, F.zero]; + const accHashInput = [F.zero, F.zero, F.zero, F.zero]; const globalExitRoot = ethers.constants.HashZero; - const localExitRoot = ethers.constants.HashZero; - const poseidon = await getPoseidon(); - const { F } = poseidon; const { genesis, txs, sequencerAddress, timestamp, + defaultChainId } = genesisGenerator; const db = new MemDB(F); - // create a zkEVMDB to compile the sc + // create a zkEVMDB and build a batch const zkEVMDB = await ZkEVMDB.newZkEVM( db, poseidon, - [F.zero, F.zero, F.zero, F.zero], - smtUtils.stringToH4(localExitRoot), + genesisRoot, + accHashInput, genesis, + null, + null, + defaultChainId, ); /* @@ -199,7 +204,7 @@ async function main() { currentAccountOutput.bytecode = `0x${smCode.toString('hex')}`; currentAccountOutput.storage = storage; currentAccountOutput.contractName = addressToContractName[address]; - } else if (address !== Constants.ADDRESS_SYSTEM && address !== Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2) { + } else if (address !== Constants.ADDRESS_SYSTEM && address.toLowerCase() !== Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2.toLowerCase()) { currentAccountOutput.pvtKey = (genesis.find((o) => o.address.toLowerCase() === address.toLowerCase())).pvtKey; } accountsOutput.push(currentAccountOutput); diff --git a/tools/fill-genesis/genesis.json b/tools/fill-genesis/genesis.json index fc01424c..c16670e7 100644 --- a/tools/fill-genesis/genesis.json +++ b/tools/fill-genesis/genesis.json @@ -1,5 +1,5 @@ { - "root": "0x2e74f6d94403b0d39545d0b1e229fd9887f5d82336e71d6597496acd1309e365", + "root": "0x8ddd4d2542d8f3ddd0bcf7ab122eac7b1ed81e2fe2f12acc8d6c2182eff0007c", "genesis": [ { "balance": "0", @@ -20,7 +20,7 @@ "balance": "100000000000000000000000", "nonce": "2", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001075760003560e01c80635d5d326f1162000095578063bab161bf1162000060578063bab161bf1462000414578063d02103ca1462000449578063e73758811462000478578063ed6be5c914620004ac57600080fd5b80635d5d326f146200035e57806381b1c17414620003835780638624c35c14620003ca578063b7e6a7d414620003ef57600080fd5b80633ae0504711620000d65780633ae05047146200023a5780633da816821462000252578063508935f814620002885780635a64a1da14620002a157600080fd5b806322e95f2c146200010c5780632dfdf0b5146200015b5780632f3a3d5d1462000182578063318aee3d14620001b1575b600080fd5b3480156200011957600080fd5b50620001316200012b366004620027b4565b620004c3565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200016857600080fd5b506200017360415481565b60405190815260200162000152565b3480156200018f57600080fd5b50604754620001319073ffffffffffffffffffffffffffffffffffffffff1681565b348015620001be57600080fd5b5062000208620001d0366004620027f0565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000152565b3480156200024757600080fd5b506200017362000566565b3480156200025f57600080fd5b5062000277620002713660046200290f565b62000640565b604051901515815260200162000152565b6200029f620002993660046200297d565b62000740565b005b348015620002ae57600080fd5b5062000173620002c036600462002a39565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200036b57600080fd5b506200029f6200037d36600462002b51565b62000d2a565b3480156200039057600080fd5b5062000131620003a236600462002c38565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620003d757600080fd5b506200029f620003e9366004620027b4565b620017d9565b348015620003fc57600080fd5b50620001316200040e366004620027b4565b62001a57565b3480156200042157600080fd5b50604254620004339063ffffffff1681565b60405163ffffffff909116815260200162000152565b3480156200045657600080fd5b50604654620001319073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200048557600080fd5b50620002776200049736600462002c38565b60436020526000908152604090205460ff1681565b348015620004b957600080fd5b5062000433600081565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b6020811015620006385781600116600103620005d057600181602081106200059c576200059c62002c52565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000614565b8260218260208110620005e757620005e762002c52565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200062160028362002cb0565b9150806200062f8162002cec565b91505062000570565b509092915050565b60008467ffffffffffffffff8416825b6020811015620007335781600116600103620006bd578681815181106200067b576200067b62002c52565b6020026020010151836040516020016200069f929190918252602082015260400190565b6040516020818303038152906040528051906020012092506200070f565b82878281518110620006d357620006d362002c52565b6020026020010151604051602001620006f6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200071c60028362002cb0565b9150806200072a8162002cec565b91505062000650565b5050909114949350505050565b60425463ffffffff90811690861603620007e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff89166200089d5785341462000893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007d8565b6000915062000bb1565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200099e576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200098b919062002d27565b5060208101518151909450925062000baf565b8415620009b357620009b38a88888862001b20565b620009d773ffffffffffffffffffffffffffffffffffffffff8b1633308a62001f71565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000a83919081019062002dc6565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000acf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000b17919081019062002dc6565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b89919062002e0f565b60405160200162000b9d9392919062002e7b565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a8660415460405162000bf0979695949392919062002eb8565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a9052607080820193909352815180820390930183526090019052805191012062000ca49062002055565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000ccc62000566565b6040518263ffffffff1660e01b815260040162000ceb91815260200190565b600060405180830381600087803b15801562000d0657600080fd5b505af115801562000d1b573d6000803e3d6000fd5b50505050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562000dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007d8565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000e45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e6b919062002f25565b60000362000efc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007d8565b60425463ffffffff85811691161462000f98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007d8565b60425463ffffffff16620010c9578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200105b908b8b63ffffffff168a62000640565b620010c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007d8565b620011e6565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200117e908b8b63ffffffff168b62000640565b620011e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007d8565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001357576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001279919062002f3f565b60006040518083038185875af1925050503d8060008114620012b8576040519150601f19603f3d011682016040523d82523d6000602084013e620012bd565b606091505b505090508062001350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007d8565b5062001762565b60425463ffffffff9081169087160362001394576200138e73ffffffffffffffffffffffffffffffffffffffff86168484620021ce565b62001762565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620016c1576047546000906200147f9073ffffffffffffffffffffffffffffffffffffffff168462002226565b90506000806000868060200190518101906200149c919062002f5d565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b8152600401620014e595949392919062002fde565b600060405180830381600087803b1580156200150057600080fd5b505af115801562001515573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620016af9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a1505050506200175f565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001737573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200175d919062002d27565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620017fa5750600054600160ff909116105b80620018165750303b15801562001816575060005460ff166001145b620018a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007d8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200190357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001981906200275c565b604051809103906000f0801580156200199e573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620019ee62002306565b801562001a5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060475490915062001b189073ffffffffffffffffffffffffffffffffffffffff16826200244e565b949350505050565b600062001b6383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620024d292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462001c38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f48657a4d617469634d657267653a3a5f7065726d69743a204e4f545f56414c4960448201527f445f43414c4c00000000000000000000000000000000000000000000000000006064820152608401620007d8565b600080808080808062001c4f896004818d6200303e565b81019062001c5e91906200306a565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462001d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f48657a4d617469634d657267653a3a5f7065726d69743a205045524d49545f4f60448201527f574e45525f4d5553545f42455f5448455f53454e4445520000000000000000006064820152608401620007d8565b73ffffffffffffffffffffffffffffffffffffffff8616301462001dd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f48657a4d617469634d657267653a3a5f7065726d69743a205350454e4445525f60448201527f4d5553545f42455f5448495300000000000000000000000000000000000000006064820152608401620007d8565b8a851462001e61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f48657a4d617469634d657267653a3a5f7065726d69743a205045524d49545f4160448201527f4d4f554e545f444f45535f4e4f545f4d415443480000000000000000000000006064820152608401620007d8565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162001f1c919062002f3f565b6000604051808303816000865af19150503d806000811462001f5b576040519150601f19603f3d011682016040523d82523d6000602084013e62001f60565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200204f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620024d9565b50505050565b80600162002066602060026200321b565b62002072919062003229565b6041541062002104576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007d8565b60016041600082825462002119919062003243565b909155505060415460005b6020811015620021c357816001166001036200215957826001826020811062002151576200215162002c52565b015550505050565b600181602081106200216f576200216f62002c52565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620021ac919062002cb0565b915080620021ba8162002cec565b91505062002124565b5062001a526200325e565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001a529084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162001fcc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007d8565b600054610100900460ff166200239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007d8565b60005b620023b06001602062003229565b8110156200244b5760218160208110620023ce57620023ce62002c52565b015460218260208110620023e657620023e662002c52565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002421919062003243565b6020811062002434576200243462002c52565b015580620024428162002cec565b915050620023a2565b50565b6000620024cb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200253d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620025ec9092919063ffffffff16565b80519091501562001a5257808060200190518101906200255e919062002d27565b62001a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007d8565b606062001b1884846000858573ffffffffffffffffffffffffffffffffffffffff85163b62002678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007d8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620026a3919062002f3f565b60006040518083038185875af1925050503d8060008114620026e2576040519150601f19603f3d011682016040523d82523d6000602084013e620026e7565b606091505b5091509150620026f982828662002704565b979650505050505050565b6060831562002715575081620024cb565b825115620027265782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d891906200328d565b61182980620032a383390190565b803563ffffffff811681146200277f57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146200244b57600080fd5b80356200277f8162002784565b60008060408385031215620027c857600080fd5b620027d3836200276a565b91506020830135620027e58162002784565b809150509250929050565b6000602082840312156200280357600080fd5b8135620024cb8162002784565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562002889576200288962002810565b604052919050565b600082601f830112620028a357600080fd5b8135602067ffffffffffffffff821115620028c257620028c262002810565b8160051b620028d38282016200283f565b9283528481018201928281019087851115620028ee57600080fd5b83870192505b84831015620026f957823582529183019190830190620028f4565b600080600080608085870312156200292657600080fd5b84359350602085013567ffffffffffffffff808211156200294657600080fd5b620029548883890162002891565b94506040870135915080821682146200296c57600080fd5b509396929550929360600135925050565b60008060008060008060a087890312156200299757600080fd5b8635620029a48162002784565b9550620029b4602088016200276a565b94506040870135620029c68162002784565b935060608701359250608087013567ffffffffffffffff80821115620029eb57600080fd5b818901915089601f83011262002a0057600080fd5b81358181111562002a1057600080fd5b8a602082850101111562002a2357600080fd5b6020830194508093505050509295509295509295565b60008060008060008060c0878903121562002a5357600080fd5b62002a5e876200276a565b9550602087013562002a708162002784565b945062002a80604088016200276a565b9350606087013562002a928162002784565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff82111562002ac95762002ac962002810565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262002b0757600080fd5b813562002b1e62002b188262002aac565b6200283f565b81815284602083860101111562002b3457600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b7257600080fd5b8a3567ffffffffffffffff8082111562002b8b57600080fd5b62002b998e838f0162002891565b9b5062002ba960208e016200276a565b9a5060408d0135995060608d0135985062002bc760808e016200276a565b975062002bd760a08e01620027a7565b965062002be760c08e016200276a565b955062002bf760e08e01620027a7565b94506101008d013593506101208d013591508082111562002c1757600080fd5b5062002c268d828e0162002af5565b9150509295989b9194979a5092959850565b60006020828403121562002c4b57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262002ce7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362002d205762002d2062002c81565b5060010190565b60006020828403121562002d3a57600080fd5b81518015158114620024cb57600080fd5b60005b8381101562002d6857818101518382015260200162002d4e565b838111156200204f5750506000910152565b600082601f83011262002d8c57600080fd5b815162002d9d62002b188262002aac565b81815284602083860101111562002db357600080fd5b62001b1882602083016020870162002d4b565b60006020828403121562002dd957600080fd5b815167ffffffffffffffff81111562002df157600080fd5b62001b188482850162002d7a565b60ff811681146200244b57600080fd5b60006020828403121562002e2257600080fd5b8151620024cb8162002dff565b6000815180845262002e4981602086016020860162002d4b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062002e90606083018662002e2f565b828103602084015262002ea4818662002e2f565b91505060ff83166040830152949350505050565b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a084015262002f0e60e084018662002e2f565b915080841660c08401525098975050505050505050565b60006020828403121562002f3857600080fd5b5051919050565b6000825162002f5381846020870162002d4b565b9190910192915050565b60008060006060848603121562002f7357600080fd5b835167ffffffffffffffff8082111562002f8c57600080fd5b62002f9a8783880162002d7a565b9450602086015191508082111562002fb157600080fd5b5062002fc08682870162002d7a565b925050604084015162002fd38162002dff565b809150509250925092565b60a08152600062002ff360a083018862002e2f565b828103602084015262003007818862002e2f565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b600080858511156200304f57600080fd5b838611156200305d57600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200308657600080fd5b8735620030938162002784565b96506020880135620030a58162002784565b955060408801359450606088013593506080880135620030c58162002dff565b9699959850939692959460a0840135945060c09093013592915050565b600181815b808511156200314157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003125576200312562002c81565b808516156200313357918102915b93841c9390800290620030e7565b509250929050565b6000826200315a5750600162000560565b81620031695750600062000560565b81600181146200318257600281146200318d57620031ad565b600191505062000560565b60ff841115620031a157620031a162002c81565b50506001821b62000560565b5060208310610133831016604e8410600b8410161715620031d2575081810a62000560565b620031de8383620030e2565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003213576200321362002c81565b029392505050565b6000620024cb838362003149565b6000828210156200323e576200323e62002c81565b500390565b6000821982111562003259576200325962002c81565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620024cb602083018462002e2f56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122068cb524538909c05cc5109b7664a019588dc698f1f570976efb4dd6b6aee818364736f6c634300080f0033", + "bytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200f33d24b40d1e879f02496512d8e703a09704c5edf7d149259a9c3cf2b64250664736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000042": "0x01", From 0fa7f03938463cde6f73127c91b2ced0df4b0b1d Mon Sep 17 00:00:00 2001 From: krlosMata Date: Thu, 27 Oct 2022 16:26:25 +0200 Subject: [PATCH 21/40] update to new snarkInput spec --- src/contract-utils.js | 88 ++++++------------- test/contract-utils.test.js | 2 +- .../test-vectors/zkevm-db/recursive.json | 2 +- 3 files changed, 30 insertions(+), 62 deletions(-) diff --git a/src/contract-utils.js b/src/contract-utils.js index 450c4102..a905d9c8 100644 --- a/src/contract-utils.js +++ b/src/contract-utils.js @@ -37,7 +37,7 @@ function calculateAccInputHash( } /** - * Compute input for SNARK circuit: sha256(oldStateRoot, newStateRoot, oldAccInputHash, newAccInputHash, newLocalExitRoot, oldNumBatch, newNumBatch, chainID, aggrAddress) % FrSNARK + * Compute input for SNARK circuit: sha256(aggrAddress, oldStateRoot, oldAccInputHash, oldNumBatch, chainID, newStateRoot, newAccInputHash, newLocalExitRoot, newNumBatch) % FrSNARK * @param {String} oldStateRoot - Current state Root * @param {String} newStateRoot - New State root once the batch is processed * @param {String} oldAccInputHash - initial accumulateInputHash @@ -60,78 +60,46 @@ async function calculateSnarkInput( chainID, aggregatorAddress, ) { - const poseidon = await getPoseidon(); - const { F } = poseidon; - - // 8 bytes each field element for oldStateRoot - const feaOldStateRoot = string2fea(F, oldStateRoot); - const strFeaOldStateRoot = feaOldStateRoot.reduce( - (previousValue, currentValue) => previousValue + padZeros(currentValue.toString(16), 16), - '', - ); - - // 8 bytes each field element for newStateRoot - const feaNewStateRoot = string2fea(F, newStateRoot); - const strFeaNewStateRoot = feaNewStateRoot.reduce( - (previousValue, currentValue) => previousValue + padZeros(currentValue.toString(16), 16), - '', - ); - - // 8 bytes each field element for oldAccInputHash - const feaOldAccInputHash = string2fea(F, oldAccInputHash); - const strFeaOldAccInputHash = feaOldAccInputHash.reduce( - (previousValue, currentValue) => previousValue + padZeros(currentValue.toString(16), 16), - '', - ); + // 20 bytes agggregator address + const strAggregatorAddress = padZeros((Scalar.fromString(aggregatorAddress, 16)).toString(16), 40); - // 8 bytes each field element for newAccInputHash - const feaNewAccInputHash = string2fea(F, newAccInputHash); - const strFeaNewAccInputHash = feaNewAccInputHash.reduce( - (previousValue, currentValue) => previousValue + padZeros(currentValue.toString(16), 16), - '', - ); + // 32 bytes each field element for oldStateRoot + const strOldStateRoot = padZeros((Scalar.fromString(oldStateRoot, 16)).toString(16), 64); - // 8 bytes each field element for newLocalExitRoot - const feaNewLocalExitRoot = string2fea(F, newLocalExitRoot); - const strFeaNewLocalExitRoot = feaNewLocalExitRoot.reduce( - (previousValue, currentValue) => previousValue + padZeros(currentValue.toString(16), 16), - '', - ); + // 32 bytes each field element for oldStateRoot + const strOldAccInputHash = padZeros((Scalar.fromString(oldAccInputHash, 16)).toString(16), 64); // 8 bytes for oldNumBatch const strOldNumBatch = padZeros(Scalar.e(oldNumBatch).toString(16), 16); - // 8 bytes for newNumBatch - const strNewNumBatch = padZeros(Scalar.e(newNumBatch).toString(16), 16); - // 8 bytes for chainID const strChainID = padZeros(Scalar.e(chainID).toString(16), 16); - // 20 bytes agggregator address - const strAggregatorAddress = padZeros((Scalar.fromString(aggregatorAddress, 16)).toString(16), 40); + // 32 bytes each field element for oldStateRoot + const strNewStateRoot = padZeros((Scalar.fromString(newStateRoot, 16)).toString(16), 64); + + // 32 bytes each field element for oldStateRoot + const strNewAccInputHash = padZeros((Scalar.fromString(newAccInputHash, 16)).toString(16), 64); + + // 32 bytes each field element for oldStateRoot + const strNewLocalExitRoot = padZeros((Scalar.fromString(newLocalExitRoot, 16)).toString(16), 64); + + // 8 bytes for newNumBatch + const strNewNumBatch = padZeros(Scalar.e(newNumBatch).toString(16), 16); // build final bytes sha256 - const finalStr = strFeaOldStateRoot - .concat(strFeaNewStateRoot) - .concat(strFeaOldAccInputHash) - .concat(strFeaNewAccInputHash) - .concat(strFeaNewLocalExitRoot) + const finalStr = strAggregatorAddress + .concat(strOldStateRoot) + .concat(strOldAccInputHash) .concat(strOldNumBatch) - .concat(strNewNumBatch) .concat(strChainID) - .concat(strAggregatorAddress); + .concat(strNewStateRoot) + .concat(strNewAccInputHash) + .concat(strNewLocalExitRoot) + .concat(strAggregatorAddress) + .concat(strNewNumBatch); return sha256Snark(finalStr); - - // aggreAddress - // oldStateRoot - // oldaccInputHash - // oldBatchNum - // chainID - // newStateroot - // newAcc - // newLocalExirRoot - // newBatchNum } /** @@ -161,7 +129,7 @@ function generateSolidityInputs( publicSignals, ) { const proofA = [proof.pi_a[0], - proof.pi_a[1], + proof.pi_a[1], ]; const proofB = [ [ @@ -174,7 +142,7 @@ function generateSolidityInputs( ], ]; const proofC = [proof.pi_c[0], - proof.pi_c[1], + proof.pi_c[1], ]; const input = publicSignals; diff --git a/test/contract-utils.test.js b/test/contract-utils.test.js index c4f22ecf..4cce7af9 100644 --- a/test/contract-utils.test.js +++ b/test/contract-utils.test.js @@ -14,7 +14,7 @@ describe('contractUtils', function () { const expectedBatchHashData = '0x80cc22bc1a205c21f2b8c87e6185e1215fb60e3d83c609fd3bf3cdc586a6244b'; // TODO: input taken from pil-stark const expectedStarkHashExecutor = '0x704d5cfd3e44b82028f7f8cae31168267a7422c5a447b90a65134116da5a8432'; - const expectedSnarkInputHash = '17495784446398463565336850903556670302680818979009718931527636126247722947873'; + const expectedSnarkInputHash = '2324046333999701271905824726747248223264560433236636264462054304814210382117'; before(async () => { testVector = JSON.parse(fs.readFileSync(path.join(pathTestVectors, 'inputs-executor/input_executor.json'))); diff --git a/test/helpers/test-vectors/zkevm-db/recursive.json b/test/helpers/test-vectors/zkevm-db/recursive.json index ab958488..79f96dd2 100644 --- a/test/helpers/test-vectors/zkevm-db/recursive.json +++ b/test/helpers/test-vectors/zkevm-db/recursive.json @@ -85,6 +85,6 @@ "finalLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "finalAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", "finalNumBatch": 2, - "inputSnark": "0x074170894ededcc53a78e0a29947112d83abc5f90098d64f9f124333bda92945" + "inputSnark": "0x0af71457e2331247fed379241743cc9b5782fee64db868c9e0fd787cfd9c45dc" } ] \ No newline at end of file From 7b979e4a57379e4eae61cf92da0bfec504224481 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Thu, 27 Oct 2022 17:00:06 +0200 Subject: [PATCH 22/40] fix:remove aggr address --- src/contract-utils.js | 1 - test/contract-utils.test.js | 2 +- test/helpers/test-vectors/zkevm-db/recursive.json | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/contract-utils.js b/src/contract-utils.js index a905d9c8..a8f654e7 100644 --- a/src/contract-utils.js +++ b/src/contract-utils.js @@ -96,7 +96,6 @@ async function calculateSnarkInput( .concat(strNewStateRoot) .concat(strNewAccInputHash) .concat(strNewLocalExitRoot) - .concat(strAggregatorAddress) .concat(strNewNumBatch); return sha256Snark(finalStr); diff --git a/test/contract-utils.test.js b/test/contract-utils.test.js index 4cce7af9..cc844ac9 100644 --- a/test/contract-utils.test.js +++ b/test/contract-utils.test.js @@ -14,7 +14,7 @@ describe('contractUtils', function () { const expectedBatchHashData = '0x80cc22bc1a205c21f2b8c87e6185e1215fb60e3d83c609fd3bf3cdc586a6244b'; // TODO: input taken from pil-stark const expectedStarkHashExecutor = '0x704d5cfd3e44b82028f7f8cae31168267a7422c5a447b90a65134116da5a8432'; - const expectedSnarkInputHash = '2324046333999701271905824726747248223264560433236636264462054304814210382117'; + const expectedSnarkInputHash = '15588448576060468525242870965361192827910782996030023758348255084502752104347'; before(async () => { testVector = JSON.parse(fs.readFileSync(path.join(pathTestVectors, 'inputs-executor/input_executor.json'))); diff --git a/test/helpers/test-vectors/zkevm-db/recursive.json b/test/helpers/test-vectors/zkevm-db/recursive.json index 79f96dd2..5b9f9b0e 100644 --- a/test/helpers/test-vectors/zkevm-db/recursive.json +++ b/test/helpers/test-vectors/zkevm-db/recursive.json @@ -85,6 +85,6 @@ "finalLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "finalAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", "finalNumBatch": 2, - "inputSnark": "0x0af71457e2331247fed379241743cc9b5782fee64db868c9e0fd787cfd9c45dc" + "inputSnark": "0x0aeafe443bda14b8859fad79a7aa763e1cf49e2fe7e631d4e579ebddeacf59fe" } ] \ No newline at end of file From 9c0d0a686d60f02882cd09ebf85bc81b95f0eca7 Mon Sep 17 00:00:00 2001 From: Ignasirv Date: Wed, 2 Nov 2022 13:56:42 +0100 Subject: [PATCH 23/40] Regenerate tests --- test/block-info.test.js | 8 +-- .../block-info/block-info-batches.json | 7 +-- .../test-vectors/block-info/block-info.json | 4 +- .../end-to-end/state-transition.json | 48 ++++++++-------- .../processor/state-transition.json | 56 +++++++++---------- .../selfdestruct/selfdestruct.json | 4 +- .../test-vectors/zkevm-db/recursive.json | 8 +-- test/processor.test.js | 17 ++++-- tools/fill-genesis/create-genesis.js | 5 +- tools/fill-genesis/genesis.json | 12 ++-- 10 files changed, 88 insertions(+), 81 deletions(-) diff --git a/test/block-info.test.js b/test/block-info.test.js index 56aee67d..438a4b24 100644 --- a/test/block-info.test.js +++ b/test/block-info.test.js @@ -53,8 +53,8 @@ describe('Block info tests', function () { expectedOldRoot, batches, sequencerAddress, - oldLocalExitRoot, bridgeDeployed, + oldAccInputHash, } = testVectors[i]; const db = new MemDB(F); @@ -63,7 +63,7 @@ describe('Block info tests', function () { db, poseidon, [F.zero, F.zero, F.zero, F.zero], - smtUtils.stringToH4(oldLocalExitRoot), + smtUtils.stringToH4(oldAccInputHash), genesis, null, null, @@ -329,12 +329,12 @@ describe('Block info tests', function () { ))[Scalar.e(globalExitRootPos)]; expect(Scalar.fromString(batchNumVm.toString('hex'), 16)).to.equal(batchNumSmt); - expect(batchNumSmt).to.equal(Scalar.e(batch.batchNumber)); + expect(batchNumSmt).to.equal(Scalar.e(batch.newNumBatch)); // Check through a call in the EVM if (bridgeDeployed) { const interfaceGlobal = new ethers.utils.Interface(['function globalExitRootMap(uint256)']); - const encodedData = interfaceGlobal.encodeFunctionData('globalExitRootMap', [batch.batchNumber]); + const encodedData = interfaceGlobal.encodeFunctionData('globalExitRootMap', [batch.newNumBatch]); const globalExitRootResult = await zkEVMDB.vm.runCall({ to: addressInstanceGlobalExitRoot, caller: Address.zero(), diff --git a/test/helpers/test-vectors/block-info/block-info-batches.json b/test/helpers/test-vectors/block-info/block-info-batches.json index 573a4273..7da34c98 100644 --- a/test/helpers/test-vectors/block-info/block-info-batches.json +++ b/test/helpers/test-vectors/block-info/block-info-batches.json @@ -39,6 +39,7 @@ ], "expectedOldRoot": "0xf5c30bbb2b8a1bdd2b881cc575b2acbd13578c7cd64250fe8b6770fa95f915b3", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "batches": [ { "txs": [ @@ -200,8 +201,7 @@ "batchL2Data": "0xea80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800a62ce9876e027f7a954f96c485c63c9bf043bd1fe1012c5634cf959bf7743190a601eedbcfef58146bdda9845fea5d9356b09d667010d557c73f83353a119a61cea01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e880803c696d27506eebe00e52cd1c327eefd2ebb8c7a5d5309118ad18381630b2a5d47971958df81d8daa0d393daddb17a250c294452078db34b22d9e5ee85d2482e81bea02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080db91fc325e867faa9625a5c7c152dfaf207a992b6eea855fcabe264f489b043a431f20ba77bd0269a6aedb6287118d383305d0dd677478209e60f6d3af3b17201cea03843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080e0c0469634b096c3b190713c8a8faa9c4fccc8b2d83cc8da056a897a28a616277c5bf403ce3a4c77cb0c6ca14cdd24d8fa785b4a0bde1500abba55db7df7483a1bea04843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e8808057c7bfa7288275d862a91776d6d05c2290058a42840f08108b8b157f139120ce565bc8d0b5291e949c1c87e2f829b76d6a5d15e767e61716d1095dcc7cb5b44d1cea05843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080e255f868a61169a2330cb539671e1a66ee846bc06cc888ea8fcd7ae51cdc62940c6dec27e6f756dd84923bcebb1f85db125299c0b622eaa8d5722cb3dace239d1cf84a06843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000008203e8808098f56115cad149a409a86e7610863248799a31d80e87d46582d08a3c0933a40a25455a74fa3ca2ada0bf39dac88a172d032583bfec15061f39184ef9f70126771c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x4ca728d72c5dda0b14d05963e49bd7f6fb5f397a700383610fd51b72f7e06598", - "batchHashData": "0x2fce26f01fde186437d7a97a24f7744fc2c5d0087d5fa9e2157dbe9d2c383efc", + "batchHashData": "0xc8fe9673e241467d9c9a9b44a81c71d1c1bba7cd9fe265ebc37adff1d3d9262b", "timestamp": 1944498031 }, { @@ -372,8 +372,7 @@ "batchL2Data": "0xea07843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800be264304cfc20c400929c82d1435cfbaa18e9a49c34ce65274633820803c415132ab24e00f892d77ad39c87e897772100e3323f31915a3e5eb261e056d99bc31bea08843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e88080775e9a77a45dafb120ec840926129c5db8ad3843722de88f2c7f6df4383c92fe0176dcd120e97ff6a1a1d60150aac3fdbca81bbfd1e2e9349ed9da4fa3bd85a81bea09843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080f969b5ab22f54db86a57efcfa83f3369047d328d2c56044bd49d7f863e69ed2b5a95c2b1b41801a5b4d7bb548829fe5a51c72dd5e5a08bd2a56f49bc3246a3081cea0a843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080b60beddfce8bf365e93cb4f88f45ed0e5649659de56dbf52332e6c9c16aa10bd576fb90bd967e2495fe8fa09d75d58b82668c54dab54d91f5e4ab0d76d2649ae1bea0b843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e88080416d143b11a02e0c28344feb6af0f90ecb5b0bd5eec26047b25c0f775502be751e40d32fefe94aee39ad9b2605afeb2e86f31b56ac82874f841054c6a01331851bea0c843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080a1ec9b236321a7d3545cfe1a1baedf65d75e589223d732d424576756adb0396e74470d226d5b61895150d96dbd1b1ba8a8ad69a6bf9311a141ece602b6420d961cf84a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018203e8808068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c48295695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef61b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x93216487e1bcf71bef629afedcbf40f7f1c22f0af2326f7aa47f4c4a1bf1a4dd", - "batchHashData": "0x6c8a80b510739fe5f5959dc03d074979d407915f5b4f9b1cb5ba97f469b85b08", + "batchHashData": "0x8196946b8a211125e92b0bdbce0c9f9b8b8fbebf2cd5e794cbb4cf8208641b3c", "timestamp": 1944498031 } ] diff --git a/test/helpers/test-vectors/block-info/block-info.json b/test/helpers/test-vectors/block-info/block-info.json index 58c7ebae..c21f3414 100644 --- a/test/helpers/test-vectors/block-info/block-info.json +++ b/test/helpers/test-vectors/block-info/block-info.json @@ -193,9 +193,9 @@ "batchL2Data": "0xea80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800a62ce9876e027f7a954f96c485c63c9bf043bd1fe1012c5634cf959bf7743190a601eedbcfef58146bdda9845fea5d9356b09d667010d557c73f83353a119a61cea01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e880803c696d27506eebe00e52cd1c327eefd2ebb8c7a5d5309118ad18381630b2a5d47971958df81d8daa0d393daddb17a250c294452078db34b22d9e5ee85d2482e81bea02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080db91fc325e867faa9625a5c7c152dfaf207a992b6eea855fcabe264f489b043a431f20ba77bd0269a6aedb6287118d383305d0dd677478209e60f6d3af3b17201cea03843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080e0c0469634b096c3b190713c8a8faa9c4fccc8b2d83cc8da056a897a28a616277c5bf403ce3a4c77cb0c6ca14cdd24d8fa785b4a0bde1500abba55db7df7483a1bea04843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e8808057c7bfa7288275d862a91776d6d05c2290058a42840f08108b8b157f139120ce565bc8d0b5291e949c1c87e2f829b76d6a5d15e767e61716d1095dcc7cb5b44d1cea05843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080e255f868a61169a2330cb539671e1a66ee846bc06cc888ea8fcd7ae51cdc62940c6dec27e6f756dd84923bcebb1f85db125299c0b622eaa8d5722cb3dace239d1c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x968ec985e95997442ab437df8653db76fe13b6856fda813b5c71f53195634510", - "batchHashData": "0xc14b177061b0fff3a5a1d61a5b1d50319b59a26b864285ef5c4f67cac43a77ee", + "batchHashData": "0xcc387c562528dcc81765f91d3eb572e96815b20d870a3715e0e83c5153a4c696", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 } ] \ No newline at end of file diff --git a/test/helpers/test-vectors/end-to-end/state-transition.json b/test/helpers/test-vectors/end-to-end/state-transition.json index 6f1d47fe..8cf5d24d 100644 --- a/test/helpers/test-vectors/end-to-end/state-transition.json +++ b/test/helpers/test-vectors/end-to-end/state-transition.json @@ -26,7 +26,7 @@ "balance": "100000000000000000000000", "nonce": "2", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001075760003560e01c80635d5d326f1162000095578063bab161bf1162000060578063bab161bf1462000414578063d02103ca1462000449578063e73758811462000478578063ed6be5c914620004ac57600080fd5b80635d5d326f146200035e57806381b1c17414620003835780638624c35c14620003ca578063b7e6a7d414620003ef57600080fd5b80633ae0504711620000d65780633ae05047146200023a5780633da816821462000252578063508935f814620002885780635a64a1da14620002a157600080fd5b806322e95f2c146200010c5780632dfdf0b5146200015b5780632f3a3d5d1462000182578063318aee3d14620001b1575b600080fd5b3480156200011957600080fd5b50620001316200012b366004620027b4565b620004c3565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200016857600080fd5b506200017360415481565b60405190815260200162000152565b3480156200018f57600080fd5b50604754620001319073ffffffffffffffffffffffffffffffffffffffff1681565b348015620001be57600080fd5b5062000208620001d0366004620027f0565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000152565b3480156200024757600080fd5b506200017362000566565b3480156200025f57600080fd5b5062000277620002713660046200290f565b62000640565b604051901515815260200162000152565b6200029f620002993660046200297d565b62000740565b005b348015620002ae57600080fd5b5062000173620002c036600462002a39565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200036b57600080fd5b506200029f6200037d36600462002b51565b62000d2a565b3480156200039057600080fd5b5062000131620003a236600462002c38565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620003d757600080fd5b506200029f620003e9366004620027b4565b620017d9565b348015620003fc57600080fd5b50620001316200040e366004620027b4565b62001a57565b3480156200042157600080fd5b50604254620004339063ffffffff1681565b60405163ffffffff909116815260200162000152565b3480156200045657600080fd5b50604654620001319073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200048557600080fd5b50620002776200049736600462002c38565b60436020526000908152604090205460ff1681565b348015620004b957600080fd5b5062000433600081565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b6020811015620006385781600116600103620005d057600181602081106200059c576200059c62002c52565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000614565b8260218260208110620005e757620005e762002c52565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200062160028362002cb0565b9150806200062f8162002cec565b91505062000570565b509092915050565b60008467ffffffffffffffff8416825b6020811015620007335781600116600103620006bd578681815181106200067b576200067b62002c52565b6020026020010151836040516020016200069f929190918252602082015260400190565b6040516020818303038152906040528051906020012092506200070f565b82878281518110620006d357620006d362002c52565b6020026020010151604051602001620006f6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200071c60028362002cb0565b9150806200072a8162002cec565b91505062000650565b5050909114949350505050565b60425463ffffffff90811690861603620007e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff89166200089d5785341462000893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007d8565b6000915062000bb1565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200099e576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200098b919062002d27565b5060208101518151909450925062000baf565b8415620009b357620009b38a88888862001b20565b620009d773ffffffffffffffffffffffffffffffffffffffff8b1633308a62001f71565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000a83919081019062002dc6565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000acf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000b17919081019062002dc6565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b89919062002e0f565b60405160200162000b9d9392919062002e7b565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a8660415460405162000bf0979695949392919062002eb8565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a9052607080820193909352815180820390930183526090019052805191012062000ca49062002055565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000ccc62000566565b6040518263ffffffff1660e01b815260040162000ceb91815260200190565b600060405180830381600087803b15801562000d0657600080fd5b505af115801562000d1b573d6000803e3d6000fd5b50505050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562000dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007d8565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000e45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e6b919062002f25565b60000362000efc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007d8565b60425463ffffffff85811691161462000f98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007d8565b60425463ffffffff16620010c9578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200105b908b8b63ffffffff168a62000640565b620010c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007d8565b620011e6565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200117e908b8b63ffffffff168b62000640565b620011e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007d8565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001357576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001279919062002f3f565b60006040518083038185875af1925050503d8060008114620012b8576040519150601f19603f3d011682016040523d82523d6000602084013e620012bd565b606091505b505090508062001350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007d8565b5062001762565b60425463ffffffff9081169087160362001394576200138e73ffffffffffffffffffffffffffffffffffffffff86168484620021ce565b62001762565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620016c1576047546000906200147f9073ffffffffffffffffffffffffffffffffffffffff168462002226565b90506000806000868060200190518101906200149c919062002f5d565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b8152600401620014e595949392919062002fde565b600060405180830381600087803b1580156200150057600080fd5b505af115801562001515573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620016af9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a1505050506200175f565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001737573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200175d919062002d27565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620017fa5750600054600160ff909116105b80620018165750303b15801562001816575060005460ff166001145b620018a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007d8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200190357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001981906200275c565b604051809103906000f0801580156200199e573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620019ee62002306565b801562001a5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060475490915062001b189073ffffffffffffffffffffffffffffffffffffffff16826200244e565b949350505050565b600062001b6383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620024d292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462001c38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f48657a4d617469634d657267653a3a5f7065726d69743a204e4f545f56414c4960448201527f445f43414c4c00000000000000000000000000000000000000000000000000006064820152608401620007d8565b600080808080808062001c4f896004818d6200303e565b81019062001c5e91906200306a565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462001d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f48657a4d617469634d657267653a3a5f7065726d69743a205045524d49545f4f60448201527f574e45525f4d5553545f42455f5448455f53454e4445520000000000000000006064820152608401620007d8565b73ffffffffffffffffffffffffffffffffffffffff8616301462001dd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f48657a4d617469634d657267653a3a5f7065726d69743a205350454e4445525f60448201527f4d5553545f42455f5448495300000000000000000000000000000000000000006064820152608401620007d8565b8a851462001e61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f48657a4d617469634d657267653a3a5f7065726d69743a205045524d49545f4160448201527f4d4f554e545f444f45535f4e4f545f4d415443480000000000000000000000006064820152608401620007d8565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162001f1c919062002f3f565b6000604051808303816000865af19150503d806000811462001f5b576040519150601f19603f3d011682016040523d82523d6000602084013e62001f60565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200204f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620024d9565b50505050565b80600162002066602060026200321b565b62002072919062003229565b6041541062002104576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007d8565b60016041600082825462002119919062003243565b909155505060415460005b6020811015620021c357816001166001036200215957826001826020811062002151576200215162002c52565b015550505050565b600181602081106200216f576200216f62002c52565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620021ac919062002cb0565b915080620021ba8162002cec565b91505062002124565b5062001a526200325e565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001a529084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162001fcc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007d8565b600054610100900460ff166200239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007d8565b60005b620023b06001602062003229565b8110156200244b5760218160208110620023ce57620023ce62002c52565b015460218260208110620023e657620023e662002c52565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002421919062003243565b6020811062002434576200243462002c52565b015580620024428162002cec565b915050620023a2565b50565b6000620024cb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200253d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620025ec9092919063ffffffff16565b80519091501562001a5257808060200190518101906200255e919062002d27565b62001a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007d8565b606062001b1884846000858573ffffffffffffffffffffffffffffffffffffffff85163b62002678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007d8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620026a3919062002f3f565b60006040518083038185875af1925050503d8060008114620026e2576040519150601f19603f3d011682016040523d82523d6000602084013e620026e7565b606091505b5091509150620026f982828662002704565b979650505050505050565b6060831562002715575081620024cb565b825115620027265782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d891906200328d565b61182980620032a383390190565b803563ffffffff811681146200277f57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146200244b57600080fd5b80356200277f8162002784565b60008060408385031215620027c857600080fd5b620027d3836200276a565b91506020830135620027e58162002784565b809150509250929050565b6000602082840312156200280357600080fd5b8135620024cb8162002784565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562002889576200288962002810565b604052919050565b600082601f830112620028a357600080fd5b8135602067ffffffffffffffff821115620028c257620028c262002810565b8160051b620028d38282016200283f565b9283528481018201928281019087851115620028ee57600080fd5b83870192505b84831015620026f957823582529183019190830190620028f4565b600080600080608085870312156200292657600080fd5b84359350602085013567ffffffffffffffff808211156200294657600080fd5b620029548883890162002891565b94506040870135915080821682146200296c57600080fd5b509396929550929360600135925050565b60008060008060008060a087890312156200299757600080fd5b8635620029a48162002784565b9550620029b4602088016200276a565b94506040870135620029c68162002784565b935060608701359250608087013567ffffffffffffffff80821115620029eb57600080fd5b818901915089601f83011262002a0057600080fd5b81358181111562002a1057600080fd5b8a602082850101111562002a2357600080fd5b6020830194508093505050509295509295509295565b60008060008060008060c0878903121562002a5357600080fd5b62002a5e876200276a565b9550602087013562002a708162002784565b945062002a80604088016200276a565b9350606087013562002a928162002784565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff82111562002ac95762002ac962002810565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262002b0757600080fd5b813562002b1e62002b188262002aac565b6200283f565b81815284602083860101111562002b3457600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b7257600080fd5b8a3567ffffffffffffffff8082111562002b8b57600080fd5b62002b998e838f0162002891565b9b5062002ba960208e016200276a565b9a5060408d0135995060608d0135985062002bc760808e016200276a565b975062002bd760a08e01620027a7565b965062002be760c08e016200276a565b955062002bf760e08e01620027a7565b94506101008d013593506101208d013591508082111562002c1757600080fd5b5062002c268d828e0162002af5565b9150509295989b9194979a5092959850565b60006020828403121562002c4b57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262002ce7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362002d205762002d2062002c81565b5060010190565b60006020828403121562002d3a57600080fd5b81518015158114620024cb57600080fd5b60005b8381101562002d6857818101518382015260200162002d4e565b838111156200204f5750506000910152565b600082601f83011262002d8c57600080fd5b815162002d9d62002b188262002aac565b81815284602083860101111562002db357600080fd5b62001b1882602083016020870162002d4b565b60006020828403121562002dd957600080fd5b815167ffffffffffffffff81111562002df157600080fd5b62001b188482850162002d7a565b60ff811681146200244b57600080fd5b60006020828403121562002e2257600080fd5b8151620024cb8162002dff565b6000815180845262002e4981602086016020860162002d4b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062002e90606083018662002e2f565b828103602084015262002ea4818662002e2f565b91505060ff83166040830152949350505050565b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a084015262002f0e60e084018662002e2f565b915080841660c08401525098975050505050505050565b60006020828403121562002f3857600080fd5b5051919050565b6000825162002f5381846020870162002d4b565b9190910192915050565b60008060006060848603121562002f7357600080fd5b835167ffffffffffffffff8082111562002f8c57600080fd5b62002f9a8783880162002d7a565b9450602086015191508082111562002fb157600080fd5b5062002fc08682870162002d7a565b925050604084015162002fd38162002dff565b809150509250925092565b60a08152600062002ff360a083018862002e2f565b828103602084015262003007818862002e2f565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b600080858511156200304f57600080fd5b838611156200305d57600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200308657600080fd5b8735620030938162002784565b96506020880135620030a58162002784565b955060408801359450606088013593506080880135620030c58162002dff565b9699959850939692959460a0840135945060c09093013592915050565b600181815b808511156200314157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003125576200312562002c81565b808516156200313357918102915b93841c9390800290620030e7565b509250929050565b6000826200315a5750600162000560565b81620031695750600062000560565b81600181146200318257600281146200318d57620031ad565b600191505062000560565b60ff841115620031a157620031a162002c81565b50506001821b62000560565b5060208310610133831016604e8410600b8410161715620031d2575081810a62000560565b620031de8383620030e2565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003213576200321362002c81565b029392505050565b6000620024cb838362003149565b6000828210156200323e576200323e62002c81565b500390565b6000821982111562003259576200325962002c81565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620024cb602083018462002e2f56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122068cb524538909c05cc5109b7664a019588dc698f1f570976efb4dd6b6aee818364736f6c634300080f0033", + "bytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200f33d24b40d1e879f02496512d8e703a09704c5edf7d149259a9c3cf2b64250664736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000042": "0x01", @@ -88,7 +88,7 @@ } } ], - "expectedOldRoot": "0xb33635210b9f5d07769cf70bf5a3cbf241ecbaf79a9b66ef79b28d920da1f776", + "expectedOldRoot": "0x52a940938311f513017f0d9b1da06123c00603bb494763bcdbc536aebefa900c", "txs": [ { "from": "0xc949254d682d8c9ad5682521675b8f43b102aec4", @@ -96,7 +96,7 @@ "nonce": 3, "value": "0", "contractName": "Bridge", - "function": "claim", + "function": "claimAsset", "params": [ [ "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -133,7 +133,7 @@ "0x8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9" ], 0, - "0x573768af52d1354a7b83fb784ecbacecf8fead6ad49f25af8909a35b0a7bba05", + "0x5ba002329b53c11a2f1dfe90b11e031771842056cf2125b43da8103c199dcd7f", "0x0000000000000000000000000000000000000000000000000000000000000000", 0, "0x0000000000000000000000000000000000000000", @@ -144,11 +144,11 @@ ], "gasLimit": 2000000, "gasPrice": "0", - "data": "0x5d5d326f00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000573768af52d1354a7b83fb784ecbacecf8fead6ad49f25af8909a35b0a7bba050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3021ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193440eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f839867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756afcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8923490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99cc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8beccda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d22733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618db8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32293237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7358448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a90000000000000000000000000000000000000000000000000000000000000000", + "data": "0x7b6323c1000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000005ba002329b53c11a2f1dfe90b11e031771842056cf2125b43da8103c199dcd7f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3021ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193440eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f839867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756afcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8923490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99cc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8beccda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d22733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618db8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32293237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7358448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a90000000000000000000000000000000000000000000000000000000000000000", "chainId": 1000, "reason": "", - "customRawTx": "0xf905a80380831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf5598880b905845d5d326f00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000573768af52d1354a7b83fb784ecbacecf8fead6ad49f25af8909a35b0a7bba050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3021ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193440eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f839867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756afcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8923490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99cc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8beccda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d22733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618db8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32293237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7358448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a900000000000000000000000000000000000000000000000000000000000000008203e8808048480a57632d9de622b3b3fbfb56471b4b31e0b810dc753a794dfeb87c032bee7edbdf61ad83e3ed2bd98cb242c8924bb6983d823f485776895efd6dc76f16a61c", - "rawTx": "0xf905e80380831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf5598880b905845d5d326f00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000573768af52d1354a7b83fb784ecbacecf8fead6ad49f25af8909a35b0a7bba050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3021ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193440eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f839867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756afcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8923490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99cc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8beccda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d22733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618db8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32293237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7358448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a900000000000000000000000000000000000000000000000000000000000000008207f4a048480a57632d9de622b3b3fbfb56471b4b31e0b810dc753a794dfeb87c032beea07edbdf61ad83e3ed2bd98cb242c8924bb6983d823f485776895efd6dc76f16a6" + "customRawTx": "0xf905a80380831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf5598880b905847b6323c1000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000005ba002329b53c11a2f1dfe90b11e031771842056cf2125b43da8103c199dcd7f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3021ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193440eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f839867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756afcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8923490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99cc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8beccda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d22733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618db8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32293237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7358448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a900000000000000000000000000000000000000000000000000000000000000008203e88080acc0f3f1c62c08b14771c6708632db779c4b9ab167793dd6e311a4bfe72d82183f054c5631e299c7f84ccf2b6244bd07c7f2a4fd7ebe4fc6daf46a0371831cdd1b", + "rawTx": "0xf905e80380831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf5598880b905847b6323c1000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000005ba002329b53c11a2f1dfe90b11e031771842056cf2125b43da8103c199dcd7f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3021ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193440eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f839867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756afcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8923490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99cc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8beccda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d22733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618db8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32293237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7358448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a900000000000000000000000000000000000000000000000000000000000000008207f3a0acc0f3f1c62c08b14771c6708632db779c4b9ab167793dd6e311a4bfe72d8218a03f054c5631e299c7f84ccf2b6244bd07c7f2a4fd7ebe4fc6daf46a0371831cdd" }, { "from": "0xc949254d682d8c9ad5682521675b8f43b102aec4", @@ -156,7 +156,7 @@ "nonce": 4, "value": "1000000000000000000", "contractName": "Bridge", - "function": "bridge", + "function": "bridgeAsset", "params": [ "0x0000000000000000000000000000000000000000", 0, @@ -166,22 +166,22 @@ ], "gasLimit": 2000000, "gasPrice": "0", - "data": "0x508935f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000", + "data": "0x0871e97100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000", "chainId": 1000, "reason": "", - "customRawTx": "0xf8ef0480831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf55988880de0b6b3a7640000b8c4508935f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008203e88080cb1a319474de4dbee7c198144a6a4767d8aad6649d83b2fd76c8793a74fdad824d536fdded69a0ea3909ff40c9242cc12c2f1efe95581647252861333e84bfed1b", - "rawTx": "0xf9012f0480831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf55988880de0b6b3a7640000b8c4508935f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008207f3a0cb1a319474de4dbee7c198144a6a4767d8aad6649d83b2fd76c8793a74fdad82a04d536fdded69a0ea3909ff40c9242cc12c2f1efe95581647252861333e84bfed" + "customRawTx": "0xf8ef0480831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf55988880de0b6b3a7640000b8c40871e97100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008203e88080f212cb649f835d4f9c788d3a6733911b8aa02c6b63751f3b931fb062bd1942e452e73d8704862f4eb55646e7440dcf65f6e7ca424e38340ed8bcf24597c6865d1c", + "rawTx": "0xf9012f0480831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf55988880de0b6b3a7640000b8c40871e97100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008207f4a0f212cb649f835d4f9c788d3a6733911b8aa02c6b63751f3b931fb062bd1942e4a052e73d8704862f4eb55646e7440dcf65f6e7ca424e38340ed8bcf24597c6865d" } ], - "expectedNewRoot": "0x2b6bad53688f55d8eb28dd212818d98f8c6f6b2a8722c40351cb0f77a4aeaf04", + "expectedNewRoot": "0x23643bd048a4bf1f990f4c9193a558ff71cf83736a522b965baec52ae3422e09", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "1", "storage": { - "0x664cfcf7194b8e36c5de9768bca5f921966785e8528dec268b14fd13e1e97922": "0x01", + "0xb7b9bfbed410c773a6625940b8d940fbc10059beab3c33131a2bd6f11a2b106c": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x284215bd63e6ebdb90fd60b51c2da82dcc0dfe6c53ea6ef6995920da706a5897" + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x97c7c68e5f6062b69b69b7395dd8ca484a2266fb86d782bc0f094eb1b73f17ba" }, "hashBytecode": "0xef2427249f0f776e1fb03a22fa9dc30b18372734b0742c63a0acb4a55c82e1a3", "bytecodeLength": 486 @@ -191,8 +191,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x9970e6a523824d444a6ba79b6980e99931b29252ff3d8c7953986218de5660be", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x459d9ffe9e0bf9233d667aa9c0cc4d37b22eb626e22dccc9b9a7bdf2958a790a" + "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x20b4f0c6cd29b8bbff9677d04da7dfd8530fe86b0aa9627e0b090bc1235aa9c2", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x91797cd9ca12c36cf9d8a584267280241098a6732f49bd92f1ff869ca0e6c19a" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -207,7 +207,7 @@ "0x0000000000000000000000000000000000000000000000000000000000000042": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000046": "0xae4bb80be56b819606589de61d5ec3b522eeb032", "0x0000000000000000000000000000000000000000000000000000000000000047": "0x61ba0248b0986c2480181c6e76b6adeeaa962483", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x7ac47f029324d95af252563d003bdb7c483c73c80c6c4b0931c34c05478e293a", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0xe0101b02f9f6ca22f4e9518033d4b1b033af8254b9285d93015c233140474852", "0x0000000000000000000000000000000000000000000000000000000000000022": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5", "0x0000000000000000000000000000000000000000000000000000000000000023": "0xb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30", "0x0000000000000000000000000000000000000000000000000000000000000024": "0x21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85", @@ -240,8 +240,8 @@ "0x000000000000000000000000000000000000000000000000000000000000003f": "0x93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735", "0x0000000000000000000000000000000000000000000000000000000000000040": "0x8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9" }, - "hashBytecode": "0x0b50651f5202dfb99d0cf2d32ad3bad933ee4b67332325f8a303827f0c002e8c", - "bytecodeLength": 19201 + "hashBytecode": "0x5352aabf1bf5ffc33e0f37cd2d5decbd67a78b9f4a9b05986d09f150e3f65714", + "bytecodeLength": 22213 }, "0xc949254d682d8c9ad5682521675b8f43b102aec4": { "balance": "9000000000000000000", @@ -274,12 +274,12 @@ "bytecodeLength": 0 } }, - "batchL2Data": "0xf905a80380831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf5598880b905845d5d326f00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000573768af52d1354a7b83fb784ecbacecf8fead6ad49f25af8909a35b0a7bba050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3021ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193440eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f839867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756afcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8923490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99cc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8beccda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d22733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618db8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32293237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7358448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a900000000000000000000000000000000000000000000000000000000000000008203e8808048480a57632d9de622b3b3fbfb56471b4b31e0b810dc753a794dfeb87c032bee7edbdf61ad83e3ed2bd98cb242c8924bb6983d823f485776895efd6dc76f16a61cf8ef0480831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf55988880de0b6b3a7640000b8c4508935f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008203e88080cb1a319474de4dbee7c198144a6a4767d8aad6649d83b2fd76c8793a74fdad824d536fdded69a0ea3909ff40c9242cc12c2f1efe95581647252861333e84bfed1b", - "globalExitRoot": "0x5bf5ecd501710dc31809a1a9ffa9f832e5dc729361da93abd333b6611d123add", - "newLocalExitRoot": "0x284215bd63e6ebdb90fd60b51c2da82dcc0dfe6c53ea6ef6995920da706a5897", - "inputHash": "0x83fa42785fd942ae94057121ed40b6e5dd3af00c12ebafcb4e7497acd0bef713", - "batchHashData": "0xd8604505cb2959d10bd0a1a19fe863a05fd280271ce19cf9f26738b1f7c33587", + "batchL2Data": "0xf905a80380831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf5598880b905847b6323c1000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000005ba002329b53c11a2f1dfe90b11e031771842056cf2125b43da8103c199dcd7f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3021ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193440eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f839867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756afcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8923490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99cc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8beccda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d22733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618db8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32293237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7358448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a900000000000000000000000000000000000000000000000000000000000000008203e88080acc0f3f1c62c08b14771c6708632db779c4b9ab167793dd6e311a4bfe72d82183f054c5631e299c7f84ccf2b6244bd07c7f2a4fd7ebe4fc6daf46a0371831cdd1bf8ef0480831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf55988880de0b6b3a7640000b8c40871e97100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008203e88080f212cb649f835d4f9c788d3a6733911b8aa02c6b63751f3b931fb062bd1942e452e73d8704862f4eb55646e7440dcf65f6e7ca424e38340ed8bcf24597c6865d1c", + "globalExitRoot": "0x772a7e7f901e350a1943a7204f9bcc5da04bcb804d3b37c4debda567b05b13c4", + "newLocalExitRoot": "0x97c7c68e5f6062b69b69b7395dd8ca484a2266fb86d782bc0f094eb1b73f17ba", + "batchHashData": "0xf8be4fda0fa34bf8b56f96439c31c682ecf16c435b283b468aa42daec1d91c58", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 } ] \ No newline at end of file diff --git a/test/helpers/test-vectors/processor/state-transition.json b/test/helpers/test-vectors/processor/state-transition.json index fa7ddd32..ab5f51ca 100644 --- a/test/helpers/test-vectors/processor/state-transition.json +++ b/test/helpers/test-vectors/processor/state-transition.json @@ -73,9 +73,9 @@ "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x4bf4410749f919a5ecbf8416a105c6a95fb2f2003a9cfcd56a0dab048908f106", - "batchHashData": "0x9370689d3c20a5a4739f902a31e2ea20c7d7be121a0fc19468a2e1b5d87f4111", + "batchHashData": "0x80cc22bc1a205c21f2b8c87e6185e1215fb60e3d83c609fd3bf3cdc586a6244b", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -244,9 +244,9 @@ "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731bef80843b9aca00830186a094187bd40226a7073b49163b1f6c2b73d8f2aa8478893635c9adc5dea00000808203e880806199f98970ea3e0e9a59e32184ea11ae9158b9b93d70906e11f60eb6ce0096023c1bbbb437e58ea5f7bebd344d61cccd161c6b8accff11b50ea44300d3ab58bd1bee80843b9aca00830186a094187bd40226a7073b49163b1f6c2b73d8f2aa8478880de0b6b3a7640000808203e8808074ecb6abb3d84c322a4905c60199b8f422b79b940e8a853d580869268009ae3123fb6caa5b3afc410b79d9b68bf851df1fd46fd6923cc481b3e273aeb92ce67d1cee80843b9aca00830186a094abcced19d7f290b84608fec510bee872cc8f5112880de0b6b3a7640000808203e88080432b1bc18d96dea596edfe17b249a68e42117f738ecfaea4e9f92aa77935fb4d5b9a983a5ba73c27cbaa4de62b1d8ab8b908a941926387927dcd2319d8b4dfb21cec80843b9aca00830186a094abcced19d7f290b84608fec510bee872cc8f5112880de0b6b3a764000080808080c58f68d4c65a9a131d17a426ab83da163a43e21f8811a70cd4ca79eb5d26f25d169e8e50ee8483669b2aef296e6dc68464e5af0dc582a54751ef50c2c9207b6b1c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0xb4929f58db8cf6166afee8d05360db544bf2482745a2620b01e5e9b6750c13c8", - "batchHashData": "0xb42e4971194ef84093a6db689ab04ef94ee29868c2b618408708285272f10aca", + "batchHashData": "0x7c029310f044ec61946375d00c12cec221f35d42dc6829a9ff1489cf6bb5624d", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -309,9 +309,9 @@ "batchL2Data": "0xf080843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8a021e19e0c9bab2400000808203e8808069d48cb9ade9de851379987aa0f7f677cdaee1152ec785a3d3009f094c889be9368c3d198cdfe5b1e0100fe110ea60e77b1eb65e9363d96f7fb9c2b84a37c9b01c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0xceafb6438c8ab4a8ca1bb97c505f4346f641ce7d1a975952599a8712bf1af4de", - "batchHashData": "0xf1a712e0d7cb35046bea1b8b977ef07232b7d006bf8f5f8c748a9478c5ca0f85", + "batchHashData": "0x9e2a4414f78bef13670164fb0eac6d43e50b5f305c8c9e9495e8f204d880b88d", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -409,9 +409,9 @@ "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a00008082019180806e209c61ca92c2b980d6197e7ac9ccc3f547bf13be6455dfe682aa5dda9655ef16819a7edcc3fefec81ca97c7a6f3d10ec774440e409adbba693ce8b698d41f11cef80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff89056bc75e2d63100000808203e880806fac51f437890686cea7fc4d478e01f4650284d8b0c447d3a049ad799a938e855d76085acbdd3af82e205f070fd3f333d3f069ab3936323ac347003f07d9418a1b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0xd43383bc749ee49d31620d827609f123e3be19580b53e989116e1cbe0edb52cd", - "batchHashData": "0xe5f8356f91d4d5e6316257cb36687c2b678d5ad75f11580a4aa0e411d3f72fa9", + "batchHashData": "0x63a2f1c975b3481a834dc19e47d51bbebfa95d36a5cd5ef7e1cd8f77dba9f92f", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -475,9 +475,9 @@ "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x72fc72093c9357dae16aee6352936c3fcfcfa3d5c1ac1942f04e27dd040f2f7b", - "batchHashData": "0xd519b9786fa59e931526ccb9ea45d03affac1cef13f1e6a087fc7ea5e0f973bb", + "batchHashData": "0x990477d9fa852647f7f31a984aa915af0ff3a813ca717728c510b48feaacac66", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -554,9 +554,9 @@ "batchL2Data": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d88016345785d8a0000808203e88080cca9bd00c0a9af18cdc17e693951b88b293bae8ed236ff7dcf2684c478bc0b6a19cc9ed09ee5e1e2750abbea7ec8d2ed31df90c7d364d4e2f36c31eb410c10451b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x8bad902ac9dabe1445cd301a7fbfd460d465a750928930a4a5693e056a4c2f74", - "batchHashData": "0x76fa73a1392da97795dd5bd13828e60fc39e470a828e5b50724f455626cae832", + "batchHashData": "0x36e75bc24a19a4f5c6057500ed3d9d0567606eaf31f870f0fe3d2b71de951700", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -672,9 +672,9 @@ "batchL2Data": "0xef80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff89056bc75e2d63100000808203e880806fac51f437890686cea7fc4d478e01f4650284d8b0c447d3a049ad799a938e855d76085acbdd3af82e205f070fd3f333d3f069ab3936323ac347003f07d9418a1bee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731bee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff880de0b6b3a7640000808203e880803317280d96c3ed303a42d9da2638805301351c96cad135380ffa544d3c2bc96a6a55cef2d3827323f134976dd99a33bebef27b5e99c454fb1f8d4a4861ac4e0f1cec80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff880de0b6b3a764000080808080f7e1e6f3cd95d27522592e8796afa8f419a066b7172e0ac3e7826705ad608c672731e14da1b190dab8c14e79e050e31da53fdb4a0e55ca48ee4faff859606d5a1b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0xcc550422c1500cc353f375346d428e4f2eb7696d4c6d5c90ec17c6b65a6c08e7", - "batchHashData": "0x07bc943150ed8ec52700dad23fa01022c90d0093541463a8bf3b247f0afc29b9", + "batchHashData": "0xcf2f7e2aa1ba6181e15e1fcd15948b92a5dbe807a46b15726eb6688949b7df26", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -751,9 +751,9 @@ "batchL2Data": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d88016345785d8a0000808203e88080cca9bd00c0a9af18cdc17e693951b88b293bae8ed236ff7dcf2684c478bc0b6a19cc9ed09ee5e1e2750abbea7ec8d2ed31df90c7d364d4e2f36c31eb410c10451b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x5122aa5cab6e194ffa5b060d0484cb84890f380be7f9fa9ab381a361bdf3414f", - "batchHashData": "0x6f70724ce6f47451d23b55925247248d9425b1e36e759ed8108535bfb58fa2b9", + "batchHashData": "0x36e75bc24a19a4f5c6057500ed3d9d0567606eaf31f870f0fe3d2b71de951700", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -844,9 +844,9 @@ "batchL2Data": "0xf080862b4f29945e00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880802338447c58501088b071192ec4b44c696f2f1cdf4ff8182ecb8d0cd4ea83c428034c91620ac27f2870e1568e30e1db2ce9c0a05f2b03b20d017b3a0410edc6571cee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8806f05b59d3b20000808203e880809990717b4c80d955cacf4a765d3bfefd707511d66e0a482510906d119fa285c7232ccd442c5b618558b62175f01d9f45ff655d480f36394ea50a0b7dc52bc3331c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0xbe474d18958df15856e736ed6a380aa31fec6d0129a47ea8fb2ee66ef2018e5f", - "batchHashData": "0x22a6bee1dba88693c69e4f7e941a4ec4434b1c455c732e0cb0e4704c3a8112fb", + "batchHashData": "0x165cea5fa8d1f2c85665d22bfff8a45b2b7183e9627840dd04f618c1aec2464f", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -965,9 +965,9 @@ "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731bee01843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d8806f05b59d3b20000808203e88080c15e7f0afea365929bff2dea9b1c219ce7d656e9829c30c5736bfa499fee328132ee39a354417f726d717e68b6b019214721808753aba88a68eea6c57ca136521cee02843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e88080bff0e780ba7db409339fd3f71969fa2cbf1b8535f6c725a1499d3318d3ef9c2b6340ddfab84add2c188f9efddb99771db1fe621c981846394ea4f035c85bcdd51bee03843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d8806f05b59d3b20000808203e8808047b4f7d735dfadefc585bf24d9bd2267438f9bc92d1ab4f65fa9a6d90cc338580720a7da26cad22c05bf1358011c95caec969b8b9177af91c0e90dac3d02f6b31b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0xf7472b968abc368d488805dd0fbaa8dc94916df0382cbb4556aa3e5ba20bc35a", - "batchHashData": "0x424ca9c22f473aa8474b37975ce1a94ffba84dec4a1b2b2dfaa1bf767152719e", + "batchHashData": "0x797d3bbd5aafb65b31647e20b5b0ca3371702fd5166b16c0f1512cad7dc88f8e", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -1086,9 +1086,9 @@ "batchL2Data": "0xf84a80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a45ef3d3dd00000000000000000000000000000000000000000000000000000000000000078203e880803943e5a952e27d85c91f61610159fd8caf0dd68db76a1df7fb52934156d9ec935ceec6b0f908e36ee8b2c70350b3813d72558572ff95deac79069168e68726571cee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x61b226decaeabd38d1a93f46fb5019097af0dfeb0e95cd17eb6a36108c68382c", - "batchHashData": "0x74cd37dc6dde2c5d2b9f6eba15e7cb1c059df44cfbd9654c55b1557ca7aca031", + "batchHashData": "0x34277e04e6bb366e19b85abe556937435e579d1c2fe2973587b730c73415b94d", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -1202,9 +1202,9 @@ "batchL2Data": "0xee80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9888016345785d8a0000808203e880800aec3714591ea85d38943922d16f5f592f10abd2834c43b06253314a8591107f00e81823e7864ba979b28a6ee5eb660dfce7aa857303691ba6759d9edc5378901cf86b01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880b844494e4bc30000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff00000000000000000000000000000000000000000000000000038d7ea4c680008203e88080c83069009c51e411569ca78a660bbcb64e4e6709909eb99c28395fb4c787da4c2b846bf51fcf891fb293e36a0cf5f4efd1fe7c19b2c8a1220b8308b195e801561b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x543b3ee0699399f4a81e6bd86793c7bfd52b3a7a4720e0d5d2bc8881ef49409f", - "batchHashData": "0xedcefed860f6d77c3446ef42f9456cb73d69064223588fc44f17b5eb9b1aca69", + "batchHashData": "0x405293b4b4015b2e08493a85d2028419422c2a42b173396552bb4db165f24dbc", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -1329,9 +1329,9 @@ "batchL2Data": "0xee80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9888016345785d8a0000808203e880800aec3714591ea85d38943922d16f5f592f10abd2834c43b06253314a8591107f00e81823e7864ba979b28a6ee5eb660dfce7aa857303691ba6759d9edc5378901cf84a01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4027e5d610000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff8203e88080a04c0969f64f440a2c91e29bf9ea0b1cc8db9f33bda47c2c6899840ae46d36d70212c0a9f1bb015890ed0830c7fea6c52adaf85b0bf3d64448d3300c12c1bb161b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x2383999c3a4443972e4ac466600f87cb92d3102da89b1b2a59d0e00f59737271", - "batchHashData": "0xf28d5240092614f023fa7e231235b71ccce80515fb785f00469e6a0367c10a48", + "batchHashData": "0x0648c342d6d0c7dfdbc8ebb8ec2273793705faeead957dc4a6b6cd69c5fa4f71", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 }, { @@ -1457,9 +1457,9 @@ "batchL2Data": "0xf9032880843b9aca00830f42408080b90314608060405234801561001057600080fd5b506040516102f43803806102f483398181016040528101906100329190610054565b80600081905550506100a7565b60008151905061004e81610090565b92915050565b60006020828403121561006a5761006961008b565b5b60006100788482850161003f565b91505092915050565b6000819050919050565b600080fd5b61009981610081565b81146100a457600080fd5b50565b61023e806100b66000396000f3fe6080604052600436106100385760003560e01c8063027e5d6114610041578063aa8c217c1461006a578063d997ccb3146100955761003f565b3661003f57005b005b34801561004d57600080fd5b5061006860048036038101906100639190610123565b6100b3565b005b34801561007657600080fd5b5061007f6100ff565b60405161008c9190610189565b60405180910390f35b61009d610105565b6040516100aa919061016e565b60405180910390f35b8073ffffffffffffffffffffffffffffffffffffffff166108fc6000549081150290604051600060405180830381858888f193505050501580156100fb573d6000803e3d6000fd5b5050565b60005481565b60006001905090565b60008135905061011d816101f1565b92915050565b600060208284031215610139576101386101ec565b5b60006101478482850161010e565b91505092915050565b610159816101b6565b82525050565b610168816101e2565b82525050565b60006020820190506101836000830184610150565b92915050565b600060208201905061019e600083018461015f565b92915050565b60006101af826101c2565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b6101fa816101a4565b811461020557600080fd5b5056fea26469706673582212208cb33f54873dbf0b74ff9c230fc2e7522ca18ea82fcce1f4a1904abe1c1043fe64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000018203e88080579b8010f25b1f95158686736e9930d4ebd2a3c0ef4e604d0e76684e491f735d30eb46fe9a689148f3559c23bd5566fcaed97f61be389c4fb96f735b464ec5031cee01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9888016345785d8a0000808203e88080da8130f8fd64ed97277e306b9aca4f42ece0e2352d74823b0d31172fe0d8be686bbb35fb63de10207ea586da635ff92c0097acf501aef7940b733317ba4e0d751bf84a02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4027e5d610000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff8203e8808028e62eb40661fd098322a7211dca25a6b56f60eefb24ede9607d2603a09e4c653be289b7a729a18336e2f9f4a4f52c4fadc4274d1fd42dd8965deeb8634ddddc1b", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x4bf065652406ae036080835d6f8e0b08dac2b7dc8203664efcedd8c485eefe7a", - "batchHashData": "0x6f9e2eecfdf9fc19be6be2b17fe3d9f498639ebdf225808adbe0a6fb55308d5d", + "batchHashData": "0x97e4163ef51abe91b6acd1b35ba01f89753de21a725a9c0566b55c17a6e7237a", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 } ] \ No newline at end of file diff --git a/test/helpers/test-vectors/selfdestruct/selfdestruct.json b/test/helpers/test-vectors/selfdestruct/selfdestruct.json index e63508c8..a755dfd6 100644 --- a/test/helpers/test-vectors/selfdestruct/selfdestruct.json +++ b/test/helpers/test-vectors/selfdestruct/selfdestruct.json @@ -148,9 +148,9 @@ "batchL2Data": "0xf84a80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4718da7ee00000000000000000000000000000000000000000000000000000000000000018203e880800f169b9405991a5f4a96f9d1d726e43ab9d42e1d0b4daac7ec9b4797dd39e9b724cf48c46cbc1924dd25adc6536ef259bedcd822979734ae347e01d715303ad01cee01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9884075bcd15845cfb28e78203e88080b22ac440612ebcd45672cfc7dcbbbe7cde784294e5076827b1812f9ea9eee2736c3c774150514808053972653f74bbeb33918dc74aa9182cee7993283b1faa541bea02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880842b68b9c68203e88080f5b684b995dd9549bb5fd2ed23d3b388f75f559b14110277b4ae7de5bd7775ef1be51078330d1ef03f0e4fe0271e8e2502b6e98c1f7664a5e2aeae3ab04156d41c", "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "inputHash": "0x3a897d2d0b7a582febb4265bb4ce372419db1d81f15d4d6b8a026c4d3c5d52fc", - "batchHashData": "0x1f9553beb9fe9b03b2e19a00c41dfd2d9b711afbc9c05d29ab00d430542d7d12", + "batchHashData": "0x8861a42093839bba053d104b4fd359fab4bbb4806eb4214401104ace03b3bca9", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": 1944498031 } ] \ No newline at end of file diff --git a/test/helpers/test-vectors/zkevm-db/recursive.json b/test/helpers/test-vectors/zkevm-db/recursive.json index 5b9f9b0e..91040dd7 100644 --- a/test/helpers/test-vectors/zkevm-db/recursive.json +++ b/test/helpers/test-vectors/zkevm-db/recursive.json @@ -40,7 +40,7 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x5a52a0ee8577a03e831f627fead1921da142f3820f5880118e98ae6362626b3c", + "expectedNewRoot": "0x2437b34ce149828e5f5a443a2d502c1c948a17edecadb3d15b9eaf0be2cb2bdd", "expectedNewAccInputHash": "0x704d5cfd3e44b82028f7f8cae31168267a7422c5a447b90a65134116da5a8432", "expoectNewLocalExitRoot": "", "expectedNewLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -63,7 +63,7 @@ "customRawTx": "0xee01843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8802c68af0bb140000808203e88080225fd92907efb068a8bee3f95a26f2c5d67db2750bb9993083e0df217ff3a2666f412c311280066d1717f309c248fdbd853ce738363db08775999b2f2d2a8d5e1c" } ], - "expectedNewRoot": "0x9d833776d495de5118faec8c9acfd5e1a8fd15dbe2a48b0ec7b0e3cb437bba5e", + "expectedNewRoot": "0x89c7d6555ff99d05ceac6dabe09993c32c023578ea290aedfcc660d22fd5cff1", "expectedNewAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", "expoectNewLocalExitRoot": "", "expectedNewLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -81,10 +81,10 @@ "nonce": "0" } }, - "finalStateRoot": "0x9d833776d495de5118faec8c9acfd5e1a8fd15dbe2a48b0ec7b0e3cb437bba5e", + "finalStateRoot": "0x89c7d6555ff99d05ceac6dabe09993c32c023578ea290aedfcc660d22fd5cff1", "finalLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "finalAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", "finalNumBatch": 2, - "inputSnark": "0x0aeafe443bda14b8859fad79a7aa763e1cf49e2fe7e631d4e579ebddeacf59fe" + "inputSnark": "0x1e277606cf28e834b395fb245828311e00fe5d39ad2c48b635e4e3402bba2401" } ] \ No newline at end of file diff --git a/test/processor.test.js b/test/processor.test.js index 08e18f03..c88956d8 100644 --- a/test/processor.test.js +++ b/test/processor.test.js @@ -1,3 +1,4 @@ +/* eslint-disable prefer-const */ /* eslint-disable global-require */ /* eslint-disable import/no-dynamic-require */ /* eslint-disable no-unused-expressions */ @@ -59,7 +60,7 @@ describe('Processor', async function () { it('Check test vectors', async () => { for (let i = 0; i < testVectors.length; i++) { - const { + let { id, genesis, expectedOldRoot, @@ -68,7 +69,7 @@ describe('Processor', async function () { sequencerAddress, expectedNewLeafs, batchL2Data, - oldLocalExitRoot, + oldAccInputHash, newLocalExitRoot, globalExitRoot, batchHashData, @@ -84,7 +85,7 @@ describe('Processor', async function () { db, poseidon, [F.zero, F.zero, F.zero, F.zero], - smtUtils.stringToH4(oldLocalExitRoot), + smtUtils.stringToH4(oldAccInputHash), genesis, null, null, @@ -322,9 +323,15 @@ describe('Processor', async function () { if (Scalar.eq(localExitRootSmt, Scalar.e(0))) { expect(localExitRootVm.toString('hex')).to.equal(''); + if (update) { + newLocalExitRoot = ethers.constants.HashZero; + } expect(newLocalExitRoot).to.equal(ethers.constants.HashZero); } else { expect(localExitRootVm.toString('hex')).to.equal(localExitRootSmt.toString(16).padStart(64, '0')); + if (update) { + newLocalExitRoot = `0x${localExitRootVm.toString('hex')}`; + } expect(localExitRootVm.toString('hex')).to.equal(newLocalExitRoot.slice(2)); } @@ -341,7 +348,7 @@ describe('Processor', async function () { ))[Scalar.e(globalExitRootPos)]; expect(Scalar.fromString(batchNumVm.toString('hex'), 16)).to.equal(batchNumSmt); - expect(batchNumSmt).to.equal(Scalar.e(batch.batchNumber)); + expect(batchNumSmt).to.equal(Scalar.e(batch.newNumBatch)); // Check through a call in the EVM if (bridgeDeployed) { @@ -352,7 +359,7 @@ describe('Processor', async function () { caller: Address.zero(), data: Buffer.from(encodedData.slice(2), 'hex'), }); - expect(globalExitRootResult.execResult.returnValue.toString('hex')).to.be.equal(ethers.utils.hexZeroPad(batch.batchNumber, 32).slice(2)); + expect(globalExitRootResult.execResult.returnValue.toString('hex')).to.be.equal(ethers.utils.hexZeroPad(batch.newNumBatch, 32).slice(2)); } // Check the circuit input diff --git a/tools/fill-genesis/create-genesis.js b/tools/fill-genesis/create-genesis.js index 27907cf7..c9a619be 100644 --- a/tools/fill-genesis/create-genesis.js +++ b/tools/fill-genesis/create-genesis.js @@ -52,7 +52,7 @@ async function main() { txs, sequencerAddress, timestamp, - defaultChainId + defaultChainId, } = genesisGenerator; const db = new MemDB(F); @@ -157,7 +157,7 @@ async function main() { // clean address 0 state root const batchNumber = 0; const stateRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [batchNumber, Constants.STATE_ROOT_STORAGE_POS]); - let newStorageEntry = {}; + let newStorageEntry = { [Constants.LAST_TX_STORAGE_POS]: '0x00' }; newStorageEntry[stateRootPos] = '0x00'; newRoot = await stateUtils.setContractStorage( @@ -166,6 +166,7 @@ async function main() { newRoot, newStorageEntry, ); + // cleanglobal exit root newStorageEntry = {}; const globalExitRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [ethers.constants.HashZero, Constants.GLOBAL_EXIT_ROOT_STORAGE_POS]); diff --git a/tools/fill-genesis/genesis.json b/tools/fill-genesis/genesis.json index c16670e7..eaa952e8 100644 --- a/tools/fill-genesis/genesis.json +++ b/tools/fill-genesis/genesis.json @@ -1,11 +1,6 @@ { - "root": "0x8ddd4d2542d8f3ddd0bcf7ab122eac7b1ed81e2fe2f12acc8d6c2182eff0007c", + "root": "0x0ff5ce7f1ce0eda793ec264b9b147fe991fbf2ef840f7249eb8de9171df16555", "genesis": [ - { - "balance": "0", - "nonce": "0", - "address": "0x0000000000000000000000000000000000000000" - }, { "balance": "0", "nonce": "1", @@ -66,6 +61,11 @@ "address": "0xc949254d682d8c9ad5682521675b8f43b102aec4", "pvtKey": "0xdfd01798f92667dbf91df722434e8fbe96af0211d4d1b82bbbbc8f1def7a814f" }, + { + "balance": "0", + "nonce": "0", + "address": "0x0000000000000000000000000000000000000000" + }, { "balance": "0", "nonce": "1", From 132ef5bc9d9fc032d59a344833376c32be615235 Mon Sep 17 00:00:00 2001 From: Ignasirv Date: Wed, 2 Nov 2022 23:46:20 +0100 Subject: [PATCH 24/40] Set storage at touched accounts --- src/processor.js | 43 ++++++++-------- .../test-vectors/block-info/block-info.json | 4 +- .../end-to-end/state-transition.json | 6 +-- .../processor/state-transition.json | 50 +++++++++---------- .../selfdestruct/selfdestruct.json | 6 +-- 5 files changed, 55 insertions(+), 54 deletions(-) diff --git a/src/processor.js b/src/processor.js index b9071d72..0df12b99 100644 --- a/src/processor.js +++ b/src/processor.js @@ -407,31 +407,32 @@ module.exports = class Processor { const hashedBytecode = await smtUtils.hashContractBytecode(smCode.toString('hex')); this.db.setValue(hashedBytecode, smCode.toString('hex')); this.contractsBytecode[hashedBytecode] = smCode.toString('hex'); + } - const keyDumpStorage = Scalar.add(Constants.DB_ADDRESS_STORAGE, Scalar.fromString(address, 16)); - const oldSto = await this.db.getValue(keyDumpStorage); - const sto = await this.vm.stateManager.dumpStorage(addressInstance); + //Set storage + const keyDumpStorage = Scalar.add(Constants.DB_ADDRESS_STORAGE, Scalar.fromString(address, 16)); + const oldSto = await this.db.getValue(keyDumpStorage); + const sto = await this.vm.stateManager.dumpStorage(addressInstance); - const storage = {}; - const keys = Object.keys(sto).map((k) => `0x${k}`); - const values = Object.values(sto).map((k) => `0x${k}`); - for (let k = 0; k < keys.length; k++) { - storage[keys[k]] = ethers.utils.RLP.decode(values[k]); - } - if (oldSto) { - for (const key of Object.keys(oldSto)) { - const value = storage[key]; - if (!value) { storage[key] = '0x00'; } - } + const storage = {}; + const keys = Object.keys(sto).map((k) => `0x${k}`); + const values = Object.values(sto).map((k) => `0x${k}`); + for (let k = 0; k < keys.length; k++) { + storage[keys[k]] = ethers.utils.RLP.decode(values[k]); + } + if (oldSto) { + for (const key of Object.keys(oldSto)) { + const value = storage[key]; + if (!value) { storage[key] = '0x00'; } } - this.currentStateRoot = await stateUtils.setContractStorage( - address, - this.smt, - this.currentStateRoot, - storage, - ); - await this.db.setValue(keyDumpStorage, storage); } + this.currentStateRoot = await stateUtils.setContractStorage( + address, + this.smt, + this.currentStateRoot, + storage, + ); + await this.db.setValue(keyDumpStorage, storage); } await this._updateSystemStorage(); diff --git a/test/helpers/test-vectors/block-info/block-info.json b/test/helpers/test-vectors/block-info/block-info.json index c21f3414..b330159e 100644 --- a/test/helpers/test-vectors/block-info/block-info.json +++ b/test/helpers/test-vectors/block-info/block-info.json @@ -165,7 +165,7 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "100000240372000000000", "nonce": "1", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -185,7 +185,7 @@ "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "199999759628000000000", "nonce": "6", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 } diff --git a/test/helpers/test-vectors/end-to-end/state-transition.json b/test/helpers/test-vectors/end-to-end/state-transition.json index 8cf5d24d..dfc2f94c 100644 --- a/test/helpers/test-vectors/end-to-end/state-transition.json +++ b/test/helpers/test-vectors/end-to-end/state-transition.json @@ -246,14 +246,14 @@ "0xc949254d682d8c9ad5682521675b8f43b102aec4": { "balance": "9000000000000000000", "nonce": "5", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266": { "balance": "100000000000000000000000", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -269,7 +269,7 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "0", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 } diff --git a/test/helpers/test-vectors/processor/state-transition.json b/test/helpers/test-vectors/processor/state-transition.json index ab5f51ca..60b1bb8f 100644 --- a/test/helpers/test-vectors/processor/state-transition.json +++ b/test/helpers/test-vectors/processor/state-transition.json @@ -48,14 +48,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900000000000000000", "nonce": "1", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200100000000000000000", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -197,35 +197,35 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900021000000000000", "nonce": "1", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200100000000000000000", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0xeb17ce701e9d92724aa2abada7e4b28830597dd9": { "balance": "98999979000000000000", "nonce": "1", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x187bd40226a7073b49163b1f6c2b73d8f2aa8478": { "balance": "1000000000000000000", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0xabcced19d7f290b84608fec510bee872cc8f5112": { "balance": "0", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -529,14 +529,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99999979000000000000", "nonce": "1", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200000021000000000000", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -647,14 +647,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99899979000000000000", "nonce": "1", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200100021000000000000", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -726,14 +726,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "100000000000000000000", "nonce": "1", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200000000000000000000", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -818,14 +818,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "499999000000000000", "nonce": "1", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "199500001000000000000", "nonce": "1", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -937,14 +937,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99799916000000000000", "nonce": "4", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200200084000000000000", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -1050,14 +1050,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900026624000000000", "nonce": "1", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200099973376000000000", "nonce": "1", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -1169,14 +1169,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900000000000000000", "nonce": "2", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "1000000000000000", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -1294,14 +1294,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900000000000000000", "nonce": "2", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "1", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -1421,14 +1421,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900000000000000000", "nonce": "3", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "1", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, diff --git a/test/helpers/test-vectors/selfdestruct/selfdestruct.json b/test/helpers/test-vectors/selfdestruct/selfdestruct.json index a755dfd6..6da8ebd0 100644 --- a/test/helpers/test-vectors/selfdestruct/selfdestruct.json +++ b/test/helpers/test-vectors/selfdestruct/selfdestruct.json @@ -116,7 +116,7 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "100000140508000000000", "nonce": "1", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -133,14 +133,14 @@ "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "199999859491876543211", "nonce": "3", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x0000000000000000000000000000000000000001": { "balance": "123456789", "nonce": "0", - "storage": null, + "storage": {}, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 } From 79a196cddaba4c4496f880119bc314eff7397a19 Mon Sep 17 00:00:00 2001 From: Ignasirv Date: Thu, 3 Nov 2022 10:19:17 +0100 Subject: [PATCH 25/40] Regen tests with new STATE_ROOT_STORAGE_POS set to 1 --- package.json | 2 +- src/constants.js | 2 +- src/processor.js | 62 ++++++---- .../block-info/block-info-batches.json | 53 ++++---- .../test-vectors/block-info/block-info.json | 18 +-- .../end-to-end/state-transition.json | 12 +- .../processor/state-transition.json | 114 +++++++++--------- .../selfdestruct/selfdestruct.json | 14 +-- .../test-vectors/zkevm-db/recursive.json | 8 +- .../zkevm-db/state-transition.json | 2 +- 10 files changed, 152 insertions(+), 135 deletions(-) diff --git a/package.json b/package.json index 94aeec7c..aee61bd9 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@ethereumjs/block": "^3.6.2", "@ethereumjs/common": "^2.6.0", "@ethereumjs/tx": "^3.4.0", - "@polygon-hermez/vm": "5.7.24", + "@polygon-hermez/vm": "5.7.25", "ethereumjs-util": "^7.1.4", "ethers": "^5.5.4", "ffjavascript": "^0.2.55", diff --git a/src/constants.js b/src/constants.js index cb8d1f5e..54615335 100644 --- a/src/constants.js +++ b/src/constants.js @@ -38,7 +38,7 @@ module.exports.LOCAL_EXIT_ROOT_STORAGE_POS = 1; module.exports.BATCH_GAS_LIMIT = 30000000; module.exports.BATCH_DIFFICULTY = 0; module.exports.ADDRESS_SYSTEM = '0x0000000000000000000000000000000000000000'; -module.exports.STATE_ROOT_STORAGE_POS = 0; +module.exports.STATE_ROOT_STORAGE_POS = 1; module.exports.LAST_TX_STORAGE_POS = 0; // Bridge Leaf Types diff --git a/src/processor.js b/src/processor.js index 0df12b99..2f71f504 100644 --- a/src/processor.js +++ b/src/processor.js @@ -402,37 +402,55 @@ module.exports = class Processor { this.smt, this.currentStateRoot, smCode.toString('hex'), + false, ); // Set bytecode at db when smart contract is called const hashedBytecode = await smtUtils.hashContractBytecode(smCode.toString('hex')); this.db.setValue(hashedBytecode, smCode.toString('hex')); this.contractsBytecode[hashedBytecode] = smCode.toString('hex'); - } - //Set storage - const keyDumpStorage = Scalar.add(Constants.DB_ADDRESS_STORAGE, Scalar.fromString(address, 16)); - const oldSto = await this.db.getValue(keyDumpStorage); - const sto = await this.vm.stateManager.dumpStorage(addressInstance); + const keyDumpStorage = Scalar.add(Constants.DB_ADDRESS_STORAGE, Scalar.fromString(address, 16)); + const oldSto = await this.db.getValue(keyDumpStorage); + const sto = await this.vm.stateManager.dumpStorage(addressInstance); - const storage = {}; - const keys = Object.keys(sto).map((k) => `0x${k}`); - const values = Object.values(sto).map((k) => `0x${k}`); - for (let k = 0; k < keys.length; k++) { - storage[keys[k]] = ethers.utils.RLP.decode(values[k]); - } - if (oldSto) { - for (const key of Object.keys(oldSto)) { - const value = storage[key]; - if (!value) { storage[key] = '0x00'; } + const storage = {}; + const keys = Object.keys(sto).map((k) => `0x${k}`); + const values = Object.values(sto).map((k) => `0x${k}`); + for (let k = 0; k < keys.length; k++) { + storage[keys[k]] = ethers.utils.RLP.decode(values[k]); + } + if (oldSto) { + for (const key of Object.keys(oldSto)) { + const value = storage[key]; + if (!value) { storage[key] = '0x00'; } + } + } + this.currentStateRoot = await stateUtils.setContractStorage( + address, + this.smt, + this.currentStateRoot, + storage, + ); + await this.db.setValue(keyDumpStorage, storage); + } else { + const sto = await this.vm.stateManager.dumpStorage(addressInstance); + if (Object.keys(sto).length > 0) { + const keyDumpStorage = Scalar.add(Constants.DB_ADDRESS_STORAGE, Scalar.fromString(address, 16)); + const storage = {}; + const keys = Object.keys(sto).map((k) => `0x${k}`); + const values = Object.values(sto).map((k) => `0x${k}`); + for (let k = 0; k < keys.length; k++) { + storage[keys[k]] = ethers.utils.RLP.decode(values[k]); + } + this.currentStateRoot = await stateUtils.setContractStorage( + address, + this.smt, + this.currentStateRoot, + storage, + ); + await this.db.setValue(keyDumpStorage, storage); } } - this.currentStateRoot = await stateUtils.setContractStorage( - address, - this.smt, - this.currentStateRoot, - storage, - ); - await this.db.setValue(keyDumpStorage, storage); } await this._updateSystemStorage(); diff --git a/test/helpers/test-vectors/block-info/block-info-batches.json b/test/helpers/test-vectors/block-info/block-info-batches.json index 7da34c98..19a24622 100644 --- a/test/helpers/test-vectors/block-info/block-info-batches.json +++ b/test/helpers/test-vectors/block-info/block-info-batches.json @@ -158,7 +158,7 @@ "rawTx": "0xf88a06843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000008207f4a098f56115cad149a409a86e7610863248799a31d80e87d46582d08a3c0933a40aa025455a74fa3ca2ada0bf39dac88a172d032583bfec15061f39184ef9f7012677" } ], - "expectedNewRoot": "0xf60404eddfffdf6feae70912692684d1b3f905535c0e8d3822bde13a37421087", + "expectedNewRoot": "0x95b8e98c9802c04b30ad7f5df0e72e19ef348aeacf88d8379283e536b977009d", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -169,13 +169,13 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x07", - "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x910ac9c544a5fd9d37389ed357857b935f9e253da947723ac4bd41d157d77f85", - "0x2b232c97452f0950c94e2539fdc7e69d21166113cf7a9bcb99b220a3fe5d720a": "0xe4a8194fd8125f2ef664599eaa40e29e013b38ef7dd8a339444960b23360f8ba", - "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x313821a316d9a47222243d1d76a96d8d138b2270cc15f57e9d13a8733a402761", - "0x62103cf3131c85df57aad364d21cba02556d3092d6cb54c298c2e7726a7870bd": "0x7444f8762809c84c95dd06538854f15cfd20e1b22e83dd3fadad22d0ad9d32d6", - "0x870253054e3d98b71abec8fff9ebf8a15d167f15909091a800d4acaab9266d2b": "0xc9b54782e6a158b1c7a4cba8bf5a03d05212fb0413df0fd83d884588b7a30cb5", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x446f50a0631f2ab906526ebce969d9184a36331e4b0612eeff6dc49be6ac1a2e", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4" + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x22ab0fb4070ab0070378a6ed6475643e3b9518853f43afb10252a425cce53eb4", + "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0xca690add3a99e3678aa637ed923817a37dbb11a03c13e4fca9463616f5f23146", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x8a05a91549a939710ec500b67e8771c8326cccfb8759fedc6b956dc2cd077398", + "0xdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e": "0x3042cc900bcb03639c66fdc2f0b2b9fd107c7dcd2f896e8317539e6e3d814d0e", + "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0xeb1e68063f8179e537f353f776a0b99916ab936cf6afa5e6dc856d4e6c49daea", + "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0x65a0baf175a2435e4c3e3dc9482c750dddf580119efd709eaa6e8727f3fe2ce9" } }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { @@ -321,14 +321,14 @@ "rawTx": "0xf88a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018207f3a068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c4829a05695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef6" } ], - "expectedNewRoot": "0xef0503baaf368d410f58b375790b015f4c137aeb1cbfdab3bdbb96a66b10cfe3", + "expectedNewRoot": "0xff31759182fac1ea6e0655bb497580b2a27872ba99b71b18c2cdb05ce40e0e2e", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0" }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { - "balance": "199999548204000000000", + "balance": "199999568104000000000", "nonce": "14" }, "0x1275fbb540c8efc58b812ba83b0d0b8b9917ae98": { @@ -339,12 +339,11 @@ "0x0000000000000000000000000000000000000000000000000000000000000002": "0x73e6af6f", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0a", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x01c9c380", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4" + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8" } }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { - "balance": "100000451796000000000", + "balance": "100000431896000000000", "nonce": "1" }, "0x0000000000000000000000000000000000000000": { @@ -352,20 +351,20 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0e", - "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x910ac9c544a5fd9d37389ed357857b935f9e253da947723ac4bd41d157d77f85", - "0x2b232c97452f0950c94e2539fdc7e69d21166113cf7a9bcb99b220a3fe5d720a": "0xe4a8194fd8125f2ef664599eaa40e29e013b38ef7dd8a339444960b23360f8ba", - "0x62103cf3131c85df57aad364d21cba02556d3092d6cb54c298c2e7726a7870bd": "0x7444f8762809c84c95dd06538854f15cfd20e1b22e83dd3fadad22d0ad9d32d6", - "0x7ca5987043ac53676c6e30f77ff1a34e98a5fae86b27e5d0cf74ac1711b8a8db": "0x612fad8246cfe8c454d1eb62225c78d2415dfcc9d1c885771823f36849964ac1", - "0x870253054e3d98b71abec8fff9ebf8a15d167f15909091a800d4acaab9266d2b": "0xc9b54782e6a158b1c7a4cba8bf5a03d05212fb0413df0fd83d884588b7a30cb5", - "0x9115655cbcdb654012cf1b2f7e5dbf11c9ef14e152a19d5f8ea75a329092d5a6": "0x61e305096fd5925f5a0691f5a37298950c9c6f60d396762d5e2cf77ce5e684a1", - "0xd0a75bf7ea87fba36ff8a17b4519c45fb727609e6c9161b106680b25b3e2705f": "0x4f8e1a3450848b3ad47ec135de875ac316cea9a11d02a31f42d09b48d1b2d0d0", - "0xe9bc119772df33ac6a685b572c53e6a4988bbdde79a460a23bed029791109f39": "0xbcc6635fe6b1b2657a2d88abf8a1ff104442d6e49e2927bbbb92126481d3ecbe", - "0x324fdf7bfe7bd2828491073f0b7868a9a19ee3eff384c2805040be3e426447f5": "0xb0ff1afbfb2008012ac6d9dcac864da1a4a18aa82c59d448153ac98e1159e718", - "0x3e9abaca0aad9ede81f4474766c846d8539f70688e1c8f521bbe1597874e3dc4": "0x7696966fa5b737a59ead4d4a611231270cf25579496763d14e4e910b034fa6dd", - "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x313821a316d9a47222243d1d76a96d8d138b2270cc15f57e9d13a8733a402761", - "0x5b8b9143058ba3a137192c563ca6541845e62f0a2f9a667aac4db2fa3c334e3c": "0x9d5246dd4b947924ca64272861a4cf6c5bc9c402967b69ded98d9d91f9500fc0", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x446f50a0631f2ab906526ebce969d9184a36331e4b0612eeff6dc49be6ac1a2e", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4" + "0x4db623e5c4870b62d3fc9b4e8f893a1a77627d75ab45d9ff7e56ba19564af99b": "0x1378fb0431d275ac4920655cab029fb33c43ed101c08bac948ba63042311c6c1", + "0x57aaafa65c4e563d39fff90096a5fa76d42117f53d87ef870784e64d63a8a16b": "0xa1990077e2a5a15c1cc3a17ac65290b903f3865c0e597e0a7793b6c9ea0462f4", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4", + "0xfc80cd5fe514767bc6e66ec558e68a5429ea70b50fa6caa3b53fc9278e918632": "0xe5e6e554608cafbb08bd71b26467d82b3ec05c9959837ccf6e880ac679ce6cf2", + "0x23bf72df16f8335be9a3eddfb5ef1c739b12847d13a384ec83f578699d38eb89": "0x7bdb5853ea88748cc17a7bea07830299874458e9f90c14808a0291a4a8c5d2a6", + "0x2a32391a76c35a36352b711f9152c0d0a340cd686850c8ef25fbb11c71b89e7b": "0xd3530a4859a3ffc86f7e06ae7a908b33f3d6b43914e193e3341a5f6402af8059", + "0x74a5fbcb419ab7dbacbb2c92a4e163730f0da5c72b911deecf4f05a6b327d0a4": "0xbda9dcc3ac1b6daae6194b51945aef63093ee74e32879036fe2a8f39448e8333", + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x22ab0fb4070ab0070378a6ed6475643e3b9518853f43afb10252a425cce53eb4", + "0x86b3fa87ee245373978e0d2d334dbde866c9b8b039036b87c5eb2fd89bcb6bab": "0xb24adf586791c7ec9daedd6790dcf191f0ecf6b9a4e9f9089707ab5927bf9c69", + "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0xca690add3a99e3678aa637ed923817a37dbb11a03c13e4fca9463616f5f23146", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x8a05a91549a939710ec500b67e8771c8326cccfb8759fedc6b956dc2cd077398", + "0xdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e": "0x3042cc900bcb03639c66fdc2f0b2b9fd107c7dcd2f896e8317539e6e3d814d0e", + "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0xeb1e68063f8179e537f353f776a0b99916ab936cf6afa5e6dc856d4e6c49daea", + "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0x65a0baf175a2435e4c3e3dc9482c750dddf580119efd709eaa6e8727f3fe2ce9" } } }, diff --git a/test/helpers/test-vectors/block-info/block-info.json b/test/helpers/test-vectors/block-info/block-info.json index b330159e..86725567 100644 --- a/test/helpers/test-vectors/block-info/block-info.json +++ b/test/helpers/test-vectors/block-info/block-info.json @@ -136,7 +136,7 @@ "rawTx": "0xf86a05843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708207f4a0e255f868a61169a2330cb539671e1a66ee846bc06cc888ea8fcd7ae51cdc6294a00c6dec27e6f756dd84923bcebb1f85db125299c0b622eaa8d5722cb3dace239d" } ], - "expectedNewRoot": "0xa1de15e72d6b9fc1adc09e2226a40bb6aae3542b29b091b47fd6021c7b574ed1", + "expectedNewRoot": "0x1670ee0d49949f6eb8291dae0ef6785865b4142f92b88645eadd7f19088d30d5", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -152,12 +152,12 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x06", - "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x910ac9c544a5fd9d37389ed357857b935f9e253da947723ac4bd41d157d77f85", - "0x2b232c97452f0950c94e2539fdc7e69d21166113cf7a9bcb99b220a3fe5d720a": "0xe4a8194fd8125f2ef664599eaa40e29e013b38ef7dd8a339444960b23360f8ba", - "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x313821a316d9a47222243d1d76a96d8d138b2270cc15f57e9d13a8733a402761", - "0x62103cf3131c85df57aad364d21cba02556d3092d6cb54c298c2e7726a7870bd": "0x7444f8762809c84c95dd06538854f15cfd20e1b22e83dd3fadad22d0ad9d32d6", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x446f50a0631f2ab906526ebce969d9184a36331e4b0612eeff6dc49be6ac1a2e", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4" + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x22ab0fb4070ab0070378a6ed6475643e3b9518853f43afb10252a425cce53eb4", + "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0xca690add3a99e3678aa637ed923817a37dbb11a03c13e4fca9463616f5f23146", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x8a05a91549a939710ec500b67e8771c8326cccfb8759fedc6b956dc2cd077398", + "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0xeb1e68063f8179e537f353f776a0b99916ab936cf6afa5e6dc856d4e6c49daea", + "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0x65a0baf175a2435e4c3e3dc9482c750dddf580119efd709eaa6e8727f3fe2ce9" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -165,7 +165,7 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "100000240372000000000", "nonce": "1", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -185,7 +185,7 @@ "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "199999759628000000000", "nonce": "6", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 } diff --git a/test/helpers/test-vectors/end-to-end/state-transition.json b/test/helpers/test-vectors/end-to-end/state-transition.json index dfc2f94c..3a4631f7 100644 --- a/test/helpers/test-vectors/end-to-end/state-transition.json +++ b/test/helpers/test-vectors/end-to-end/state-transition.json @@ -173,7 +173,7 @@ "rawTx": "0xf9012f0480831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf55988880de0b6b3a7640000b8c40871e97100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008207f4a0f212cb649f835d4f9c788d3a6733911b8aa02c6b63751f3b931fb062bd1942e4a052e73d8704862f4eb55646e7440dcf65f6e7ca424e38340ed8bcf24597c6865d" } ], - "expectedNewRoot": "0x23643bd048a4bf1f990f4c9193a558ff71cf83736a522b965baec52ae3422e09", + "expectedNewRoot": "0xef6fa49c463733fde95a297d7c8057ada153fb62021150571a66c10f9ff9a8e4", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -191,8 +191,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x20b4f0c6cd29b8bbff9677d04da7dfd8530fe86b0aa9627e0b090bc1235aa9c2", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x91797cd9ca12c36cf9d8a584267280241098a6732f49bd92f1ff869ca0e6c19a" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x91797cd9ca12c36cf9d8a584267280241098a6732f49bd92f1ff869ca0e6c19a", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xdedeaf29775b7ae926842af37a2153ffb6467db8ceaa5d8eb332a0c2235fa790" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -246,14 +246,14 @@ "0xc949254d682d8c9ad5682521675b8f43b102aec4": { "balance": "9000000000000000000", "nonce": "5", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266": { "balance": "100000000000000000000000", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -269,7 +269,7 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "0", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 } diff --git a/test/helpers/test-vectors/processor/state-transition.json b/test/helpers/test-vectors/processor/state-transition.json index 60b1bb8f..5754d856 100644 --- a/test/helpers/test-vectors/processor/state-transition.json +++ b/test/helpers/test-vectors/processor/state-transition.json @@ -34,7 +34,7 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x2437b34ce149828e5f5a443a2d502c1c948a17edecadb3d15b9eaf0be2cb2bdd", + "expectedNewRoot": "0x15ccbba64d32c6146ad323854394172e1bb0d09b407ba3e79dc01201d34dd974", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -48,14 +48,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900000000000000000", "nonce": "1", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200100000000000000000", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -64,7 +64,7 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x2e4da9d4a701f08194a0a19935914180db9a0ef4405fae8aa5a16043dc661041" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x2e4da9d4a701f08194a0a19935914180db9a0ef4405fae8aa5a16043dc661041" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -183,7 +183,7 @@ "rawTx": "0xf86c80843b9aca00830186a094abcced19d7f290b84608fec510bee872cc8f5112880de0b6b3a7640000801ba02c92035bc11227e9e94ba066a6d77a65c43d29dfb4a855c9464e1b60fabd6334a07171c6dc84816ffcf025040cd6193ecef3928a0c4e4964ddba320826b76c725d" } ], - "expectedNewRoot": "0xced2389fe7b06ac0694e356415af4935c91ae43582c50d66a0943848cc7be041", + "expectedNewRoot": "0x166fd8b426df243c7f8588a4f4a22108189a529dc8c88ff6bcad5da9cab8db8b", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -197,35 +197,35 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900021000000000000", "nonce": "1", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200100000000000000000", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0xeb17ce701e9d92724aa2abada7e4b28830597dd9": { "balance": "98999979000000000000", "nonce": "1", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x187bd40226a7073b49163b1f6c2b73d8f2aa8478": { "balance": "1000000000000000000", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0xabcced19d7f290b84608fec510bee872cc8f5112": { "balance": "0", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -234,8 +234,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xab295c3f8b7d7be1e09d26c54af7aee4d92387228a8b109f38c8e05936980183", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x1f06a0244e9eb8952bc4fbbaf65d5c6b796b6aef99e3e1294d27679e79e91ac4" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x1f06a0244e9eb8952bc4fbbaf65d5c6b796b6aef99e3e1294d27679e79e91ac4", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xb3cc43956c76ef14a1dae26d664bd00732ca79581a844a7cdf24c06083545b40" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -515,7 +515,7 @@ "customRawTx": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d88016345785d8a0000808203e88080cca9bd00c0a9af18cdc17e693951b88b293bae8ed236ff7dcf2684c478bc0b6a19cc9ed09ee5e1e2750abbea7ec8d2ed31df90c7d364d4e2f36c31eb410c10451b" } ], - "expectedNewRoot": "0x39ef544fa693a502749976de4f25a16446fdb4d314a594abf3abafb7fd82cd53", + "expectedNewRoot": "0xac30487c7c48751251945979db13f47decff0035381bed9ee473ca36ca8daf46", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -529,14 +529,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99999979000000000000", "nonce": "1", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200000021000000000000", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -545,7 +545,7 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xf7daaedd9bcff0e15bf146595e386a22e1e1282e3409eb4df8bbc03b91084901" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xf7daaedd9bcff0e15bf146595e386a22e1e1282e3409eb4df8bbc03b91084901" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -633,7 +633,7 @@ "rawTx": "0xf86c80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff880de0b6b3a7640000801ba077f76b76aca6161db28545aa742536370e4f57f9a71651688631a423abcbe04aa0131474e130abe8bcc9ef39a44a877eb64b2d43132cb0907abe547aa605b641b8" } ], - "expectedNewRoot": "0xb95b11cb9fa58551cfa708c0a52026051efbf6403bf882633311eec92a650d03", + "expectedNewRoot": "0x3dcb7528acf6a45845a34dfc01a6e67a8c60b9e4923d6d563c422a042f7f50a4", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -647,14 +647,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99899979000000000000", "nonce": "1", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200100021000000000000", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -663,7 +663,7 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x14295862abc2c972cfa9600e0230fa0683382845053457e06d41e340f67fa33e" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x14295862abc2c972cfa9600e0230fa0683382845053457e06d41e340f67fa33e" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -712,7 +712,7 @@ "customRawTx": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d88016345785d8a0000808203e88080cca9bd00c0a9af18cdc17e693951b88b293bae8ed236ff7dcf2684c478bc0b6a19cc9ed09ee5e1e2750abbea7ec8d2ed31df90c7d364d4e2f36c31eb410c10451b" } ], - "expectedNewRoot": "0xef93c505150dfaaa101569227779e07cabf807ea204c07d5ef898d8ba3e767fc", + "expectedNewRoot": "0x0bb66d45a103bc071321dcfb2375b192fec45693e973536c300bf9ae0932e7eb", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -726,14 +726,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "100000000000000000000", "nonce": "1", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200000000000000000000", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -742,7 +742,7 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xd5572151c529633609f28d171070f4881f1768c2143013f418ed1ede6dfda442" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xd5572151c529633609f28d171070f4881f1768c2143013f418ed1ede6dfda442" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -804,7 +804,7 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8806f05b59d3b20000808203e880809990717b4c80d955cacf4a765d3bfefd707511d66e0a482510906d119fa285c7232ccd442c5b618558b62175f01d9f45ff655d480f36394ea50a0b7dc52bc3331c" } ], - "expectedNewRoot": "0x3bcdc5336d1568bd1a2303148641c0e5d4bd218a1ecdd20ec5509d867fcdee5b", + "expectedNewRoot": "0x785ae20186695e8ea9c5411fee85f0ee4f5185be4a5ac2b01fba9e51219caebd", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -818,14 +818,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "499999000000000000", "nonce": "1", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "199500001000000000000", "nonce": "1", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -834,8 +834,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xa73773a7a41567ff4a40a05e0acd18844427db20455ca8d84b6365a02072fefc", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x03a2a0b418a31e83241b34d0cb319306345979a3cbbecad95dc1ca347c4d8e8d" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x03a2a0b418a31e83241b34d0cb319306345979a3cbbecad95dc1ca347c4d8e8d", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x9a245b8841790a7dc2c7358a750d881af9fefe2aaf9dfc5e19d144f554cbcbc9" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -923,7 +923,7 @@ "rawTx": "0xf86e03843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d8806f05b59d3b20000808207f3a047b4f7d735dfadefc585bf24d9bd2267438f9bc92d1ab4f65fa9a6d90cc33858a00720a7da26cad22c05bf1358011c95caec969b8b9177af91c0e90dac3d02f6b3" } ], - "expectedNewRoot": "0x1728bbf4b26d2deed23828f754327918a09cfbf51b30aa0491262e1bd57b74ae", + "expectedNewRoot": "0x1d13e452fc55576e24d0d2819cc523f67bb5be09ea539022cab80febd44de487", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -937,14 +937,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99799916000000000000", "nonce": "4", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200200084000000000000", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -953,10 +953,10 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x04", - "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0xe992bbdd0e4560a3744ef9d5a8a864f3a9a742c35202edd772999b93bf9ca653", - "0x52d75039926638d3c558b2bdefb945d5be8dae29dedd1c313212a4d472d9fde5": "0x05efb4dcc801881c0ebe4f60290141243574f8e776d67de8aabf93a93904a647", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x2710d11ecdc7a7d5c3981acb527e9f76f094c1eda5a630e05b51e4a948021023", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x14295862abc2c972cfa9600e0230fa0683382845053457e06d41e340f67fa33e" + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x8dd233dfac0263f7bb942c5b27c9a9ea012e0f50d681a746e624792060849436", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x14295862abc2c972cfa9600e0230fa0683382845053457e06d41e340f67fa33e", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xd468b91fdb5b05ba488bfe8ee94df0ea2be496fae9e10f1b68d8b1d25f365c81", + "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0xa7214290d55d2317dedef956d5caaffed41e912fd0c9024b44067505e282ff55" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1036,7 +1036,7 @@ "rawTx": "0xf86e80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808207f3a01cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e7a05d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad73" } ], - "expectedNewRoot": "0xc40f22fe974c6952e1cb169fee72f9f3d202c6c95b185c72b7cd9689837b4c52", + "expectedNewRoot": "0x0dc966d5458b95b204ead8055da8cbb61fb30db847f69ee878d32cdc49140270", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -1050,14 +1050,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900026624000000000", "nonce": "1", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "200099973376000000000", "nonce": "1", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -1076,8 +1076,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x85f464ada4c2c3bbc746fe4540765e5a0c3f3e2a2ed12eb183e5172d70189553", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x64584d333ccc8964882d57ccf63c1820ad0fb1cc3857a23ce7b3233c3bf259eb" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x64584d333ccc8964882d57ccf63c1820ad0fb1cc3857a23ce7b3233c3bf259eb", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xcf82573277a0c670907ceaa57854dd7d21443d38f7b4f60c8ab4659b889269eb" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1155,7 +1155,7 @@ "rawTx": "0xf8ab01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880b844494e4bc30000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff00000000000000000000000000000000000000000000000000038d7ea4c680008207f3a0c83069009c51e411569ca78a660bbcb64e4e6709909eb99c28395fb4c787da4ca02b846bf51fcf891fb293e36a0cf5f4efd1fe7c19b2c8a1220b8308b195e80156" } ], - "expectedNewRoot": "0x9ce7e83b81a9ecf7ec102570ae45be487d469c946f259e842c2bff180274f21c", + "expectedNewRoot": "0x77487f64edb44479fd0191af216ff978bb95a5ae289a4901d721d5cf1eb064f5", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -1169,14 +1169,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900000000000000000", "nonce": "2", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "1000000000000000", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -1192,8 +1192,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x8cb4361a4dd1aa2c08f94dad702c4466d971e3c1cb0c5a8124e647bdd7d919", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0xb8f600efdc058452c5fc97d1f4d4cdeeef5ae2ed09f375f76f2049b2d574c2a9" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xb8f600efdc058452c5fc97d1f4d4cdeeef5ae2ed09f375f76f2049b2d574c2a9", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xdd54e1a5e01f72c2a60e697a27203bc226c2e45f2b84610b5c05a4faba4c0db7" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1280,7 +1280,7 @@ "rawTx": "0xf88a01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4027e5d610000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff8207f3a0a04c0969f64f440a2c91e29bf9ea0b1cc8db9f33bda47c2c6899840ae46d36d7a00212c0a9f1bb015890ed0830c7fea6c52adaf85b0bf3d64448d3300c12c1bb16" } ], - "expectedNewRoot": "0xd62c0b269ac8fb877b530fcbf1c11dcf84b7346da86d19b1446757b09ea2a8e0", + "expectedNewRoot": "0xc967a424c2b7bbe5524a33ee1fcccd04c5a38684bb9a33224e02e25448492e65", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -1294,14 +1294,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900000000000000000", "nonce": "2", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "1", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -1319,8 +1319,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0xeb7d75218c4999342330c98c72223beb6f7b681e55c36acc76fe5b3780f9a34b", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x2fa66821b712f8d710d87366ea2023addb2569937d7825d09ae75bd82e64ad37" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x2fa66821b712f8d710d87366ea2023addb2569937d7825d09ae75bd82e64ad37", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xd45e0749d8fa8259251ba69bbd7089b84147adea6beeec6fac9cc2e59b88931f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1407,7 +1407,7 @@ "rawTx": "0xf88a02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4027e5d610000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff8207f3a028e62eb40661fd098322a7211dca25a6b56f60eefb24ede9607d2603a09e4c65a03be289b7a729a18336e2f9f4a4f52c4fadc4274d1fd42dd8965deeb8634ddddc" } ], - "expectedNewRoot": "0x4ab76672016469aa1aefaa43b54538c776cf4a435554cadd3c79f23aa5fc79a2", + "expectedNewRoot": "0xf315d241408dfd8ac18765699669d705b4b5e0c4c3f436486baf92ad461aee8e", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -1421,14 +1421,14 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900000000000000000", "nonce": "3", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "1", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -1446,9 +1446,9 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x03", - "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0xeb3afce0e8d6fd6a362928bd03a39f6bb74ed5f2c8531b1dda366a09cb442743", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x04a404e3bdfcaae8f863444c99b6723d8a7391c2b18a509bec8046fe19f662f2", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x16598cb5734432db3af62b8679d7d8e03c8ffce43186f1ee3f1721aeeda2170b" + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0xe3118caac7dffe053a61044d702165532a39e323ed79ec9e1dd4f80c47461756", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x16598cb5734432db3af62b8679d7d8e03c8ffce43186f1ee3f1721aeeda2170b", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x0be49b38fa1d76c0834d3efde5bb01250686989b319c2f39bdcb2a54f6df2cff" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 diff --git a/test/helpers/test-vectors/selfdestruct/selfdestruct.json b/test/helpers/test-vectors/selfdestruct/selfdestruct.json index 6da8ebd0..5c726ac3 100644 --- a/test/helpers/test-vectors/selfdestruct/selfdestruct.json +++ b/test/helpers/test-vectors/selfdestruct/selfdestruct.json @@ -90,7 +90,7 @@ "rawTx": "0xf86a02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880842b68b9c68207f4a0f5b684b995dd9549bb5fd2ed23d3b388f75f559b14110277b4ae7de5bd7775efa01be51078330d1ef03f0e4fe0271e8e2502b6e98c1f7664a5e2aeae3ab04156d4" } ], - "expectedNewRoot": "0x847ca0b65fb5c7907964d9712324dfab9ea8c242a324ac58aece531c2adb8e2c", + "expectedNewRoot": "0x25bb9c29cc33287b3560ea1a7d52f6b48c01561f3f58ec55a2b421d43b7d954e", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -106,9 +106,9 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x03", - "0x101e368776582e57ab3d116ffe2517c0a585cd5b23174b01e275c2d8329c3d83": "0x13938fb8e32afb2e26525f686fb67ddfd8ad8d9ccfe03ff93c27b1d937ef4128", - "0xabbb5caa7dda850e60932de0934eb1f9d0f59695050f761dc64e443e5030a569": "0x08306cb24c2e6430e4758ad40037380e481024686cc6035c55e19271ab2178dc", - "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d": "0x6595623a07080ebd13ec7ca04a98478b25bf6d83cdc6b3e099612165d2b90866" + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x939c39719b9c5b85eef83e5e6cb6adf81133878166a6fa8a0b2d86e5f11c858c", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x6595623a07080ebd13ec7ca04a98478b25bf6d83cdc6b3e099612165d2b90866", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xf69a896735fd1eb8d6f0aaa9f64e387f6ca9cfb8278f2b443dcfcf44bf577fa8" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -116,7 +116,7 @@ "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "100000140508000000000", "nonce": "1", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -133,14 +133,14 @@ "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "199999859491876543211", "nonce": "3", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, "0x0000000000000000000000000000000000000001": { "balance": "123456789", "nonce": "0", - "storage": {}, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 } diff --git a/test/helpers/test-vectors/zkevm-db/recursive.json b/test/helpers/test-vectors/zkevm-db/recursive.json index 91040dd7..a3a46d17 100644 --- a/test/helpers/test-vectors/zkevm-db/recursive.json +++ b/test/helpers/test-vectors/zkevm-db/recursive.json @@ -40,7 +40,7 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x2437b34ce149828e5f5a443a2d502c1c948a17edecadb3d15b9eaf0be2cb2bdd", + "expectedNewRoot": "0x15ccbba64d32c6146ad323854394172e1bb0d09b407ba3e79dc01201d34dd974", "expectedNewAccInputHash": "0x704d5cfd3e44b82028f7f8cae31168267a7422c5a447b90a65134116da5a8432", "expoectNewLocalExitRoot": "", "expectedNewLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -63,7 +63,7 @@ "customRawTx": "0xee01843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8802c68af0bb140000808203e88080225fd92907efb068a8bee3f95a26f2c5d67db2750bb9993083e0df217ff3a2666f412c311280066d1717f309c248fdbd853ce738363db08775999b2f2d2a8d5e1c" } ], - "expectedNewRoot": "0x89c7d6555ff99d05ceac6dabe09993c32c023578ea290aedfcc660d22fd5cff1", + "expectedNewRoot": "0x1345a4f4413163418714f6215e0c51dd48477c5a0b34575a02d71441ea70a981", "expectedNewAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", "expoectNewLocalExitRoot": "", "expectedNewLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -81,10 +81,10 @@ "nonce": "0" } }, - "finalStateRoot": "0x89c7d6555ff99d05ceac6dabe09993c32c023578ea290aedfcc660d22fd5cff1", + "finalStateRoot": "0x1345a4f4413163418714f6215e0c51dd48477c5a0b34575a02d71441ea70a981", "finalLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "finalAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", "finalNumBatch": 2, - "inputSnark": "0x1e277606cf28e834b395fb245828311e00fe5d39ad2c48b635e4e3402bba2401" + "inputSnark": "0x235f3cc5f3e1b6f127eddaeeb4e75cb3526c1119e9cc4f5ac4c59a2f130f7cc5" } ] \ No newline at end of file diff --git a/test/helpers/test-vectors/zkevm-db/state-transition.json b/test/helpers/test-vectors/zkevm-db/state-transition.json index 8f365f2a..bd59eaf5 100644 --- a/test/helpers/test-vectors/zkevm-db/state-transition.json +++ b/test/helpers/test-vectors/zkevm-db/state-transition.json @@ -34,7 +34,7 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x2437b34ce149828e5f5a443a2d502c1c948a17edecadb3d15b9eaf0be2cb2bdd", + "expectedNewRoot": "0x15ccbba64d32c6146ad323854394172e1bb0d09b407ba3e79dc01201d34dd974", "expectedNewLeafs": { "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900000000000000000", From 0eec87df1e33c10207a43b25471ccd0fc09ca8d2 Mon Sep 17 00:00:00 2001 From: Ignasirv Date: Thu, 3 Nov 2022 13:16:18 +0100 Subject: [PATCH 26/40] Eslint fixes --- src/contract-utils.js | 2 -- test/contract-utils.test.js | 2 +- .../test-vectors/block-info/block-info-batches.json | 11 ++++++----- tools/fill-genesis/create-genesis.js | 3 ++- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/contract-utils.js b/src/contract-utils.js index a8f654e7..6be1edf6 100644 --- a/src/contract-utils.js +++ b/src/contract-utils.js @@ -1,8 +1,6 @@ const ethers = require('ethers'); const { Scalar } = require('ffjavascript'); const { sha256Snark, padZeros } = require('./utils'); -const { string2fea } = require('./smt-utils'); -const getPoseidon = require('./poseidon'); /** * Compute accumulateInputHash = Keccak256(oldAccInputHash, batchHashData, globalExitRoot, timestamp, seqAddress) diff --git a/test/contract-utils.test.js b/test/contract-utils.test.js index cc844ac9..2551b190 100644 --- a/test/contract-utils.test.js +++ b/test/contract-utils.test.js @@ -61,7 +61,7 @@ describe('contractUtils', function () { newAccInputHash, oldNumBatch, newNumBatch, - chainID + chainID, } = testVector; const computedSnark = await contractUtils.calculateSnarkInput( diff --git a/test/helpers/test-vectors/block-info/block-info-batches.json b/test/helpers/test-vectors/block-info/block-info-batches.json index 19a24622..8c31348e 100644 --- a/test/helpers/test-vectors/block-info/block-info-batches.json +++ b/test/helpers/test-vectors/block-info/block-info-batches.json @@ -321,14 +321,14 @@ "rawTx": "0xf88a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018207f3a068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c4829a05695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef6" } ], - "expectedNewRoot": "0xff31759182fac1ea6e0655bb497580b2a27872ba99b71b18c2cdb05ce40e0e2e", + "expectedNewRoot": "0x2582eb68edd23b7726b43416b00a56d7974b44c13af57e5e157743939e43dd4b", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0" }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { - "balance": "199999568104000000000", + "balance": "199999548204000000000", "nonce": "14" }, "0x1275fbb540c8efc58b812ba83b0d0b8b9917ae98": { @@ -339,11 +339,12 @@ "0x0000000000000000000000000000000000000000000000000000000000000002": "0x73e6af6f", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0a", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x01c9c380", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8" + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4" } }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { - "balance": "100000431896000000000", + "balance": "100000451796000000000", "nonce": "1" }, "0x0000000000000000000000000000000000000000": { @@ -352,7 +353,7 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0e", "0x4db623e5c4870b62d3fc9b4e8f893a1a77627d75ab45d9ff7e56ba19564af99b": "0x1378fb0431d275ac4920655cab029fb33c43ed101c08bac948ba63042311c6c1", - "0x57aaafa65c4e563d39fff90096a5fa76d42117f53d87ef870784e64d63a8a16b": "0xa1990077e2a5a15c1cc3a17ac65290b903f3865c0e597e0a7793b6c9ea0462f4", + "0x57aaafa65c4e563d39fff90096a5fa76d42117f53d87ef870784e64d63a8a16b": "0x69f74f2daa0841a951d9336c387ecd07f6c94f9f86d36705e813faec779de035", "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4", "0xfc80cd5fe514767bc6e66ec558e68a5429ea70b50fa6caa3b53fc9278e918632": "0xe5e6e554608cafbb08bd71b26467d82b3ec05c9959837ccf6e880ac679ce6cf2", "0x23bf72df16f8335be9a3eddfb5ef1c739b12847d13a384ec83f578699d38eb89": "0x7bdb5853ea88748cc17a7bea07830299874458e9f90c14808a0291a4a8c5d2a6", diff --git a/tools/fill-genesis/create-genesis.js b/tools/fill-genesis/create-genesis.js index c9a619be..00532f32 100644 --- a/tools/fill-genesis/create-genesis.js +++ b/tools/fill-genesis/create-genesis.js @@ -205,7 +205,8 @@ async function main() { currentAccountOutput.bytecode = `0x${smCode.toString('hex')}`; currentAccountOutput.storage = storage; currentAccountOutput.contractName = addressToContractName[address]; - } else if (address !== Constants.ADDRESS_SYSTEM && address.toLowerCase() !== Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2.toLowerCase()) { + } else if (address !== Constants.ADDRESS_SYSTEM + && address.toLowerCase() !== Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2.toLowerCase()) { currentAccountOutput.pvtKey = (genesis.find((o) => o.address.toLowerCase() === address.toLowerCase())).pvtKey; } accountsOutput.push(currentAccountOutput); From a8a59ae15b73ccb747efbb8e7e76e724e991b02f Mon Sep 17 00:00:00 2001 From: Ignasirv Date: Fri, 4 Nov 2022 14:23:19 +0100 Subject: [PATCH 27/40] Add expectedNewAccountInputHash --- .../test-vectors/block-info/block-info.json | 3 +- .../end-to-end/state-transition.json | 3 +- .../processor/state-transition.json | 42 ++++++++++++------- .../selfdestruct/selfdestruct.json | 3 +- test/processor.test.js | 3 ++ 5 files changed, 37 insertions(+), 17 deletions(-) diff --git a/test/helpers/test-vectors/block-info/block-info.json b/test/helpers/test-vectors/block-info/block-info.json index 86725567..1bdbbfea 100644 --- a/test/helpers/test-vectors/block-info/block-info.json +++ b/test/helpers/test-vectors/block-info/block-info.json @@ -196,6 +196,7 @@ "batchHashData": "0xcc387c562528dcc81765f91d3eb572e96815b20d870a3715e0e83c5153a4c696", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0x73bc24d2f3638c7f9fe0b46739e4db2413d50360d5b98cd58e65350c0048ac10" } ] \ No newline at end of file diff --git a/test/helpers/test-vectors/end-to-end/state-transition.json b/test/helpers/test-vectors/end-to-end/state-transition.json index 3a4631f7..4bb185f3 100644 --- a/test/helpers/test-vectors/end-to-end/state-transition.json +++ b/test/helpers/test-vectors/end-to-end/state-transition.json @@ -280,6 +280,7 @@ "batchHashData": "0xf8be4fda0fa34bf8b56f96439c31c682ecf16c435b283b468aa42daec1d91c58", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0x114c46cf96ffc260e7f621e001ae0231ec98767c2595f45c459ea94ef3312635" } ] \ No newline at end of file diff --git a/test/helpers/test-vectors/processor/state-transition.json b/test/helpers/test-vectors/processor/state-transition.json index 5754d856..bbfbe69f 100644 --- a/test/helpers/test-vectors/processor/state-transition.json +++ b/test/helpers/test-vectors/processor/state-transition.json @@ -76,7 +76,8 @@ "batchHashData": "0x80cc22bc1a205c21f2b8c87e6185e1215fb60e3d83c609fd3bf3cdc586a6244b", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0x704d5cfd3e44b82028f7f8cae31168267a7422c5a447b90a65134116da5a8432" }, { "id": 1, @@ -247,7 +248,8 @@ "batchHashData": "0x7c029310f044ec61946375d00c12cec221f35d42dc6829a9ff1489cf6bb5624d", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0x8bc7f90ad21282dd4676c19e7ce8f6b73beb7304fed1f8cae2dc7b53026d359c" }, { "id": 2, @@ -312,7 +314,8 @@ "batchHashData": "0x9e2a4414f78bef13670164fb0eac6d43e50b5f305c8c9e9495e8f204d880b88d", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0xb10056e7bcaf293d31fff9155619f5bb7f8e22d4116e0870db02b1e85c62254f" }, { "id": 3, @@ -412,7 +415,8 @@ "batchHashData": "0x63a2f1c975b3481a834dc19e47d51bbebfa95d36a5cd5ef7e1cd8f77dba9f92f", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0x5096be84d9ffe4b90dadb9e14adf0560d3b026f6c70a657ff8db1d8013912dee" }, { "id": 4, @@ -478,7 +482,8 @@ "batchHashData": "0x990477d9fa852647f7f31a984aa915af0ff3a813ca717728c510b48feaacac66", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0x65e3db0bc8243f62d1064c526cc067caaeea18611bd9f64bb9076574915255c9" }, { "id": 5, @@ -557,7 +562,8 @@ "batchHashData": "0x36e75bc24a19a4f5c6057500ed3d9d0567606eaf31f870f0fe3d2b71de951700", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0xaee9fbede25418352d0912d6920684cb4a624d91491a4c1080b096b10ac0c61e" }, { "id": 6, @@ -675,7 +681,8 @@ "batchHashData": "0xcf2f7e2aa1ba6181e15e1fcd15948b92a5dbe807a46b15726eb6688949b7df26", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0x46608e2fa1db11c26d2cccfad6bd6f7f3150ad41818808507b08080a14e19ead" }, { "id": 7, @@ -754,7 +761,8 @@ "batchHashData": "0x36e75bc24a19a4f5c6057500ed3d9d0567606eaf31f870f0fe3d2b71de951700", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0xa93e53fa4ad349a9ca7d3c10cbf300bcd27dd8b0edd3237ab3b4ae1186f66669" }, { "id": 8, @@ -847,7 +855,8 @@ "batchHashData": "0x165cea5fa8d1f2c85665d22bfff8a45b2b7183e9627840dd04f618c1aec2464f", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0x34dd638b5422dba4ea61dac77930bcede32dd758fa9d16e2ca7df7b9fecfd406" }, { "id": 9, @@ -968,7 +977,8 @@ "batchHashData": "0x797d3bbd5aafb65b31647e20b5b0ca3371702fd5166b16c0f1512cad7dc88f8e", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0x244fb1f80db37280624da30acf8647a65a68ef3acecb7ca0fd31692bb87e096f" }, { "id": 10, @@ -1089,7 +1099,8 @@ "batchHashData": "0x34277e04e6bb366e19b85abe556937435e579d1c2fe2973587b730c73415b94d", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0xd9cd7be40516bdb7b3afe0a764f088e1e3c0f574f70769703aa884a11a6026c5" }, { "id": 11, @@ -1205,7 +1216,8 @@ "batchHashData": "0x405293b4b4015b2e08493a85d2028419422c2a42b173396552bb4db165f24dbc", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0x3b0a2351ed7ce472ffd4b62f8ad7e93aa1243201624d51f653f5efca29555089" }, { "id": 12, @@ -1332,7 +1344,8 @@ "batchHashData": "0x0648c342d6d0c7dfdbc8ebb8ec2273793705faeead957dc4a6b6cd69c5fa4f71", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0xf93a82af6e9f96942ba005f3362379ab21ba868cd7cf555e4be05a97723219eb" }, { "id": 13, @@ -1460,6 +1473,7 @@ "batchHashData": "0x97e4163ef51abe91b6acd1b35ba01f89753de21a725a9c0566b55c17a6e7237a", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0xcaf5359437893ef0b54f14c2b52e6aeb6ee01d56f53cbce37162a9a60f2246fa" } ] \ No newline at end of file diff --git a/test/helpers/test-vectors/selfdestruct/selfdestruct.json b/test/helpers/test-vectors/selfdestruct/selfdestruct.json index 5c726ac3..75ff4588 100644 --- a/test/helpers/test-vectors/selfdestruct/selfdestruct.json +++ b/test/helpers/test-vectors/selfdestruct/selfdestruct.json @@ -151,6 +151,7 @@ "batchHashData": "0x8861a42093839bba053d104b4fd359fab4bbb4806eb4214401104ace03b3bca9", "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": 1944498031 + "timestamp": 1944498031, + "expectedNewAccInputHash": "0x3eecc493740cb9dae79ff74a75f407c81e042883c5fba4a78290e16735929972" } ] \ No newline at end of file diff --git a/test/processor.test.js b/test/processor.test.js index c88956d8..16ecf78c 100644 --- a/test/processor.test.js +++ b/test/processor.test.js @@ -66,6 +66,7 @@ describe('Processor', async function () { expectedOldRoot, txs, expectedNewRoot, + expectedNewAccInputHash, sequencerAddress, expectedNewLeafs, batchL2Data, @@ -245,8 +246,10 @@ describe('Processor', async function () { const newRoot = batch.currentStateRoot; if (!update) { expect(smtUtils.h4toString(newRoot)).to.be.equal(expectedNewRoot); + expect(smtUtils.h4toString(batch.newAccInputHash)).to.be.equal(expectedNewAccInputHash); } else { testVectors[i].expectedNewRoot = smtUtils.h4toString(newRoot); + testVectors[i].expectedNewAccInputHash = smtUtils.h4toString(batch.newAccInputHash); } // Check errors on decode transactions From 54e4cb8db78f12f8e9f440696c1037a007ad0c5b Mon Sep 17 00:00:00 2001 From: Ignasirv Date: Thu, 3 Nov 2022 13:59:02 +0100 Subject: [PATCH 28/40] Add EIP 3198 for BASEFEE opcode --- package.json | 4 ++-- src/zkevm-db.js | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index aee61bd9..df2aaabb 100644 --- a/package.json +++ b/package.json @@ -48,9 +48,9 @@ }, "dependencies": { "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.0", + "@polygon-hermez/common": "2.6.3", "@ethereumjs/tx": "^3.4.0", - "@polygon-hermez/vm": "5.7.25", + "@polygon-hermez/vm": "5.7.26", "ethereumjs-util": "^7.1.4", "ethers": "^5.5.4", "ffjavascript": "^0.2.55", diff --git a/src/zkevm-db.js b/src/zkevm-db.js index 2c50f95e..152e11c2 100644 --- a/src/zkevm-db.js +++ b/src/zkevm-db.js @@ -2,11 +2,11 @@ /* eslint-disable no-restricted-syntax */ const { Scalar } = require('ffjavascript'); const VM = require('@polygon-hermez/vm').default; -const Common = require('@ethereumjs/common').default; +const Common = require('@polygon-hermez/common').default; const { Address, Account, BN, toBuffer, } = require('ethereumjs-util'); -const { Hardfork } = require('@ethereumjs/common'); +const { Hardfork } = require('@polygon-hermez/common'); const ethers = require('ethers'); const clone = require('lodash/clone'); @@ -302,7 +302,7 @@ class ZkEVMDB { */ static async newZkEVM(db, poseidon, stateRoot, accHashInput, genesis, vm, smt, chainID) { const common = Common.custom({ chainId: chainID }, { hardfork: Hardfork.Berlin }); - common.setEIPs([3607]); + common.setEIPs([3607, 3198]); const lastBatch = await db.getValue(Constants.DB_LAST_BATCH); // If it is null, instantiate a new evm-db if (lastBatch === null) { From b3e5d8cb4df95e7015d31c3c697efafb67f24e25 Mon Sep 17 00:00:00 2001 From: Ignasirv Date: Fri, 4 Nov 2022 17:37:26 +0100 Subject: [PATCH 29/40] Update system address --- package.json | 2 +- src/constants.js | 2 +- .../block-info/block-info-batches.json | 66 +++++++------- .../test-vectors/block-info/block-info.json | 27 +++--- .../end-to-end/state-transition.json | 19 ++-- .../processor/state-transition.json | 86 +++++++++---------- .../selfdestruct/selfdestruct.json | 21 +++-- .../test-vectors/zkevm-db/recursive.json | 8 +- .../zkevm-db/state-transition.json | 2 +- 9 files changed, 131 insertions(+), 102 deletions(-) diff --git a/package.json b/package.json index df2aaabb..48d8be16 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@ethereumjs/block": "^3.6.2", "@polygon-hermez/common": "2.6.3", "@ethereumjs/tx": "^3.4.0", - "@polygon-hermez/vm": "5.7.26", + "@polygon-hermez/vm": "5.7.27", "ethereumjs-util": "^7.1.4", "ethers": "^5.5.4", "ffjavascript": "^0.2.55", diff --git a/src/constants.js b/src/constants.js index 54615335..72bb83af 100644 --- a/src/constants.js +++ b/src/constants.js @@ -37,7 +37,7 @@ module.exports.GLOBAL_EXIT_ROOT_STORAGE_POS = 0; module.exports.LOCAL_EXIT_ROOT_STORAGE_POS = 1; module.exports.BATCH_GAS_LIMIT = 30000000; module.exports.BATCH_DIFFICULTY = 0; -module.exports.ADDRESS_SYSTEM = '0x0000000000000000000000000000000000000000'; +module.exports.ADDRESS_SYSTEM = '0x000000000000000000000000000000005ca1ab1e'; module.exports.STATE_ROOT_STORAGE_POS = 1; module.exports.LAST_TX_STORAGE_POS = 0; diff --git a/test/helpers/test-vectors/block-info/block-info-batches.json b/test/helpers/test-vectors/block-info/block-info-batches.json index 8c31348e..88e55df4 100644 --- a/test/helpers/test-vectors/block-info/block-info-batches.json +++ b/test/helpers/test-vectors/block-info/block-info-batches.json @@ -158,7 +158,7 @@ "rawTx": "0xf88a06843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000008207f4a098f56115cad149a409a86e7610863248799a31d80e87d46582d08a3c0933a40aa025455a74fa3ca2ada0bf39dac88a172d032583bfec15061f39184ef9f7012677" } ], - "expectedNewRoot": "0x95b8e98c9802c04b30ad7f5df0e72e19ef348aeacf88d8379283e536b977009d", + "expectedNewRoot": "0xd88af05a70520c656807c1c5ff61e74f9e04d6dcf98a3a6eaddb82cf96a27a6f", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -166,17 +166,7 @@ }, "0x0000000000000000000000000000000000000000": { "balance": "0", - "nonce": "0", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x07", - "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x22ab0fb4070ab0070378a6ed6475643e3b9518853f43afb10252a425cce53eb4", - "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0xca690add3a99e3678aa637ed923817a37dbb11a03c13e4fca9463616f5f23146", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x8a05a91549a939710ec500b67e8771c8326cccfb8759fedc6b956dc2cd077398", - "0xdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e": "0x3042cc900bcb03639c66fdc2f0b2b9fd107c7dcd2f896e8317539e6e3d814d0e", - "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0xeb1e68063f8179e537f353f776a0b99916ab936cf6afa5e6dc856d4e6c49daea", - "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0x65a0baf175a2435e4c3e3dc9482c750dddf580119efd709eaa6e8727f3fe2ce9" - } + "nonce": "0" }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "100000264292000000000", @@ -196,6 +186,20 @@ "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "199999735708000000000", "nonce": "7" + }, + "0x000000000000000000000000000000005ca1ab1e": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x07", + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x47282e4f91ff3f7bcc8a39735d20b86d01488eb8726b2218572088f9c7c195bf", + "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0x53dfc8e68e52b6f9dddfe0b7af8dbbe1d252316114c9ca38c4c4d1504ea9c020", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xf1d5577c752f44551bb85797348646e75d0b8c1039978cdf91107b9c72ab07f0", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x3835218e81c6e3bd9f5afc7631e287268675602cd6ee272fceff360d0c150cf0", + "0xdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e": "0xe5c7a860c01c6c1d2123c015be325f65eda6659904b5d6f723429d311ea4da55", + "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0x1719a7e74faad3cc4be0653c40f7e1a13ac9bd66e01167fdf1530cec966369e2", + "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0xaabc8126bea2271fab9af9b2f5301054099bb0dcce159fa75c5409fd0df3aa38" + } } }, "batchL2Data": "0xea80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800a62ce9876e027f7a954f96c485c63c9bf043bd1fe1012c5634cf959bf7743190a601eedbcfef58146bdda9845fea5d9356b09d667010d557c73f83353a119a61cea01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e880803c696d27506eebe00e52cd1c327eefd2ebb8c7a5d5309118ad18381630b2a5d47971958df81d8daa0d393daddb17a250c294452078db34b22d9e5ee85d2482e81bea02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080db91fc325e867faa9625a5c7c152dfaf207a992b6eea855fcabe264f489b043a431f20ba77bd0269a6aedb6287118d383305d0dd677478209e60f6d3af3b17201cea03843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080e0c0469634b096c3b190713c8a8faa9c4fccc8b2d83cc8da056a897a28a616277c5bf403ce3a4c77cb0c6ca14cdd24d8fa785b4a0bde1500abba55db7df7483a1bea04843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e8808057c7bfa7288275d862a91776d6d05c2290058a42840f08108b8b157f139120ce565bc8d0b5291e949c1c87e2f829b76d6a5d15e767e61716d1095dcc7cb5b44d1cea05843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080e255f868a61169a2330cb539671e1a66ee846bc06cc888ea8fcd7ae51cdc62940c6dec27e6f756dd84923bcebb1f85db125299c0b622eaa8d5722cb3dace239d1cf84a06843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000008203e8808098f56115cad149a409a86e7610863248799a31d80e87d46582d08a3c0933a40a25455a74fa3ca2ada0bf39dac88a172d032583bfec15061f39184ef9f70126771c", @@ -321,7 +325,7 @@ "rawTx": "0xf88a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018207f3a068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c4829a05695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef6" } ], - "expectedNewRoot": "0x2582eb68edd23b7726b43416b00a56d7974b44c13af57e5e157743939e43dd4b", + "expectedNewRoot": "0x06d2f9a844f954c857f7281c0a12163f0919d2def882ecf88d4c0d325be97cef", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -340,33 +344,37 @@ "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0a", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x01c9c380", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4" + "0x0000000000000000000000000000000000000000000000000000000000000001": "0xf1d5577c752f44551bb85797348646e75d0b8c1039978cdf91107b9c72ab07f0" } }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "100000451796000000000", "nonce": "1" }, - "0x0000000000000000000000000000000000000000": { + "0x000000000000000000000000000000005ca1ab1e": { "balance": "0", "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0e", - "0x4db623e5c4870b62d3fc9b4e8f893a1a77627d75ab45d9ff7e56ba19564af99b": "0x1378fb0431d275ac4920655cab029fb33c43ed101c08bac948ba63042311c6c1", - "0x57aaafa65c4e563d39fff90096a5fa76d42117f53d87ef870784e64d63a8a16b": "0x69f74f2daa0841a951d9336c387ecd07f6c94f9f86d36705e813faec779de035", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4", - "0xfc80cd5fe514767bc6e66ec558e68a5429ea70b50fa6caa3b53fc9278e918632": "0xe5e6e554608cafbb08bd71b26467d82b3ec05c9959837ccf6e880ac679ce6cf2", - "0x23bf72df16f8335be9a3eddfb5ef1c739b12847d13a384ec83f578699d38eb89": "0x7bdb5853ea88748cc17a7bea07830299874458e9f90c14808a0291a4a8c5d2a6", - "0x2a32391a76c35a36352b711f9152c0d0a340cd686850c8ef25fbb11c71b89e7b": "0xd3530a4859a3ffc86f7e06ae7a908b33f3d6b43914e193e3341a5f6402af8059", - "0x74a5fbcb419ab7dbacbb2c92a4e163730f0da5c72b911deecf4f05a6b327d0a4": "0xbda9dcc3ac1b6daae6194b51945aef63093ee74e32879036fe2a8f39448e8333", - "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x22ab0fb4070ab0070378a6ed6475643e3b9518853f43afb10252a425cce53eb4", - "0x86b3fa87ee245373978e0d2d334dbde866c9b8b039036b87c5eb2fd89bcb6bab": "0xb24adf586791c7ec9daedd6790dcf191f0ecf6b9a4e9f9089707ab5927bf9c69", - "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0xca690add3a99e3678aa637ed923817a37dbb11a03c13e4fca9463616f5f23146", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x8a05a91549a939710ec500b67e8771c8326cccfb8759fedc6b956dc2cd077398", - "0xdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e": "0x3042cc900bcb03639c66fdc2f0b2b9fd107c7dcd2f896e8317539e6e3d814d0e", - "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0xeb1e68063f8179e537f353f776a0b99916ab936cf6afa5e6dc856d4e6c49daea", - "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0x65a0baf175a2435e4c3e3dc9482c750dddf580119efd709eaa6e8727f3fe2ce9" + "0x4db623e5c4870b62d3fc9b4e8f893a1a77627d75ab45d9ff7e56ba19564af99b": "0x0ef707d074037c4c7e727750352f7601af73643a648186eb061b5e99977e6bc5", + "0x57aaafa65c4e563d39fff90096a5fa76d42117f53d87ef870784e64d63a8a16b": "0x0b4f179363ed0b512d110b5e5675a0822edcf88ac2803a59da6bcfdc38a6cabf", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xf1d5577c752f44551bb85797348646e75d0b8c1039978cdf91107b9c72ab07f0", + "0xfc80cd5fe514767bc6e66ec558e68a5429ea70b50fa6caa3b53fc9278e918632": "0x9c5bd5f8820b627b85e88569d39a9a190e8829be1b1ddb23f01f74329277b628", + "0x23bf72df16f8335be9a3eddfb5ef1c739b12847d13a384ec83f578699d38eb89": "0x5245244b80a88fcd94494e544a62f3e61e115a3f4a1511f905b980b81cc6a6d0", + "0x2a32391a76c35a36352b711f9152c0d0a340cd686850c8ef25fbb11c71b89e7b": "0x65252bd75475952605e6676cad142690837b66c28ea575ef8c383c6e858dbe27", + "0x74a5fbcb419ab7dbacbb2c92a4e163730f0da5c72b911deecf4f05a6b327d0a4": "0xedbf18deb6c96ad2e8735b2c9a778a4c6349f9092c89cbf4da090f7ce016cf7e", + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x47282e4f91ff3f7bcc8a39735d20b86d01488eb8726b2218572088f9c7c195bf", + "0x86b3fa87ee245373978e0d2d334dbde866c9b8b039036b87c5eb2fd89bcb6bab": "0x35700e7b8aeaa2e6275fa8e3ff70a435fd91a415255a9ad05e434234f819e4ef", + "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0x53dfc8e68e52b6f9dddfe0b7af8dbbe1d252316114c9ca38c4c4d1504ea9c020", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x3835218e81c6e3bd9f5afc7631e287268675602cd6ee272fceff360d0c150cf0", + "0xdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e": "0xe5c7a860c01c6c1d2123c015be325f65eda6659904b5d6f723429d311ea4da55", + "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0x1719a7e74faad3cc4be0653c40f7e1a13ac9bd66e01167fdf1530cec966369e2", + "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0xaabc8126bea2271fab9af9b2f5301054099bb0dcce159fa75c5409fd0df3aa38" } + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0" } }, "batchL2Data": "0xea07843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800be264304cfc20c400929c82d1435cfbaa18e9a49c34ce65274633820803c415132ab24e00f892d77ad39c87e897772100e3323f31915a3e5eb261e056d99bc31bea08843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e88080775e9a77a45dafb120ec840926129c5db8ad3843722de88f2c7f6df4383c92fe0176dcd120e97ff6a1a1d60150aac3fdbca81bbfd1e2e9349ed9da4fa3bd85a81bea09843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080f969b5ab22f54db86a57efcfa83f3369047d328d2c56044bd49d7f863e69ed2b5a95c2b1b41801a5b4d7bb548829fe5a51c72dd5e5a08bd2a56f49bc3246a3081cea0a843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080b60beddfce8bf365e93cb4f88f45ed0e5649659de56dbf52332e6c9c16aa10bd576fb90bd967e2495fe8fa09d75d58b82668c54dab54d91f5e4ab0d76d2649ae1bea0b843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e88080416d143b11a02e0c28344feb6af0f90ecb5b0bd5eec26047b25c0f775502be751e40d32fefe94aee39ad9b2605afeb2e86f31b56ac82874f841054c6a01331851bea0c843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080a1ec9b236321a7d3545cfe1a1baedf65d75e589223d732d424576756adb0396e74470d226d5b61895150d96dbd1b1ba8a8ad69a6bf9311a141ece602b6420d961cf84a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018203e8808068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c48295695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef61b", diff --git a/test/helpers/test-vectors/block-info/block-info.json b/test/helpers/test-vectors/block-info/block-info.json index 1bdbbfea..6b326bf5 100644 --- a/test/helpers/test-vectors/block-info/block-info.json +++ b/test/helpers/test-vectors/block-info/block-info.json @@ -136,7 +136,7 @@ "rawTx": "0xf86a05843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708207f4a0e255f868a61169a2330cb539671e1a66ee846bc06cc888ea8fcd7ae51cdc6294a00c6dec27e6f756dd84923bcebb1f85db125299c0b622eaa8d5722cb3dace239d" } ], - "expectedNewRoot": "0x1670ee0d49949f6eb8291dae0ef6785865b4142f92b88645eadd7f19088d30d5", + "expectedNewRoot": "0x58a941f582fb380452692bc3899ca4c5369cf0ba526184b0dd16153fee8966f4", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -150,15 +150,7 @@ "0x0000000000000000000000000000000000000000": { "balance": "0", "nonce": "0", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x06", - "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x22ab0fb4070ab0070378a6ed6475643e3b9518853f43afb10252a425cce53eb4", - "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0xca690add3a99e3678aa637ed923817a37dbb11a03c13e4fca9463616f5f23146", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xc8dbb33935c7ad4ab5faa0be4d5bf18ecadf6547d39b06a8c544baa402914ad4", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x8a05a91549a939710ec500b67e8771c8326cccfb8759fedc6b956dc2cd077398", - "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0xeb1e68063f8179e537f353f776a0b99916ab936cf6afa5e6dc856d4e6c49daea", - "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0x65a0baf175a2435e4c3e3dc9482c750dddf580119efd709eaa6e8727f3fe2ce9" - }, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -188,6 +180,21 @@ "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 + }, + "0x000000000000000000000000000000005ca1ab1e": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x06", + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x47282e4f91ff3f7bcc8a39735d20b86d01488eb8726b2218572088f9c7c195bf", + "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0x53dfc8e68e52b6f9dddfe0b7af8dbbe1d252316114c9ca38c4c4d1504ea9c020", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xf1d5577c752f44551bb85797348646e75d0b8c1039978cdf91107b9c72ab07f0", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x3835218e81c6e3bd9f5afc7631e287268675602cd6ee272fceff360d0c150cf0", + "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0x1719a7e74faad3cc4be0653c40f7e1a13ac9bd66e01167fdf1530cec966369e2", + "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0xaabc8126bea2271fab9af9b2f5301054099bb0dcce159fa75c5409fd0df3aa38" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xea80843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800a62ce9876e027f7a954f96c485c63c9bf043bd1fe1012c5634cf959bf7743190a601eedbcfef58146bdda9845fea5d9356b09d667010d557c73f83353a119a61cea01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e880803c696d27506eebe00e52cd1c327eefd2ebb8c7a5d5309118ad18381630b2a5d47971958df81d8daa0d393daddb17a250c294452078db34b22d9e5ee85d2482e81bea02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080db91fc325e867faa9625a5c7c152dfaf207a992b6eea855fcabe264f489b043a431f20ba77bd0269a6aedb6287118d383305d0dd677478209e60f6d3af3b17201cea03843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080e0c0469634b096c3b190713c8a8faa9c4fccc8b2d83cc8da056a897a28a616277c5bf403ce3a4c77cb0c6ca14cdd24d8fa785b4a0bde1500abba55db7df7483a1bea04843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e8808057c7bfa7288275d862a91776d6d05c2290058a42840f08108b8b157f139120ce565bc8d0b5291e949c1c87e2f829b76d6a5d15e767e61716d1095dcc7cb5b44d1cea05843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080e255f868a61169a2330cb539671e1a66ee846bc06cc888ea8fcd7ae51cdc62940c6dec27e6f756dd84923bcebb1f85db125299c0b622eaa8d5722cb3dace239d1c", diff --git a/test/helpers/test-vectors/end-to-end/state-transition.json b/test/helpers/test-vectors/end-to-end/state-transition.json index 4bb185f3..5bf2ba38 100644 --- a/test/helpers/test-vectors/end-to-end/state-transition.json +++ b/test/helpers/test-vectors/end-to-end/state-transition.json @@ -173,7 +173,7 @@ "rawTx": "0xf9012f0480831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf55988880de0b6b3a7640000b8c40871e97100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008207f4a0f212cb649f835d4f9c788d3a6733911b8aa02c6b63751f3b931fb062bd1942e4a052e73d8704862f4eb55646e7440dcf65f6e7ca424e38340ed8bcf24597c6865d" } ], - "expectedNewRoot": "0xef6fa49c463733fde95a297d7c8057ada153fb62021150571a66c10f9ff9a8e4", + "expectedNewRoot": "0x4e1b8957858dd0b62473b1964a3fdd1efa972832c13acde171b771b5473be008", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -189,11 +189,7 @@ "0x0000000000000000000000000000000000000000": { "balance": "0", "nonce": "0", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x91797cd9ca12c36cf9d8a584267280241098a6732f49bd92f1ff869ca0e6c19a", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xdedeaf29775b7ae926842af37a2153ffb6467db8ceaa5d8eb332a0c2235fa790" - }, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -272,6 +268,17 @@ "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 + }, + "0x000000000000000000000000000000005ca1ab1e": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xe25751d467f409bc62bc9a63ebfc69dfc67cc441e5c003a2d7f684fdb446c761", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xd9054846594d062cd439dd84fd0ca70439a67466e727031af1f8b01021346c9e" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 } }, "batchL2Data": "0xf905a80380831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf5598880b905847b6323c1000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000005ba002329b53c11a2f1dfe90b11e031771842056cf2125b43da8103c199dcd7f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3021ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193440eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f839867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756afcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8923490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99cc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8beccda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d22733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618db8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32293237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7358448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a900000000000000000000000000000000000000000000000000000000000000008203e88080acc0f3f1c62c08b14771c6708632db779c4b9ab167793dd6e311a4bfe72d82183f054c5631e299c7f84ccf2b6244bd07c7f2a4fd7ebe4fc6daf46a0371831cdd1bf8ef0480831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf55988880de0b6b3a7640000b8c40871e97100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008203e88080f212cb649f835d4f9c788d3a6733911b8aa02c6b63751f3b931fb062bd1942e452e73d8704862f4eb55646e7440dcf65f6e7ca424e38340ed8bcf24597c6865d1c", diff --git a/test/helpers/test-vectors/processor/state-transition.json b/test/helpers/test-vectors/processor/state-transition.json index bbfbe69f..d92d92ff 100644 --- a/test/helpers/test-vectors/processor/state-transition.json +++ b/test/helpers/test-vectors/processor/state-transition.json @@ -34,7 +34,7 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x15ccbba64d32c6146ad323854394172e1bb0d09b407ba3e79dc01201d34dd974", + "expectedNewRoot": "0x67b6e2d00bb7c1f543f1338da760c2f111088ccc13876bbd642b53596e6b18f6", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -59,12 +59,12 @@ "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, - "0x0000000000000000000000000000000000000000": { + "0x000000000000000000000000000000005ca1ab1e": { "balance": "0", "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x2e4da9d4a701f08194a0a19935914180db9a0ef4405fae8aa5a16043dc661041" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x33c9ecd2feb33cb4f6f0d37705566d874c696f6dee3502dba8b0ab54982d64d3" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -184,7 +184,7 @@ "rawTx": "0xf86c80843b9aca00830186a094abcced19d7f290b84608fec510bee872cc8f5112880de0b6b3a7640000801ba02c92035bc11227e9e94ba066a6d77a65c43d29dfb4a855c9464e1b60fabd6334a07171c6dc84816ffcf025040cd6193ecef3928a0c4e4964ddba320826b76c725d" } ], - "expectedNewRoot": "0x166fd8b426df243c7f8588a4f4a22108189a529dc8c88ff6bcad5da9cab8db8b", + "expectedNewRoot": "0xd5f8959d296f3b67f379bf38ccf592b9dda88bacfaa25f5a3adcc32998ea8345", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -230,13 +230,13 @@ "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, - "0x0000000000000000000000000000000000000000": { + "0x000000000000000000000000000000005ca1ab1e": { "balance": "0", "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x1f06a0244e9eb8952bc4fbbaf65d5c6b796b6aef99e3e1294d27679e79e91ac4", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xb3cc43956c76ef14a1dae26d664bd00732ca79581a844a7cdf24c06083545b40" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x8718cc71371ae6772e87ffa77b7e794e821f2f3132ff4d403888d589ce4ba7fa", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x9e346f155ce87cab069e0d649b29afa75c36b2b1d1bf75111823b91f8a1be27e" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -520,7 +520,7 @@ "customRawTx": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d88016345785d8a0000808203e88080cca9bd00c0a9af18cdc17e693951b88b293bae8ed236ff7dcf2684c478bc0b6a19cc9ed09ee5e1e2750abbea7ec8d2ed31df90c7d364d4e2f36c31eb410c10451b" } ], - "expectedNewRoot": "0xac30487c7c48751251945979db13f47decff0035381bed9ee473ca36ca8daf46", + "expectedNewRoot": "0x2fc2367c234f1e0c6198890fcd8ca608ae2f0b54c97a5af1780fd936e2bb9758", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -545,12 +545,12 @@ "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, - "0x0000000000000000000000000000000000000000": { + "0x000000000000000000000000000000005ca1ab1e": { "balance": "0", "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xf7daaedd9bcff0e15bf146595e386a22e1e1282e3409eb4df8bbc03b91084901" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x8ed1df262fbd87519693d26665aac5cac143c2da0d39b655ce67b003305ed524" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -639,7 +639,7 @@ "rawTx": "0xf86c80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff880de0b6b3a7640000801ba077f76b76aca6161db28545aa742536370e4f57f9a71651688631a423abcbe04aa0131474e130abe8bcc9ef39a44a877eb64b2d43132cb0907abe547aa605b641b8" } ], - "expectedNewRoot": "0x3dcb7528acf6a45845a34dfc01a6e67a8c60b9e4923d6d563c422a042f7f50a4", + "expectedNewRoot": "0xad92e71e73e5f87f9bd396356b5ab981ed2e0f1ade4d701e9e34640263fa9075", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -664,12 +664,12 @@ "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, - "0x0000000000000000000000000000000000000000": { + "0x000000000000000000000000000000005ca1ab1e": { "balance": "0", "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x14295862abc2c972cfa9600e0230fa0683382845053457e06d41e340f67fa33e" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xada698deb2dd6dc157da4a6c438c554b86b2b7a2a097758d014323320aa08e03" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -719,7 +719,7 @@ "customRawTx": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d88016345785d8a0000808203e88080cca9bd00c0a9af18cdc17e693951b88b293bae8ed236ff7dcf2684c478bc0b6a19cc9ed09ee5e1e2750abbea7ec8d2ed31df90c7d364d4e2f36c31eb410c10451b" } ], - "expectedNewRoot": "0x0bb66d45a103bc071321dcfb2375b192fec45693e973536c300bf9ae0932e7eb", + "expectedNewRoot": "0x4b28b2ecfa592ad4102a0af8a67190d50727e99f75b4de7c538958463684d768", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -744,12 +744,12 @@ "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, - "0x0000000000000000000000000000000000000000": { + "0x000000000000000000000000000000005ca1ab1e": { "balance": "0", "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xd5572151c529633609f28d171070f4881f1768c2143013f418ed1ede6dfda442" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xe2db8a0725e35f899abfe353a0e1b9bd0d232dab63cd4464c2d18e9494edfb23" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -812,7 +812,7 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8806f05b59d3b20000808203e880809990717b4c80d955cacf4a765d3bfefd707511d66e0a482510906d119fa285c7232ccd442c5b618558b62175f01d9f45ff655d480f36394ea50a0b7dc52bc3331c" } ], - "expectedNewRoot": "0x785ae20186695e8ea9c5411fee85f0ee4f5185be4a5ac2b01fba9e51219caebd", + "expectedNewRoot": "0xb30a64d30efd1082832425ac62bae26155123d9548f2e7cf879f1cbe367f1cbd", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -837,13 +837,13 @@ "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, - "0x0000000000000000000000000000000000000000": { + "0x000000000000000000000000000000005ca1ab1e": { "balance": "0", "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x03a2a0b418a31e83241b34d0cb319306345979a3cbbecad95dc1ca347c4d8e8d", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x9a245b8841790a7dc2c7358a750d881af9fefe2aaf9dfc5e19d144f554cbcbc9" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xe1fe54937f251deebdd08740d1088d06d982d9c09620fb198986d8c553da87af", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xba7611055c7e026c817fe6270ceb524bb24910bea0e89e35933aa6ed1f09f0f8" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -932,7 +932,7 @@ "rawTx": "0xf86e03843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d8806f05b59d3b20000808207f3a047b4f7d735dfadefc585bf24d9bd2267438f9bc92d1ab4f65fa9a6d90cc33858a00720a7da26cad22c05bf1358011c95caec969b8b9177af91c0e90dac3d02f6b3" } ], - "expectedNewRoot": "0x1d13e452fc55576e24d0d2819cc523f67bb5be09ea539022cab80febd44de487", + "expectedNewRoot": "0x0128a8745cc4abc15a62e33ed3a57eedec45e2858bbbef76894c4e14496bf3d9", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -957,15 +957,15 @@ "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, - "0x0000000000000000000000000000000000000000": { + "0x000000000000000000000000000000005ca1ab1e": { "balance": "0", "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x04", - "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x8dd233dfac0263f7bb942c5b27c9a9ea012e0f50d681a746e624792060849436", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x14295862abc2c972cfa9600e0230fa0683382845053457e06d41e340f67fa33e", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xd468b91fdb5b05ba488bfe8ee94df0ea2be496fae9e10f1b68d8b1d25f365c81", - "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0xa7214290d55d2317dedef956d5caaffed41e912fd0c9024b44067505e282ff55" + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x8aaa079a6723e8b30fed8831a360ef34180a2958b2346bbbcac56e4ea4194670", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xada698deb2dd6dc157da4a6c438c554b86b2b7a2a097758d014323320aa08e03", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x664ba440e4e872a23d048bb285e33c9a6e49df7f45bc9c57dfed5036876261c1", + "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0xef3a3f565edf4983d9109a8406554938ee5c761f1758adddd42209f9298907e4" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1046,7 +1046,7 @@ "rawTx": "0xf86e80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808207f3a01cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e7a05d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad73" } ], - "expectedNewRoot": "0x0dc966d5458b95b204ead8055da8cbb61fb30db847f69ee878d32cdc49140270", + "expectedNewRoot": "0x4cf0eae3574ed7c3b3daffaf54f9967aff5f686d6782121dea4e21cc4fa31cc5", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -1081,13 +1081,13 @@ "hashBytecode": "0x062131fa38229aa99857628dfce11250ce3012071d0ec4c670667952350df87c", "bytecodeLength": 643 }, - "0x0000000000000000000000000000000000000000": { + "0x000000000000000000000000000000005ca1ab1e": { "balance": "0", "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x64584d333ccc8964882d57ccf63c1820ad0fb1cc3857a23ce7b3233c3bf259eb", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xcf82573277a0c670907ceaa57854dd7d21443d38f7b4f60c8ab4659b889269eb" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x795dc932e2b6cd74c837e1572123469176c2383209f97117d1ec2548a272be08", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x91eff71c1c6d69dd60b3b943c0afd2bd91f806793587aecfbe41ee9269ca4f5b" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1166,7 +1166,7 @@ "rawTx": "0xf8ab01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880b844494e4bc30000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff00000000000000000000000000000000000000000000000000038d7ea4c680008207f3a0c83069009c51e411569ca78a660bbcb64e4e6709909eb99c28395fb4c787da4ca02b846bf51fcf891fb293e36a0cf5f4efd1fe7c19b2c8a1220b8308b195e80156" } ], - "expectedNewRoot": "0x77487f64edb44479fd0191af216ff978bb95a5ae289a4901d721d5cf1eb064f5", + "expectedNewRoot": "0x46c20674e771c27de36104f251d3f879e74cde6ae3a543693a79e2326801e760", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -1198,13 +1198,13 @@ "hashBytecode": "0x4816a88058a9b03290d643c0c50e7117b563074c41579b38526e7fded1b3ad23", "bytecodeLength": 534 }, - "0x0000000000000000000000000000000000000000": { + "0x000000000000000000000000000000005ca1ab1e": { "balance": "0", "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xb8f600efdc058452c5fc97d1f4d4cdeeef5ae2ed09f375f76f2049b2d574c2a9", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xdd54e1a5e01f72c2a60e697a27203bc226c2e45f2b84610b5c05a4faba4c0db7" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x4c894fd8c77a08e5619a57df2009a4d2197fc666f7abd59517027438de9f7e3e", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x181636fadb326adb245c58a9090333ac8eeea92c67cfaff4a4e45509f059df5f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1292,7 +1292,7 @@ "rawTx": "0xf88a01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4027e5d610000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff8207f3a0a04c0969f64f440a2c91e29bf9ea0b1cc8db9f33bda47c2c6899840ae46d36d7a00212c0a9f1bb015890ed0830c7fea6c52adaf85b0bf3d64448d3300c12c1bb16" } ], - "expectedNewRoot": "0xc967a424c2b7bbe5524a33ee1fcccd04c5a38684bb9a33224e02e25448492e65", + "expectedNewRoot": "0xbef2f9395a0fd16a2fef83da6fea142cd8f75a387f40351f18aaafc4956ad688", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -1326,13 +1326,13 @@ "hashBytecode": "0xbfbd82130765fb7f1f8d2329c86aa82d679e04c896878ed0dbc8a151b4e696b8", "bytecodeLength": 574 }, - "0x0000000000000000000000000000000000000000": { + "0x000000000000000000000000000000005ca1ab1e": { "balance": "0", "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x2fa66821b712f8d710d87366ea2023addb2569937d7825d09ae75bd82e64ad37", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xd45e0749d8fa8259251ba69bbd7089b84147adea6beeec6fac9cc2e59b88931f" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xdc05ce49b9a0d80568307b074ce88daa43756ee5843b3c3ee93b211c59e6b9b0", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xca2771de72767e0200ccc42d9bd50c30669f3dd2b422b19aa75f511ea1c7dbcd" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1420,7 +1420,7 @@ "rawTx": "0xf88a02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4027e5d610000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff8207f3a028e62eb40661fd098322a7211dca25a6b56f60eefb24ede9607d2603a09e4c65a03be289b7a729a18336e2f9f4a4f52c4fadc4274d1fd42dd8965deeb8634ddddc" } ], - "expectedNewRoot": "0xf315d241408dfd8ac18765699669d705b4b5e0c4c3f436486baf92ad461aee8e", + "expectedNewRoot": "0x9388a935fec9575353c2a8d845d3e97664e3a9cdfcd06c4f06b674551c93aa01", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -1454,14 +1454,14 @@ "hashBytecode": "0x53ab04d3e34c23abaf57efc4acd9e54df7c39f82521e3928bebf6ce95ca6d6ca", "bytecodeLength": 574 }, - "0x0000000000000000000000000000000000000000": { + "0x000000000000000000000000000000005ca1ab1e": { "balance": "0", "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x03", - "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0xe3118caac7dffe053a61044d702165532a39e323ed79ec9e1dd4f80c47461756", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x16598cb5734432db3af62b8679d7d8e03c8ffce43186f1ee3f1721aeeda2170b", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x0be49b38fa1d76c0834d3efde5bb01250686989b319c2f39bdcb2a54f6df2cff" + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x8b1e6712c93a68c58cacaeaba37d94d4e4ec9a2bfff09f7bce9d840dab3b7946", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xb9b6246d363017caccae91bf5899e42014031383d9ea9c74f7b4d7ae8f300883", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x7dfd753d8b76606dde380c7b8fc6584e1cb33334ac571bc10794b4cf418b222d" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 diff --git a/test/helpers/test-vectors/selfdestruct/selfdestruct.json b/test/helpers/test-vectors/selfdestruct/selfdestruct.json index 75ff4588..0331d500 100644 --- a/test/helpers/test-vectors/selfdestruct/selfdestruct.json +++ b/test/helpers/test-vectors/selfdestruct/selfdestruct.json @@ -90,7 +90,7 @@ "rawTx": "0xf86a02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880842b68b9c68207f4a0f5b684b995dd9549bb5fd2ed23d3b388f75f559b14110277b4ae7de5bd7775efa01be51078330d1ef03f0e4fe0271e8e2502b6e98c1f7664a5e2aeae3ab04156d4" } ], - "expectedNewRoot": "0x25bb9c29cc33287b3560ea1a7d52f6b48c01561f3f58ec55a2b421d43b7d954e", + "expectedNewRoot": "0x8d6010008947673cfb51f8116730514ed3a1b357bdf99783e9c53ced4abd4fb4", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -104,12 +104,7 @@ "0x0000000000000000000000000000000000000000": { "balance": "0", "nonce": "0", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x03", - "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x939c39719b9c5b85eef83e5e6cb6adf81133878166a6fa8a0b2d86e5f11c858c", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x6595623a07080ebd13ec7ca04a98478b25bf6d83cdc6b3e099612165d2b90866", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xf69a896735fd1eb8d6f0aaa9f64e387f6ca9cfb8278f2b443dcfcf44bf577fa8" - }, + "storage": null, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, @@ -137,6 +132,18 @@ "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 }, + "0x000000000000000000000000000000005ca1ab1e": { + "balance": "0", + "nonce": "0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x03", + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x049f96e198aba7161f29ca2c324193c9f819fd7a926ca49e3f6de95d1d761080", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xce23bd8e92c4670fc0c808be48b0007a0694d39d7dd34a16f744894ce2f64919", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xdc8eaac2a6c0d40883b2696fd768259bb6e593719509d9d438b1c4944a25c831" + }, + "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", + "bytecodeLength": 0 + }, "0x0000000000000000000000000000000000000001": { "balance": "123456789", "nonce": "0", diff --git a/test/helpers/test-vectors/zkevm-db/recursive.json b/test/helpers/test-vectors/zkevm-db/recursive.json index a3a46d17..77bcc364 100644 --- a/test/helpers/test-vectors/zkevm-db/recursive.json +++ b/test/helpers/test-vectors/zkevm-db/recursive.json @@ -40,7 +40,7 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x15ccbba64d32c6146ad323854394172e1bb0d09b407ba3e79dc01201d34dd974", + "expectedNewRoot": "0x67b6e2d00bb7c1f543f1338da760c2f111088ccc13876bbd642b53596e6b18f6", "expectedNewAccInputHash": "0x704d5cfd3e44b82028f7f8cae31168267a7422c5a447b90a65134116da5a8432", "expoectNewLocalExitRoot": "", "expectedNewLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -63,7 +63,7 @@ "customRawTx": "0xee01843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8802c68af0bb140000808203e88080225fd92907efb068a8bee3f95a26f2c5d67db2750bb9993083e0df217ff3a2666f412c311280066d1717f309c248fdbd853ce738363db08775999b2f2d2a8d5e1c" } ], - "expectedNewRoot": "0x1345a4f4413163418714f6215e0c51dd48477c5a0b34575a02d71441ea70a981", + "expectedNewRoot": "0xa6e0ab7ee71860e6f8058e28260796ef9ad8cd091a99455d1616c08931cbab66", "expectedNewAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", "expoectNewLocalExitRoot": "", "expectedNewLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -81,10 +81,10 @@ "nonce": "0" } }, - "finalStateRoot": "0x1345a4f4413163418714f6215e0c51dd48477c5a0b34575a02d71441ea70a981", + "finalStateRoot": "0xa6e0ab7ee71860e6f8058e28260796ef9ad8cd091a99455d1616c08931cbab66", "finalLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "finalAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", "finalNumBatch": 2, - "inputSnark": "0x235f3cc5f3e1b6f127eddaeeb4e75cb3526c1119e9cc4f5ac4c59a2f130f7cc5" + "inputSnark": "0x00ada7d06625bd48e5d23f8dd1a0aa0a31e84aaa724ed8882f0a2994ceba6a16" } ] \ No newline at end of file diff --git a/test/helpers/test-vectors/zkevm-db/state-transition.json b/test/helpers/test-vectors/zkevm-db/state-transition.json index bd59eaf5..fd70ecef 100644 --- a/test/helpers/test-vectors/zkevm-db/state-transition.json +++ b/test/helpers/test-vectors/zkevm-db/state-transition.json @@ -34,7 +34,7 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x15ccbba64d32c6146ad323854394172e1bb0d09b407ba3e79dc01201d34dd974", + "expectedNewRoot": "0x67b6e2d00bb7c1f543f1338da760c2f111088ccc13876bbd642b53596e6b18f6", "expectedNewLeafs": { "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900000000000000000", From 5f0af84f40b29f5d064112252e7638a5ac912098 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Tue, 15 Nov 2022 15:52:46 +0100 Subject: [PATCH 30/40] globalExirRoot --> timestamp --- package.json | 6 +- src/processor.js | 9 +- test/block-info.test.js | 8 +- .../block-info/block-info-batches.json | 48 ++++----- .../test-vectors/block-info/block-info.json | 16 +-- .../end-to-end/state-transition.json | 8 +- .../processor/state-transition.json | 98 +++++++++---------- .../selfdestruct/selfdestruct.json | 10 +- .../test-vectors/zkevm-db/recursive.json | 8 +- .../zkevm-db/state-transition.json | 2 +- test/processor.test.js | 10 +- 11 files changed, 114 insertions(+), 109 deletions(-) diff --git a/package.json b/package.json index 48d8be16..cf1aa0a6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@0xpolygonhermez/zkevm-commonjs", "description": "Javascript library implementing common utilities for zkevm", - "version": "0.4.0.1", + "version": "0.5.0.0", "main": "index.js", "scripts": { "setup": "npm i", @@ -34,7 +34,7 @@ }, "homepage": "https://github.com/0xPolygonHermez/zkevm-commonjs#readme", "devDependencies": { - "@0xpolygonhermez/contracts-zkevm": "github:0xPolygonHermez/zkevm-contracts#feature/addAribitraryData", + "@0xpolygonhermez/contracts-zkevm": "github:0xPolygonHermez/zkevm-contracts#develop", "@ethersproject/abi": "^5.6.4", "@nomiclabs/hardhat-ethers": "^2.1.0", "@nomiclabs/hardhat-waffle": "^2.0.2", @@ -48,8 +48,8 @@ }, "dependencies": { "@ethereumjs/block": "^3.6.2", - "@polygon-hermez/common": "2.6.3", "@ethereumjs/tx": "^3.4.0", + "@polygon-hermez/common": "2.6.3", "@polygon-hermez/vm": "5.7.27", "ethereumjs-util": "^7.1.4", "ethers": "^5.5.4", diff --git a/src/processor.js b/src/processor.js index 2f71f504..99660592 100644 --- a/src/processor.js +++ b/src/processor.js @@ -184,12 +184,17 @@ module.exports = class Processor { /** * Set the global exit root in a specific storage slot of the globalExitRootManagerL2 for both vm and SMT + * Not store global exit root if it is zero * This will be performed before process the transactions */ async _setGlobalExitRoot() { + if (Scalar.eq(smtUtils.h4toScalar(this.globalExitRoot), Scalar.e(0))) { + return; + } + const newStorageEntry = {}; const globalExitRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [smtUtils.h4toString(this.globalExitRoot), Constants.GLOBAL_EXIT_ROOT_STORAGE_POS]); - newStorageEntry[globalExitRootPos] = this.newNumBatch; + newStorageEntry[globalExitRootPos] = this.timestamp; this.currentStateRoot = await stateUtils.setContractStorage( Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2, this.smt, @@ -201,7 +206,7 @@ module.exports = class Processor { await this.vm.stateManager.putContractStorage( addressInstance, toBuffer(globalExitRootPos), - toBuffer(this.newNumBatch), + toBuffer(this.timestamp), ); // store data in internal DB diff --git a/test/block-info.test.js b/test/block-info.test.js index 438a4b24..e2ab85d9 100644 --- a/test/block-info.test.js +++ b/test/block-info.test.js @@ -317,19 +317,19 @@ describe('Block info tests', function () { } // Check global exit root - const batchNumVm = await zkEVMDB.vm.stateManager.getContractStorage( + const timestampVm = await zkEVMDB.vm.stateManager.getContractStorage( addressInstanceGlobalExitRoot, globalExitRootPosBuffer, ); - const batchNumSmt = (await stateUtils.getContractStorage( + const timestampSmt = (await stateUtils.getContractStorage( Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2, zkEVMDB.smt, zkEVMDB.stateRoot, [globalExitRootPos], ))[Scalar.e(globalExitRootPos)]; - expect(Scalar.fromString(batchNumVm.toString('hex'), 16)).to.equal(batchNumSmt); - expect(batchNumSmt).to.equal(Scalar.e(batch.newNumBatch)); + expect(Scalar.fromString(timestampVm.toString('hex'), 16)).to.equal(timestampSmt); + expect(timestampSmt).to.equal(Scalar.e(batch.timestamp)); // Check through a call in the EVM if (bridgeDeployed) { diff --git a/test/helpers/test-vectors/block-info/block-info-batches.json b/test/helpers/test-vectors/block-info/block-info-batches.json index 88e55df4..5f982cca 100644 --- a/test/helpers/test-vectors/block-info/block-info-batches.json +++ b/test/helpers/test-vectors/block-info/block-info-batches.json @@ -158,7 +158,7 @@ "rawTx": "0xf88a06843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000008207f4a098f56115cad149a409a86e7610863248799a31d80e87d46582d08a3c0933a40aa025455a74fa3ca2ada0bf39dac88a172d032583bfec15061f39184ef9f7012677" } ], - "expectedNewRoot": "0xd88af05a70520c656807c1c5ff61e74f9e04d6dcf98a3a6eaddb82cf96a27a6f", + "expectedNewRoot": "0x501d72cea44b1406ab46940f722d3c1293b0f2428f46e1e82a5831398165520d", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -192,13 +192,13 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x07", - "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x47282e4f91ff3f7bcc8a39735d20b86d01488eb8726b2218572088f9c7c195bf", - "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0x53dfc8e68e52b6f9dddfe0b7af8dbbe1d252316114c9ca38c4c4d1504ea9c020", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xf1d5577c752f44551bb85797348646e75d0b8c1039978cdf91107b9c72ab07f0", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x3835218e81c6e3bd9f5afc7631e287268675602cd6ee272fceff360d0c150cf0", - "0xdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e": "0xe5c7a860c01c6c1d2123c015be325f65eda6659904b5d6f723429d311ea4da55", - "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0x1719a7e74faad3cc4be0653c40f7e1a13ac9bd66e01167fdf1530cec966369e2", - "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0xaabc8126bea2271fab9af9b2f5301054099bb0dcce159fa75c5409fd0df3aa38" + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0xf77f751aaeef4ba7bd7118b2b7c2fdac700cefe91a2e41d2aefc08f12e4644d0", + "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0x1b60038e083d5ec82468eb90f6f4868a620ad653651db25b959707ded65bf8a4", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xc18eb9ea7e6dfc3cf833e81797701ec6fcebe074c766c76c10f3c6290b077742", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xe184b4858698c58a98011fce9e154529073769c00c90a454ac6b51cbd195a665", + "0xdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e": "0x8158981ea08e4add7b0b558fa36033ae77fc2557e3635b58251979b3bb4a4d5c", + "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0x3fa550675342debd80beb0209d66c809e6e34a92a5791ee7422356ba312c7afa", + "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0x247cd6b9c3f9b06df7308f68d72b27f7a6ce5c484d4a8a5dd3fbfbc1e575b4df" } } }, @@ -325,7 +325,7 @@ "rawTx": "0xf88a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018207f3a068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c4829a05695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef6" } ], - "expectedNewRoot": "0x06d2f9a844f954c857f7281c0a12163f0919d2def882ecf88d4c0d325be97cef", + "expectedNewRoot": "0x5a62e3d4a89fdae8794ec78ba1fc91db4778bff0286ecb4cee6fbe8f76544ab6", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", @@ -344,7 +344,7 @@ "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0a", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x01c9c380", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0xf1d5577c752f44551bb85797348646e75d0b8c1039978cdf91107b9c72ab07f0" + "0x0000000000000000000000000000000000000000000000000000000000000001": "0xc18eb9ea7e6dfc3cf833e81797701ec6fcebe074c766c76c10f3c6290b077742" } }, "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { @@ -356,20 +356,20 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0e", - "0x4db623e5c4870b62d3fc9b4e8f893a1a77627d75ab45d9ff7e56ba19564af99b": "0x0ef707d074037c4c7e727750352f7601af73643a648186eb061b5e99977e6bc5", - "0x57aaafa65c4e563d39fff90096a5fa76d42117f53d87ef870784e64d63a8a16b": "0x0b4f179363ed0b512d110b5e5675a0822edcf88ac2803a59da6bcfdc38a6cabf", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xf1d5577c752f44551bb85797348646e75d0b8c1039978cdf91107b9c72ab07f0", - "0xfc80cd5fe514767bc6e66ec558e68a5429ea70b50fa6caa3b53fc9278e918632": "0x9c5bd5f8820b627b85e88569d39a9a190e8829be1b1ddb23f01f74329277b628", - "0x23bf72df16f8335be9a3eddfb5ef1c739b12847d13a384ec83f578699d38eb89": "0x5245244b80a88fcd94494e544a62f3e61e115a3f4a1511f905b980b81cc6a6d0", - "0x2a32391a76c35a36352b711f9152c0d0a340cd686850c8ef25fbb11c71b89e7b": "0x65252bd75475952605e6676cad142690837b66c28ea575ef8c383c6e858dbe27", - "0x74a5fbcb419ab7dbacbb2c92a4e163730f0da5c72b911deecf4f05a6b327d0a4": "0xedbf18deb6c96ad2e8735b2c9a778a4c6349f9092c89cbf4da090f7ce016cf7e", - "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x47282e4f91ff3f7bcc8a39735d20b86d01488eb8726b2218572088f9c7c195bf", - "0x86b3fa87ee245373978e0d2d334dbde866c9b8b039036b87c5eb2fd89bcb6bab": "0x35700e7b8aeaa2e6275fa8e3ff70a435fd91a415255a9ad05e434234f819e4ef", - "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0x53dfc8e68e52b6f9dddfe0b7af8dbbe1d252316114c9ca38c4c4d1504ea9c020", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x3835218e81c6e3bd9f5afc7631e287268675602cd6ee272fceff360d0c150cf0", - "0xdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e": "0xe5c7a860c01c6c1d2123c015be325f65eda6659904b5d6f723429d311ea4da55", - "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0x1719a7e74faad3cc4be0653c40f7e1a13ac9bd66e01167fdf1530cec966369e2", - "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0xaabc8126bea2271fab9af9b2f5301054099bb0dcce159fa75c5409fd0df3aa38" + "0x4db623e5c4870b62d3fc9b4e8f893a1a77627d75ab45d9ff7e56ba19564af99b": "0x68233a704e51770a8bc073b6089ebd51c77585bc2a487c22e67a042d36583469", + "0x57aaafa65c4e563d39fff90096a5fa76d42117f53d87ef870784e64d63a8a16b": "0x51a1d8b135406a44d476ebb9a36cbad1dd8c1ac8b03aa0ab7fbfedac2cc03df4", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xc18eb9ea7e6dfc3cf833e81797701ec6fcebe074c766c76c10f3c6290b077742", + "0xfc80cd5fe514767bc6e66ec558e68a5429ea70b50fa6caa3b53fc9278e918632": "0x0f7dcf3ccdf59b48a4c4848d3a5e0031648b10be58cf0385e32b90b3a4db9c66", + "0x23bf72df16f8335be9a3eddfb5ef1c739b12847d13a384ec83f578699d38eb89": "0x24a321b1cb8aef1ab5546255b345440c7233add99ccf82e08628e18c613a3ba6", + "0x2a32391a76c35a36352b711f9152c0d0a340cd686850c8ef25fbb11c71b89e7b": "0x80079f96ba5ca87685ef22e1a3eed898546fe8f5c2da057bc70ebf465616eef7", + "0x74a5fbcb419ab7dbacbb2c92a4e163730f0da5c72b911deecf4f05a6b327d0a4": "0x631e222b8765a1e000ec527e0b6eab805fe71a03e774b06b96596fdea2ad9901", + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0xf77f751aaeef4ba7bd7118b2b7c2fdac700cefe91a2e41d2aefc08f12e4644d0", + "0x86b3fa87ee245373978e0d2d334dbde866c9b8b039036b87c5eb2fd89bcb6bab": "0xbdd44421182ea92d4d53cab97872dc1d11596bd3f03694b9986fff4493e4fe11", + "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0x1b60038e083d5ec82468eb90f6f4868a620ad653651db25b959707ded65bf8a4", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xe184b4858698c58a98011fce9e154529073769c00c90a454ac6b51cbd195a665", + "0xdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e": "0x8158981ea08e4add7b0b558fa36033ae77fc2557e3635b58251979b3bb4a4d5c", + "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0x3fa550675342debd80beb0209d66c809e6e34a92a5791ee7422356ba312c7afa", + "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0x247cd6b9c3f9b06df7308f68d72b27f7a6ce5c484d4a8a5dd3fbfbc1e575b4df" } }, "0x0000000000000000000000000000000000000000": { diff --git a/test/helpers/test-vectors/block-info/block-info.json b/test/helpers/test-vectors/block-info/block-info.json index 6b326bf5..feeb995f 100644 --- a/test/helpers/test-vectors/block-info/block-info.json +++ b/test/helpers/test-vectors/block-info/block-info.json @@ -136,13 +136,13 @@ "rawTx": "0xf86a05843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708207f4a0e255f868a61169a2330cb539671e1a66ee846bc06cc888ea8fcd7ae51cdc6294a00c6dec27e6f756dd84923bcebb1f85db125299c0b622eaa8d5722cb3dace239d" } ], - "expectedNewRoot": "0x58a941f582fb380452692bc3899ca4c5369cf0ba526184b0dd16153fee8966f4", + "expectedNewRoot": "0x3c0e9fa45b407ee72bde35b1b36d6ba99b10d6d657075683e7a7259b18838ec7", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -186,12 +186,12 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x06", - "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x47282e4f91ff3f7bcc8a39735d20b86d01488eb8726b2218572088f9c7c195bf", - "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0x53dfc8e68e52b6f9dddfe0b7af8dbbe1d252316114c9ca38c4c4d1504ea9c020", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xf1d5577c752f44551bb85797348646e75d0b8c1039978cdf91107b9c72ab07f0", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x3835218e81c6e3bd9f5afc7631e287268675602cd6ee272fceff360d0c150cf0", - "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0x1719a7e74faad3cc4be0653c40f7e1a13ac9bd66e01167fdf1530cec966369e2", - "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0xaabc8126bea2271fab9af9b2f5301054099bb0dcce159fa75c5409fd0df3aa38" + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0xf77f751aaeef4ba7bd7118b2b7c2fdac700cefe91a2e41d2aefc08f12e4644d0", + "0x8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a": "0x1b60038e083d5ec82468eb90f6f4868a620ad653651db25b959707ded65bf8a4", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xc18eb9ea7e6dfc3cf833e81797701ec6fcebe074c766c76c10f3c6290b077742", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xe184b4858698c58a98011fce9e154529073769c00c90a454ac6b51cbd195a665", + "0xe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c": "0x3fa550675342debd80beb0209d66c809e6e34a92a5791ee7422356ba312c7afa", + "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0x247cd6b9c3f9b06df7308f68d72b27f7a6ce5c484d4a8a5dd3fbfbc1e575b4df" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 diff --git a/test/helpers/test-vectors/end-to-end/state-transition.json b/test/helpers/test-vectors/end-to-end/state-transition.json index 5bf2ba38..f35a239c 100644 --- a/test/helpers/test-vectors/end-to-end/state-transition.json +++ b/test/helpers/test-vectors/end-to-end/state-transition.json @@ -173,13 +173,13 @@ "rawTx": "0xf9012f0480831e8480949d98deabc42dd696deb9e40b4f1cab7ddbf55988880de0b6b3a7640000b8c40871e97100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c949254d682d8c9ad5682521675b8f43b102aec40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008207f4a0f212cb649f835d4f9c788d3a6733911b8aa02c6b63751f3b931fb062bd1942e4a052e73d8704862f4eb55646e7440dcf65f6e7ca424e38340ed8bcf24597c6865d" } ], - "expectedNewRoot": "0x4e1b8957858dd0b62473b1964a3fdd1efa972832c13acde171b771b5473be008", + "expectedNewRoot": "0xe6df887aa885bec60e0f87b88b792ffa22702f18a725f43a9427d727601b4113", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "1", "storage": { - "0xb7b9bfbed410c773a6625940b8d940fbc10059beab3c33131a2bd6f11a2b106c": "0x01", + "0xb7b9bfbed410c773a6625940b8d940fbc10059beab3c33131a2bd6f11a2b106c": "0x73e6af6f", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x97c7c68e5f6062b69b69b7395dd8ca484a2266fb86d782bc0f094eb1b73f17ba" }, @@ -274,8 +274,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xe25751d467f409bc62bc9a63ebfc69dfc67cc441e5c003a2d7f684fdb446c761", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xd9054846594d062cd439dd84fd0ca70439a67466e727031af1f8b01021346c9e" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x8c2127702da72a56961189c5f8b1097116d1a963c05fb98719394dda1ead2cf0", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x4e2090a3d95b2235a2e549d7439f3c6d216507982fa641d0b5ba8d5e1e81bec0" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 diff --git a/test/helpers/test-vectors/processor/state-transition.json b/test/helpers/test-vectors/processor/state-transition.json index d92d92ff..e9a5ecc5 100644 --- a/test/helpers/test-vectors/processor/state-transition.json +++ b/test/helpers/test-vectors/processor/state-transition.json @@ -34,13 +34,13 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x67b6e2d00bb7c1f543f1338da760c2f111088ccc13876bbd642b53596e6b18f6", + "expectedNewRoot": "0xea2eb6fb48966077643e7a7dbde44df32d65ca64476c4f9ecb1dc99ba4bc0d72", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -64,7 +64,7 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x33c9ecd2feb33cb4f6f0d37705566d874c696f6dee3502dba8b0ab54982d64d3" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xff820a2828206984cb9c56603f585beaa62ff9892598c269c3c38d7b53b081bb" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -184,13 +184,13 @@ "rawTx": "0xf86c80843b9aca00830186a094abcced19d7f290b84608fec510bee872cc8f5112880de0b6b3a7640000801ba02c92035bc11227e9e94ba066a6d77a65c43d29dfb4a855c9464e1b60fabd6334a07171c6dc84816ffcf025040cd6193ecef3928a0c4e4964ddba320826b76c725d" } ], - "expectedNewRoot": "0xd5f8959d296f3b67f379bf38ccf592b9dda88bacfaa25f5a3adcc32998ea8345", + "expectedNewRoot": "0xe87e03b34db1bb7f0154f27cd035e73f210078272a5975c0082ce64aeaa304bd", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -235,8 +235,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x8718cc71371ae6772e87ffa77b7e794e821f2f3132ff4d403888d589ce4ba7fa", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x9e346f155ce87cab069e0d649b29afa75c36b2b1d1bf75111823b91f8a1be27e" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x4b77bae453a140e036aa3b62fe334e22597f44d3b1d0c61357b86a997938eb7b", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x525cd380df0da47482e212d1a14eb8b668853d71b55ba173c08ad0224cafd913" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -286,13 +286,13 @@ "customRawTx": "0xf080843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8a021e19e0c9bab2400000808203e8808069d48cb9ade9de851379987aa0f7f677cdaee1152ec785a3d3009f094c889be9368c3d198cdfe5b1e0100fe110ea60e77b1eb65e9363d96f7fb9c2b84a37c9b01c" } ], - "expectedNewRoot": "0xe9271cd6cf6d4178beaf4cf50ef2f7e9474c18d1a0bbc3c3d8061758e9069477", + "expectedNewRoot": "0x0143c4ffec267aba2b44f9c5253c41042af8388b7ac2535c566e70937242a2db", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -387,13 +387,13 @@ "customRawTx": "0xef80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff89056bc75e2d63100000808203e880806fac51f437890686cea7fc4d478e01f4650284d8b0c447d3a049ad799a938e855d76085acbdd3af82e205f070fd3f333d3f069ab3936323ac347003f07d9418a1b" } ], - "expectedNewRoot": "0xe9271cd6cf6d4178beaf4cf50ef2f7e9474c18d1a0bbc3c3d8061758e9069477", + "expectedNewRoot": "0x0143c4ffec267aba2b44f9c5253c41042af8388b7ac2535c566e70937242a2db", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -454,13 +454,13 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0xe9271cd6cf6d4178beaf4cf50ef2f7e9474c18d1a0bbc3c3d8061758e9069477", + "expectedNewRoot": "0x0143c4ffec267aba2b44f9c5253c41042af8388b7ac2535c566e70937242a2db", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -520,13 +520,13 @@ "customRawTx": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d88016345785d8a0000808203e88080cca9bd00c0a9af18cdc17e693951b88b293bae8ed236ff7dcf2684c478bc0b6a19cc9ed09ee5e1e2750abbea7ec8d2ed31df90c7d364d4e2f36c31eb410c10451b" } ], - "expectedNewRoot": "0x2fc2367c234f1e0c6198890fcd8ca608ae2f0b54c97a5af1780fd936e2bb9758", + "expectedNewRoot": "0x49d9e431034c9e29e2bdcb73ce388ac1d973e9001388371539ddaed0c8aece34", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -550,7 +550,7 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x8ed1df262fbd87519693d26665aac5cac143c2da0d39b655ce67b003305ed524" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x72f06d3422e79efefd698d2c12dd4c667cdfecd27378af2215c578c44f826f60" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -639,13 +639,13 @@ "rawTx": "0xf86c80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff880de0b6b3a7640000801ba077f76b76aca6161db28545aa742536370e4f57f9a71651688631a423abcbe04aa0131474e130abe8bcc9ef39a44a877eb64b2d43132cb0907abe547aa605b641b8" } ], - "expectedNewRoot": "0xad92e71e73e5f87f9bd396356b5ab981ed2e0f1ade4d701e9e34640263fa9075", + "expectedNewRoot": "0x8fae87d4148f1e3f0646b8218d6768a7e52d494d8a2c81301ebaa873384b2022", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -669,7 +669,7 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xada698deb2dd6dc157da4a6c438c554b86b2b7a2a097758d014323320aa08e03" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x2399767cba4867599d0c5403a0c6f2d29e5256e259e95afa693b7b9e18524a63" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -719,13 +719,13 @@ "customRawTx": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d88016345785d8a0000808203e88080cca9bd00c0a9af18cdc17e693951b88b293bae8ed236ff7dcf2684c478bc0b6a19cc9ed09ee5e1e2750abbea7ec8d2ed31df90c7d364d4e2f36c31eb410c10451b" } ], - "expectedNewRoot": "0x4b28b2ecfa592ad4102a0af8a67190d50727e99f75b4de7c538958463684d768", + "expectedNewRoot": "0xd906285a08c96927daf29c52d1e3c273d43e3cf82df53763c5d5e0f0c2132361", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -749,7 +749,7 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xe2db8a0725e35f899abfe353a0e1b9bd0d232dab63cd4464c2d18e9494edfb23" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x890c798b995ef75e7ab19292d67c1a4701ba124e84b9732f75400c0479023f45" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -812,13 +812,13 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8806f05b59d3b20000808203e880809990717b4c80d955cacf4a765d3bfefd707511d66e0a482510906d119fa285c7232ccd442c5b618558b62175f01d9f45ff655d480f36394ea50a0b7dc52bc3331c" } ], - "expectedNewRoot": "0xb30a64d30efd1082832425ac62bae26155123d9548f2e7cf879f1cbe367f1cbd", + "expectedNewRoot": "0x31ea9f5bd5a19fb3c66da5626bf2451e02beaf9449ede180f7392028f37a759b", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -842,8 +842,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xe1fe54937f251deebdd08740d1088d06d982d9c09620fb198986d8c553da87af", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xba7611055c7e026c817fe6270ceb524bb24910bea0e89e35933aa6ed1f09f0f8" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x706491c67b9e5be9d5cbd6e0f5d415e616ad0ea04082c0c4d40206acdb8ddffe", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x7a6952c64e2a91949d53b13da8e219d6695665ba8229689d5f9ff873cf7ef3e2" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -932,13 +932,13 @@ "rawTx": "0xf86e03843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d8806f05b59d3b20000808207f3a047b4f7d735dfadefc585bf24d9bd2267438f9bc92d1ab4f65fa9a6d90cc33858a00720a7da26cad22c05bf1358011c95caec969b8b9177af91c0e90dac3d02f6b3" } ], - "expectedNewRoot": "0x0128a8745cc4abc15a62e33ed3a57eedec45e2858bbbef76894c4e14496bf3d9", + "expectedNewRoot": "0xfe94fc7c1fbeacb3a973bfc31287a69834dab9cd1330ff0412fd15065a5d6c03", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -962,10 +962,10 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x04", - "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x8aaa079a6723e8b30fed8831a360ef34180a2958b2346bbbcac56e4ea4194670", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xada698deb2dd6dc157da4a6c438c554b86b2b7a2a097758d014323320aa08e03", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x664ba440e4e872a23d048bb285e33c9a6e49df7f45bc9c57dfed5036876261c1", - "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0xef3a3f565edf4983d9109a8406554938ee5c761f1758adddd42209f9298907e4" + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0xa199ba48e4f4850f485c629e71e190db1ef963c46587b1dd8e09cd71a9bd7ee4", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x2399767cba4867599d0c5403a0c6f2d29e5256e259e95afa693b7b9e18524a63", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x160bd2809e5d7d7ce556ac2c98a6d577a3270fa9d7bb5e625a1b05427e54daaa", + "0xedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643": "0xe10fd7c39745bb4a66b053270387a303e007e313f31d0fba83c9b9b2513a9b02" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1046,13 +1046,13 @@ "rawTx": "0xf86e80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808207f3a01cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e7a05d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad73" } ], - "expectedNewRoot": "0x4cf0eae3574ed7c3b3daffaf54f9967aff5f686d6782121dea4e21cc4fa31cc5", + "expectedNewRoot": "0x43b64765591d74099404c3327d3d38beb4731ba1feb8f7a88e935c57973672b2", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1086,8 +1086,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x795dc932e2b6cd74c837e1572123469176c2383209f97117d1ec2548a272be08", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x91eff71c1c6d69dd60b3b943c0afd2bd91f806793587aecfbe41ee9269ca4f5b" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x2125790de337401559f4200e8b3d29f512a806c1ad182127c36661449683b1d5", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xde76464d1d098470fe4439e8ea7261d6bd7bb9396f035026c3e086993b1c535f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1166,13 +1166,13 @@ "rawTx": "0xf8ab01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880b844494e4bc30000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff00000000000000000000000000000000000000000000000000038d7ea4c680008207f3a0c83069009c51e411569ca78a660bbcb64e4e6709909eb99c28395fb4c787da4ca02b846bf51fcf891fb293e36a0cf5f4efd1fe7c19b2c8a1220b8308b195e80156" } ], - "expectedNewRoot": "0x46c20674e771c27de36104f251d3f879e74cde6ae3a543693a79e2326801e760", + "expectedNewRoot": "0x3f5011bc061f6e25c52494442ae4cc8795d720dc9d309469d2bb7c5f37253be7", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1203,8 +1203,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x4c894fd8c77a08e5619a57df2009a4d2197fc666f7abd59517027438de9f7e3e", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x181636fadb326adb245c58a9090333ac8eeea92c67cfaff4a4e45509f059df5f" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xb77669f8c01951ce4caabcf2cdeb5e6a2c87b798e9c19be85c3469e71b32556f", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x579c39e12b0e78d846c660af1c82bd6a26050423ac4da94bc61a9209f34af1f8" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1292,13 +1292,13 @@ "rawTx": "0xf88a01843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4027e5d610000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff8207f3a0a04c0969f64f440a2c91e29bf9ea0b1cc8db9f33bda47c2c6899840ae46d36d7a00212c0a9f1bb015890ed0830c7fea6c52adaf85b0bf3d64448d3300c12c1bb16" } ], - "expectedNewRoot": "0xbef2f9395a0fd16a2fef83da6fea142cd8f75a387f40351f18aaafc4956ad688", + "expectedNewRoot": "0xd6f87d22b32fd72d65a6317286eb7a201c05c5b28e98ad75febe3cdcf57a0af1", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1331,8 +1331,8 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x02", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xdc05ce49b9a0d80568307b074ce88daa43756ee5843b3c3ee93b211c59e6b9b0", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xca2771de72767e0200ccc42d9bd50c30669f3dd2b422b19aa75f511ea1c7dbcd" + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xab9891d273a3b578625bd00b98718879cd4a8c1f20e8700f5b8c6de9a2dc2894", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x7bea96e161326922da00236594cf6458c425aa581dbef5a63881a95dca02036d" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1420,13 +1420,13 @@ "rawTx": "0xf88a02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4027e5d610000000000000000000000004d5cf5032b2a844602278b01199ed191a86c93ff8207f3a028e62eb40661fd098322a7211dca25a6b56f60eefb24ede9607d2603a09e4c65a03be289b7a729a18336e2f9f4a4f52c4fadc4274d1fd42dd8965deeb8634ddddc" } ], - "expectedNewRoot": "0x9388a935fec9575353c2a8d845d3e97664e3a9cdfcd06c4f06b674551c93aa01", + "expectedNewRoot": "0xa7c4b5953163cabe65894a06213f4757e1c7dd5554d0b4db5a21997f3cf120da", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -1459,9 +1459,9 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x03", - "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x8b1e6712c93a68c58cacaeaba37d94d4e4ec9a2bfff09f7bce9d840dab3b7946", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xb9b6246d363017caccae91bf5899e42014031383d9ea9c74f7b4d7ae8f300883", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0x7dfd753d8b76606dde380c7b8fc6584e1cb33334ac571bc10794b4cf418b222d" + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x21edb6b1fc6a75e923bec4ec01ba91b0044e4b040a8ebebdeeb43f7a3b784cbc", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0x614b5f1e8e8cb0bd1986b8b1a548a9c5acda0b6bd866b9cb152f3434345fc61d", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xe0baf1661b7d491a08ef7231710de76e28720cc135b7a95a9e0a1556719b914d" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 diff --git a/test/helpers/test-vectors/selfdestruct/selfdestruct.json b/test/helpers/test-vectors/selfdestruct/selfdestruct.json index 0331d500..0733790a 100644 --- a/test/helpers/test-vectors/selfdestruct/selfdestruct.json +++ b/test/helpers/test-vectors/selfdestruct/selfdestruct.json @@ -90,13 +90,13 @@ "rawTx": "0xf86a02843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880842b68b9c68207f4a0f5b684b995dd9549bb5fd2ed23d3b388f75f559b14110277b4ae7de5bd7775efa01be51078330d1ef03f0e4fe0271e8e2502b6e98c1f7664a5e2aeae3ab04156d4" } ], - "expectedNewRoot": "0x8d6010008947673cfb51f8116730514ed3a1b357bdf99783e9c53ced4abd4fb4", + "expectedNewRoot": "0x96ddba4a047cb0002f6fcc966c0685040d289946f730b38f7ead4a466d01785a", "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", "nonce": "0", "storage": { - "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x01" + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 @@ -137,9 +137,9 @@ "nonce": "0", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x03", - "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x049f96e198aba7161f29ca2c324193c9f819fd7a926ca49e3f6de95d1d761080", - "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xce23bd8e92c4670fc0c808be48b0007a0694d39d7dd34a16f744894ce2f64919", - "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xdc8eaac2a6c0d40883b2696fd768259bb6e593719509d9d438b1c4944a25c831" + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "0x874bb1c54bd84db12cfeae234fde18e6eb9fc78fdc740544954665a60194609b", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "0xf13d27f15e082ec0d7cd70e9dfe1c3dff946c0a7ef39a0667d1410e13eecf72d", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "0xb189c75e3c56fdca62d57db79a99001a4fc0ee797d46f5f6f9beafa8896d80d4" }, "hashBytecode": "0x0000000000000000000000000000000000000000000000000000000000000000", "bytecodeLength": 0 diff --git a/test/helpers/test-vectors/zkevm-db/recursive.json b/test/helpers/test-vectors/zkevm-db/recursive.json index 77bcc364..92c0b9f8 100644 --- a/test/helpers/test-vectors/zkevm-db/recursive.json +++ b/test/helpers/test-vectors/zkevm-db/recursive.json @@ -40,7 +40,7 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x67b6e2d00bb7c1f543f1338da760c2f111088ccc13876bbd642b53596e6b18f6", + "expectedNewRoot": "0xea2eb6fb48966077643e7a7dbde44df32d65ca64476c4f9ecb1dc99ba4bc0d72", "expectedNewAccInputHash": "0x704d5cfd3e44b82028f7f8cae31168267a7422c5a447b90a65134116da5a8432", "expoectNewLocalExitRoot": "", "expectedNewLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -63,7 +63,7 @@ "customRawTx": "0xee01843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8802c68af0bb140000808203e88080225fd92907efb068a8bee3f95a26f2c5d67db2750bb9993083e0df217ff3a2666f412c311280066d1717f309c248fdbd853ce738363db08775999b2f2d2a8d5e1c" } ], - "expectedNewRoot": "0xa6e0ab7ee71860e6f8058e28260796ef9ad8cd091a99455d1616c08931cbab66", + "expectedNewRoot": "0x834d6f18362daabea8b103a9a2952d63176b81efbfac20970159a0b36871bac4", "expectedNewAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", "expoectNewLocalExitRoot": "", "expectedNewLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -81,10 +81,10 @@ "nonce": "0" } }, - "finalStateRoot": "0xa6e0ab7ee71860e6f8058e28260796ef9ad8cd091a99455d1616c08931cbab66", + "finalStateRoot": "0x834d6f18362daabea8b103a9a2952d63176b81efbfac20970159a0b36871bac4", "finalLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "finalAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", "finalNumBatch": 2, - "inputSnark": "0x00ada7d06625bd48e5d23f8dd1a0aa0a31e84aaa724ed8882f0a2994ceba6a16" + "inputSnark": "0x2cd31ede38a42ee7034bf454c07f843db6b20cc0bbac092f3b6a4df2ff037877" } ] \ No newline at end of file diff --git a/test/helpers/test-vectors/zkevm-db/state-transition.json b/test/helpers/test-vectors/zkevm-db/state-transition.json index fd70ecef..8487b3d1 100644 --- a/test/helpers/test-vectors/zkevm-db/state-transition.json +++ b/test/helpers/test-vectors/zkevm-db/state-transition.json @@ -34,7 +34,7 @@ "customRawTx": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b" } ], - "expectedNewRoot": "0x67b6e2d00bb7c1f543f1338da760c2f111088ccc13876bbd642b53596e6b18f6", + "expectedNewRoot": "0xea2eb6fb48966077643e7a7dbde44df32d65ca64476c4f9ecb1dc99ba4bc0d72", "expectedNewLeafs": { "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { "balance": "99900000000000000000", diff --git a/test/processor.test.js b/test/processor.test.js index 16ecf78c..e3e4158c 100644 --- a/test/processor.test.js +++ b/test/processor.test.js @@ -339,19 +339,19 @@ describe('Processor', async function () { } // Check global exit root - const batchNumVm = await zkEVMDB.vm.stateManager.getContractStorage( + const timestampVm = await zkEVMDB.vm.stateManager.getContractStorage( addressInstanceGlobalExitRoot, globalExitRootPosBuffer, ); - const batchNumSmt = (await stateUtils.getContractStorage( + const timestampSmt = (await stateUtils.getContractStorage( Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2, zkEVMDB.smt, zkEVMDB.stateRoot, [globalExitRootPos], ))[Scalar.e(globalExitRootPos)]; - expect(Scalar.fromString(batchNumVm.toString('hex'), 16)).to.equal(batchNumSmt); - expect(batchNumSmt).to.equal(Scalar.e(batch.newNumBatch)); + expect(Scalar.fromString(timestampVm.toString('hex'), 16)).to.equal(timestampSmt); + expect(timestampSmt).to.equal(Scalar.e(batch.timestamp)); // Check through a call in the EVM if (bridgeDeployed) { @@ -362,7 +362,7 @@ describe('Processor', async function () { caller: Address.zero(), data: Buffer.from(encodedData.slice(2), 'hex'), }); - expect(globalExitRootResult.execResult.returnValue.toString('hex')).to.be.equal(ethers.utils.hexZeroPad(batch.newNumBatch, 32).slice(2)); + expect(globalExitRootResult.execResult.returnValue.toString('hex')).to.be.equal(ethers.utils.hexZeroPad(batch.timestamp, 32).slice(2)); } // Check the circuit input From cb40503b97043fdaf39177873c513b7676d41607 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 23 Nov 2022 13:29:39 +0100 Subject: [PATCH 31/40] fix multiple batch input hash --- src/zkevm-db.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zkevm-db.js b/src/zkevm-db.js index 152e11c2..f3f6dbfc 100644 --- a/src/zkevm-db.js +++ b/src/zkevm-db.js @@ -227,9 +227,9 @@ class ZkEVMDB { dataVerify.inputSnark = `0x${Scalar.toString(await calculateSnarkInput( dataVerify.oldStateRoot, dataVerify.newStateRoot, + dataVerify.newLocalExitRoot, dataVerify.oldAccInputHash, dataVerify.newAccInputHash, - dataVerify.newLocalExitRoot, dataVerify.oldNumBatch, dataVerify.newNumBatch, dataVerify.chainID, From 8fd806022571c5619f5173a741ea873d0f80b90f Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 23 Nov 2022 15:32:47 +0100 Subject: [PATCH 32/40] move create genesis to contracts --- src/processor.js | 5 + src/zkevm-db.js | 3 +- .../test-vectors/zkevm-db/recursive.json | 2 +- tools/fill-genesis/create-genesis.js | 248 ------------------ tools/fill-genesis/genesis-gen.json | 64 ----- tools/fill-genesis/genesis.json | 79 ------ .../generate-claim-exit-root.js | 0 7 files changed, 8 insertions(+), 393 deletions(-) delete mode 100644 tools/fill-genesis/create-genesis.js delete mode 100644 tools/fill-genesis/genesis-gen.json delete mode 100644 tools/fill-genesis/genesis.json rename tools/{fill-genesis => generate-claim}/generate-claim-exit-root.js (100%) diff --git a/src/processor.js b/src/processor.js index 99660592..3167c3f9 100644 --- a/src/processor.js +++ b/src/processor.js @@ -45,6 +45,7 @@ module.exports = class Processor { timestamp, chainID, vm, + skipUpdateSystemStorage, ) { this.db = db; this.newNumBatch = numBatch; @@ -76,6 +77,7 @@ module.exports = class Processor { this.evmSteps = []; this.updatedAccounts = {}; this.isLegacyTx = false; + this.skipUpdateSystemStorage = skipUpdateSystemStorage; } /** @@ -195,6 +197,7 @@ module.exports = class Processor { const newStorageEntry = {}; const globalExitRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [smtUtils.h4toString(this.globalExitRoot), Constants.GLOBAL_EXIT_ROOT_STORAGE_POS]); newStorageEntry[globalExitRootPos] = this.timestamp; + this.currentStateRoot = await stateUtils.setContractStorage( Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2, this.smt, @@ -470,6 +473,8 @@ module.exports = class Processor { * Updates system storage with new state root after finishing transaction */ async _updateSystemStorage() { + if (this.skipUpdateSystemStorage) return; + // Set system addres storage with updated values const lastTxCount = await stateUtils.getContractStorage( Constants.ADDRESS_SYSTEM, diff --git a/src/zkevm-db.js b/src/zkevm-db.js index f3f6dbfc..1b845c84 100644 --- a/src/zkevm-db.js +++ b/src/zkevm-db.js @@ -43,7 +43,7 @@ class ZkEVMDB { * @param {Array[Field]} globalExitRoot - global exit root * @param {Scalar} maxNTx - Maximum number of transactions (optional) */ - async buildBatch(timestamp, sequencerAddress, globalExitRoot, maxNTx = Constants.DEFAULT_MAX_TX) { + async buildBatch(timestamp, sequencerAddress, globalExitRoot, maxNTx = Constants.DEFAULT_MAX_TX, skipUpdateSystemStorage = false) { return new Processor( this.db, this.lastBatch + 1, @@ -56,6 +56,7 @@ class ZkEVMDB { timestamp, this.chainID, clone(this.vm), + skipUpdateSystemStorage, ); } diff --git a/test/helpers/test-vectors/zkevm-db/recursive.json b/test/helpers/test-vectors/zkevm-db/recursive.json index 92c0b9f8..00fd5836 100644 --- a/test/helpers/test-vectors/zkevm-db/recursive.json +++ b/test/helpers/test-vectors/zkevm-db/recursive.json @@ -85,6 +85,6 @@ "finalLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "finalAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", "finalNumBatch": 2, - "inputSnark": "0x2cd31ede38a42ee7034bf454c07f843db6b20cc0bbac092f3b6a4df2ff037877" + "inputSnark": "0x0aef7431c3060a724238693fea11a846f2d71827f5f64fa24b1dd72b27f8681d" } ] \ No newline at end of file diff --git a/tools/fill-genesis/create-genesis.js b/tools/fill-genesis/create-genesis.js deleted file mode 100644 index 00532f32..00000000 --- a/tools/fill-genesis/create-genesis.js +++ /dev/null @@ -1,248 +0,0 @@ -/* eslint-disable global-require */ -/* eslint-disable import/no-dynamic-require */ -/* eslint-disable no-unused-expressions */ -/* eslint-disable no-console */ -/* eslint-disable multiline-comment-style */ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable no-await-in-loop */ -/* eslint-disable guard-for-in */ -/* eslint-disable import/no-extraneous-dependencies */ - -const { Scalar } = require('ffjavascript'); -const fs = require('fs'); - -const ethers = require('ethers'); -const { - Address, -} = require('ethereumjs-util'); -const { defaultAbiCoder } = require('@ethersproject/abi'); -const path = require('path'); - -const artifactsPath = path.join(__dirname, '../../test/artifacts/contracts'); - -const { argv } = require('yargs'); -const contractsPolygonHermez = require('@0xpolygonhermez/contracts-zkevm'); -const { - MemDB, ZkEVMDB, getPoseidon, processorUtils, smtUtils, Constants, stateUtils, -} = require('../../index'); - -// Example of use: node create-genesis.js --gen genesis-gen.json --out genesis.json - -async function main() { - // load generator - const inputPath = (typeof argv.gen === 'undefined') ? undefined : argv.gen; - if (inputPath === undefined) { throw Error('Input genesis must be provided'); } - - // load output file - const outPath = (typeof argv.out === 'undefined') ? undefined : argv.out; - if (outPath === undefined) { throw Error('Output file must be specified'); } - - const genesisGenerator = require(path.join(__dirname, inputPath)); - - const genesisOutput = {}; - const poseidon = await getPoseidon(); - const { F } = poseidon; - - const genesisRoot = [F.zero, F.zero, F.zero, F.zero]; - const accHashInput = [F.zero, F.zero, F.zero, F.zero]; - const globalExitRoot = ethers.constants.HashZero; - - const { - genesis, - txs, - sequencerAddress, - timestamp, - defaultChainId, - } = genesisGenerator; - - const db = new MemDB(F); - - // create a zkEVMDB and build a batch - const zkEVMDB = await ZkEVMDB.newZkEVM( - db, - poseidon, - genesisRoot, - accHashInput, - genesis, - null, - null, - defaultChainId, - ); - - /* - * build, sign transaction and generate rawTxs - * rawTxs would be the calldata inserted in the contract - */ - const addressToContractName = {}; - const rawTxs = []; - for (let j = 0; j < txs.length; j++) { - const currentTx = txs[j]; - - const tx = { - to: currentTx.to || '0x', - nonce: currentTx.nonce, - value: processorUtils.toHexStringRlp(ethers.utils.parseUnits(currentTx.value, 'wei')), - gasLimit: currentTx.gasLimit, - gasPrice: processorUtils.toHexStringRlp(ethers.utils.parseUnits(currentTx.gasPrice, 'wei')), - chainId: currentTx.chainId, - data: currentTx.data || '0x', - }; - - // Contract deployment from tx - let bytecode; let - abi; - if (contractsPolygonHermez[currentTx.contractName]) { - ({ bytecode, abi } = contractsPolygonHermez[currentTx.contractName]); - } else { - ({ bytecode, abi } = require(`${artifactsPath}/${currentTx.contractName}.sol/${currentTx.contractName}.json`)); - } - - if (currentTx.function) { - const interfaceContract = new ethers.utils.Interface(abi); - tx.data = interfaceContract.encodeFunctionData(currentTx.function, currentTx.paramsFunction); - } else { - if (currentTx.paramsDeploy) { - const params = defaultAbiCoder.encode(currentTx.paramsDeploy.types, currentTx.paramsDeploy.values); - tx.data = bytecode + params.slice(2); - } else { - tx.data = bytecode; - } - const addressContract = await ethers.utils.getContractAddress( - { from: currentTx.from, nonce: currentTx.nonce }, - ); - addressToContractName[addressContract.toLowerCase()] = currentTx.contractName; - } - - let customRawTx; - const address = genesis.find((o) => o.address === currentTx.from); - const wallet = new ethers.Wallet(address.pvtKey); - if (tx.chainId === 0) { - const signData = ethers.utils.RLP.encode([ - processorUtils.toHexStringRlp(Scalar.e(tx.nonce)), - processorUtils.toHexStringRlp(tx.gasPrice), - processorUtils.toHexStringRlp(tx.gasLimit), - processorUtils.toHexStringRlp(tx.to), - processorUtils.toHexStringRlp(tx.value), - processorUtils.toHexStringRlp(tx.data), - processorUtils.toHexStringRlp(tx.chainId), - '0x', - '0x', - ]); - const digest = ethers.utils.keccak256(signData); - const signingKey = new ethers.utils.SigningKey(address.pvtKey); - const signature = signingKey.signDigest(digest); - const r = signature.r.slice(2).padStart(64, '0'); // 32 bytes - const s = signature.s.slice(2).padStart(64, '0'); // 32 bytes - const v = (signature.v).toString(16).padStart(2, '0'); // 1 bytes - customRawTx = signData.concat(r).concat(s).concat(v); - } else { - const rawTxEthers = await wallet.signTransaction(tx); - customRawTx = processorUtils.rawTxToCustomRawTx(rawTxEthers); - } - rawTxs.push(customRawTx); - } - const batch = await zkEVMDB.buildBatch(timestamp, sequencerAddress, smtUtils.stringToH4(globalExitRoot)); - for (let j = 0; j < rawTxs.length; j++) { - batch.addRawTx(rawTxs[j]); - } - - // execute the transactions added to the batch - await batch.executeTxs(); - // consolidate state - await zkEVMDB.consolidate(batch); - - // clean address 0 batch, clean globalExitRoot - let newRoot = batch.currentStateRoot; - - // clean address 0 state root - const batchNumber = 0; - const stateRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [batchNumber, Constants.STATE_ROOT_STORAGE_POS]); - let newStorageEntry = { [Constants.LAST_TX_STORAGE_POS]: '0x00' }; - newStorageEntry[stateRootPos] = '0x00'; - - newRoot = await stateUtils.setContractStorage( - Constants.ADDRESS_SYSTEM, - batch.smt, - newRoot, - newStorageEntry, - ); - - // cleanglobal exit root - newStorageEntry = {}; - const globalExitRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [ethers.constants.HashZero, Constants.GLOBAL_EXIT_ROOT_STORAGE_POS]); - newStorageEntry[globalExitRootPos] = 0; - newRoot = await stateUtils.setContractStorage( - Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2, - batch.smt, - newRoot, - newStorageEntry, - ); - - const updatedAccounts = batch.getUpdatedAccountsBatch(); - const currentVM = batch.vm; - const accountsOutput = []; - - for (const item in updatedAccounts) { - const address = item; - const account = updatedAccounts[address]; - const currentAccountOutput = {}; - currentAccountOutput.balance = account.balance.toString(); - currentAccountOutput.nonce = account.nonce.toString(); - currentAccountOutput.address = address; - - // If account is a contract, update storage and bytecode - if (account.isContract()) { - const addressInstance = Address.fromString(address); - const smCode = await currentVM.stateManager.getContractCode(addressInstance); - const sto = await currentVM.stateManager.dumpStorage(addressInstance); - const storage = {}; - const keys = Object.keys(sto).map((v) => `0x${v}`); - const values = Object.values(sto).map((v) => `0x${v}`); - for (let k = 0; k < keys.length; k++) { - storage[keys[k]] = ethers.utils.RLP.decode(values[k]); - } - - currentAccountOutput.bytecode = `0x${smCode.toString('hex')}`; - currentAccountOutput.storage = storage; - currentAccountOutput.contractName = addressToContractName[address]; - } else if (address !== Constants.ADDRESS_SYSTEM - && address.toLowerCase() !== Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2.toLowerCase()) { - currentAccountOutput.pvtKey = (genesis.find((o) => o.address.toLowerCase() === address.toLowerCase())).pvtKey; - } - accountsOutput.push(currentAccountOutput); - } - - // add accounts that has not been used - for (let i = 0; i < genesis.length; i++) { - const item = genesis[i]; - if (typeof updatedAccounts[item.address.toLowerCase()] === 'undefined') { - accountsOutput.push(item); - } - } - - genesisOutput.root = smtUtils.h4toString(newRoot); - genesisOutput.genesis = accountsOutput; - const genesisOutputPath = path.join(__dirname, outPath); - await fs.writeFileSync(genesisOutputPath, JSON.stringify(genesisOutput, null, 2)); - - if (argv.update) { - const updatePath = (typeof argv.update === 'undefined') ? undefined : argv.update; - - if (!fs.existsSync(updatePath)) { - throw new Error('Update file does not exist'); - } - - const testVectors = JSON.parse(fs.readFileSync(updatePath)); - testVectors[0].genesis = genesisOutput.genesis; - testVectors[0].expectedOldRoot = genesisOutput.root; - await fs.writeFileSync(updatePath, JSON.stringify(testVectors, null, 2)); - } -} -// We recommend this pattern to be able to use async/await everywhere -// and properly handle errors. -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/tools/fill-genesis/genesis-gen.json b/tools/fill-genesis/genesis-gen.json deleted file mode 100644 index 5c6d7e4b..00000000 --- a/tools/fill-genesis/genesis-gen.json +++ /dev/null @@ -1,64 +0,0 @@ - -{ - "defaultChainId": 1000, - "sequencerAddress": "0xC949254d682D8c9ad5682521675b8F43b102aec4", - "genesis": [ - { - "address": "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988", - "pvtKey": "0x00", - "balance": "100000000000000000000000", - "nonce": "0" - }, - { - "address": "0xC949254d682D8c9ad5682521675b8F43b102aec4", - "pvtKey": "0xdfd01798f92667dbf91df722434e8fbe96af0211d4d1b82bbbbc8f1def7a814f", - "balance": "0", - "nonce": "0" - } - ], - "txs": [ - { - "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", - "nonce": 0, - "value": "0", - "gasLimit": 10000000, - "gasPrice": "0", - "chainId": 1000, - "paramsDeploy": { - "types": [ - "address" - ], - "values": [ - "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988" - ] - }, - "contractName": "GlobalExitRootManagerL2", - "reason": "" - }, - { - "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", - "nonce": 1, - "value": "0", - "gasLimit": 10000000, - "gasPrice": "0", - "chainId": 1000, - "contractName": "Bridge" - }, - { - "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", - "to": "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988", - "nonce": 2, - "value": "0", - "gasLimit": 10000000, - "gasPrice": "0", - "chainId": 1000, - "function": "initialize", - "paramsFunction": [ - 1, - "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032" - ], - "contractName": "Bridge" - } - ], - "timestamp": 1944498031 -} diff --git a/tools/fill-genesis/genesis.json b/tools/fill-genesis/genesis.json deleted file mode 100644 index eaa952e8..00000000 --- a/tools/fill-genesis/genesis.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "root": "0x0ff5ce7f1ce0eda793ec264b9b147fe991fbf2ef840f7249eb8de9171df16555", - "genesis": [ - { - "balance": "0", - "nonce": "1", - "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220b6ba072419f510d5d5b9a55d9605786898f58415125e7e2ac3f699371fda0cbc64736f6c634300080f0033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" - }, - "contractName": "GlobalExitRootManagerL2" - }, - { - "balance": "100000000000000000000000", - "nonce": "2", - "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200f33d24b40d1e879f02496512d8e703a09704c5edf7d149259a9c3cf2b64250664736f6c634300080f0033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0x0000000000000000000000000000000000000000000000000000000000000042": "0x01", - "0x0000000000000000000000000000000000000000000000000000000000000046": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "0x0000000000000000000000000000000000000000000000000000000000000047": "0x61ba0248b0986c2480181c6e76b6adeeaa962483", - "0x0000000000000000000000000000000000000000000000000000000000000022": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5", - "0x0000000000000000000000000000000000000000000000000000000000000023": "0xb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30", - "0x0000000000000000000000000000000000000000000000000000000000000024": "0x21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85", - "0x0000000000000000000000000000000000000000000000000000000000000025": "0xe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344", - "0x0000000000000000000000000000000000000000000000000000000000000026": "0x0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d", - "0x0000000000000000000000000000000000000000000000000000000000000027": "0x887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968", - "0x0000000000000000000000000000000000000000000000000000000000000028": "0xffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83", - "0x0000000000000000000000000000000000000000000000000000000000000029": "0x9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af", - "0x000000000000000000000000000000000000000000000000000000000000002a": "0xcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0", - "0x000000000000000000000000000000000000000000000000000000000000002b": "0xf9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5", - "0x000000000000000000000000000000000000000000000000000000000000002c": "0xf8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892", - "0x000000000000000000000000000000000000000000000000000000000000002d": "0x3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c", - "0x000000000000000000000000000000000000000000000000000000000000002e": "0xc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb", - "0x000000000000000000000000000000000000000000000000000000000000002f": "0x5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc", - "0x0000000000000000000000000000000000000000000000000000000000000030": "0xda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2", - "0x0000000000000000000000000000000000000000000000000000000000000031": "0x2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0xe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0xb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0", - "0x0000000000000000000000000000000000000000000000000000000000000035": "0xc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2", - "0x0000000000000000000000000000000000000000000000000000000000000036": "0xf4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0x5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377", - "0x0000000000000000000000000000000000000000000000000000000000000038": "0x4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652", - "0x0000000000000000000000000000000000000000000000000000000000000039": "0xcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef", - "0x000000000000000000000000000000000000000000000000000000000000003a": "0x0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d", - "0x000000000000000000000000000000000000000000000000000000000000003b": "0xb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0", - "0x000000000000000000000000000000000000000000000000000000000000003c": "0x838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e", - "0x000000000000000000000000000000000000000000000000000000000000003d": "0x662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0x388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322", - "0x000000000000000000000000000000000000000000000000000000000000003f": "0x93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735", - "0x0000000000000000000000000000000000000000000000000000000000000040": "0x8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9" - }, - "contractName": "Bridge" - }, - { - "balance": "0", - "nonce": "3", - "address": "0xc949254d682d8c9ad5682521675b8f43b102aec4", - "pvtKey": "0xdfd01798f92667dbf91df722434e8fbe96af0211d4d1b82bbbbc8f1def7a814f" - }, - { - "balance": "0", - "nonce": "0", - "address": "0x0000000000000000000000000000000000000000" - }, - { - "balance": "0", - "nonce": "1", - "address": "0x61ba0248b0986c2480181c6e76b6adeeaa962483", - "bytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01" - } - } - ] -} \ No newline at end of file diff --git a/tools/fill-genesis/generate-claim-exit-root.js b/tools/generate-claim/generate-claim-exit-root.js similarity index 100% rename from tools/fill-genesis/generate-claim-exit-root.js rename to tools/generate-claim/generate-claim-exit-root.js From f687038130fe51e478ab590f3fa28dee45589fe4 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Thu, 24 Nov 2022 10:18:08 +0100 Subject: [PATCH 33/40] add options --- src/processor.js | 6 +++--- src/zkevm-db.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/processor.js b/src/processor.js index 3167c3f9..0eb12004 100644 --- a/src/processor.js +++ b/src/processor.js @@ -45,7 +45,7 @@ module.exports = class Processor { timestamp, chainID, vm, - skipUpdateSystemStorage, + options, ) { this.db = db; this.newNumBatch = numBatch; @@ -77,7 +77,7 @@ module.exports = class Processor { this.evmSteps = []; this.updatedAccounts = {}; this.isLegacyTx = false; - this.skipUpdateSystemStorage = skipUpdateSystemStorage; + this.options = options; } /** @@ -473,7 +473,7 @@ module.exports = class Processor { * Updates system storage with new state root after finishing transaction */ async _updateSystemStorage() { - if (this.skipUpdateSystemStorage) return; + if (this.options.skipUpdateSystemStorage) return; // Set system addres storage with updated values const lastTxCount = await stateUtils.getContractStorage( diff --git a/src/zkevm-db.js b/src/zkevm-db.js index 1b845c84..e9ccfed6 100644 --- a/src/zkevm-db.js +++ b/src/zkevm-db.js @@ -43,7 +43,7 @@ class ZkEVMDB { * @param {Array[Field]} globalExitRoot - global exit root * @param {Scalar} maxNTx - Maximum number of transactions (optional) */ - async buildBatch(timestamp, sequencerAddress, globalExitRoot, maxNTx = Constants.DEFAULT_MAX_TX, skipUpdateSystemStorage = false) { + async buildBatch(timestamp, sequencerAddress, globalExitRoot, maxNTx = Constants.DEFAULT_MAX_TX, options = {}) { return new Processor( this.db, this.lastBatch + 1, @@ -56,7 +56,7 @@ class ZkEVMDB { timestamp, this.chainID, clone(this.vm), - skipUpdateSystemStorage, + options, ); } From 28240c9c6f78c2f41e051a7b91b043d918bd1ff9 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Thu, 24 Nov 2022 16:39:37 +0100 Subject: [PATCH 34/40] add comments & increase version --- package.json | 2 +- src/processor.js | 2 ++ src/zkevm-db.js | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index cf1aa0a6..2fdc76ff 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@0xpolygonhermez/zkevm-commonjs", "description": "Javascript library implementing common utilities for zkevm", - "version": "0.5.0.0", + "version": "0.5.0.1", "main": "index.js", "scripts": { "setup": "npm i", diff --git a/src/processor.js b/src/processor.js index 0eb12004..1ae8eb38 100644 --- a/src/processor.js +++ b/src/processor.js @@ -32,6 +32,8 @@ module.exports = class Processor { * @param {Number} timestamp - Timestamp of the batch * @param {Number} chainID - L2 chainID * @param {Object} vm - vm instance + * @param {Object} options - batch options + * @param {Bool} options.skipUpdateSystemStorage Skips updates on system smrt contract at the end of processable transactions */ constructor( db, diff --git a/src/zkevm-db.js b/src/zkevm-db.js index e9ccfed6..646adca5 100644 --- a/src/zkevm-db.js +++ b/src/zkevm-db.js @@ -42,6 +42,8 @@ class ZkEVMDB { * @param {String} sequencerAddress - ethereum address represented as hex * @param {Array[Field]} globalExitRoot - global exit root * @param {Scalar} maxNTx - Maximum number of transactions (optional) + * @param {Object} options - additional batch options + * @param {Bool} options.skipUpdateSystemStorage - Skips updates on system smrt contract at the end of processable transactions */ async buildBatch(timestamp, sequencerAddress, globalExitRoot, maxNTx = Constants.DEFAULT_MAX_TX, options = {}) { return new Processor( From c8d29f706949b53b33319ea03970e00735771dd6 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Mon, 28 Nov 2022 14:47:45 +0100 Subject: [PATCH 35/40] fix version ethereumjs-monorepo --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 2fdc76ff..0a709b2b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@0xpolygonhermez/zkevm-commonjs", "description": "Javascript library implementing common utilities for zkevm", - "version": "0.5.0.1", + "version": "0.5.0.2", "main": "index.js", "scripts": { "setup": "npm i", @@ -34,7 +34,7 @@ }, "homepage": "https://github.com/0xPolygonHermez/zkevm-commonjs#readme", "devDependencies": { - "@0xpolygonhermez/contracts-zkevm": "github:0xPolygonHermez/zkevm-contracts#develop", + "@0xpolygonhermez/contracts-zkevm": "github:0xPolygonHermez/zkevm-contracts#v0.5.0.0", "@ethersproject/abi": "^5.6.4", "@nomiclabs/hardhat-ethers": "^2.1.0", "@nomiclabs/hardhat-waffle": "^2.0.2", @@ -50,7 +50,7 @@ "@ethereumjs/block": "^3.6.2", "@ethereumjs/tx": "^3.4.0", "@polygon-hermez/common": "2.6.3", - "@polygon-hermez/vm": "5.7.27", + "@polygon-hermez/vm": "5.7.28", "ethereumjs-util": "^7.1.4", "ethers": "^5.5.4", "ffjavascript": "^0.2.55", From 0a3acefdf39039e251c589a1c76e5bf5d6ba0dde Mon Sep 17 00:00:00 2001 From: krlosMata Date: Mon, 28 Nov 2022 14:36:24 +0100 Subject: [PATCH 36/40] update overwriting timestamp --- src/processor.js | 19 +++- test/block-info.test.js | 20 ++-- .../block-info/block-info-batches.json | 106 +++++++++++++++++- 3 files changed, 131 insertions(+), 14 deletions(-) diff --git a/src/processor.js b/src/processor.js index 1ae8eb38..463abbf9 100644 --- a/src/processor.js +++ b/src/processor.js @@ -189,15 +189,32 @@ module.exports = class Processor { /** * Set the global exit root in a specific storage slot of the globalExitRootManagerL2 for both vm and SMT * Not store global exit root if it is zero + * Not overwrite storage position if timestamp is already set * This will be performed before process the transactions */ async _setGlobalExitRoot() { + // return if globalExitRoot is 0 if (Scalar.eq(smtUtils.h4toScalar(this.globalExitRoot), Scalar.e(0))) { return; } - const newStorageEntry = {}; + // check if timestamp is already set const globalExitRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [smtUtils.h4toString(this.globalExitRoot), Constants.GLOBAL_EXIT_ROOT_STORAGE_POS]); + const globalExitRootPosScalar = Scalar.e(globalExitRootPos).toString(); + + const resTimestamp = await stateUtils.getContractStorage( + Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2, + this.smt, + this.currentStateRoot, + [globalExitRootPos], + ); + + if (Scalar.neq(resTimestamp[globalExitRootPosScalar], Scalar.e(0))) { + return; + } + + // Set globalExitRoot - timestamp + const newStorageEntry = {}; newStorageEntry[globalExitRootPos] = this.timestamp; this.currentStateRoot = await stateUtils.setContractStorage( diff --git a/test/block-info.test.js b/test/block-info.test.js index e2ab85d9..595591fe 100644 --- a/test/block-info.test.js +++ b/test/block-info.test.js @@ -269,18 +269,23 @@ describe('Block info tests', function () { newLeafs[address].balance = account.balance.toString(); newLeafs[address].nonce = account.nonce.toString(); - if (account.isContract() || address === Constants.ADDRESS_SYSTEM - || address === Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2) { + if (account.isContract() || address.toLowerCase() === Constants.ADDRESS_SYSTEM.toLowerCase() + || address.toLowerCase() === Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2.toLowerCase()) { const storage = await zkEVMDB.dumpStorage(address); newLeafs[address].storage = storage; } } for (const leaf of genesis) { - if (!newLeafs[leaf.address.toLowerCase()]) { - newLeafs[leaf.address] = { ...leaf }; - delete newLeafs[leaf.address].address; - delete newLeafs[leaf.address].bytecode; - delete newLeafs[leaf.address].contractName; + const address = leaf.address.toLowerCase(); + if (!newLeafs[address]) { + newLeafs[address] = { ...leaf }; + const storage = await zkEVMDB.dumpStorage(address); + if (storage !== null) { + newLeafs[address].storage = storage; + } + delete newLeafs[address].address; + delete newLeafs[address].bytecode; + delete newLeafs[address].contractName; } } @@ -329,7 +334,6 @@ describe('Block info tests', function () { ))[Scalar.e(globalExitRootPos)]; expect(Scalar.fromString(timestampVm.toString('hex'), 16)).to.equal(timestampSmt); - expect(timestampSmt).to.equal(Scalar.e(batch.timestamp)); // Check through a call in the EVM if (bridgeDeployed) { diff --git a/test/helpers/test-vectors/block-info/block-info-batches.json b/test/helpers/test-vectors/block-info/block-info-batches.json index 5f982cca..883cfcbd 100644 --- a/test/helpers/test-vectors/block-info/block-info-batches.json +++ b/test/helpers/test-vectors/block-info/block-info-batches.json @@ -162,7 +162,10 @@ "expectedNewLeafs": { "0xae4bb80be56b819606589de61d5ec3b522eeb032": { "balance": "0", - "nonce": "0" + "nonce": "0", + "storage": { + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" + } }, "0x0000000000000000000000000000000000000000": { "balance": "0", @@ -327,10 +330,6 @@ ], "expectedNewRoot": "0x5a62e3d4a89fdae8794ec78ba1fc91db4778bff0286ecb4cee6fbe8f76544ab6", "expectedNewLeafs": { - "0xae4bb80be56b819606589de61d5ec3b522eeb032": { - "balance": "0", - "nonce": "0" - }, "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { "balance": "199999548204000000000", "nonce": "14" @@ -375,6 +374,13 @@ "0x0000000000000000000000000000000000000000": { "balance": "0", "nonce": "0" + }, + "0xae4bb80be56b819606589de61d5ec3b522eeb032": { + "balance": "0", + "nonce": "0", + "storage": { + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" + } } }, "batchL2Data": "0xea07843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084188ec3568203e880800be264304cfc20c400929c82d1435cfbaa18e9a49c34ce65274633820803c415132ab24e00f892d77ad39c87e897772100e3323f31915a3e5eb261e056d99bc31bea08843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084d1a82a9d8203e88080775e9a77a45dafb120ec840926129c5db8ad3843722de88f2c7f6df4383c92fe0176dcd120e97ff6a1a1d60150aac3fdbca81bbfd1e2e9349ed9da4fa3bd85a81bea09843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880846d6516c08203e88080f969b5ab22f54db86a57efcfa83f3369047d328d2c56044bd49d7f863e69ed2b5a95c2b1b41801a5b4d7bb548829fe5a51c72dd5e5a08bd2a56f49bc3246a3081cea0a843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae988084b6baffe38203e88080b60beddfce8bf365e93cb4f88f45ed0e5649659de56dbf52332e6c9c16aa10bd576fb90bd967e2495fe8fa09d75d58b82668c54dab54d91f5e4ab0d76d2649ae1bea0b843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880841a93d1c38203e88080416d143b11a02e0c28344feb6af0f90ecb5b0bd5eec26047b25c0f775502be751e40d32fefe94aee39ad9b2605afeb2e86f31b56ac82874f841054c6a01331851bea0c843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880843408e4708203e88080a1ec9b236321a7d3545cfe1a1baedf65d75e589223d732d424576756adb0396e74470d226d5b61895150d96dbd1b1ba8a8ad69a6bf9311a141ece602b6420d961cf84a0d843b9aca00830186a0941275fbb540c8efc58b812ba83b0d0b8b9917ae9880a4e9413d3800000000000000000000000000000000000000000000000000000000000000018203e8808068ad61295298051fac15519066926aad57ed5af83b351e586a0fbe70006c48295695cc59543fd10d4af41a8a266aef5efd2d691abc356fc679c66e2545fd9ef61b", @@ -382,6 +388,96 @@ "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "batchHashData": "0x8196946b8a211125e92b0bdbce0c9f9b8b8fbebf2cd5e794cbb4cf8208641b3c", "timestamp": 1944498031 + }, + { + "txs": [], + "expectedNewRoot": "0xbde28b0b2f9284f2d15cc416369528306af5d3cbc53d7e2575a39ad62b30cd6a", + "expectedNewLeafs": { + "0xae4bb80be56b819606589de61d5ec3b522eeb032": { + "balance": "0", + "nonce": "0", + "storage": { + "0x476b1edb8f44f82bc7ef0b7e1c441a7957942d3a0db3d831311e898e665722b5": "0x73e6af71", + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" + } + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0" + }, + "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { + "balance": "100000000000000000000", + "nonce": "1", + "pvtKey": "0x28b2b0318721be8c8339199172cd7cc8f5e273800a35616ec893083a4b32c02e" + }, + "0x1275fbb540c8efc58b812ba83b0d0b8b9917ae98": { + "balance": "0", + "nonce": "1", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x73e6af6f", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0a", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x01c9c380", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0xc18eb9ea7e6dfc3cf833e81797701ec6fcebe074c766c76c10f3c6290b077742" + } + }, + "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { + "pvtKey": "0x4d27a600dce8c29b7bd080e29a26972377dbb04d7a27d919adbb602bf13cfd23", + "balance": "200000000000000000000", + "nonce": "0" + } + }, + "batchL2Data": "0x", + "globalExitRoot": "0x190bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", + "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "batchHashData": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "timestamp": 1944498033 + }, + { + "txs": [], + "expectedNewRoot": "0xbde28b0b2f9284f2d15cc416369528306af5d3cbc53d7e2575a39ad62b30cd6a", + "expectedNewLeafs": { + "0x0000000000000000000000000000000000000000": { + "balance": "0", + "nonce": "0" + }, + "0xae4bb80be56b819606589de61d5ec3b522eeb032": { + "balance": "0", + "nonce": "0", + "storage": { + "0x476b1edb8f44f82bc7ef0b7e1c441a7957942d3a0db3d831311e898e665722b5": "0x73e6af71", + "0x53d3f126103a7f7d6245751d2392e0245bf71479d10a3c27a5b501ace6dde1b7": "0x73e6af6f" + } + }, + "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d": { + "balance": "100000000000000000000", + "nonce": "1", + "pvtKey": "0x28b2b0318721be8c8339199172cd7cc8f5e273800a35616ec893083a4b32c02e" + }, + "0x1275fbb540c8efc58b812ba83b0d0b8b9917ae98": { + "balance": "0", + "nonce": "1", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x617b3a3528f9cdd6630fd3301b9c8911f7bf063d", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x73e6af6f", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0a", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x01c9c380", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x03e8", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0xc18eb9ea7e6dfc3cf833e81797701ec6fcebe074c766c76c10f3c6290b077742" + } + }, + "0x4d5cf5032b2a844602278b01199ed191a86c93ff": { + "pvtKey": "0x4d27a600dce8c29b7bd080e29a26972377dbb04d7a27d919adbb602bf13cfd23", + "balance": "200000000000000000000", + "nonce": "0" + } + }, + "batchL2Data": "0x", + "globalExitRoot": "0x190bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", + "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "batchHashData": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "timestamp": 1944498042 } ] } From edb3ffac86876e8ef33e6150836d02ed17423a0e Mon Sep 17 00:00:00 2001 From: krlosMata Date: Wed, 30 Nov 2022 09:27:04 +0100 Subject: [PATCH 37/40] update package version --- package.json | 4 ++-- test/block-info.test.js | 2 +- test/processor.test.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 0a709b2b..232cd847 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@0xpolygonhermez/zkevm-commonjs", "description": "Javascript library implementing common utilities for zkevm", - "version": "0.5.0.2", + "version": "0.5.1.0", "main": "index.js", "scripts": { "setup": "npm i", @@ -34,7 +34,7 @@ }, "homepage": "https://github.com/0xPolygonHermez/zkevm-commonjs#readme", "devDependencies": { - "@0xpolygonhermez/contracts-zkevm": "github:0xPolygonHermez/zkevm-contracts#v0.5.0.0", + "@0xpolygonhermez/zkevm-contracts": "github:0xPolygonHermez/zkevm-contracts#v0.5.0.0", "@ethersproject/abi": "^5.6.4", "@nomiclabs/hardhat-ethers": "^2.1.0", "@nomiclabs/hardhat-waffle": "^2.0.2", diff --git a/test/block-info.test.js b/test/block-info.test.js index 595591fe..81939072 100644 --- a/test/block-info.test.js +++ b/test/block-info.test.js @@ -22,7 +22,7 @@ const lodash = require('lodash'); const artifactsPath = path.join(__dirname, 'artifacts/contracts'); -const contractsPolygonHermez = require('@0xpolygonhermez/contracts-zkevm'); +const contractsPolygonHermez = require('@0xpolygonhermez/zkevm-contracts'); const { MemDB, ZkEVMDB, getPoseidon, processorUtils, smtUtils, Constants, stateUtils, } = require('../index'); diff --git a/test/processor.test.js b/test/processor.test.js index e3e4158c..0bf2e23a 100644 --- a/test/processor.test.js +++ b/test/processor.test.js @@ -23,7 +23,7 @@ const lodash = require('lodash'); const artifactsPath = path.join(__dirname, 'artifacts/contracts'); -const contractsPolygonHermez = require('@0xpolygonhermez/contracts-zkevm'); +const contractsPolygonHermez = require('@0xpolygonhermez/zkevm-contracts'); const { MemDB, ZkEVMDB, getPoseidon, processorUtils, smtUtils, Constants, stateUtils, } = require('../index'); From 25e28f0a30f8af7e2d29e6d954175e7458683f3a Mon Sep 17 00:00:00 2001 From: krlosMata Date: Fri, 16 Dec 2022 12:35:40 +0100 Subject: [PATCH 38/40] add support EIP-3541 --- package.json | 4 ++-- src/zkevm-db.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 232cd847..e3d0d974 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@0xpolygonhermez/zkevm-commonjs", "description": "Javascript library implementing common utilities for zkevm", - "version": "0.5.1.0", + "version": "0.6.0.0", "main": "index.js", "scripts": { "setup": "npm i", @@ -49,7 +49,7 @@ "dependencies": { "@ethereumjs/block": "^3.6.2", "@ethereumjs/tx": "^3.4.0", - "@polygon-hermez/common": "2.6.3", + "@polygon-hermez/common": "2.6.4", "@polygon-hermez/vm": "5.7.28", "ethereumjs-util": "^7.1.4", "ethers": "^5.5.4", diff --git a/src/zkevm-db.js b/src/zkevm-db.js index 646adca5..5c412d18 100644 --- a/src/zkevm-db.js +++ b/src/zkevm-db.js @@ -305,7 +305,7 @@ class ZkEVMDB { */ static async newZkEVM(db, poseidon, stateRoot, accHashInput, genesis, vm, smt, chainID) { const common = Common.custom({ chainId: chainID }, { hardfork: Hardfork.Berlin }); - common.setEIPs([3607, 3198]); + common.setEIPs([3607, 3198, 3541]); const lastBatch = await db.getValue(Constants.DB_LAST_BATCH); // If it is null, instantiate a new evm-db if (lastBatch === null) { From 81fcf1d7a757c2368ea9d2e01e5daa7cacaf7f35 Mon Sep 17 00:00:00 2001 From: laisolizq Date: Fri, 16 Dec 2022 16:42:08 +0100 Subject: [PATCH 39/40] Fix error runTx --- src/processor.js | 105 +++++++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 48 deletions(-) diff --git a/src/processor.js b/src/processor.js index 463abbf9..3ef4ff5c 100644 --- a/src/processor.js +++ b/src/processor.js @@ -343,60 +343,69 @@ module.exports = class Processor { blockData.header.difficulty = new BN(Scalar.e(Constants.BATCH_DIFFICULTY)); const evmBlock = Block.fromBlockData(blockData, { common: evmTx.common }); - const txResult = await this.vm.runTx({ tx: evmTx, block: evmBlock }); - - this.evmSteps.push(txResult.execResult.evmSteps); - - // Check transaction completed - if (txResult.execResult.exceptionError) { - currentDecodedTx.isInvalid = true; - if (txResult.execResult.returnValue.toString()) { - const abiCoder = ethers.utils.defaultAbiCoder; - const revertReasonHex = `0x${txResult.execResult.returnValue.toString('hex').slice(8)}`; - try { - [currentDecodedTx.reason] = abiCoder.decode(['string'], revertReasonHex); - } catch (e) { - currentDecodedTx.reason = txResult.execResult.exceptionError; - } - } else currentDecodedTx.reason = txResult.execResult.exceptionError; + try { + const txResult = await this.vm.runTx({ tx: evmTx, block: evmBlock }); + + this.evmSteps.push(txResult.execResult.evmSteps); + + // Check transaction completed + if (txResult.execResult.exceptionError) { + currentDecodedTx.isInvalid = true; + if (txResult.execResult.returnValue.toString()) { + const abiCoder = ethers.utils.defaultAbiCoder; + const revertReasonHex = `0x${txResult.execResult.returnValue.toString('hex').slice(8)}`; + try { + [currentDecodedTx.reason] = abiCoder.decode(['string'], revertReasonHex); + } catch (e) { + currentDecodedTx.reason = txResult.execResult.exceptionError; + } + } else currentDecodedTx.reason = txResult.execResult.exceptionError; + + // UPDATE sender account adding the nonce and substracting the gas spended + const senderAcc = await this.vm.stateManager.getAccount(Address.fromString(currenTx.from)); + this.updatedAccounts[currenTx.from] = senderAcc; + // Update smt with touched accounts + this.currentStateRoot = await stateUtils.setAccountState( + currenTx.from, + this.smt, + this.currentStateRoot, + Scalar.e(senderAcc.balance), + Scalar.e(senderAcc.nonce), + ); - // UPDATE sender account adding the nonce and substracting the gas spended - const senderAcc = await this.vm.stateManager.getAccount(Address.fromString(currenTx.from)); - this.updatedAccounts[currenTx.from] = senderAcc; - // Update smt with touched accounts - this.currentStateRoot = await stateUtils.setAccountState( - currenTx.from, - this.smt, - this.currentStateRoot, - Scalar.e(senderAcc.balance), - Scalar.e(senderAcc.nonce), - ); + /* + * UPDATE miner Acc + * Get touched evm account + */ + const addressSeq = Address.fromString(this.sequencerAddress); + const accountSeq = await this.vm.stateManager.getAccount(addressSeq); - /* - * UPDATE miner Acc - * Get touched evm account - */ - const addressSeq = Address.fromString(this.sequencerAddress); - const accountSeq = await this.vm.stateManager.getAccount(addressSeq); + // Update batch touched stack + this.updatedAccounts[this.sequencerAddress] = accountSeq; - // Update batch touched stack - this.updatedAccounts[this.sequencerAddress] = accountSeq; - - // Update smt with touched accounts - this.currentStateRoot = await stateUtils.setAccountState( - this.sequencerAddress, - this.smt, - this.currentStateRoot, - Scalar.e(accountSeq.balance), - Scalar.e(accountSeq.nonce), - ); + // Update smt with touched accounts + this.currentStateRoot = await stateUtils.setAccountState( + this.sequencerAddress, + this.smt, + this.currentStateRoot, + Scalar.e(accountSeq.balance), + Scalar.e(accountSeq.nonce), + ); - await this._updateSystemStorage(); + await this._updateSystemStorage(); - // Clear touched accounts - this.vm.stateManager._customTouched.clear(); + // Clear touched accounts + this.vm.stateManager._customTouched.clear(); - continue; + continue; + } + } catch (e) { + // If base fee exceeds the gas limit, it is an instrisic error and the state will not be affected + if (e.toString().includes('base fee exceeds gas limit')) { + continue; + } else { + throw Error(e); + } } // PROCESS TX in the smt updating the touched accounts from the EVM From db05851b59f3eb2c31ca94bb9ce3a07ebba7d7cc Mon Sep 17 00:00:00 2001 From: krlosMata Date: Wed, 21 Dec 2022 16:12:40 +0100 Subject: [PATCH 40/40] update contract version --- package.json | 2 +- .../helpers/test-vectors/end-to-end/state-transition.json | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e3d0d974..be989c03 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ }, "homepage": "https://github.com/0xPolygonHermez/zkevm-commonjs#readme", "devDependencies": { - "@0xpolygonhermez/zkevm-contracts": "github:0xPolygonHermez/zkevm-contracts#v0.5.0.0", + "@0xpolygonhermez/zkevm-contracts": "github:0xPolygonHermez/zkevm-contracts#v0.6.0.0", "@ethersproject/abi": "^5.6.4", "@nomiclabs/hardhat-ethers": "^2.1.0", "@nomiclabs/hardhat-waffle": "^2.0.2", diff --git a/test/helpers/test-vectors/end-to-end/state-transition.json b/test/helpers/test-vectors/end-to-end/state-transition.json index f35a239c..9876ea62 100644 --- a/test/helpers/test-vectors/end-to-end/state-transition.json +++ b/test/helpers/test-vectors/end-to-end/state-transition.json @@ -20,7 +20,7 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, - "contractName": "GlobalExitRootManagerL2" + "contractName": "PolygonZkEVMGlobalExitRootL2" }, { "balance": "100000000000000000000000", @@ -64,7 +64,7 @@ "0x000000000000000000000000000000000000000000000000000000000000003f": "0x93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735", "0x0000000000000000000000000000000000000000000000000000000000000040": "0x8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9" }, - "contractName": "Bridge" + "contractName": "PolygonZkEVMBridge" }, { "balance": "0", @@ -95,7 +95,7 @@ "to": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", "nonce": 3, "value": "0", - "contractName": "Bridge", + "contractName": "PolygonZkEVMBridge", "function": "claimAsset", "params": [ [ @@ -155,7 +155,7 @@ "to": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", "nonce": 4, "value": "1000000000000000000", - "contractName": "Bridge", + "contractName": "PolygonZkEVMBridge", "function": "bridgeAsset", "params": [ "0x0000000000000000000000000000000000000000",