diff --git a/Makefile b/Makefile index 76a2028d..41701d7d 100644 --- a/Makefile +++ b/Makefile @@ -70,7 +70,7 @@ start-env-with-tracing-v2-extra: make start-env COMPOSE_PROFILES:=l1,l2 COMPOSE_FILE:=docker/compose-tracing-v2-extra-extension.yml LINEA_PROTOCOL_CONTRACTS_ONLY=true DISABLE_JSON_RPC_PRICING_PROPAGATION=false DISABLE_TYPE2_STATE_PROOF_PROVIDER=false start-env-with-tracing-v2-ci: - make start-env COMPOSE_FILE=docker/compose-tracing-v2-ci-extension.yml + make start-env COMPOSE_FILE=docker/compose-tracing-v2-ci-extension.yml DISABLE_TYPE2_STATE_PROOF_PROVIDER=false start-env-with-staterecovery: COMPOSE_PROFILES:=l1,l2,staterecovery start-env-with-staterecovery: L1_CONTRACT_VERSION:=6 diff --git a/contracts/local-deployments-artifacts/static-artifacts/Mimc.json b/contracts/local-deployments-artifacts/static-artifacts/Mimc.json new file mode 100644 index 00000000..7fec46d1 --- /dev/null +++ b/contracts/local-deployments-artifacts/static-artifacts/Mimc.json @@ -0,0 +1,40 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Mimc", + "sourceName": "contracts/src/libraries/Mimc.sol", + "abi": [ + { + "inputs": [], + "name": "DataIsNotMod32", + "type": "error" + }, + { + "inputs": [], + "name": "DataMissing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_msg", + "type": "bytes" + } + ], + "name": "hash", + "outputs": [ + { + "internalType": "bytes32", + "name": "mimcHash", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "6113b1610052600b82828239805160001a6073146045577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063aa1e84de1461003a575b600080fd5b610054600480360381019061004f9190611290565b61006a565b60405161006191906112f6565b60405180910390f35b60008083839050036100a8576040517f731eab5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020848490506100ba919061134a565b146100f1576040517fc2cab26c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020601f83010460005b8181101561016c5760208102850180356101158186610172565b7f12ab655e9a2ca55660b44d1e5c37b00159aa76fed00000010a11800000000001827f12ab655e9a2ca55660b44d1e5c37b00159aa76fed00000010a118000000000018389080895505050506001810190506100fb565b5061121a565b60007f12ab655e9a2ca55660b44d1e5c37b00159aa76fed00000010a118000000000016000817f0efda9332fcec268a3bbd0567797ce650be481c79da27f58b1a51ada4a91b01483868808089050818182099250818384099250818384099250818183858609099250817f05253862ca9b15c2bd33e1a2b830659b7ae3657aacfa8986eec35d8ec2dd344683868608089050818182099250818384099250818384099250818183858609099250817f0db5be05400d438b9facd4a269a49031e8c7f947887a7c8653aae1675075f08d83868608089050818182099250818384099250818384099250818183858609099250817f07850deb84c4b38c891c03f7acc0f0e0602877a2ae969dcd0b10d7facf26dddb83868608089050818182099250818384099250818384099250818183858609099250817f01c2e148c40ea201b748bee72845b349bfa4a4497837af0d569ae47afc6e424383868608089050818182099250818384099250818384099250818183858609099250817e5a472abfb0d5d4b09a0da6d9d4c7ab93bf68299dc5222dc6ef81407825dba983868608089050818182099250818384099250818384099250818183858609099250817f03b0d15d7b62c8b4cfbce18816baeabb2e3df2d9a731d9d248d2f0498bdec1e483868608089050818182099250818384099250818384099250818183858609099250817f04e8da009db8982a082983402626f1f68655a4a3c83be89c165ba656be14d72683868608089050818182099250818384099250818384099250818183858609099250817f02dcc7fbe0034e4fd51853c69fa7161a043c6757df0b3022fd8628c221b04c0183868608089050818182099250818384099250818384099250818183858609099250817f0ef15ea4cf191c23a6eba0d9f4c6c978a7bb172b196d13438c30c1ce50aeefec83868608089050818182099250818384099250818384099250818183858609099250817f0ddda0ea4d7aeda047f66513386eab0c970ea0f302b6227a1a7e64aef63840e983868608089050818182099250818384099250818384099250818183858609099250817f11c526b58d39911c310b2a808cf84fd690f713c06d4016ff30c05aded412af7a83868608089050818182099250818384099250818384099250818183858609099250817f056b338761a8093e7575ab89a9f375f59c61049079a2e5d1120dbf4adf7a9bb583868608089050818182099250818384099250818384099250818183858609099250817f05fc79e450ea6c00b641fdf50f5ee15c0ec5baf629ccb26d553553adf1792b0083868608089050818182099250818384099250818384099250818183858609099250817f1168acb1e68011e4b6ff861a9f84e4ac38d250941c8536f214a0ce4f68bdb5a383868608089050818182099250818384099250818384099250818183858609099250817f06d4d245e2259b3166774189238cfc1b4ae5defd98f62899f0d846d20a005b9183868608089050818182099250818384099250818384099250818183858609099250817f123313cced613293c40586b110f8e4244cd67cc4380c8f5df4ec60f42216ce2883868608089050818182099250818384099250818384099250818183858609099250817f0acf9981fe2d6f97d7fa27873a0a368c2b19b10d15f2460a59512c4381ca037983868608089050818182099250818384099250818384099250818183858609099250817f011e73f99cc798e236f1fb1f38144984fed0a2cdd836d7860099423cce8c491e83868608089050818182099250818384099250818384099250818183858609099250817f0a8d98d4f22ed367167e54617b0701e64f0f9a4b17e0808eeac420473c18bcbe83868608089050818182099250818384099250818384099250818183858609099250817f0e9d4c3fe8fed7780e4b179314207924caebf54185c786400384a8679b6c725283868608089050818182099250818384099250818384099250818183858609099250817f11d37287b2e163e78261cdcc9e4d723b0a81099340c5cfa245eccfb9ee92014283868608089050818182099250818384099250818384099250818183858609099250817f05b231b706fb2967b2b90bade17c758c62201b5a4e04f020cdf2af76c12422f083868608089050818182099250818384099250818384099250818183858609099250817f0dcfd40018b5bf7bb3397d4ce2a24130ae7d74c41e48f2a25a48132f897a5ac283868608089050818182099250818384099250818384099250818183858609099250817f0534aaf5c42188955008e47ba93e156c7d32406566cb85f6183bf6144d8a3ee283868608089050818182099250818384099250818384099250818183858609099250817f023cd78594054aa62b3292f3429491566819cb081159afef6c0d12a945aa059083868608089050818182099250818384099250818384099250818183858609099250817e7ca89d69ee508f26d2500ece5b01925c9728aef78493806f58a2b807c6da4d83868608089050818182099250818384099250818384099250818183858609099250817f05192bd62077895fa33a95382ba2ea0dd65ed66281c6b7a09acc94003238df3783868608089050818182099250818384099250818384099250818183858609099250817f0d0ead8a1699babd8e6b7e3f3811463e8cfafae1915967ad4342ca59465c401483868608089050818182099250818384099250818384099250818183858609099250817f11c0cabe4b1e2444d8915e6a411908faf20cf1feeb59918abde560595ebb5f4f83868608089050818182099250818384099250818384099250818183858609099250817f0f0c1c73b3c6463138527609f33d4981b21444c39d1f00c172f51c3c9aa4357483868608089050818182099250818384099250818384099250818183858609099250817f0861d628f74762a601963dd1823ed11b9dd2456940b41659ac02fe1232355a6483868608089050818182099250818384099250818384099250818183858609099250817f110df129163a9336afa7b9757f15f300aeb954e92b3af524222b84096d1274fd83868608089050818182099250818384099250818384099250818183858609099250817f04c609941ec5da50d43b8d6d7d45fdd4faa8bb69929fc3337ddfc1bee29f7b9483868608089050818182099250818384099250818384099250818183858609099250817f07a63ade8da839446b58f5d1b7fdc9432dbe55467a2b87c1779e4ce62a59e43283868608089050818182099250818384099250818384099250818183858609099250817f120dbf222fc5d5337f22cfe76ea5597030bc328f5ef7b927678f123be9c2a39483868608089050818182099250818384099250818384099250818183858609099250817f0b33e4820a40248cdbc3c27d7dfab70fd4b31ee9f62b2e1e048e23f9b12d5b7183868608089050818182099250818384099250818384099250818183858609099250817f10b998b32a4e17a795d120a590e238dead3a2761cfcc9cce00b0b5c9a865608683868608089050818182099250818384099250818384099250818183858609099250817f0a98ebc6e3643fb6112262f125da98c0dc9eeb5c5e652716f368cf96b8888ed383868608089050818182099250818384099250818384099250818183858609099250817e06ce51116858059370af176e5d32b99b8fd443d520fe34588c6254df7514f583868608089050818182099250818384099250818384099250818183858609099250817f0b2dddc8994767c7d3632cc7bc089becf8ef3b65540fb4709b8cc78ba12b044b83868608089050818182099250818384099250818384099250818183858609099250817f08837cf3399fbfff03fc2e6cbb1a3b205a5a28757c827730ccd0c2f0c90fff3b83868608089050818182099250818384099250818384099250818183858609099250817f0c238d5f2c384a72477fbdce23d461ad73d4a20f8acb2de069ec6b034b7d8c5483868608089050818182099250818384099250818384099250818183858609099250817f0f0e46c03bd29b0cad6857149959c77f9e4f96c6688d3c2c64e228bcc0893ba483868608089050818182099250818384099250818384099250818183858609099250817f0d7dbd25add9892e2ea8951086a653298f4e4261e6bcdb3d980b9a45c9f4f3a983868608089050818182099250818384099250818384099250818183858609099250817f1197bc33ae17572ff6c8671d7a3a52f761305ba4f3a93c582e95c9f6d21dd60083868608089050818182099250818384099250818384099250818183858609099250817f10c0f787b87b60b08241ca6547299f3afe7d86374858661f3db021676d57356683868608089050818182099250818384099250818384099250818183858609099250817f0d527557a2a71d92e0b0c5230b02b5db478d6abd87d24caee5e9f325efec029883868608089050818182099250818384099250818384099250818183858609099250817f046e586141d405df5efb10855b7ea8009fdac1732b676f90de97a3e65fab3f4283868608089050818182099250818384099250818384099250818183858609099250817f02e91572a13a6baf97560b43b5b862aebd8b7d95c0fda9c097d823cc9ef0599e83868608089050818182099250818384099250818384099250818183858609099250817f0a12c428ae449ef925394565ac50d0adb37e9e48873cf7df892b08a7b5c0287583868608089050818182099250818384099250818384099250818183858609099250817f053d51710289df29fdcd07b74954d10edb2a29ce26f58b0868bfa608b976d16283868608089050818182099250818384099250818384099250818183858609099250817f107983a1ea61c3c634124a87ab1271bc68dbbf1f455033dba37f441e942da24883868608089050818182099250818384099250818384099250818183858609099250817f02f05b8c3d5883d63ad8e0fb9d5dfd79fed0a7476208a11ca79905cf50a8627a83868608089050818182099250818384099250818384099250818183858609099250817f0728f029842765bb9a7b662cc646a328bea710b0def51f6c6a0d8e3ee9286a2f83868608089050818182099250818384099250818384099250818183858609099250817f07aee6d598f4aed60276e302085feae4608f4b249347f581ea9e246aa7b2bd2d83868608089050818182099250818384099250818384099250818183858609099250817f0973293a99aab1398c81147a84d50bfa6aa95c659b7a4a2c153f21a13294caa683868608089050818182099250818384099250818384099250818183858609099250817f0f56f597f2a94ff70aed4abd9b14a863808ecffcd706f566a9065b6bf515cba583868608089050818182099250818384099250818384099250818183858609099250817f08d6e679d99527436d1b27315b5933cf75aaad990d3a2969032bc5595f72ed3783868608089050818182099250818384099250818384099250818183858609099250817f0ecf9edc13aa60341dde23bdadf7a719337256129297b85719cd06d173e5432083868608089050818182099250818384099250818384099250818183858609099250817f0f647c810044463684d83b28b6a17aef6a71db48f9af54c58c9919ded4974d2e83868608089050818182099250818384099250818384099250818183858609099250817f0f63f31b9849bcdbf503fd3b51ab77ca37a73a892a2eb5f9328fd4f2e234d20a83868608089050818182099250818384099250818384099250818183858609099250818484089250505092915050565b5092915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126112505761124f61122b565b5b8235905067ffffffffffffffff81111561126d5761126c611230565b5b60208301915083600182028301111561128957611288611235565b5b9250929050565b600080602083850312156112a7576112a6611221565b5b600083013567ffffffffffffffff8111156112c5576112c4611226565b5b6112d18582860161123a565b92509250509250929050565b6000819050919050565b6112f0816112dd565b82525050565b600060208201905061130b60008301846112e7565b92915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061135582611311565b915061136083611311565b9250826113705761136f61131b565b5b82820690509291505056fea264697066735822122098e7d33a9f8e3eb2b14caa33aaf78e10b973714313b050fc59a7887edde6b66664736f6c634300081e0033", + "deployedBytecode": "73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063aa1e84de1461003a575b600080fd5b610054600480360381019061004f9190611290565b61006a565b60405161006191906112f6565b60405180910390f35b60008083839050036100a8576040517f731eab5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020848490506100ba919061134a565b146100f1576040517fc2cab26c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020601f83010460005b8181101561016c5760208102850180356101158186610172565b7f12ab655e9a2ca55660b44d1e5c37b00159aa76fed00000010a11800000000001827f12ab655e9a2ca55660b44d1e5c37b00159aa76fed00000010a118000000000018389080895505050506001810190506100fb565b5061121a565b60007f12ab655e9a2ca55660b44d1e5c37b00159aa76fed00000010a118000000000016000817f0efda9332fcec268a3bbd0567797ce650be481c79da27f58b1a51ada4a91b01483868808089050818182099250818384099250818384099250818183858609099250817f05253862ca9b15c2bd33e1a2b830659b7ae3657aacfa8986eec35d8ec2dd344683868608089050818182099250818384099250818384099250818183858609099250817f0db5be05400d438b9facd4a269a49031e8c7f947887a7c8653aae1675075f08d83868608089050818182099250818384099250818384099250818183858609099250817f07850deb84c4b38c891c03f7acc0f0e0602877a2ae969dcd0b10d7facf26dddb83868608089050818182099250818384099250818384099250818183858609099250817f01c2e148c40ea201b748bee72845b349bfa4a4497837af0d569ae47afc6e424383868608089050818182099250818384099250818384099250818183858609099250817e5a472abfb0d5d4b09a0da6d9d4c7ab93bf68299dc5222dc6ef81407825dba983868608089050818182099250818384099250818384099250818183858609099250817f03b0d15d7b62c8b4cfbce18816baeabb2e3df2d9a731d9d248d2f0498bdec1e483868608089050818182099250818384099250818384099250818183858609099250817f04e8da009db8982a082983402626f1f68655a4a3c83be89c165ba656be14d72683868608089050818182099250818384099250818384099250818183858609099250817f02dcc7fbe0034e4fd51853c69fa7161a043c6757df0b3022fd8628c221b04c0183868608089050818182099250818384099250818384099250818183858609099250817f0ef15ea4cf191c23a6eba0d9f4c6c978a7bb172b196d13438c30c1ce50aeefec83868608089050818182099250818384099250818384099250818183858609099250817f0ddda0ea4d7aeda047f66513386eab0c970ea0f302b6227a1a7e64aef63840e983868608089050818182099250818384099250818384099250818183858609099250817f11c526b58d39911c310b2a808cf84fd690f713c06d4016ff30c05aded412af7a83868608089050818182099250818384099250818384099250818183858609099250817f056b338761a8093e7575ab89a9f375f59c61049079a2e5d1120dbf4adf7a9bb583868608089050818182099250818384099250818384099250818183858609099250817f05fc79e450ea6c00b641fdf50f5ee15c0ec5baf629ccb26d553553adf1792b0083868608089050818182099250818384099250818384099250818183858609099250817f1168acb1e68011e4b6ff861a9f84e4ac38d250941c8536f214a0ce4f68bdb5a383868608089050818182099250818384099250818384099250818183858609099250817f06d4d245e2259b3166774189238cfc1b4ae5defd98f62899f0d846d20a005b9183868608089050818182099250818384099250818384099250818183858609099250817f123313cced613293c40586b110f8e4244cd67cc4380c8f5df4ec60f42216ce2883868608089050818182099250818384099250818384099250818183858609099250817f0acf9981fe2d6f97d7fa27873a0a368c2b19b10d15f2460a59512c4381ca037983868608089050818182099250818384099250818384099250818183858609099250817f011e73f99cc798e236f1fb1f38144984fed0a2cdd836d7860099423cce8c491e83868608089050818182099250818384099250818384099250818183858609099250817f0a8d98d4f22ed367167e54617b0701e64f0f9a4b17e0808eeac420473c18bcbe83868608089050818182099250818384099250818384099250818183858609099250817f0e9d4c3fe8fed7780e4b179314207924caebf54185c786400384a8679b6c725283868608089050818182099250818384099250818384099250818183858609099250817f11d37287b2e163e78261cdcc9e4d723b0a81099340c5cfa245eccfb9ee92014283868608089050818182099250818384099250818384099250818183858609099250817f05b231b706fb2967b2b90bade17c758c62201b5a4e04f020cdf2af76c12422f083868608089050818182099250818384099250818384099250818183858609099250817f0dcfd40018b5bf7bb3397d4ce2a24130ae7d74c41e48f2a25a48132f897a5ac283868608089050818182099250818384099250818384099250818183858609099250817f0534aaf5c42188955008e47ba93e156c7d32406566cb85f6183bf6144d8a3ee283868608089050818182099250818384099250818384099250818183858609099250817f023cd78594054aa62b3292f3429491566819cb081159afef6c0d12a945aa059083868608089050818182099250818384099250818384099250818183858609099250817e7ca89d69ee508f26d2500ece5b01925c9728aef78493806f58a2b807c6da4d83868608089050818182099250818384099250818384099250818183858609099250817f05192bd62077895fa33a95382ba2ea0dd65ed66281c6b7a09acc94003238df3783868608089050818182099250818384099250818384099250818183858609099250817f0d0ead8a1699babd8e6b7e3f3811463e8cfafae1915967ad4342ca59465c401483868608089050818182099250818384099250818384099250818183858609099250817f11c0cabe4b1e2444d8915e6a411908faf20cf1feeb59918abde560595ebb5f4f83868608089050818182099250818384099250818384099250818183858609099250817f0f0c1c73b3c6463138527609f33d4981b21444c39d1f00c172f51c3c9aa4357483868608089050818182099250818384099250818384099250818183858609099250817f0861d628f74762a601963dd1823ed11b9dd2456940b41659ac02fe1232355a6483868608089050818182099250818384099250818384099250818183858609099250817f110df129163a9336afa7b9757f15f300aeb954e92b3af524222b84096d1274fd83868608089050818182099250818384099250818384099250818183858609099250817f04c609941ec5da50d43b8d6d7d45fdd4faa8bb69929fc3337ddfc1bee29f7b9483868608089050818182099250818384099250818384099250818183858609099250817f07a63ade8da839446b58f5d1b7fdc9432dbe55467a2b87c1779e4ce62a59e43283868608089050818182099250818384099250818384099250818183858609099250817f120dbf222fc5d5337f22cfe76ea5597030bc328f5ef7b927678f123be9c2a39483868608089050818182099250818384099250818384099250818183858609099250817f0b33e4820a40248cdbc3c27d7dfab70fd4b31ee9f62b2e1e048e23f9b12d5b7183868608089050818182099250818384099250818384099250818183858609099250817f10b998b32a4e17a795d120a590e238dead3a2761cfcc9cce00b0b5c9a865608683868608089050818182099250818384099250818384099250818183858609099250817f0a98ebc6e3643fb6112262f125da98c0dc9eeb5c5e652716f368cf96b8888ed383868608089050818182099250818384099250818384099250818183858609099250817e06ce51116858059370af176e5d32b99b8fd443d520fe34588c6254df7514f583868608089050818182099250818384099250818384099250818183858609099250817f0b2dddc8994767c7d3632cc7bc089becf8ef3b65540fb4709b8cc78ba12b044b83868608089050818182099250818384099250818384099250818183858609099250817f08837cf3399fbfff03fc2e6cbb1a3b205a5a28757c827730ccd0c2f0c90fff3b83868608089050818182099250818384099250818384099250818183858609099250817f0c238d5f2c384a72477fbdce23d461ad73d4a20f8acb2de069ec6b034b7d8c5483868608089050818182099250818384099250818384099250818183858609099250817f0f0e46c03bd29b0cad6857149959c77f9e4f96c6688d3c2c64e228bcc0893ba483868608089050818182099250818384099250818384099250818183858609099250817f0d7dbd25add9892e2ea8951086a653298f4e4261e6bcdb3d980b9a45c9f4f3a983868608089050818182099250818384099250818384099250818183858609099250817f1197bc33ae17572ff6c8671d7a3a52f761305ba4f3a93c582e95c9f6d21dd60083868608089050818182099250818384099250818384099250818183858609099250817f10c0f787b87b60b08241ca6547299f3afe7d86374858661f3db021676d57356683868608089050818182099250818384099250818384099250818183858609099250817f0d527557a2a71d92e0b0c5230b02b5db478d6abd87d24caee5e9f325efec029883868608089050818182099250818384099250818384099250818183858609099250817f046e586141d405df5efb10855b7ea8009fdac1732b676f90de97a3e65fab3f4283868608089050818182099250818384099250818384099250818183858609099250817f02e91572a13a6baf97560b43b5b862aebd8b7d95c0fda9c097d823cc9ef0599e83868608089050818182099250818384099250818384099250818183858609099250817f0a12c428ae449ef925394565ac50d0adb37e9e48873cf7df892b08a7b5c0287583868608089050818182099250818384099250818384099250818183858609099250817f053d51710289df29fdcd07b74954d10edb2a29ce26f58b0868bfa608b976d16283868608089050818182099250818384099250818384099250818183858609099250817f107983a1ea61c3c634124a87ab1271bc68dbbf1f455033dba37f441e942da24883868608089050818182099250818384099250818384099250818183858609099250817f02f05b8c3d5883d63ad8e0fb9d5dfd79fed0a7476208a11ca79905cf50a8627a83868608089050818182099250818384099250818384099250818183858609099250817f0728f029842765bb9a7b662cc646a328bea710b0def51f6c6a0d8e3ee9286a2f83868608089050818182099250818384099250818384099250818183858609099250817f07aee6d598f4aed60276e302085feae4608f4b249347f581ea9e246aa7b2bd2d83868608089050818182099250818384099250818384099250818183858609099250817f0973293a99aab1398c81147a84d50bfa6aa95c659b7a4a2c153f21a13294caa683868608089050818182099250818384099250818384099250818183858609099250817f0f56f597f2a94ff70aed4abd9b14a863808ecffcd706f566a9065b6bf515cba583868608089050818182099250818384099250818384099250818183858609099250817f08d6e679d99527436d1b27315b5933cf75aaad990d3a2969032bc5595f72ed3783868608089050818182099250818384099250818384099250818183858609099250817f0ecf9edc13aa60341dde23bdadf7a719337256129297b85719cd06d173e5432083868608089050818182099250818384099250818384099250818183858609099250817f0f647c810044463684d83b28b6a17aef6a71db48f9af54c58c9919ded4974d2e83868608089050818182099250818384099250818384099250818183858609099250817f0f63f31b9849bcdbf503fd3b51ab77ca37a73a892a2eb5f9328fd4f2e234d20a83868608089050818182099250818384099250818384099250818183858609099250818484089250505092915050565b5092915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126112505761124f61122b565b5b8235905067ffffffffffffffff81111561126d5761126c611230565b5b60208301915083600182028301111561128957611288611235565b5b9250929050565b600080602083850312156112a7576112a6611221565b5b600083013567ffffffffffffffff8111156112c5576112c4611226565b5b6112d18582860161123a565b92509250509250929050565b6000819050919050565b6112f0816112dd565b82525050565b600060208201905061130b60008301846112e7565b92915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061135582611311565b915061136083611311565b9250826113705761136f61131b565b5b82820690509291505056fea264697066735822122098e7d33a9f8e3eb2b14caa33aaf78e10b973714313b050fc59a7887edde6b66664736f6c634300081e0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/contracts/local-deployments-artifacts/static-artifacts/SparseMerkleProof.json b/contracts/local-deployments-artifacts/static-artifacts/SparseMerkleProof.json new file mode 100644 index 00000000..e6df6194 --- /dev/null +++ b/contracts/local-deployments-artifacts/static-artifacts/SparseMerkleProof.json @@ -0,0 +1,313 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "SparseMerkleProof", + "sourceName": "contracts/src/libraries/SparseMerkleProof.sol", + "abi": [ + { + "inputs": [], + "name": "LengthNotMod32", + "type": "error" + }, + { + "inputs": [], + "name": "MaxTreeLeafIndexExceed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "expectedLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bytesLength", + "type": "uint256" + } + ], + "name": "WrongBytesLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "expectedLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "actualLength", + "type": "uint256" + } + ], + "name": "WrongProofLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_encodedAccountValue", + "type": "bytes" + } + ], + "name": "getAccount", + "outputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "nonce", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "storageRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "mimcCodeHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "keccakCodeHash", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "codeSize", + "type": "uint64" + } + ], + "internalType": "struct SparseMerkleProof.Account", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_encodedLeaf", + "type": "bytes" + } + ], + "name": "getLeaf", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "prev", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "next", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "hKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "hValue", + "type": "bytes32" + } + ], + "internalType": "struct SparseMerkleProof.Leaf", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_value", + "type": "bytes" + } + ], + "name": "hashAccountValue", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_value", + "type": "bytes32" + } + ], + "name": "hashStorageValue", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_input", + "type": "bytes" + } + ], + "name": "mimcHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "_rawProof", + "type": "bytes[]" + }, + { + "internalType": "uint256", + "name": "_leafIndex", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "_root", + "type": "bytes32" + } + ], + "name": "verifyProof", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + } +], + "bytecode": "611a61610052600b82828239805160001a6073146045577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061006c5760003560e01c80635ea5a98f1461007157806360f0f00f146100a15780638c628e40146100d1578063b893e57914610101578063cc5c21ea14610131578063ceeef50414610161575b600080fd5b61008b60048036038101906100869190610d7c565b610191565b6040516100989190610e50565b60405180910390f35b6100bb60048036038101906100b69190610d7c565b6101ab565b6040516100c89190610f09565b60405180910390f35b6100eb60048036038101906100e69190610d7c565b6101c5565b6040516100f89190610f33565b60405180910390f35b61011b60048036038101906101169190610d7c565b6102aa565b6040516101289190610f33565b60405180910390f35b61014b60048036038101906101469190610ffc565b61032e565b604051610158919061108b565b60405180910390f35b61017b600480360381019061017691906110a6565b6103ad565b6040516101889190610f33565b60405180910390f35b610199610c82565b6101a38383610461565b905092915050565b6101b3610cb0565b6101bd83836104ce565b905092915050565b6000806101d284846104ce565b90506000806101e4836080015161053b565b9150915073__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de846000015185602001518660400151876060015186888a60a001516040516020016102339796959493929190611100565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161025e91906111ff565b602060405180830381865af415801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611236565b935050505092915050565b600073__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de84846040518363ffffffff1660e01b81526004016102e592919061129f565b602060405180830381865af4158015610302573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103269190611236565b905092915050565b6000602a858590501461037e57602a858590506040517fe2d2ab0a0000000000000000000000000000000000000000000000000000000081526004016103759291906112c3565b60405180910390fd5b600080600061038d888861055e565b9250925092506103a08183888887610963565b9350505050949350505050565b60008060006103bb8461053b565b9150915073__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de82846040516020016103ec92919061130d565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161041791906111ff565b602060405180830381865af4158015610434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104589190611236565b92505050919050565b610469610c82565b608083839050146104b7576080838390506040517f7b45159f0000000000000000000000000000000000000000000000000000000081526004016104ae92919061137e565b60405180910390fd5b82828101906104c6919061149f565b905092915050565b6104d6610cb0565b60c083839050146105245760c0838390506040517f7b45159f00000000000000000000000000000000000000000000000000000000815260040161051b929190611507565b60405180910390fd5b828281019061053391906115fc565b905092915050565b6000808260801c91506fffffffffffffffffffffffffffffffff83169050915091565b60008060606000858590509050600060028261057a9190611658565b905060008167ffffffffffffffff811115610598576105976113ac565b5b6040519080825280602002602001820160405280156105c65781602001602082028036833780820191505090505b5090506040888860008181106105df576105de61168c565b5b90506020028101906105f191906116ca565b90501461065f5760408888600081811061060e5761060d61168c565b5b905060200281019061062091906116ca565b90506040517f7b45159f000000000000000000000000000000000000000000000000000000008152600401610656929190611768565b60405180910390fd5b6000888860008181106106755761067461168c565b5b905060200281019061068791906116ca565b6000906020926106999392919061179b565b906106a491906117ee565b9050600073__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de8b8b6001896106d19190611658565b8181106106e1576106e061168c565b5b90506020028101906106f391906116ca565b6040518363ffffffff1660e01b815260040161071092919061129f565b602060405180830381865af415801561072d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107519190611236565b90506000600190505b848110156108345773__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de8c8c8481811061078f5761078e61168c565b5b90506020028101906107a191906116ca565b6040518363ffffffff1660e01b81526004016107be92919061129f565b602060405180830381865af41580156107db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ff9190611236565b84828761080c9190611658565b8151811061081d5761081c61168c565b5b60200260200101818152505080600101905061075a565b506108628a8a8681811061084b5761084a61168c565b5b905060200281019061085d91906116ca565b610bfe565b15610890576000801b8360008151811061087f5761087e61168c565b5b60200260200101818152505061094e565b73__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de8b8b878181106108bd576108bc61168c565b5b90506020028101906108cf91906116ca565b6040518363ffffffff1660e01b81526004016108ec92919061129f565b602060405180830381865af4158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d9190611236565b836000815181106109415761094061168c565b5b6020026020010181815250505b81818497509750975050505050509250925092565b600080859050600085905060016028600261097e9190611980565b6109889190611658565b8611156109c1576040517f382f093000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b6028811015610b55576001808284901c1603610a945773__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de8a8381518110610a0757610a0661168c565b5b602002602001015185604051602001610a2192919061130d565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401610a4c91906111ff565b602060405180830381865af4158015610a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8d9190611236565b9250610b4a565b73__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de848b8481518110610ac257610ac161168c565b5b6020026020010151604051602001610adb92919061130d565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401610b0691906111ff565b602060405180830381865af4158015610b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b479190611236565b92505b8060010190506109c4565b508473__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de8685604051602001610b8492919061130d565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401610baf91906111ff565b602060405180830381865af4158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190611236565b149250505095945050505050565b600080602084849050610c1191906119fa565b14610c48576040517fe61963f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001905082805b838201811015610c7a5780356000811503610c6e576000935050610c7a565b50602081019050610c4f565b505092915050565b6040518060800160405280600081526020016000815260200160008019168152602001600080191681525090565b6040518060c00160405280600067ffffffffffffffff16815260200160008152602001600080191681526020016000801916815260200160008019168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610d3c57610d3b610d17565b5b8235905067ffffffffffffffff811115610d5957610d58610d1c565b5b602083019150836001820283011115610d7557610d74610d21565b5b9250929050565b60008060208385031215610d9357610d92610d0d565b5b600083013567ffffffffffffffff811115610db157610db0610d12565b5b610dbd85828601610d26565b92509250509250929050565b6000819050919050565b610ddc81610dc9565b82525050565b6000819050919050565b610df581610de2565b82525050565b608082016000820151610e116000850182610dd3565b506020820151610e246020850182610dd3565b506040820151610e376040850182610dec565b506060820151610e4a6060850182610dec565b50505050565b6000608082019050610e656000830184610dfb565b92915050565b600067ffffffffffffffff82169050919050565b610e8881610e6b565b82525050565b60c082016000820151610ea46000850182610e7f565b506020820151610eb76020850182610dd3565b506040820151610eca6040850182610dec565b506060820151610edd6060850182610dec565b506080820151610ef06080850182610dec565b5060a0820151610f0360a0850182610e7f565b50505050565b600060c082019050610f1e6000830184610e8e565b92915050565b610f2d81610de2565b82525050565b6000602082019050610f486000830184610f24565b92915050565b60008083601f840112610f6457610f63610d17565b5b8235905067ffffffffffffffff811115610f8157610f80610d1c565b5b602083019150836020820283011115610f9d57610f9c610d21565b5b9250929050565b610fad81610dc9565b8114610fb857600080fd5b50565b600081359050610fca81610fa4565b92915050565b610fd981610de2565b8114610fe457600080fd5b50565b600081359050610ff681610fd0565b92915050565b6000806000806060858703121561101657611015610d0d565b5b600085013567ffffffffffffffff81111561103457611033610d12565b5b61104087828801610f4e565b9450945050602061105387828801610fbb565b925050604061106487828801610fe7565b91505092959194509250565b60008115159050919050565b61108581611070565b82525050565b60006020820190506110a0600083018461107c565b92915050565b6000602082840312156110bc576110bb610d0d565b5b60006110ca84828501610fe7565b91505092915050565b6110dc81610e6b565b82525050565b6110eb81610dc9565b82525050565b6110fa81610de2565b82525050565b600060e082019050611115600083018a6110d3565b61112260208301896110e2565b61112f60408301886110f1565b61113c60608301876110f1565b61114960808301866110f1565b61115660a08301856110f1565b61116360c08301846110d3565b98975050505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156111a957808201518184015260208101905061118e565b60008484015250505050565b6000601f19601f8301169050919050565b60006111d18261116f565b6111db818561117a565b93506111eb81856020860161118b565b6111f4816111b5565b840191505092915050565b6000602082019050818103600083015261121981846111c6565b905092915050565b60008151905061123081610fd0565b92915050565b60006020828403121561124c5761124b610d0d565b5b600061125a84828501611221565b91505092915050565b82818337600083830152505050565b600061127e838561117a565b935061128b838584611263565b611294836111b5565b840190509392505050565b600060208201905081810360008301526112ba818486611272565b90509392505050565b60006040820190506112d860008301856110e2565b6112e560208301846110e2565b9392505050565b6000819050919050565b61130761130282610de2565b6112ec565b82525050565b600061131982856112f6565b60208201915061132982846112f6565b6020820191508190509392505050565b6000819050919050565b6000819050919050565b600061136861136361135e84611339565b611343565b610dc9565b9050919050565b6113788161134d565b82525050565b6000604082019050611393600083018561136f565b6113a060208301846110e2565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6113e4826111b5565b810181811067ffffffffffffffff82111715611403576114026113ac565b5b80604052505050565b6000611416610d03565b905061142282826113db565b919050565b60006080828403121561143d5761143c6113a7565b5b611447608061140c565b9050600061145784828501610fbb565b600083015250602061146b84828501610fbb565b602083015250604061147f84828501610fe7565b604083015250606061149384828501610fe7565b60608301525092915050565b6000608082840312156114b5576114b4610d0d565b5b60006114c384828501611427565b91505092915050565b6000819050919050565b60006114f16114ec6114e7846114cc565b611343565b610dc9565b9050919050565b611501816114d6565b82525050565b600060408201905061151c60008301856114f8565b61152960208301846110e2565b9392505050565b61153981610e6b565b811461154457600080fd5b50565b60008135905061155681611530565b92915050565b600060c08284031215611572576115716113a7565b5b61157c60c061140c565b9050600061158c84828501611547565b60008301525060206115a084828501610fbb565b60208301525060406115b484828501610fe7565b60408301525060606115c884828501610fe7565b60608301525060806115dc84828501610fe7565b60808301525060a06115f084828501611547565b60a08301525092915050565b600060c0828403121561161257611611610d0d565b5b60006116208482850161155c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061166382610dc9565b915061166e83610dc9565b925082820390508181111561168657611685611629565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126116e7576116e66116bb565b5b80840192508235915067ffffffffffffffff821115611709576117086116c0565b5b602083019250600182023603831315611725576117246116c5565b5b509250929050565b6000819050919050565b600061175261174d6117488461172d565b611343565b610dc9565b9050919050565b61176281611737565b82525050565b600060408201905061177d6000830185611759565b61178a60208301846110e2565b9392505050565b600080fd5b600080fd5b600080858511156117af576117ae611791565b5b838611156117c0576117bf611796565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006117fa83836117d6565b826118058135610de2565b92506020821015611845576118407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026117e1565b831692505b505092915050565b60008160011c9050919050565b6000808291508390505b60018511156118a4578086048111156118805761187f611629565b5b600185161561188f5780820291505b808102905061189d8561184d565b9450611864565b94509492505050565b6000826118bd5760019050611979565b816118cb5760009050611979565b81600181146118e157600281146118eb5761191a565b6001915050611979565b60ff8411156118fd576118fc611629565b5b8360020a91508482111561191457611913611629565b5b50611979565b5060208310610133831016604e8410600b841016171561194f5782820a90508381111561194a57611949611629565b5b611979565b61195c848484600161185a565b9250905081840481111561197357611972611629565b5b81810290505b9392505050565b600061198b82610dc9565b915061199683610dc9565b92506119c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846118ad565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611a0582610dc9565b9150611a1083610dc9565b925082611a2057611a1f6119cb565b5b82820690509291505056fea2646970667358221220dc3bfee150d124bf55db2b0e9b2a1fdadf7f18099f86ab09b8342a13f5d88f7064736f6c634300081e0033", + "deployedBytecode": "730000000000000000000000000000000000000000301460806040526004361061006c5760003560e01c80635ea5a98f1461007157806360f0f00f146100a15780638c628e40146100d1578063b893e57914610101578063cc5c21ea14610131578063ceeef50414610161575b600080fd5b61008b60048036038101906100869190610d7c565b610191565b6040516100989190610e50565b60405180910390f35b6100bb60048036038101906100b69190610d7c565b6101ab565b6040516100c89190610f09565b60405180910390f35b6100eb60048036038101906100e69190610d7c565b6101c5565b6040516100f89190610f33565b60405180910390f35b61011b60048036038101906101169190610d7c565b6102aa565b6040516101289190610f33565b60405180910390f35b61014b60048036038101906101469190610ffc565b61032e565b604051610158919061108b565b60405180910390f35b61017b600480360381019061017691906110a6565b6103ad565b6040516101889190610f33565b60405180910390f35b610199610c82565b6101a38383610461565b905092915050565b6101b3610cb0565b6101bd83836104ce565b905092915050565b6000806101d284846104ce565b90506000806101e4836080015161053b565b9150915073__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de846000015185602001518660400151876060015186888a60a001516040516020016102339796959493929190611100565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161025e91906111ff565b602060405180830381865af415801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611236565b935050505092915050565b600073__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de84846040518363ffffffff1660e01b81526004016102e592919061129f565b602060405180830381865af4158015610302573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103269190611236565b905092915050565b6000602a858590501461037e57602a858590506040517fe2d2ab0a0000000000000000000000000000000000000000000000000000000081526004016103759291906112c3565b60405180910390fd5b600080600061038d888861055e565b9250925092506103a08183888887610963565b9350505050949350505050565b60008060006103bb8461053b565b9150915073__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de82846040516020016103ec92919061130d565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161041791906111ff565b602060405180830381865af4158015610434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104589190611236565b92505050919050565b610469610c82565b608083839050146104b7576080838390506040517f7b45159f0000000000000000000000000000000000000000000000000000000081526004016104ae92919061137e565b60405180910390fd5b82828101906104c6919061149f565b905092915050565b6104d6610cb0565b60c083839050146105245760c0838390506040517f7b45159f00000000000000000000000000000000000000000000000000000000815260040161051b929190611507565b60405180910390fd5b828281019061053391906115fc565b905092915050565b6000808260801c91506fffffffffffffffffffffffffffffffff83169050915091565b60008060606000858590509050600060028261057a9190611658565b905060008167ffffffffffffffff811115610598576105976113ac565b5b6040519080825280602002602001820160405280156105c65781602001602082028036833780820191505090505b5090506040888860008181106105df576105de61168c565b5b90506020028101906105f191906116ca565b90501461065f5760408888600081811061060e5761060d61168c565b5b905060200281019061062091906116ca565b90506040517f7b45159f000000000000000000000000000000000000000000000000000000008152600401610656929190611768565b60405180910390fd5b6000888860008181106106755761067461168c565b5b905060200281019061068791906116ca565b6000906020926106999392919061179b565b906106a491906117ee565b9050600073__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de8b8b6001896106d19190611658565b8181106106e1576106e061168c565b5b90506020028101906106f391906116ca565b6040518363ffffffff1660e01b815260040161071092919061129f565b602060405180830381865af415801561072d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107519190611236565b90506000600190505b848110156108345773__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de8c8c8481811061078f5761078e61168c565b5b90506020028101906107a191906116ca565b6040518363ffffffff1660e01b81526004016107be92919061129f565b602060405180830381865af41580156107db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ff9190611236565b84828761080c9190611658565b8151811061081d5761081c61168c565b5b60200260200101818152505080600101905061075a565b506108628a8a8681811061084b5761084a61168c565b5b905060200281019061085d91906116ca565b610bfe565b15610890576000801b8360008151811061087f5761087e61168c565b5b60200260200101818152505061094e565b73__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de8b8b878181106108bd576108bc61168c565b5b90506020028101906108cf91906116ca565b6040518363ffffffff1660e01b81526004016108ec92919061129f565b602060405180830381865af4158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d9190611236565b836000815181106109415761094061168c565b5b6020026020010181815250505b81818497509750975050505050509250925092565b600080859050600085905060016028600261097e9190611980565b6109889190611658565b8611156109c1576040517f382f093000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b6028811015610b55576001808284901c1603610a945773__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de8a8381518110610a0757610a0661168c565b5b602002602001015185604051602001610a2192919061130d565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401610a4c91906111ff565b602060405180830381865af4158015610a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8d9190611236565b9250610b4a565b73__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de848b8481518110610ac257610ac161168c565b5b6020026020010151604051602001610adb92919061130d565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401610b0691906111ff565b602060405180830381865af4158015610b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b479190611236565b92505b8060010190506109c4565b508473__$74b919ba2e0614cc63c63c81358550d998$__63aa1e84de8685604051602001610b8492919061130d565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401610baf91906111ff565b602060405180830381865af4158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190611236565b149250505095945050505050565b600080602084849050610c1191906119fa565b14610c48576040517fe61963f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001905082805b838201811015610c7a5780356000811503610c6e576000935050610c7a565b50602081019050610c4f565b505092915050565b6040518060800160405280600081526020016000815260200160008019168152602001600080191681525090565b6040518060c00160405280600067ffffffffffffffff16815260200160008152602001600080191681526020016000801916815260200160008019168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610d3c57610d3b610d17565b5b8235905067ffffffffffffffff811115610d5957610d58610d1c565b5b602083019150836001820283011115610d7557610d74610d21565b5b9250929050565b60008060208385031215610d9357610d92610d0d565b5b600083013567ffffffffffffffff811115610db157610db0610d12565b5b610dbd85828601610d26565b92509250509250929050565b6000819050919050565b610ddc81610dc9565b82525050565b6000819050919050565b610df581610de2565b82525050565b608082016000820151610e116000850182610dd3565b506020820151610e246020850182610dd3565b506040820151610e376040850182610dec565b506060820151610e4a6060850182610dec565b50505050565b6000608082019050610e656000830184610dfb565b92915050565b600067ffffffffffffffff82169050919050565b610e8881610e6b565b82525050565b60c082016000820151610ea46000850182610e7f565b506020820151610eb76020850182610dd3565b506040820151610eca6040850182610dec565b506060820151610edd6060850182610dec565b506080820151610ef06080850182610dec565b5060a0820151610f0360a0850182610e7f565b50505050565b600060c082019050610f1e6000830184610e8e565b92915050565b610f2d81610de2565b82525050565b6000602082019050610f486000830184610f24565b92915050565b60008083601f840112610f6457610f63610d17565b5b8235905067ffffffffffffffff811115610f8157610f80610d1c565b5b602083019150836020820283011115610f9d57610f9c610d21565b5b9250929050565b610fad81610dc9565b8114610fb857600080fd5b50565b600081359050610fca81610fa4565b92915050565b610fd981610de2565b8114610fe457600080fd5b50565b600081359050610ff681610fd0565b92915050565b6000806000806060858703121561101657611015610d0d565b5b600085013567ffffffffffffffff81111561103457611033610d12565b5b61104087828801610f4e565b9450945050602061105387828801610fbb565b925050604061106487828801610fe7565b91505092959194509250565b60008115159050919050565b61108581611070565b82525050565b60006020820190506110a0600083018461107c565b92915050565b6000602082840312156110bc576110bb610d0d565b5b60006110ca84828501610fe7565b91505092915050565b6110dc81610e6b565b82525050565b6110eb81610dc9565b82525050565b6110fa81610de2565b82525050565b600060e082019050611115600083018a6110d3565b61112260208301896110e2565b61112f60408301886110f1565b61113c60608301876110f1565b61114960808301866110f1565b61115660a08301856110f1565b61116360c08301846110d3565b98975050505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156111a957808201518184015260208101905061118e565b60008484015250505050565b6000601f19601f8301169050919050565b60006111d18261116f565b6111db818561117a565b93506111eb81856020860161118b565b6111f4816111b5565b840191505092915050565b6000602082019050818103600083015261121981846111c6565b905092915050565b60008151905061123081610fd0565b92915050565b60006020828403121561124c5761124b610d0d565b5b600061125a84828501611221565b91505092915050565b82818337600083830152505050565b600061127e838561117a565b935061128b838584611263565b611294836111b5565b840190509392505050565b600060208201905081810360008301526112ba818486611272565b90509392505050565b60006040820190506112d860008301856110e2565b6112e560208301846110e2565b9392505050565b6000819050919050565b61130761130282610de2565b6112ec565b82525050565b600061131982856112f6565b60208201915061132982846112f6565b6020820191508190509392505050565b6000819050919050565b6000819050919050565b600061136861136361135e84611339565b611343565b610dc9565b9050919050565b6113788161134d565b82525050565b6000604082019050611393600083018561136f565b6113a060208301846110e2565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6113e4826111b5565b810181811067ffffffffffffffff82111715611403576114026113ac565b5b80604052505050565b6000611416610d03565b905061142282826113db565b919050565b60006080828403121561143d5761143c6113a7565b5b611447608061140c565b9050600061145784828501610fbb565b600083015250602061146b84828501610fbb565b602083015250604061147f84828501610fe7565b604083015250606061149384828501610fe7565b60608301525092915050565b6000608082840312156114b5576114b4610d0d565b5b60006114c384828501611427565b91505092915050565b6000819050919050565b60006114f16114ec6114e7846114cc565b611343565b610dc9565b9050919050565b611501816114d6565b82525050565b600060408201905061151c60008301856114f8565b61152960208301846110e2565b9392505050565b61153981610e6b565b811461154457600080fd5b50565b60008135905061155681611530565b92915050565b600060c08284031215611572576115716113a7565b5b61157c60c061140c565b9050600061158c84828501611547565b60008301525060206115a084828501610fbb565b60208301525060406115b484828501610fe7565b60408301525060606115c884828501610fe7565b60608301525060806115dc84828501610fe7565b60808301525060a06115f084828501611547565b60a08301525092915050565b600060c0828403121561161257611611610d0d565b5b60006116208482850161155c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061166382610dc9565b915061166e83610dc9565b925082820390508181111561168657611685611629565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126116e7576116e66116bb565b5b80840192508235915067ffffffffffffffff821115611709576117086116c0565b5b602083019250600182023603831315611725576117246116c5565b5b509250929050565b6000819050919050565b600061175261174d6117488461172d565b611343565b610dc9565b9050919050565b61176281611737565b82525050565b600060408201905061177d6000830185611759565b61178a60208301846110e2565b9392505050565b600080fd5b600080fd5b600080858511156117af576117ae611791565b5b838611156117c0576117bf611796565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006117fa83836117d6565b826118058135610de2565b92506020821015611845576118407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026117e1565b831692505b505092915050565b60008160011c9050919050565b6000808291508390505b60018511156118a4578086048111156118805761187f611629565b5b600185161561188f5780820291505b808102905061189d8561184d565b9450611864565b94509492505050565b6000826118bd5760019050611979565b816118cb5760009050611979565b81600181146118e157600281146118eb5761191a565b6001915050611979565b60ff8411156118fd576118fc611629565b5b8360020a91508482111561191457611913611629565b5b50611979565b5060208310610133831016604e8410600b841016171561194f5782820a90508381111561194a57611949611629565b5b611979565b61195c848484600161185a565b9250905081840481111561197357611972611629565b5b81810290505b9392505050565b600061198b82610dc9565b915061199683610dc9565b92506119c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846118ad565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611a0582610dc9565b9150611a1083610dc9565b925082611a2057611a1f6119cb565b5b82820690509291505056fea2646970667358221220dc3bfee150d124bf55db2b0e9b2a1fdadf7f18099f86ab09b8342a13f5d88f7064736f6c634300081e0033", + "linkReferences": { + "contracts/Mimc.sol": { + "Mimc": [ + { + "length": 20, + "start": 572 + }, + { + "length": 20, + "start": 768 + }, + { + "length": 20, + "start": 1043 + }, + { + "length": 20, + "start": 1788 + }, + { + "length": 20, + "start": 1974 + }, + { + "length": 20, + "start": 2276 + }, + { + "length": 20, + "start": 2606 + }, + { + "length": 20, + "start": 2792 + }, + { + "length": 20, + "start": 2987 + } + ] + } + }, + "deployedLinkReferences": { + "contracts/Mimc.sol": { + "Mimc": [ + { + "length": 20, + "start": 490 + }, + { + "length": 20, + "start": 686 + }, + { + "length": 20, + "start": 961 + }, + { + "length": 20, + "start": 1706 + }, + { + "length": 20, + "start": 1892 + }, + { + "length": 20, + "start": 2194 + }, + { + "length": 20, + "start": 2524 + }, + { + "length": 20, + "start": 2710 + }, + { + "length": 20, + "start": 2905 + } + ] + } + } +} diff --git a/docker/compose-spec-l2-services.yml b/docker/compose-spec-l2-services.yml index 8c98a5df..2ce850cc 100644 --- a/docker/compose-spec-l2-services.yml +++ b/docker/compose-spec-l2-services.yml @@ -368,7 +368,7 @@ services: image: consensys/linea-shomei:2.3.0 hostname: shomei-frontend container_name: shomei-frontend - profiles: [ "l2", "l2-bc" ] + profiles: [ "l2", "l2-bc", "external-to-monorepo" ] depends_on: zkbesu-shomei: condition: service_started diff --git a/docker/compose-tracing-v2-ci-extension.yml b/docker/compose-tracing-v2-ci-extension.yml index 19b84fd5..2fdfc0c8 100644 --- a/docker/compose-tracing-v2-ci-extension.yml +++ b/docker/compose-tracing-v2-ci-extension.yml @@ -7,6 +7,11 @@ services: file: compose-spec-l2-services.yml service: l2-node-besu + shomei-frontend: + extends: + file: compose-spec-l2-services.yml + service: shomei-frontend + postman: extends: file: compose-spec-l2-services.yml diff --git a/e2e/src/common/utils.ts b/e2e/src/common/utils.ts index d638c3ca..95c93db9 100644 --- a/e2e/src/common/utils.ts +++ b/e2e/src/common/utils.ts @@ -74,7 +74,7 @@ export function generateRandomUUIDv4(): string { return randomUUID(); } -async function awaitUntil( +export async function awaitUntil( callback: () => Promise, stopRetry: (a: T) => boolean, pollingIntervalMs: number = 500, @@ -231,6 +231,68 @@ export class LineaBundleClient { } } +export class LineaShomeiClient { + private endpoint: URL; + + public constructor(endpoint: URL) { + this.endpoint = endpoint; + } + + public async rollupGetZkEVMStateMerkleProofV0( + startBlockNumber: number, + endBlockNumber: number, + zkStateManagerVersion: string, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ): Promise { + const request = { + method: "post", + body: JSON.stringify({ + jsonrpc: "2.0", + method: "rollup_getZkEVMStateMerkleProofV0", + params: [ + { + startBlockNumber, + endBlockNumber, + zkStateManagerVersion, + }, + ], + id: generateRandomInt(), + }), + }; + const response = await fetch(this.endpoint, request); + const responseJson = await response.json(); + assert("result" in responseJson); + return responseJson; + } +} + +export class LineaShomeiFrontendClient { + private endpoint: URL; + + public constructor(endpoint: URL) { + this.endpoint = endpoint; + } + + public async lineaGetProof( + address: string, + storageKeys: string[] = [], + blockParameter: string = "latest", + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ): Promise { + const request = { + method: "post", + body: JSON.stringify({ + jsonrpc: "2.0", + method: "linea_getProof", + params: [address, storageKeys, blockParameter], + id: generateRandomInt(), + }), + }; + const response = await fetch(this.endpoint, request); + return await response.json(); + } +} + export class TransactionExclusionClient { private endpoint: URL; @@ -465,6 +527,11 @@ export async function execDockerCommand(command: string, containerName: string): }); } +export async function getDockerImageTag(containerName: string, imageRepoName: string): Promise { + const inspectJsonOutput = JSON.parse(await execDockerCommand("inspect", containerName)); + return inspectJsonOutput[0]["Config"]["Image"].replace(imageRepoName + ":", ""); +} + export function generateRoleAssignments( roles: string[], defaultAddress: string, diff --git a/e2e/src/config/jest/global-setup.ts b/e2e/src/config/jest/global-setup.ts index c6140ee8..a6277614 100644 --- a/e2e/src/config/jest/global-setup.ts +++ b/e2e/src/config/jest/global-setup.ts @@ -2,7 +2,12 @@ import { ethers } from "ethers"; import { config } from "../tests-config"; import { deployContract } from "../../common/deployments"; -import { DummyContract__factory, TestContract__factory } from "../../typechain"; +import { + DummyContract__factory, + Mimc__factory, + SparseMerkleProof__factory, + TestContract__factory, +} from "../../typechain"; import { etherToWei, sendTransactionsToGenerateTrafficWithInterval } from "../../common/utils"; import { EMPTY_CONTRACT_CODE } from "../../common/constants"; import { createTestLogger } from "../logger"; @@ -36,10 +41,11 @@ async function configureOnceOffPrerequisities() { const to = "0x8D97689C9818892B700e27F316cc3E41e17fBeb9"; const calldata = "0x"; - const [dummyContract, l2DummyContract, l2TestContract] = await Promise.all([ + const [dummyContract, l2DummyContract, l2TestContract, l2MimcContract] = await Promise.all([ deployContract(new DummyContract__factory(), account, [{ nonce: l1AccountNonce }]), deployContract(new DummyContract__factory(), l2Account, [{ nonce: l2AccountNonce }]), deployContract(new TestContract__factory(), l2Account, [{ nonce: l2AccountNonce + 1 }]), + deployContract(new Mimc__factory(), l2Account, [{ nonce: l2AccountNonce + 2 }]), // Send ETH to the LineaRollup contract ( @@ -51,7 +57,16 @@ async function configureOnceOffPrerequisities() { ).wait(), ]); + const l2MimcContractAddress = await l2MimcContract.getAddress(); + const l2SparseMerkleProofContract = await deployContract( + new SparseMerkleProof__factory({ "contracts/Mimc.sol:Mimc": l2MimcContractAddress }), + l2Account, + [{ nonce: l2AccountNonce + 3 }], + ); + logger.info(`L1 Dummy contract deployed. address=${await dummyContract.getAddress()}`); logger.info(`L2 Dummy contract deployed. address=${await l2DummyContract.getAddress()}`); logger.info(`L2 Test contract deployed. address=${await l2TestContract.getAddress()}`); + logger.info(`L2 Mimc contract deployed. address=${l2MimcContractAddress}`); + logger.info(`L2 SparseMerkleProof contract deployed. address=${await l2SparseMerkleProofContract.getAddress()}`); } diff --git a/e2e/src/config/tests-config/environments/dev.ts b/e2e/src/config/tests-config/environments/dev.ts index ee1b3209..708078ba 100644 --- a/e2e/src/config/tests-config/environments/dev.ts +++ b/e2e/src/config/tests-config/environments/dev.ts @@ -43,6 +43,7 @@ const config: Config = { tokenBridgeAddress: "", l2TokenAddress: "", l2TestContractAddress: "", + l2SparseMerkleProofAddress: "", accountManager: new EnvironmentBasedAccountManager( new ethers.JsonRpcProvider(L2_RPC_URL.toString()), L2_WHALE_ACCOUNTS, diff --git a/e2e/src/config/tests-config/environments/local.ts b/e2e/src/config/tests-config/environments/local.ts index 79deb5fc..f7dcfb28 100644 --- a/e2e/src/config/tests-config/environments/local.ts +++ b/e2e/src/config/tests-config/environments/local.ts @@ -33,12 +33,11 @@ const config: Config = { besuNodeRpcUrl: L2_BESU_NODE_RPC_URL, chainId: 1337, l2MessageServiceAddress: "0xe537D669CA013d86EBeF1D64e40fC74CADC91987", - // Nonce 10 - l2TestContractAddress: "0x997FC3aF1F193Cbdc013060076c67A13e218980e", - // Nonce 9 - dummyContractAddress: "0xE4392c8ecC46b304C83cDB5edaf742899b1bda93", + l2TestContractAddress: "0x997FC3aF1F193Cbdc013060076c67A13e218980e", // Nonce 10 + dummyContractAddress: "0xE4392c8ecC46b304C83cDB5edaf742899b1bda93", // Nonce 9 tokenBridgeAddress: "0x5C95Bcd50E6D1B4E3CDC478484C9030Ff0a7D493", l2TokenAddress: "0xCC1B08B17301e090cbb4c1F5598Cbaa096d591FB", + l2SparseMerkleProofAddress: "0x7917AbB0cDbf3D3C4057d6a2808eE85ec16260C1", // Nonce 12 accountManager: new GenesisBasedAccountManager( new ethers.JsonRpcProvider(L2_RPC_URL.toString()), path.resolve( diff --git a/e2e/src/config/tests-config/environments/sepolia.ts b/e2e/src/config/tests-config/environments/sepolia.ts index 352134bf..3175ed40 100644 --- a/e2e/src/config/tests-config/environments/sepolia.ts +++ b/e2e/src/config/tests-config/environments/sepolia.ts @@ -42,6 +42,7 @@ const config: Config = { tokenBridgeAddress: "0x93DcAdf238932e6e6a85852caC89cBd71798F463", l2TokenAddress: "", l2TestContractAddress: "", + l2SparseMerkleProofAddress: "", accountManager: new EnvironmentBasedAccountManager( new ethers.JsonRpcProvider(L2_RPC_URL.toString()), L2_WHALE_ACCOUNTS, diff --git a/e2e/src/config/tests-config/setup.ts b/e2e/src/config/tests-config/setup.ts index a569489a..3f5d3cf1 100644 --- a/e2e/src/config/tests-config/setup.ts +++ b/e2e/src/config/tests-config/setup.ts @@ -11,6 +11,8 @@ import { LineaRollupV6__factory, ProxyAdmin, ProxyAdmin__factory, + SparseMerkleProof, + SparseMerkleProof__factory, TestContract, TestContract__factory, TestERC20, @@ -227,6 +229,10 @@ export default class TestSetup { } } + public getL2SparseMerkleProofContract(): SparseMerkleProof { + return SparseMerkleProof__factory.connect(this.config.L2.l2SparseMerkleProofAddress, this.getL2Provider()); + } + public getL1AccountManager(): AccountManager { return this.config.L1.accountManager; } diff --git a/e2e/src/config/tests-config/types.ts b/e2e/src/config/tests-config/types.ts index 460636fc..84e53e5f 100644 --- a/e2e/src/config/tests-config/types.ts +++ b/e2e/src/config/tests-config/types.ts @@ -20,6 +20,7 @@ export type BaseL2Config = BaseConfig & { besuNodeRpcUrl?: URL; tokenBridgeAddress: string; l2TokenAddress: string; + l2SparseMerkleProofAddress: string; shomeiEndpoint?: URL; shomeiFrontendEndpoint?: URL; sequencerEndpoint?: URL; diff --git a/e2e/src/shomei-get-proof.spec.ts b/e2e/src/shomei-get-proof.spec.ts new file mode 100644 index 00000000..40aaafa9 --- /dev/null +++ b/e2e/src/shomei-get-proof.spec.ts @@ -0,0 +1,85 @@ +import { describe, it } from "@jest/globals"; +import { config } from "./config/tests-config"; +import { awaitUntil, getDockerImageTag, LineaShomeiClient, LineaShomeiFrontendClient } from "./common/utils"; + +describe("Shomei Linea get proof test suite", () => { + const lineaRollupV6 = config.getLineaRollupContract(); + const shomeiFrontendEndpoint = config.getShomeiFrontendEndpoint(); + const shomeiEndpoint = config.getShomeiEndpoint(); + const lineaShomeiFrontenedClient = new LineaShomeiFrontendClient(shomeiFrontendEndpoint!); + const lineaShomeiClient = new LineaShomeiClient(shomeiEndpoint!); + + it.concurrent( + "Call linea_getProof to Shomei frontend node and get a valid proof", + async () => { + const shomeiImageTag = await getDockerImageTag("shomei-frontend", "consensys/linea-shomei"); + logger.debug(`shomeiImageTag=${shomeiImageTag}`); + + const currentL2BlockNumber = await awaitUntil( + async () => { + try { + return await lineaRollupV6.currentL2BlockNumber({ + blockTag: "finalized", + }); + } catch (err) { + if (!(err as Error).message.includes("could not decode result data")) { + throw err; + } // else means the currentL2BlockNumber is not ready in the L1 rollup contract yet + return -1n; + } + }, + (currentL2BlockNumber: bigint) => currentL2BlockNumber > 1n, + 2000, + 100000, + ); + + expect(currentL2BlockNumber).toBeGreaterThan(1n); + + logger.debug(`currentL2BlockNumber=${currentL2BlockNumber}`); + + const provingAddress = "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"; // from genesis file + const getProofResponse = await awaitUntil( + async () => + lineaShomeiFrontenedClient.lineaGetProof(provingAddress, [], "0x" + currentL2BlockNumber!.toString(16)), + (getProofResponse) => getProofResponse?.result, + 2000, + 100000, + ); + + const { + result: { zkEndStateRootHash }, + } = await lineaShomeiClient.rollupGetZkEVMStateMerkleProofV0( + Number(currentL2BlockNumber), + Number(currentL2BlockNumber), + shomeiImageTag, + ); + + expect(zkEndStateRootHash).toBeDefined(); + + const l2SparseMerkleProofContract = config.getL2SparseMerkleProofContract(); + const isValid = await l2SparseMerkleProofContract.verifyProof( + getProofResponse.result.accountProof.proof.proofRelatedNodes, + getProofResponse.result.accountProof.leafIndex, + zkEndStateRootHash, + ); + + expect(isValid).toBeTruthy(); + + // Modify the last hex character of the original state root hash should verify the same proof as invalid + const modifiedStateRootHash = + zkEndStateRootHash.slice(0, -1) + ((parseInt(zkEndStateRootHash.slice(-1), 16) + 1) % 16).toString(16); + + logger.debug(`originalStateRootHash=${zkEndStateRootHash}`); + logger.debug(`modifiedStateRootHash=${modifiedStateRootHash}`); + + const isInvalid = !(await l2SparseMerkleProofContract.verifyProof( + getProofResponse.result.accountProof.proof.proofRelatedNodes, + getProofResponse.result.accountProof.leafIndex, + modifiedStateRootHash, + )); + + expect(isInvalid).toBeTruthy(); + }, + 100_000, + ); +});