diff --git a/TESTSINVENTORY.md b/TESTSINVENTORY.md index 939d0b584..155e39d46 100644 --- a/TESTSINVENTORY.md +++ b/TESTSINVENTORY.md @@ -285,6 +285,7 @@ Table of tests currently implemented or being implemented in the E2E repository. | Test block gas limit increase to 60M | [Link](./tests/fusaka/eip7935.bats#L19) | | | Test execute multiple claimMessages via testClaim with internal reentrancy and bridgeAsset call | [Link](./tests/aggkit/claim-reetrancy.bats#L472) | | | Test inject invalid GER on L2 (bridges are valid) | [Link](./tests/aggkit/bridge-sovereign-chain-e2e.bats#L212) | | +| Test internal bridge transactions -> 2 bridge tx with different amounts | [Link](./tests/aggkit/internal-bridge-tx.bats#L62) | | | Test invalid GER injection case A (FEP mode) | [Link](./tests/aggkit/latest-n-injected-ger.bats#L825) | | | Test invalid GER injection case A (PP mode) | [Link](./tests/aggkit/latest-n-injected-ger.bats#L716) | | | Test invalid GER injection case B2 (FEP mode) | [Link](./tests/aggkit/latest-n-injected-ger.bats#L396) | | diff --git a/core/contracts/bridgeAsset/InternalBridgeTx.json b/core/contracts/bridgeAsset/InternalBridgeTx.json new file mode 100644 index 000000000..24927d7c6 --- /dev/null +++ b/core/contracts/bridgeAsset/InternalBridgeTx.json @@ -0,0 +1,347 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "_bridgeAddress", + "type": "address", + "internalType": "contract IPolygonZkEVMBridgeV2" + } + ], + "stateMutability": "nonpayable" + }, + { "type": "fallback", "stateMutability": "payable" }, + { "type": "receive", "stateMutability": "payable" }, + { + "type": "function", + "name": "bridgeAddress", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPolygonZkEVMBridgeV2" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onMessageReceived", + "inputs": [ + { + "name": "originAddress", + "type": "address", + "internalType": "address" + }, + { "name": "originNetwork", "type": "uint32", "internalType": "uint32" }, + { "name": "data1", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "updateBridgeParameters", + "inputs": [ + { + "name": "_destinationNetwork1", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_destinationAddress1", + "type": "address", + "internalType": "address" + }, + { "name": "_amount1", "type": "uint256", "internalType": "uint256" }, + { "name": "_token1", "type": "address", "internalType": "address" }, + { + "name": "_forceUpdateGlobalExitRoot1", + "type": "bool", + "internalType": "bool" + }, + { "name": "_permitData1", "type": "bytes", "internalType": "bytes" }, + { + "name": "_destinationNetwork2", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_destinationAddress2", + "type": "address", + "internalType": "address" + }, + { "name": "_amount2", "type": "uint256", "internalType": "uint256" }, + { "name": "_token2", "type": "address", "internalType": "address" }, + { + "name": "_forceUpdateGlobalExitRoot2", + "type": "bool", + "internalType": "bool" + }, + { "name": "_permitData2", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "BridgeTransactionExecuted", + "inputs": [ + { + "name": "destinationNetwork", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + }, + { + "name": "destinationAddress", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MessageReceived", + "inputs": [ + { + "name": "destinationAddress", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UpdateBridgeParameters", + "inputs": [], + "anonymous": false + } + ], + "bytecode": { + "object": "0x60a034606c57601f610bc438819003918201601f19168301916001600160401b03831184841017607057808492602094604052833981010312606c57516001600160a01b0381168103606c57608052604051610b3f90816100858239608051818181604f01526105e30152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610011575b005b5f905f3560e01c9081631806b5f2146104fb57508063186c95a2146100815763a3c573eb0361000f573461007e578060031936011261007e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b503461007e5761018036600319011261007e576004359063ffffffff821680920361007e576024356001600160a01b03811681036104f7576064356001600160a01b038116908190036104f3576084358015158091036104ef5760a43567ffffffffffffffff81116104eb576100fb903690600401610aa3565b60c4359063ffffffff82168092036104e75760e435926001600160a01b03841684036104e357610124356001600160a01b03811695908690036104df5761014435968715158098036104db576101643567ffffffffffffffff81116104d757610168903690600401610aa3565b99909b8b5491640100000000600160c01b039060201b169167ffffffffffffffff60c01b1617178a556044356001556002549160ff60a01b9060a01b16916affffffffffffffffffffff60a81b16171760025567ffffffffffffffff82116104c3576101d5600354610ad1565b601f8111610460575b508790601f83116001146103de5761020d92918991836102e0575b50508160011b915f199060031b1c19161790565b6003555b60045491640100000000600160c01b039060201b169167ffffffffffffffff60c01b161717600455610104356005556006549160ff60a01b9060a01b16916affffffffffffffffffffff60a81b16171760065567ffffffffffffffff81116103ca5761027e600754610ad1565b601f8111610367575b5081601f82116001146102eb57819083946102b594926102e05750508160011b915f199060031b1c19161790565b6007555b7f2d68573849e67fd5860888f93f5fa762f0de2b7b4eeb224ced1de97a614789de8180a180f35b013590505f806101f9565b601f198216937fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68891845b86811061034f5750836001959610610336575b505050811b016007556102b9565b01355f19600384901b60f8161c191690555f8080610328565b90926020600181928686013581550194019101610315565b600783527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688601f830160051c810191602084106103c0575b601f0160051c01905b8181106103b55750610287565b8381556001016103a8565b909150819061039f565b634e487b7160e01b82526041600452602482fd5b600389527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b91601f1984168a5b818110610448575090846001959493921061042f575b505050811b01600355610211565b01355f19600384901b60f8161c191690555f8080610421565b9193602060018192878701358155019501920161040b565b600389527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c810191602085106104b9575b601f0160051c01905b8181106104ae57506101de565b8981556001016104a1565b9091508190610498565b634e487b7160e01b88526041600452602488fd5b8a80fd5b8980fd5b8880fd5b8780fd5b8680fd5b8480fd5b8380fd5b8280fd5b5080fd5b82606036600319011261095357610510610a58565b50610519610a6e565b5060443567ffffffffffffffff811161095357366023820112156109535780600401359067ffffffffffffffff8211610a4457610560601f8301601f191660200185610a81565b818452366024838301011161095357815f926024602093018387013784010152815167ffffffffffffffff8111610a445761059c600854610ad1565b601f81116109e1575b50602092601f8211600114610962576105d5929382915f926109575750508160011b915f199060031b1c19161790565b6008555b6001545f546002547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169290833b156109535760405163cd58657960e01b815263ffffffff8416600482015260209390931c6001600160a01b039081166024850152604484018390528116606484015260a01c60ff161515608483015260c060a483015260035482905f9061067581610ad1565b908160c48501526001811690815f1461093157506001146108d9575b50918180845f95500391865af190816108c4575b5061086f575b600554908260045460065493833b156104f35760405163cd58657960e01b815263ffffffff8316600482015260209290921c6001600160a01b039081166024840152604483018290528516606483015260a09490941c60ff161515608482015260c060a482015260075490938491839061072481610ad1565b908160c48601526001811690815f1461084d57506001146107f3575b50839491838281935003925af191826107de575b5050610788575b7fdf9f4a3ac608a3edf2b45dafa2b30a40073df2a24c06756d4a68210b7de0a8b86020604051338152a180f35b6004546005546040805163ffffffff841681526001600160a01b03602094851c16938101939093528201527f02e4c49d2b3292f9b51e364abbda3e6b8aa1df17b775ed2aac12ba8f333a6c3b90606090a161075b565b816107e891610a81565b6104f7578183610754565b600785528491507fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6885b818310610830575050820160e40183610740565b805483890160e4015288955087945060209092019160010161081c565b60ff191660e48087019190915291151560051b85019091019150849050610740565b81546001546040805163ffffffff841681526001600160a01b03602094851c16938101939093528201527f02e4c49d2b3292f9b51e364abbda3e6b8aa1df17b775ed2aac12ba8f333a6c3b90606090a16106ab565b6108d19193505f90610a81565b5f91836106a5565b60035f90815291507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b818310610917575050810160e40181610691565b805483870160e40152859350602090920191600101610903565b60ff191660e48086019190915291151560051b84019091019150829050610691565b5f80fd5b0151905084806101f9565b601f1982169360085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3915f5b8681106109c957508360019596106109b1575b505050811b016008556105d9565b01515f1960f88460031b161c191690558380806109a3565b91926020600181928685015181550194019201610990565b60085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3601f830160051c81019160208410610a3a575b601f0160051c01905b818110610a2f57506105a5565b5f8155600101610a22565b9091508190610a19565b634e487b7160e01b5f52604160045260245ffd5b600435906001600160a01b038216820361095357565b6024359063ffffffff8216820361095357565b90601f8019910116810190811067ffffffffffffffff821117610a4457604052565b9181601f840112156109535782359167ffffffffffffffff8311610953576020838186019501011161095357565b90600182811c92168015610aff575b6020831014610aeb57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610ae056fea2646970667358221220652d1b9f97707ce41df7297cf7131ae8c85ab765d7a815ad7d2ec3c53255da5364736f6c634300081c0033", + "sourceMap": "91:3348:1:-:0;;;;;;;;;;;;;-1:-1:-1;;91:3348:1;;;;-1:-1:-1;;;;;91:3348:1;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:3348:1;;;;;;880:30;;91:3348;;;;;;;;880:30;91:3348;;;;;;;;;;;;-1:-1:-1;91:3348:1;;;;;;-1:-1:-1;91:3348:1;;;;;-1:-1:-1;91:3348:1", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080806040526004361015610011575b005b5f905f3560e01c9081631806b5f2146104fb57508063186c95a2146100815763a3c573eb0361000f573461007e578060031936011261007e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b503461007e5761018036600319011261007e576004359063ffffffff821680920361007e576024356001600160a01b03811681036104f7576064356001600160a01b038116908190036104f3576084358015158091036104ef5760a43567ffffffffffffffff81116104eb576100fb903690600401610aa3565b60c4359063ffffffff82168092036104e75760e435926001600160a01b03841684036104e357610124356001600160a01b03811695908690036104df5761014435968715158098036104db576101643567ffffffffffffffff81116104d757610168903690600401610aa3565b99909b8b5491640100000000600160c01b039060201b169167ffffffffffffffff60c01b1617178a556044356001556002549160ff60a01b9060a01b16916affffffffffffffffffffff60a81b16171760025567ffffffffffffffff82116104c3576101d5600354610ad1565b601f8111610460575b508790601f83116001146103de5761020d92918991836102e0575b50508160011b915f199060031b1c19161790565b6003555b60045491640100000000600160c01b039060201b169167ffffffffffffffff60c01b161717600455610104356005556006549160ff60a01b9060a01b16916affffffffffffffffffffff60a81b16171760065567ffffffffffffffff81116103ca5761027e600754610ad1565b601f8111610367575b5081601f82116001146102eb57819083946102b594926102e05750508160011b915f199060031b1c19161790565b6007555b7f2d68573849e67fd5860888f93f5fa762f0de2b7b4eeb224ced1de97a614789de8180a180f35b013590505f806101f9565b601f198216937fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68891845b86811061034f5750836001959610610336575b505050811b016007556102b9565b01355f19600384901b60f8161c191690555f8080610328565b90926020600181928686013581550194019101610315565b600783527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688601f830160051c810191602084106103c0575b601f0160051c01905b8181106103b55750610287565b8381556001016103a8565b909150819061039f565b634e487b7160e01b82526041600452602482fd5b600389527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b91601f1984168a5b818110610448575090846001959493921061042f575b505050811b01600355610211565b01355f19600384901b60f8161c191690555f8080610421565b9193602060018192878701358155019501920161040b565b600389527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c810191602085106104b9575b601f0160051c01905b8181106104ae57506101de565b8981556001016104a1565b9091508190610498565b634e487b7160e01b88526041600452602488fd5b8a80fd5b8980fd5b8880fd5b8780fd5b8680fd5b8480fd5b8380fd5b8280fd5b5080fd5b82606036600319011261095357610510610a58565b50610519610a6e565b5060443567ffffffffffffffff811161095357366023820112156109535780600401359067ffffffffffffffff8211610a4457610560601f8301601f191660200185610a81565b818452366024838301011161095357815f926024602093018387013784010152815167ffffffffffffffff8111610a445761059c600854610ad1565b601f81116109e1575b50602092601f8211600114610962576105d5929382915f926109575750508160011b915f199060031b1c19161790565b6008555b6001545f546002547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169290833b156109535760405163cd58657960e01b815263ffffffff8416600482015260209390931c6001600160a01b039081166024850152604484018390528116606484015260a01c60ff161515608483015260c060a483015260035482905f9061067581610ad1565b908160c48501526001811690815f1461093157506001146108d9575b50918180845f95500391865af190816108c4575b5061086f575b600554908260045460065493833b156104f35760405163cd58657960e01b815263ffffffff8316600482015260209290921c6001600160a01b039081166024840152604483018290528516606483015260a09490941c60ff161515608482015260c060a482015260075490938491839061072481610ad1565b908160c48601526001811690815f1461084d57506001146107f3575b50839491838281935003925af191826107de575b5050610788575b7fdf9f4a3ac608a3edf2b45dafa2b30a40073df2a24c06756d4a68210b7de0a8b86020604051338152a180f35b6004546005546040805163ffffffff841681526001600160a01b03602094851c16938101939093528201527f02e4c49d2b3292f9b51e364abbda3e6b8aa1df17b775ed2aac12ba8f333a6c3b90606090a161075b565b816107e891610a81565b6104f7578183610754565b600785528491507fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6885b818310610830575050820160e40183610740565b805483890160e4015288955087945060209092019160010161081c565b60ff191660e48087019190915291151560051b85019091019150849050610740565b81546001546040805163ffffffff841681526001600160a01b03602094851c16938101939093528201527f02e4c49d2b3292f9b51e364abbda3e6b8aa1df17b775ed2aac12ba8f333a6c3b90606090a16106ab565b6108d19193505f90610a81565b5f91836106a5565b60035f90815291507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b818310610917575050810160e40181610691565b805483870160e40152859350602090920191600101610903565b60ff191660e48086019190915291151560051b84019091019150829050610691565b5f80fd5b0151905084806101f9565b601f1982169360085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3915f5b8681106109c957508360019596106109b1575b505050811b016008556105d9565b01515f1960f88460031b161c191690558380806109a3565b91926020600181928685015181550194019201610990565b60085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3601f830160051c81019160208410610a3a575b601f0160051c01905b818110610a2f57506105a5565b5f8155600101610a22565b9091508190610a19565b634e487b7160e01b5f52604160045260245ffd5b600435906001600160a01b038216820361095357565b6024359063ffffffff8216820361095357565b90601f8019910116810190811067ffffffffffffffff821117610a4457604052565b9181601f840112156109535782359167ffffffffffffffff8311610953576020838186019501011161095357565b90600182811c92168015610aff575b6020831014610aeb57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610ae056fea2646970667358221220652d1b9f97707ce41df7297cf7131ae8c85ab765d7a815ad7d2ec3c53255da5364736f6c634300081c0033", + "sourceMap": "91:3348:1:-:0;;;;;;;;;;-1:-1:-1;91:3348:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;323:52;-1:-1:-1;;;;;91:3348:1;;;;;;;;;;;;;;;;-1:-1:-1;;91:3348:1;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:3348:1;;;;;;;;-1:-1:-1;;;;;91:3348:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:3348:1;;;;;;;;-1:-1:-1;;;;;91:3348:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1666:16;91:3348;;;;;;;;;;;;;;;;1666:16;91:3348;;;;;;;1758:26;91:3348;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1758:26;91:3348;;;;;;;;;;;;;;;;;;;;;;;;;1951:18;91:3348;1979:16;91:3348;;;;;;;;;;;;;;;;1979:16;91:3348;;;;;;;2071:26;91:3348;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2071:26;91:3348;;2113:24;;;;91:3348;;;;;;-1:-1:-1;91:3348:1;;;;;-1:-1:-1;;91:3348:1;;;;;;;;;;;;;;;;;;;;;;;;;;;2071:26;91:3348;;;;;;-1:-1:-1;;1758:26:1;91:3348;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2071:26;91:3348;;;;;;1951:18;91:3348;;;;;;;;;;;;1951:18;91:3348;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:3348:1;;;;;-1:-1:-1;;;91:3348:1;;;;;;;;;1758:26;91:3348;;;;-1:-1:-1;;91:3348:1;;;;;;;;;;;;;;;;;;;;;;;;;;;1758:26;91:3348;;;;;;-1:-1:-1;;1758:26:1;91:3348;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1758:26;91:3348;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:3348:1;;;;;-1:-1:-1;;;91:3348:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:3348:1;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:3348:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2299:12;91:3348;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2299:12;91:3348;;;;;;2504:6;91:3348;2362:13;-1:-1:-1;;;;;91:3348:1;;;2362:223;;;;;91:3348;;-1:-1:-1;;;2362:223:1;;91:3348;;;;2362:223;;91:3348;;;;;;-1:-1:-1;;;;;91:3348:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2564:11;91:3348;;;-1:-1:-1;;91:3348:1;;;:::i;:::-;;;;;;;2395:7;91:3348;;2395:7;;91:3348;2395:7;;;91:3348;;;;;;;;;;;;;2362:223;;;;;;;;;;91:3348;2358:433;;;91:3348;2875:7;91:3348;;;;;2984:6;91:3348;2842:223;;;;;;91:3348;;-1:-1:-1;;;2842:223:1;;91:3348;;;;2842:223;;91:3348;;;;;;-1:-1:-1;;;;;91:3348:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3044:11;91:3348;;;;;;;;;;:::i;:::-;;;;;;;2395:7;91:3348;;2395:7;;91:3348;2395:7;;;91:3348;;;;;;;;;;;;;;2842:223;;;;;;;;;91:3348;2838:423;;;;91:3348;3276:27;91:3348;;;3292:10;91:3348;;3276:27;91:3348;;2838:423;91:3348;;2875:7;91:3348;;;;;;;;;-1:-1:-1;;;;;91:3348:1;;;;;;;;;;;;;;;3085:76;;91:3348;;3085:76;2838:423;;2842:223;;;;;:::i;:::-;91:3348;;2842:223;;;;91:3348;3044:11;91:3348;;;;-1:-1:-1;91:3348:1;;;;;;;-1:-1:-1;;91:3348:1;;;;;;;;;;;;;;;;;;-1:-1:-1;91:3348:1;;-1:-1:-1;91:3348:1;;;;;2395:7;91:3348;;;;-1:-1:-1;;91:3348:1;;;;;;;;;;;;2875:7;91:3348;;;;;;;-1:-1:-1;91:3348:1;;-1:-1:-1;91:3348:1;;2358:433;91:3348;;2395:7;91:3348;;;;;;;;;-1:-1:-1;;;;;91:3348:1;;;;;;;;;;;;;;;2605:76;;91:3348;;2605:76;2358:433;;2362:223;;;;;91:3348;2362:223;;:::i;:::-;91:3348;2362:223;;;;91:3348;2564:11;91:3348;;;;;-1:-1:-1;91:3348:1;;;;;;;-1:-1:-1;;91:3348:1;;;;;;;;;;;;;;;;;;-1:-1:-1;91:3348:1;;;;;2395:7;91:3348;;;;-1:-1:-1;;91:3348:1;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:3348:1;;-1:-1:-1;91:3348:1;;2362:223;91:3348;;;;;;;-1:-1:-1;91:3348:1;;;;;;;;;;2299:12;91:3348;;;;;;;;;;;;;;;;;;;;;;;;;;2299:12;91:3348;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2299:12;91:3348;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:3348:1;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:3348:1;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;", + "linkReferences": {}, + "immutableReferences": { + "305": [ + { "start": 79, "length": 32 }, + { "start": 1507, "length": 32 } + ] + } + }, + "methodIdentifiers": { + "bridgeAddress()": "a3c573eb", + "onMessageReceived(address,uint32,bytes)": "1806b5f2", + "updateBridgeParameters(uint32,address,uint256,address,bool,bytes,uint32,address,uint256,address,bool,bytes)": "186c95a2" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPolygonZkEVMBridgeV2\",\"name\":\"_bridgeAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BridgeTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"}],\"name\":\"MessageReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"UpdateBridgeParameters\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"bridgeAddress\",\"outputs\":[{\"internalType\":\"contract IPolygonZkEVMBridgeV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"data1\",\"type\":\"bytes\"}],\"name\":\"onMessageReceived\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destinationNetwork1\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_destinationAddress1\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_forceUpdateGlobalExitRoot1\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_permitData1\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_destinationNetwork2\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_destinationAddress2\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount2\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_token2\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_forceUpdateGlobalExitRoot2\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_permitData2\",\"type\":\"bytes\"}],\"name\":\"updateBridgeParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"core/contracts/bridgeAsset/InternalBridgeTx.sol\":\"InternalBridgeTx\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"core/contracts/bridgeAsset/Interfaces.sol\":{\"keccak256\":\"0x24710daa0affa083e6f7a2c79544d2095a1ae82cdb739144fe8a1886d1104017\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d6eec59e7d3b40a1acbf7a951303ec65a09f9e55195458bdad2f47f1a9ecc7fe\",\"dweb:/ipfs/QmXeQaWMEQxitoGEHoHnNe7t8eibA19eSFPNA3PZGbJiWG\"]},\"core/contracts/bridgeAsset/InternalBridgeTx.sol\":{\"keccak256\":\"0x58aa1e8529b23c0d4deac6b2db1eeb60a8beb23ab62d5a42b2fd2743644868f6\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d995301fcdacd0046199496a8dab786c9b646447c59cc60ab9672ab786843956\",\"dweb:/ipfs/QmZRKhdjXzLzrrbM4tCu6g1QYXYVHgM3xZpYhZGEeigf6E\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.28+commit.7893614a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IPolygonZkEVMBridgeV2", + "name": "_bridgeAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32", + "indexed": false + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "BridgeTransactionExecuted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "destinationAddress", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "MessageReceived", + "anonymous": false + }, + { + "inputs": [], + "type": "event", + "name": "UpdateBridgeParameters", + "anonymous": false + }, + { "inputs": [], "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "bridgeAddress", + "outputs": [ + { + "internalType": "contract IPolygonZkEVMBridgeV2", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { "internalType": "bytes", "name": "data1", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "function", + "name": "onMessageReceived" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destinationNetwork1", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_destinationAddress1", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount1", + "type": "uint256" + }, + { "internalType": "address", "name": "_token1", "type": "address" }, + { + "internalType": "bool", + "name": "_forceUpdateGlobalExitRoot1", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "_permitData1", + "type": "bytes" + }, + { + "internalType": "uint32", + "name": "_destinationNetwork2", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_destinationAddress2", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount2", + "type": "uint256" + }, + { "internalType": "address", "name": "_token2", "type": "address" }, + { + "internalType": "bool", + "name": "_forceUpdateGlobalExitRoot2", + "type": "bool" + }, + { "internalType": "bytes", "name": "_permitData2", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateBridgeParameters" + }, + { "inputs": [], "stateMutability": "payable", "type": "receive" } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", + "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", + "forge-std/=lib/forge-std/src/", + "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "core/contracts/bridgeAsset/InternalBridgeTx.sol": "InternalBridgeTx" + }, + "evmVersion": "cancun", + "libraries": {}, + "viaIR": true + }, + "sources": { + "core/contracts/bridgeAsset/Interfaces.sol": { + "keccak256": "0x24710daa0affa083e6f7a2c79544d2095a1ae82cdb739144fe8a1886d1104017", + "urls": [ + "bzz-raw://d6eec59e7d3b40a1acbf7a951303ec65a09f9e55195458bdad2f47f1a9ecc7fe", + "dweb:/ipfs/QmXeQaWMEQxitoGEHoHnNe7t8eibA19eSFPNA3PZGbJiWG" + ], + "license": "AGPL-3.0" + }, + "core/contracts/bridgeAsset/InternalBridgeTx.sol": { + "keccak256": "0x58aa1e8529b23c0d4deac6b2db1eeb60a8beb23ab62d5a42b2fd2743644868f6", + "urls": [ + "bzz-raw://d995301fcdacd0046199496a8dab786c9b646447c59cc60ab9672ab786843956", + "dweb:/ipfs/QmZRKhdjXzLzrrbM4tCu6g1QYXYVHgM3xZpYhZGEeigf6E" + ], + "license": "AGPL-3.0" + } + }, + "version": 1 + }, + "id": 1 +} diff --git a/core/contracts/bridgeAsset/InternalBridgeTx.sol b/core/contracts/bridgeAsset/InternalBridgeTx.sol new file mode 100644 index 000000000..2c9199c02 --- /dev/null +++ b/core/contracts/bridgeAsset/InternalBridgeTx.sol @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: AGPL-3.0 + +pragma solidity ^0.8.20; +import "./Interfaces.sol"; + +contract InternalBridgeTx { + event MessageReceived(address destinationAddress); + event BridgeTransactionExecuted(uint32 destinationNetwork, address destinationAddress, uint256 amount); + event UpdateBridgeParameters(); + + IPolygonZkEVMBridgeV2 public immutable bridgeAddress; + + // First bridge transaction parameters + uint32 destinationNetwork1; + address destinationAddress1; + uint256 amount1; + address token1; + bool forceUpdateGlobalExitRoot1; + bytes permitData1; + + // Second bridge transaction parameters + uint32 destinationNetwork2; + address destinationAddress2; + uint256 amount2; + address token2; + bool forceUpdateGlobalExitRoot2; + bytes permitData2; + + bytes data; + + constructor(IPolygonZkEVMBridgeV2 _bridgeAddress) { + bridgeAddress = _bridgeAddress; + } + + function updateBridgeParameters( + // First bridge transaction parameters + uint32 _destinationNetwork1, + address _destinationAddress1, + uint256 _amount1, + address _token1, + bool _forceUpdateGlobalExitRoot1, + bytes calldata _permitData1, + // Second bridge transaction parameters + uint32 _destinationNetwork2, + address _destinationAddress2, + uint256 _amount2, + address _token2, + bool _forceUpdateGlobalExitRoot2, + bytes calldata _permitData2 + ) public { + // Set first bridge transaction parameters + destinationNetwork1 = _destinationNetwork1; + destinationAddress1 = _destinationAddress1; + amount1 = _amount1; + token1 = _token1; + forceUpdateGlobalExitRoot1 = _forceUpdateGlobalExitRoot1; + permitData1 = _permitData1; + + // Set second bridge transaction parameters + destinationNetwork2 = _destinationNetwork2; + destinationAddress2 = _destinationAddress2; + amount2 = _amount2; + token2 = _token2; + forceUpdateGlobalExitRoot2 = _forceUpdateGlobalExitRoot2; + permitData2 = _permitData2; + + emit UpdateBridgeParameters(); + } + + function onMessageReceived( + bytes memory data1 + ) external payable { + data = data1; + + // First bridge transaction + try bridgeAddress.bridgeAsset{value: amount1}( + destinationNetwork1, + destinationAddress1, + amount1, + token1, + forceUpdateGlobalExitRoot1, + permitData1 + ) { + emit BridgeTransactionExecuted(destinationNetwork1, destinationAddress1, amount1); + } catch { + // First bridge transaction failed, continue with second transaction + } + + // Second bridge transaction + try bridgeAddress.bridgeAsset{value: amount2}( + destinationNetwork2, + destinationAddress2, + amount2, + token2, + forceUpdateGlobalExitRoot2, + permitData2 + ) { + emit BridgeTransactionExecuted(destinationNetwork2, destinationAddress2, amount2); + } catch { + // Second bridge transaction failed, transaction continues + } + + emit MessageReceived(msg.sender); + } + + // Function to receive ETH + receive() external payable {} + + // Fallback function + fallback() external payable {} +} diff --git a/core/contracts/bridgeAsset/InternalClaims.json b/core/contracts/bridgeAsset/InternalClaims.json index d8c8812bb..2ff60bf07 100644 --- a/core/contracts/bridgeAsset/InternalClaims.json +++ b/core/contracts/bridgeAsset/InternalClaims.json @@ -1 +1,605 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_bridgeAddress","type":"address","internalType":"contract IPolygonZkEVMBridgeV2"}],"stateMutability":"nonpayable"},{"type":"function","name":"bridgeAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPolygonZkEVMBridgeV2"}],"stateMutability":"view"},{"type":"function","name":"onMessageReceived","inputs":[{"name":"originAddress1","type":"address","internalType":"address"},{"name":"originNetwork1","type":"uint32","internalType":"uint32"},{"name":"data1","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"updateParameters","inputs":[{"name":"msmtProofLocalExitRoot1","type":"bytes32[32]","internalType":"bytes32[32]"},{"name":"msmtProofRollupExitRoot1","type":"bytes32[32]","internalType":"bytes32[32]"},{"name":"mglobalIndex1","type":"uint256","internalType":"uint256"},{"name":"mmainnetExitRoot1","type":"bytes32","internalType":"bytes32"},{"name":"mrollupExitRoot1","type":"bytes32","internalType":"bytes32"},{"name":"moriginNetwork1","type":"uint32","internalType":"uint32"},{"name":"moriginAddress1","type":"address","internalType":"address"},{"name":"mdestinationNetwork1","type":"uint32","internalType":"uint32"},{"name":"mdestinationAddress1","type":"address","internalType":"address"},{"name":"mamount1","type":"uint256","internalType":"uint256"},{"name":"mmetadata1","type":"bytes","internalType":"bytes"},{"name":"msmtProofLocalExitRoot2","type":"bytes32[32]","internalType":"bytes32[32]"},{"name":"msmtProofRollupExitRoot2","type":"bytes32[32]","internalType":"bytes32[32]"},{"name":"mglobalIndex2","type":"uint256","internalType":"uint256"},{"name":"mmainnetExitRoot2","type":"bytes32","internalType":"bytes32"},{"name":"mrollupExitRoot2","type":"bytes32","internalType":"bytes32"},{"name":"moriginNetwork2","type":"uint32","internalType":"uint32"},{"name":"moriginAddress2","type":"address","internalType":"address"},{"name":"mdestinationNetwork2","type":"uint32","internalType":"uint32"},{"name":"mdestinationAddress2","type":"address","internalType":"address"},{"name":"mamount2","type":"uint256","internalType":"uint256"},{"name":"mmetadata2","type":"bytes","internalType":"bytes"},{"name":"msmtProofLocalExitRoot3","type":"bytes32[32]","internalType":"bytes32[32]"},{"name":"msmtProofRollupExitRoot3","type":"bytes32[32]","internalType":"bytes32[32]"},{"name":"mglobalIndex3","type":"uint256","internalType":"uint256"},{"name":"mmainnetExitRoot3","type":"bytes32","internalType":"bytes32"},{"name":"mrollupExitRoot3","type":"bytes32","internalType":"bytes32"},{"name":"moriginNetwork3","type":"uint32","internalType":"uint32"},{"name":"moriginAddress3","type":"address","internalType":"address"},{"name":"mdestinationNetwork3","type":"uint32","internalType":"uint32"},{"name":"mdestinationAddress3","type":"address","internalType":"address"},{"name":"mamount3","type":"uint256","internalType":"uint256"},{"name":"mmetadata3","type":"bytes","internalType":"bytes"},{"name":"msmtProofLocalExitRoot4","type":"bytes32[32]","internalType":"bytes32[32]"},{"name":"msmtProofRollupExitRoot4","type":"bytes32[32]","internalType":"bytes32[32]"},{"name":"mglobalIndex4","type":"uint256","internalType":"uint256"},{"name":"mmainnetExitRoot4","type":"bytes32","internalType":"bytes32"},{"name":"mrollupExitRoot4","type":"bytes32","internalType":"bytes32"},{"name":"moriginNetwork4","type":"uint32","internalType":"uint32"},{"name":"moriginAddress4","type":"address","internalType":"address"},{"name":"mdestinationNetwork4","type":"uint32","internalType":"uint32"},{"name":"mdestinationAddress4","type":"address","internalType":"address"},{"name":"mamount4","type":"uint256","internalType":"uint256"},{"name":"mmetadata4","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"MessageReceived","inputs":[{"name":"destinationAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"UpdateParameters","inputs":[],"anonymous":false}],"bytecode":{"object":"0x60a034606c57601f6114b438819003918201601f19168301916001600160401b03831184841017607057808492602094604052833981010312606c57516001600160a01b0381168103606c5760805260405161142f90816100858239608051818181605b0152610c710152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe610240806040526004361015610013575f80fd5b5f610220525f3560e01c9081631806b5f214610b6c5750806377ff9f0b146100915763a3c573eb14610043575f80fd5b3461008a576102205136600319011261008a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6102205180fd5b3461008a5761248036600319011261008a57366104041161008a57366108041161008a57610864356101c081905263ffffffff8116900361008a57610884356101408190526001600160a01b038116900361008a576108a43561010081905263ffffffff8116900361008a576108c4356102008190526001600160a01b038116900361008a57610904356001600160401b03811161008a5761013790369060040161136d565b9036610d241161008a57366111241161008a57611184359163ffffffff8316830361008a576111a435926001600160a01b038416840361008a576111c4359063ffffffff8216820361008a576111e4356001600160a01b038116810361008a57611224356001600160401b03811161008a576101b790369060040161136d565b929096366116441161008a5736611a441161008a57611aa435608081905263ffffffff8116900361008a57611ac435946001600160a01b038616860361008a57611ae4359663ffffffff8816880361008a57611b043560a08190526001600160a01b038116900361008a57611b44356001600160401b03811161008a5761024290369060040161136d565b6101605260e05236611f641161008a57366123641161008a576123c4356101e081905263ffffffff8116900361008a576123e4356101a08190526001600160a01b038116900361008a576124043561018081905263ffffffff8116900361008a57612424356101208190526001600160a01b038116900361008a57612464356001600160401b03811161008a576102dd90369060040161136d565b60c052986004610220515b60208110610b5a575050610404610220515b60208110610b4557505061080435604055610824356041556108443560425560435463ffffffff60c01b6101005160c01b169063ffffffff6101c051169063ffffffff60e01b1617640100000000600160c01b036101405160201b16171760435560018060a01b0361020051166001600160601b0360a01b60445416176044556108e4356045556001600160401b0382116107ef5761039a60465461139a565b601f8111610af6575b506102205190601f8311600114610a6a579180916103d9936102205192610a5f575b50508160011b915f199060031b1c19161790565b6046555b610924610220515b60208110610a4a575050610d24610220515b60208110610a3557505061112435608755611144356088556111643560895563ffffffff608a54918160c01b9060c01b1693169063ffffffff60e01b161790640100000000600160c01b039060201b161717608a5560018060a01b03166001600160601b0360a01b608b541617608b5561120435608c556001600160401b0381116107ef57610487608d5461139a565b601f81116109e6575b5061022051601f821160011461095e5781906104c69394959661022051926109535750508160011b915f199060031b1c19161790565b608d555b611244610220515b6020811061093e575050611644610220515b60208110610929575050611a443560ce55611a643560cf55611a843560d05560d1549163ffffffff60c01b9060c01b169163ffffffff608051169063ffffffff60e01b161790640100000000600160c01b039060201b16171760d15560018060a01b0360a051166001600160601b0360a01b60d254161760d255611b243560d3556001600160401b0361016051116107ef5761058160d45461139a565b601f81116108d4575b5061022051601f6101605111600114610840576105c790610220519061016051610833575b5061016051908160011b915f199060031b1c19161790565b60d4555b611b64610220515b6020811061081e5782611f64610220515b602081106108095782612364356101155561238435610116556123a435610117556101185463ffffffff60c01b6101805160c01b169063ffffffff6101e051169063ffffffff60e01b1617640100000000600160c01b036101a05160201b1617176101185560018060a01b0361012051166001600160601b0360a01b610119541617610119556124443561011a556001600160401b0360c051116107ef5761068e61011b5461139a565b601f811161079b575b506102205190601f60c05111600114610714576106d391610220519160c051610709575b505060c051908160011b915f199060031b1c19161790565b61011b555b7f9d226db03d4d6614ea01926ce8a588879492a2681b9684eb655b1470d32d4b9e6102205161022051a16102205180f35b0135905082806106bb565b601f1960c05116917f1602949b6a84a704c7a81815a36f6a6f1fa73b01dfc68b6dff0fdf23198d7c9092610220515b818110610783575060c05111610768575b505050600160c051811b0161011b556106d8565b5f1960f860c05160031b161c19910135169055808080610754565b91936020600181928787013581550195019201610743565b61011b610220515260206102205120601f60c0510160051c810191602060c051106107e5575b601f0160051c01905b8181106107d75750610697565b6102205181556001016107ca565b90915081906107c1565b634e487b7160e01b61022051526041600452602461022051fd5b600190602083359301928160f50155016105e4565b600190602083359301928160d50155016105d3565b905060e0510135836105af565b601f1961016051169060d461022051527f9780e26d96b1f2a9a18ef8fc72d589dbf03ef788137b64f43897e83a91e7feec91610220515b8181106108ba5750610160511161089c575b5050600161016051811b0160d4556105cb565b5f1960f86101605160031b161c199060e05101351690558180610889565b91926020600181928660e051013581550194019201610877565b60d4610220515260206102205120601f610160510160051c8101916020610160511061091f575b601f0160051c01905b818110610911575061058a565b610220518155600101610904565b90915081906108fb565b600190602083359301928160ae0155016104e4565b6001906020833593019281608e0155016104d2565b0135905086806103c5565b601f19821695608d61022051527f37a1be2a88dadcd0e6062f54ddcc01a03360ba61ca7784a744e757488bf8ceb291610220515b8881106109ce575083600195969798106109b5575b505050811b01608d556104ca565b01355f19600384901b60f8161c191690558580806109a7565b90926020600181928686013581550194019101610992565b608d610220515260206102205120601f830160051c81019160208410610a2b575b601f0160051c01905b818110610a1d5750610490565b610220518155600101610a10565b9091508190610a07565b600190602083359301928160670155016103f7565b600190602083359301928160470155016103e5565b013590508c806103c5565b604661022093929351527f128667f541fed74a8429f9d592c26c2c6a4beb9ae5ead9912c98b2595c8423109061022051935b601f1984168510610ade576001945083601f19811610610ac5575b505050811b016046556103dd565b01355f19600384901b60f8161c191690558b8080610ab7565b81810135835560209485019460019093019201610a9c565b6046610220515260206102205120601f840160051c81019160208510610b3b575b601f0160051c01905b818110610b2d57506103a3565b610220518155600101610b20565b9091508190610b17565b600190602083359301928160200155016102fa565b600190602083359301928155016102e8565b6060366003190112611242576004356001600160a01b03811690819003611242576024359063ffffffff8216809203611242576044356001600160401b0381116112425736602382011215611242578060040135906001600160401b03821161133857610be3601f8301601f19166020018661134c565b818552366024838301011161124257815f92602460209301838801378501015282516001600160401b03811161133857610c1f61011c5461139a565b601f81116112d4575b506020601f8211600114611251578190610c589394955f926112465750508160011b915f199060031b1c19161790565b61011c555b6040546041546042546043546044546045547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116989697919692169460c09390931c63ffffffff16939092883b156112425760405163ccaa2d1160e01b815297610cd460048a015f6113d2565b610ce36104048a0160206113d2565b6108048901526108248801526108448701526108648601526108848501526108a48401526108c48301526108e48201526109206109048201525f81604654610d2a8161139a565b90816109248401526001811690815f1461121f57506001146111c3575b505f918190038183865af16111ae575b5060875460885460895490608a549060018060a01b03608b541691608c5493863b1561008a5760405163ccaa2d1160e01b81529563ffffffff9390610da06004890160476113d2565b610daf610404890160676113d2565b610804880152610824870152610844860152808216610864860152602081901c6001600160a01b031661088486015260c01c166108a48401526108c48301526108e482015261092061090482015261022051608d54610e0d8161139a565b90816109248501526001811690815f1461118b5750600114611147575b5081806102205192038161022051865af161112c575b5060ce5460cf5460d0549060d1549060018060a01b0360d254169160d35493863b1561008a5760405163ccaa2d1160e01b81529563ffffffff9390610e8960048901608e6113d2565b610e98610404890160ae6113d2565b610804880152610824870152610844860152808216610864860152602081901c6001600160a01b031661088486015260c01c166108a48401526108c48301526108e48201526109206109048201526102205160d454610ef68161139a565b90816109248501526001811690815f1461110957506001146110c5575b5081806102205192038161022051865af16110aa575b506101155490610116546101175490610118549060018060a01b0361011954169161011a5493853b1561008a5760405163ccaa2d1160e01b81529663ffffffff9390610f7960048a0160d56113d2565b610f886104048a0160f56113d2565b610804890152610824880152610844870152808216610864870152602081901c6001600160a01b031661088487015260c01c166108a48501526108c48401526108e48301526109206109048301526102205161011b5490918391610feb8161139a565b90816109248501526001811690815f146110855750600114611040575b5081806102205194039161022051905af1611025575b6102205180f35b610220516110329161134c565b6102205161008a578061101e565b610220805161011b90525160208120929450915b81831061106a5750508101610944019184611008565b80548387016109440152859350602090920191600101611054565b610940939550600492915060ff1916610944850152151560051b830101019184611008565b610220516110b79161134c565b6102205161008a5781610f29565b905060d461022051526020610220512061022051905b8282106110f15750820161094401905083610f13565b805482850161094401526020909101906001016110db565b6109409350600492915060ff1916610944850152151560051b8301010183610f13565b610220516111399161134c565b6102205161008a5781610e40565b9050608d61022051526020610220512061022051905b8282106111735750820161094401905083610e2a565b8054828501610944015260209091019060010161115d565b6109409350600492915060ff1916610944850152151560051b8301010183610e2a565b5f6111b89161134c565b5f6102205281610d57565b60465f9081529192507f128667f541fed74a8429f9d592c26c2c6a4beb9ae5ead9912c98b2595c8423105b8183106112045750508101610944019080610d47565b805483860161094401528493506020909201916001016111ee565b60ff19166109448085019190915291151560051b83019091019250819050610d47565b5f80fd5b0151905085806103c5565b601f1982169061011c5f527fadd86a4592312086270d45a94ec1626035e36f7028a1706ab88a5151613929fe915f5b8181106112bc575095836001959697106112a4575b505050811b0161011c55610c5d565b01515f1960f88460031b161c19169055848080611295565b9192602060018192868b015181550194019201611280565b61011c5f527fadd86a4592312086270d45a94ec1626035e36f7028a1706ab88a5151613929fe601f830160051c8101916020841061132e575b601f0160051c01905b8181106113235750610c28565b5f8155600101611316565b909150819061130d565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761133857604052565b9181601f84011215611242578235916001600160401b038311611242576020838186019501011161124257565b90600182811c921680156113c8575b60208310146113b457565b634e487b7160e01b5f52602260045260245ffd5b91607f16916113a9565b905f905b602082106113e357505050565b60016020819285548152019301910190916113d656fea2646970667358221220a3f55ee78e17bc56cc030dd521e1918cb672ad27695d1623a019cadedf8f234764736f6c634300081c0033","sourceMap":"91:8651:1:-:0;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;2074:30;;91:8651;;;;;;;;2074:30;91:8651;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;-1:-1:-1;91:8651:1;;;;;-1:-1:-1;91:8651:1","linkReferences":{}},"deployedBytecode":{"object":"0x610240806040526004361015610013575f80fd5b5f610220525f3560e01c9081631806b5f214610b6c5750806377ff9f0b146100915763a3c573eb14610043575f80fd5b3461008a576102205136600319011261008a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6102205180fd5b3461008a5761248036600319011261008a57366104041161008a57366108041161008a57610864356101c081905263ffffffff8116900361008a57610884356101408190526001600160a01b038116900361008a576108a43561010081905263ffffffff8116900361008a576108c4356102008190526001600160a01b038116900361008a57610904356001600160401b03811161008a5761013790369060040161136d565b9036610d241161008a57366111241161008a57611184359163ffffffff8316830361008a576111a435926001600160a01b038416840361008a576111c4359063ffffffff8216820361008a576111e4356001600160a01b038116810361008a57611224356001600160401b03811161008a576101b790369060040161136d565b929096366116441161008a5736611a441161008a57611aa435608081905263ffffffff8116900361008a57611ac435946001600160a01b038616860361008a57611ae4359663ffffffff8816880361008a57611b043560a08190526001600160a01b038116900361008a57611b44356001600160401b03811161008a5761024290369060040161136d565b6101605260e05236611f641161008a57366123641161008a576123c4356101e081905263ffffffff8116900361008a576123e4356101a08190526001600160a01b038116900361008a576124043561018081905263ffffffff8116900361008a57612424356101208190526001600160a01b038116900361008a57612464356001600160401b03811161008a576102dd90369060040161136d565b60c052986004610220515b60208110610b5a575050610404610220515b60208110610b4557505061080435604055610824356041556108443560425560435463ffffffff60c01b6101005160c01b169063ffffffff6101c051169063ffffffff60e01b1617640100000000600160c01b036101405160201b16171760435560018060a01b0361020051166001600160601b0360a01b60445416176044556108e4356045556001600160401b0382116107ef5761039a60465461139a565b601f8111610af6575b506102205190601f8311600114610a6a579180916103d9936102205192610a5f575b50508160011b915f199060031b1c19161790565b6046555b610924610220515b60208110610a4a575050610d24610220515b60208110610a3557505061112435608755611144356088556111643560895563ffffffff608a54918160c01b9060c01b1693169063ffffffff60e01b161790640100000000600160c01b039060201b161717608a5560018060a01b03166001600160601b0360a01b608b541617608b5561120435608c556001600160401b0381116107ef57610487608d5461139a565b601f81116109e6575b5061022051601f821160011461095e5781906104c69394959661022051926109535750508160011b915f199060031b1c19161790565b608d555b611244610220515b6020811061093e575050611644610220515b60208110610929575050611a443560ce55611a643560cf55611a843560d05560d1549163ffffffff60c01b9060c01b169163ffffffff608051169063ffffffff60e01b161790640100000000600160c01b039060201b16171760d15560018060a01b0360a051166001600160601b0360a01b60d254161760d255611b243560d3556001600160401b0361016051116107ef5761058160d45461139a565b601f81116108d4575b5061022051601f6101605111600114610840576105c790610220519061016051610833575b5061016051908160011b915f199060031b1c19161790565b60d4555b611b64610220515b6020811061081e5782611f64610220515b602081106108095782612364356101155561238435610116556123a435610117556101185463ffffffff60c01b6101805160c01b169063ffffffff6101e051169063ffffffff60e01b1617640100000000600160c01b036101a05160201b1617176101185560018060a01b0361012051166001600160601b0360a01b610119541617610119556124443561011a556001600160401b0360c051116107ef5761068e61011b5461139a565b601f811161079b575b506102205190601f60c05111600114610714576106d391610220519160c051610709575b505060c051908160011b915f199060031b1c19161790565b61011b555b7f9d226db03d4d6614ea01926ce8a588879492a2681b9684eb655b1470d32d4b9e6102205161022051a16102205180f35b0135905082806106bb565b601f1960c05116917f1602949b6a84a704c7a81815a36f6a6f1fa73b01dfc68b6dff0fdf23198d7c9092610220515b818110610783575060c05111610768575b505050600160c051811b0161011b556106d8565b5f1960f860c05160031b161c19910135169055808080610754565b91936020600181928787013581550195019201610743565b61011b610220515260206102205120601f60c0510160051c810191602060c051106107e5575b601f0160051c01905b8181106107d75750610697565b6102205181556001016107ca565b90915081906107c1565b634e487b7160e01b61022051526041600452602461022051fd5b600190602083359301928160f50155016105e4565b600190602083359301928160d50155016105d3565b905060e0510135836105af565b601f1961016051169060d461022051527f9780e26d96b1f2a9a18ef8fc72d589dbf03ef788137b64f43897e83a91e7feec91610220515b8181106108ba5750610160511161089c575b5050600161016051811b0160d4556105cb565b5f1960f86101605160031b161c199060e05101351690558180610889565b91926020600181928660e051013581550194019201610877565b60d4610220515260206102205120601f610160510160051c8101916020610160511061091f575b601f0160051c01905b818110610911575061058a565b610220518155600101610904565b90915081906108fb565b600190602083359301928160ae0155016104e4565b6001906020833593019281608e0155016104d2565b0135905086806103c5565b601f19821695608d61022051527f37a1be2a88dadcd0e6062f54ddcc01a03360ba61ca7784a744e757488bf8ceb291610220515b8881106109ce575083600195969798106109b5575b505050811b01608d556104ca565b01355f19600384901b60f8161c191690558580806109a7565b90926020600181928686013581550194019101610992565b608d610220515260206102205120601f830160051c81019160208410610a2b575b601f0160051c01905b818110610a1d5750610490565b610220518155600101610a10565b9091508190610a07565b600190602083359301928160670155016103f7565b600190602083359301928160470155016103e5565b013590508c806103c5565b604661022093929351527f128667f541fed74a8429f9d592c26c2c6a4beb9ae5ead9912c98b2595c8423109061022051935b601f1984168510610ade576001945083601f19811610610ac5575b505050811b016046556103dd565b01355f19600384901b60f8161c191690558b8080610ab7565b81810135835560209485019460019093019201610a9c565b6046610220515260206102205120601f840160051c81019160208510610b3b575b601f0160051c01905b818110610b2d57506103a3565b610220518155600101610b20565b9091508190610b17565b600190602083359301928160200155016102fa565b600190602083359301928155016102e8565b6060366003190112611242576004356001600160a01b03811690819003611242576024359063ffffffff8216809203611242576044356001600160401b0381116112425736602382011215611242578060040135906001600160401b03821161133857610be3601f8301601f19166020018661134c565b818552366024838301011161124257815f92602460209301838801378501015282516001600160401b03811161133857610c1f61011c5461139a565b601f81116112d4575b506020601f8211600114611251578190610c589394955f926112465750508160011b915f199060031b1c19161790565b61011c555b6040546041546042546043546044546045547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116989697919692169460c09390931c63ffffffff16939092883b156112425760405163ccaa2d1160e01b815297610cd460048a015f6113d2565b610ce36104048a0160206113d2565b6108048901526108248801526108448701526108648601526108848501526108a48401526108c48301526108e48201526109206109048201525f81604654610d2a8161139a565b90816109248401526001811690815f1461121f57506001146111c3575b505f918190038183865af16111ae575b5060875460885460895490608a549060018060a01b03608b541691608c5493863b1561008a5760405163ccaa2d1160e01b81529563ffffffff9390610da06004890160476113d2565b610daf610404890160676113d2565b610804880152610824870152610844860152808216610864860152602081901c6001600160a01b031661088486015260c01c166108a48401526108c48301526108e482015261092061090482015261022051608d54610e0d8161139a565b90816109248501526001811690815f1461118b5750600114611147575b5081806102205192038161022051865af161112c575b5060ce5460cf5460d0549060d1549060018060a01b0360d254169160d35493863b1561008a5760405163ccaa2d1160e01b81529563ffffffff9390610e8960048901608e6113d2565b610e98610404890160ae6113d2565b610804880152610824870152610844860152808216610864860152602081901c6001600160a01b031661088486015260c01c166108a48401526108c48301526108e48201526109206109048201526102205160d454610ef68161139a565b90816109248501526001811690815f1461110957506001146110c5575b5081806102205192038161022051865af16110aa575b506101155490610116546101175490610118549060018060a01b0361011954169161011a5493853b1561008a5760405163ccaa2d1160e01b81529663ffffffff9390610f7960048a0160d56113d2565b610f886104048a0160f56113d2565b610804890152610824880152610844870152808216610864870152602081901c6001600160a01b031661088487015260c01c166108a48501526108c48401526108e48301526109206109048301526102205161011b5490918391610feb8161139a565b90816109248501526001811690815f146110855750600114611040575b5081806102205194039161022051905af1611025575b6102205180f35b610220516110329161134c565b6102205161008a578061101e565b610220805161011b90525160208120929450915b81831061106a5750508101610944019184611008565b80548387016109440152859350602090920191600101611054565b610940939550600492915060ff1916610944850152151560051b830101019184611008565b610220516110b79161134c565b6102205161008a5781610f29565b905060d461022051526020610220512061022051905b8282106110f15750820161094401905083610f13565b805482850161094401526020909101906001016110db565b6109409350600492915060ff1916610944850152151560051b8301010183610f13565b610220516111399161134c565b6102205161008a5781610e40565b9050608d61022051526020610220512061022051905b8282106111735750820161094401905083610e2a565b8054828501610944015260209091019060010161115d565b6109409350600492915060ff1916610944850152151560051b8301010183610e2a565b5f6111b89161134c565b5f6102205281610d57565b60465f9081529192507f128667f541fed74a8429f9d592c26c2c6a4beb9ae5ead9912c98b2595c8423105b8183106112045750508101610944019080610d47565b805483860161094401528493506020909201916001016111ee565b60ff19166109448085019190915291151560051b83019091019250819050610d47565b5f80fd5b0151905085806103c5565b601f1982169061011c5f527fadd86a4592312086270d45a94ec1626035e36f7028a1706ab88a5151613929fe915f5b8181106112bc575095836001959697106112a4575b505050811b0161011c55610c5d565b01515f1960f88460031b161c19169055848080611295565b9192602060018192868b015181550194019201611280565b61011c5f527fadd86a4592312086270d45a94ec1626035e36f7028a1706ab88a5151613929fe601f830160051c8101916020841061132e575b601f0160051c01905b8181106113235750610c28565b5f8155600101611316565b909150819061130d565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761133857604052565b9181601f84011215611242578235916001600160401b038311611242576020838186019501011161124257565b90600182811c921680156113c8575b60208310146113b457565b634e487b7160e01b5f52602260045260245ffd5b91607f16916113a9565b905f905b602082106113e357505050565b60016020819285548152019301910190916113d656fea2646970667358221220a3f55ee78e17bc56cc030dd521e1918cb672ad27695d1623a019cadedf8f234764736f6c634300081c0033","sourceMap":"91:8651:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;292:52;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4346:36;91:8651;;;4392:34;91:8651;4436:32;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4436:32;91:8651;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;4572:42;91:8651;;;4572:42;91:8651;;;4624:18;91:8651;-1:-1:-1;;;;;91:8651:1;;;;;4652:22;91:8651;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4652:22;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;4842:28;91:8651;;;4880:36;91:8651;;;4926:34;91:8651;;4970:32;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4970:32;91:8651;;;;;;;-1:-1:-1;;;;;91:8651:1;;5106:42;91:8651;;;5106:42;91:8651;;;5158:18;91:8651;-1:-1:-1;;;;;91:8651:1;;;;;5186:22;91:8651;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5186:22;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;5375:28;91:8651;;;5413:36;91:8651;;;5459:34;91:8651;5503:32;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5503:32;91:8651;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;5639:42;91:8651;;;5639:42;91:8651;;;5691:18;91:8651;-1:-1:-1;;;;;91:8651:1;;;;;;5719:22;91:8651;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5719:22;91:8651;;;;;;;;;;;;;;;;;;;;;;;;5909:28;91:8651;;;5947:36;91:8651;;;5993:34;91:8651;6037:32;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6037:32;91:8651;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;6173:42;91:8651;;;6173:42;91:8651;;;6225:18;91:8651;-1:-1:-1;;;;;91:8651:1;;;;;;6253:22;91:8651;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6253:22;91:8651;;6291:18;91:8651;;;;6291:18;91:8651;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;6253:22;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6253:22;-1:-1:-1;;91:8651:1;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;4346:36;91:8651;;;;;;;;;;;;;;;;5849:50;91:8651;;;;;;;;;;;;;;;5791:48;91:8651;;;;;;;;;;;;;;;;;;;;;;5719:22;91:8651;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;5719:22;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5719:22;-1:-1:-1;;91:8651:1;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;5315:50;91:8651;;;;;;;;;;;;;;;5257:48;91:8651;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;5186:22;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5186:22;91:8651;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5186:22;-1:-1:-1;;91:8651:1;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;4782:50;91:8651;;;;;;;;;;;;;;;4724:48;91:8651;;;;;;;;;-1:-1:-1;91:8651:1;;;;;4652:22;91:8651;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;4652:22;91:8651;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4652:22;-1:-1:-1;;91:8651:1;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;-1:-1:-1;;91:8651:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;6509:12;91:8651;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6509:12;91:8651;;;;6725:16;91:8651;6755:15;91:8651;6840:19;91:8651;;;6906:7;91:8651;6588:13;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;6588:358;;;;;91:8651;;-1:-1:-1;;;6588:358:1;;91:8651;;;6588:358;;91:8651;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6927:9;91:8651;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;6588:358;;;91:8651;;6588:358;;;;;91:8651;;7253:12;91:8651;7279:16;91:8651;7309:15;91:8651;;7338:14;91:8651;;;;;;;7427:19;91:8651;;;7460:7;91:8651;7142:358;;;;;;91:8651;;-1:-1:-1;;;7142:358:1;;91:8651;;;;;;7142:358;;7180:22;91:8651;:::i;:::-;;;;;7216:23;91:8651;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;7481:9;91:8651;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;7142:358;;91:8651;;;7142:358;;;;;91:8651;;7807:12;91:8651;7833:16;91:8651;7863:15;91:8651;;7892:14;91:8651;;;;;;;7981:19;91:8651;;;8014:7;91:8651;7696:358;;;;;;91:8651;;-1:-1:-1;;;7696:358:1;;91:8651;;;;;;7696:358;;7734:22;91:8651;:::i;:::-;;;;;7770:23;91:8651;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;8035:9;91:8651;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;7696:358;;91:8651;;;7696:358;;;;;91:8651;;8361:12;91:8651;;8387:16;91:8651;8417:15;91:8651;;8446:14;91:8651;;;;;;;8535:19;91:8651;;;8568:7;91:8651;8250:358;;;;;;91:8651;;-1:-1:-1;;;8250:358:1;;91:8651;;;;;;8250:358;;8288:22;91:8651;:::i;:::-;;;;;8324:23;91:8651;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;8589:9;91:8651;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;8250:358;;91:8651;;;8250:358;;;;;91:8651;;;;;8250:358;91:8651;;8250:358;;;:::i;:::-;91:8651;;;;8250:358;;;91:8651;;;;8589:9;91:8651;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7696:358;91:8651;;7696:358;;;:::i;:::-;91:8651;;;;7696:358;;;91:8651;;;8035:9;91:8651;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7142:358;91:8651;;7142:358;;;:::i;:::-;91:8651;;;;7142:358;;;91:8651;;;7481:9;91:8651;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6588:358;91:8651;6588:358;;;:::i;:::-;91:8651;;;6588:358;;;91:8651;6927:9;91:8651;;;;;;-1:-1:-1;91:8651:1;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;-1:-1:-1;91:8651:1;;6588:358;91:8651;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;6509:12;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;6509:12;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6509:12;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;","linkReferences":{},"immutableReferences":{"302":[{"start":91,"length":32},{"start":3185,"length":32}]}},"methodIdentifiers":{"bridgeAddress()":"a3c573eb","onMessageReceived(address,uint32,bytes)":"1806b5f2","updateParameters(bytes32[32],bytes32[32],uint256,bytes32,bytes32,uint32,address,uint32,address,uint256,bytes,bytes32[32],bytes32[32],uint256,bytes32,bytes32,uint32,address,uint32,address,uint256,bytes,bytes32[32],bytes32[32],uint256,bytes32,bytes32,uint32,address,uint32,address,uint256,bytes,bytes32[32],bytes32[32],uint256,bytes32,bytes32,uint32,address,uint32,address,uint256,bytes)":"77ff9f0b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPolygonZkEVMBridgeV2\",\"name\":\"_bridgeAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"}],\"name\":\"MessageReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"UpdateParameters\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridgeAddress\",\"outputs\":[{\"internalType\":\"contract IPolygonZkEVMBridgeV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"originAddress1\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"originNetwork1\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"data1\",\"type\":\"bytes\"}],\"name\":\"onMessageReceived\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofLocalExitRoot1\",\"type\":\"bytes32[32]\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofRollupExitRoot1\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"mglobalIndex1\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mmainnetExitRoot1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"mrollupExitRoot1\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moriginNetwork1\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moriginAddress1\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"mdestinationNetwork1\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"mdestinationAddress1\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mamount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"mmetadata1\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofLocalExitRoot2\",\"type\":\"bytes32[32]\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofRollupExitRoot2\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"mglobalIndex2\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mmainnetExitRoot2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"mrollupExitRoot2\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moriginNetwork2\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moriginAddress2\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"mdestinationNetwork2\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"mdestinationAddress2\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mamount2\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"mmetadata2\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofLocalExitRoot3\",\"type\":\"bytes32[32]\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofRollupExitRoot3\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"mglobalIndex3\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mmainnetExitRoot3\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"mrollupExitRoot3\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moriginNetwork3\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moriginAddress3\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"mdestinationNetwork3\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"mdestinationAddress3\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mamount3\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"mmetadata3\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofLocalExitRoot4\",\"type\":\"bytes32[32]\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofRollupExitRoot4\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"mglobalIndex4\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mmainnetExitRoot4\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"mrollupExitRoot4\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moriginNetwork4\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moriginAddress4\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"mdestinationNetwork4\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"mdestinationAddress4\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mamount4\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"mmetadata4\",\"type\":\"bytes\"}],\"name\":\"updateParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"core/contracts/bridgeAsset/InternalClaims.sol\":\"InternalClaims\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"core/contracts/bridgeAsset/Interfaces.sol\":{\"keccak256\":\"0x24710daa0affa083e6f7a2c79544d2095a1ae82cdb739144fe8a1886d1104017\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d6eec59e7d3b40a1acbf7a951303ec65a09f9e55195458bdad2f47f1a9ecc7fe\",\"dweb:/ipfs/QmXeQaWMEQxitoGEHoHnNe7t8eibA19eSFPNA3PZGbJiWG\"]},\"core/contracts/bridgeAsset/InternalClaims.sol\":{\"keccak256\":\"0xd5a7f1b0dfffd8179ffd1d68b0fde17f93e17228ff687a09bc13ff50e8a269cd\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://21e045a1fbb36aefee5743865c5b8baf14c44017fa4b9ab82024bde31d1b5933\",\"dweb:/ipfs/QmXD9Re6ayQFP9HQwEqxgonPDB76mH72kxeJY2uWsGcxmJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IPolygonZkEVMBridgeV2","name":"_bridgeAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"destinationAddress","type":"address","indexed":false}],"type":"event","name":"MessageReceived","anonymous":false},{"inputs":[],"type":"event","name":"UpdateParameters","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"bridgeAddress","outputs":[{"internalType":"contract IPolygonZkEVMBridgeV2","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"originAddress1","type":"address"},{"internalType":"uint32","name":"originNetwork1","type":"uint32"},{"internalType":"bytes","name":"data1","type":"bytes"}],"stateMutability":"payable","type":"function","name":"onMessageReceived"},{"inputs":[{"internalType":"bytes32[32]","name":"msmtProofLocalExitRoot1","type":"bytes32[32]"},{"internalType":"bytes32[32]","name":"msmtProofRollupExitRoot1","type":"bytes32[32]"},{"internalType":"uint256","name":"mglobalIndex1","type":"uint256"},{"internalType":"bytes32","name":"mmainnetExitRoot1","type":"bytes32"},{"internalType":"bytes32","name":"mrollupExitRoot1","type":"bytes32"},{"internalType":"uint32","name":"moriginNetwork1","type":"uint32"},{"internalType":"address","name":"moriginAddress1","type":"address"},{"internalType":"uint32","name":"mdestinationNetwork1","type":"uint32"},{"internalType":"address","name":"mdestinationAddress1","type":"address"},{"internalType":"uint256","name":"mamount1","type":"uint256"},{"internalType":"bytes","name":"mmetadata1","type":"bytes"},{"internalType":"bytes32[32]","name":"msmtProofLocalExitRoot2","type":"bytes32[32]"},{"internalType":"bytes32[32]","name":"msmtProofRollupExitRoot2","type":"bytes32[32]"},{"internalType":"uint256","name":"mglobalIndex2","type":"uint256"},{"internalType":"bytes32","name":"mmainnetExitRoot2","type":"bytes32"},{"internalType":"bytes32","name":"mrollupExitRoot2","type":"bytes32"},{"internalType":"uint32","name":"moriginNetwork2","type":"uint32"},{"internalType":"address","name":"moriginAddress2","type":"address"},{"internalType":"uint32","name":"mdestinationNetwork2","type":"uint32"},{"internalType":"address","name":"mdestinationAddress2","type":"address"},{"internalType":"uint256","name":"mamount2","type":"uint256"},{"internalType":"bytes","name":"mmetadata2","type":"bytes"},{"internalType":"bytes32[32]","name":"msmtProofLocalExitRoot3","type":"bytes32[32]"},{"internalType":"bytes32[32]","name":"msmtProofRollupExitRoot3","type":"bytes32[32]"},{"internalType":"uint256","name":"mglobalIndex3","type":"uint256"},{"internalType":"bytes32","name":"mmainnetExitRoot3","type":"bytes32"},{"internalType":"bytes32","name":"mrollupExitRoot3","type":"bytes32"},{"internalType":"uint32","name":"moriginNetwork3","type":"uint32"},{"internalType":"address","name":"moriginAddress3","type":"address"},{"internalType":"uint32","name":"mdestinationNetwork3","type":"uint32"},{"internalType":"address","name":"mdestinationAddress3","type":"address"},{"internalType":"uint256","name":"mamount3","type":"uint256"},{"internalType":"bytes","name":"mmetadata3","type":"bytes"},{"internalType":"bytes32[32]","name":"msmtProofLocalExitRoot4","type":"bytes32[32]"},{"internalType":"bytes32[32]","name":"msmtProofRollupExitRoot4","type":"bytes32[32]"},{"internalType":"uint256","name":"mglobalIndex4","type":"uint256"},{"internalType":"bytes32","name":"mmainnetExitRoot4","type":"bytes32"},{"internalType":"bytes32","name":"mrollupExitRoot4","type":"bytes32"},{"internalType":"uint32","name":"moriginNetwork4","type":"uint32"},{"internalType":"address","name":"moriginAddress4","type":"address"},{"internalType":"uint32","name":"mdestinationNetwork4","type":"uint32"},{"internalType":"address","name":"mdestinationAddress4","type":"address"},{"internalType":"uint256","name":"mamount4","type":"uint256"},{"internalType":"bytes","name":"mmetadata4","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"updateParameters"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"core/contracts/bridgeAsset/InternalClaims.sol":"InternalClaims"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"core/contracts/bridgeAsset/Interfaces.sol":{"keccak256":"0x24710daa0affa083e6f7a2c79544d2095a1ae82cdb739144fe8a1886d1104017","urls":["bzz-raw://d6eec59e7d3b40a1acbf7a951303ec65a09f9e55195458bdad2f47f1a9ecc7fe","dweb:/ipfs/QmXeQaWMEQxitoGEHoHnNe7t8eibA19eSFPNA3PZGbJiWG"],"license":"AGPL-3.0"},"core/contracts/bridgeAsset/InternalClaims.sol":{"keccak256":"0xd5a7f1b0dfffd8179ffd1d68b0fde17f93e17228ff687a09bc13ff50e8a269cd","urls":["bzz-raw://21e045a1fbb36aefee5743865c5b8baf14c44017fa4b9ab82024bde31d1b5933","dweb:/ipfs/QmXD9Re6ayQFP9HQwEqxgonPDB76mH72kxeJY2uWsGcxmJ"],"license":"AGPL-3.0"}},"version":1},"id":1} \ No newline at end of file +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "_bridgeAddress", + "type": "address", + "internalType": "contract IPolygonZkEVMBridgeV2" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "bridgeAddress", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPolygonZkEVMBridgeV2" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onMessageReceived", + "inputs": [ + { + "name": "originAddress1", + "type": "address", + "internalType": "address" + }, + { + "name": "originNetwork1", + "type": "uint32", + "internalType": "uint32" + }, + { "name": "data1", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "updateParameters", + "inputs": [ + { + "name": "msmtProofLocalExitRoot1", + "type": "bytes32[32]", + "internalType": "bytes32[32]" + }, + { + "name": "msmtProofRollupExitRoot1", + "type": "bytes32[32]", + "internalType": "bytes32[32]" + }, + { + "name": "mglobalIndex1", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "mmainnetExitRoot1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "mrollupExitRoot1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "moriginNetwork1", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "moriginAddress1", + "type": "address", + "internalType": "address" + }, + { + "name": "mdestinationNetwork1", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "mdestinationAddress1", + "type": "address", + "internalType": "address" + }, + { "name": "mamount1", "type": "uint256", "internalType": "uint256" }, + { "name": "mmetadata1", "type": "bytes", "internalType": "bytes" }, + { + "name": "msmtProofLocalExitRoot2", + "type": "bytes32[32]", + "internalType": "bytes32[32]" + }, + { + "name": "msmtProofRollupExitRoot2", + "type": "bytes32[32]", + "internalType": "bytes32[32]" + }, + { + "name": "mglobalIndex2", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "mmainnetExitRoot2", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "mrollupExitRoot2", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "moriginNetwork2", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "moriginAddress2", + "type": "address", + "internalType": "address" + }, + { + "name": "mdestinationNetwork2", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "mdestinationAddress2", + "type": "address", + "internalType": "address" + }, + { "name": "mamount2", "type": "uint256", "internalType": "uint256" }, + { "name": "mmetadata2", "type": "bytes", "internalType": "bytes" }, + { + "name": "msmtProofLocalExitRoot3", + "type": "bytes32[32]", + "internalType": "bytes32[32]" + }, + { + "name": "msmtProofRollupExitRoot3", + "type": "bytes32[32]", + "internalType": "bytes32[32]" + }, + { + "name": "mglobalIndex3", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "mmainnetExitRoot3", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "mrollupExitRoot3", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "moriginNetwork3", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "moriginAddress3", + "type": "address", + "internalType": "address" + }, + { + "name": "mdestinationNetwork3", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "mdestinationAddress3", + "type": "address", + "internalType": "address" + }, + { "name": "mamount3", "type": "uint256", "internalType": "uint256" }, + { "name": "mmetadata3", "type": "bytes", "internalType": "bytes" }, + { + "name": "msmtProofLocalExitRoot4", + "type": "bytes32[32]", + "internalType": "bytes32[32]" + }, + { + "name": "msmtProofRollupExitRoot4", + "type": "bytes32[32]", + "internalType": "bytes32[32]" + }, + { + "name": "mglobalIndex4", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "mmainnetExitRoot4", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "mrollupExitRoot4", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "moriginNetwork4", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "moriginAddress4", + "type": "address", + "internalType": "address" + }, + { + "name": "mdestinationNetwork4", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "mdestinationAddress4", + "type": "address", + "internalType": "address" + }, + { "name": "mamount4", "type": "uint256", "internalType": "uint256" }, + { "name": "mmetadata4", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "MessageReceived", + "inputs": [ + { + "name": "destinationAddress", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UpdateParameters", + "inputs": [], + "anonymous": false + } + ], + "bytecode": { + "object": "0x60a034606c57601f6114b438819003918201601f19168301916001600160401b03831184841017607057808492602094604052833981010312606c57516001600160a01b0381168103606c5760805260405161142f90816100858239608051818181605b0152610c710152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe610240806040526004361015610013575f80fd5b5f610220525f3560e01c9081631806b5f214610b6c5750806377ff9f0b146100915763a3c573eb14610043575f80fd5b3461008a576102205136600319011261008a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6102205180fd5b3461008a5761248036600319011261008a57366104041161008a57366108041161008a57610864356101c081905263ffffffff8116900361008a57610884356101408190526001600160a01b038116900361008a576108a43561010081905263ffffffff8116900361008a576108c4356102008190526001600160a01b038116900361008a57610904356001600160401b03811161008a5761013790369060040161136d565b9036610d241161008a57366111241161008a57611184359163ffffffff8316830361008a576111a435926001600160a01b038416840361008a576111c4359063ffffffff8216820361008a576111e4356001600160a01b038116810361008a57611224356001600160401b03811161008a576101b790369060040161136d565b929096366116441161008a5736611a441161008a57611aa435608081905263ffffffff8116900361008a57611ac435946001600160a01b038616860361008a57611ae4359663ffffffff8816880361008a57611b043560a08190526001600160a01b038116900361008a57611b44356001600160401b03811161008a5761024290369060040161136d565b6101605260e05236611f641161008a57366123641161008a576123c4356101e081905263ffffffff8116900361008a576123e4356101a08190526001600160a01b038116900361008a576124043561018081905263ffffffff8116900361008a57612424356101208190526001600160a01b038116900361008a57612464356001600160401b03811161008a576102dd90369060040161136d565b60c052986004610220515b60208110610b5a575050610404610220515b60208110610b4557505061080435604055610824356041556108443560425560435463ffffffff60c01b6101005160c01b169063ffffffff6101c051169063ffffffff60e01b1617640100000000600160c01b036101405160201b16171760435560018060a01b0361020051166001600160601b0360a01b60445416176044556108e4356045556001600160401b0382116107ef5761039a60465461139a565b601f8111610af6575b506102205190601f8311600114610a6a579180916103d9936102205192610a5f575b50508160011b915f199060031b1c19161790565b6046555b610924610220515b60208110610a4a575050610d24610220515b60208110610a3557505061112435608755611144356088556111643560895563ffffffff608a54918160c01b9060c01b1693169063ffffffff60e01b161790640100000000600160c01b039060201b161717608a5560018060a01b03166001600160601b0360a01b608b541617608b5561120435608c556001600160401b0381116107ef57610487608d5461139a565b601f81116109e6575b5061022051601f821160011461095e5781906104c69394959661022051926109535750508160011b915f199060031b1c19161790565b608d555b611244610220515b6020811061093e575050611644610220515b60208110610929575050611a443560ce55611a643560cf55611a843560d05560d1549163ffffffff60c01b9060c01b169163ffffffff608051169063ffffffff60e01b161790640100000000600160c01b039060201b16171760d15560018060a01b0360a051166001600160601b0360a01b60d254161760d255611b243560d3556001600160401b0361016051116107ef5761058160d45461139a565b601f81116108d4575b5061022051601f6101605111600114610840576105c790610220519061016051610833575b5061016051908160011b915f199060031b1c19161790565b60d4555b611b64610220515b6020811061081e5782611f64610220515b602081106108095782612364356101155561238435610116556123a435610117556101185463ffffffff60c01b6101805160c01b169063ffffffff6101e051169063ffffffff60e01b1617640100000000600160c01b036101a05160201b1617176101185560018060a01b0361012051166001600160601b0360a01b610119541617610119556124443561011a556001600160401b0360c051116107ef5761068e61011b5461139a565b601f811161079b575b506102205190601f60c05111600114610714576106d391610220519160c051610709575b505060c051908160011b915f199060031b1c19161790565b61011b555b7f9d226db03d4d6614ea01926ce8a588879492a2681b9684eb655b1470d32d4b9e6102205161022051a16102205180f35b0135905082806106bb565b601f1960c05116917f1602949b6a84a704c7a81815a36f6a6f1fa73b01dfc68b6dff0fdf23198d7c9092610220515b818110610783575060c05111610768575b505050600160c051811b0161011b556106d8565b5f1960f860c05160031b161c19910135169055808080610754565b91936020600181928787013581550195019201610743565b61011b610220515260206102205120601f60c0510160051c810191602060c051106107e5575b601f0160051c01905b8181106107d75750610697565b6102205181556001016107ca565b90915081906107c1565b634e487b7160e01b61022051526041600452602461022051fd5b600190602083359301928160f50155016105e4565b600190602083359301928160d50155016105d3565b905060e0510135836105af565b601f1961016051169060d461022051527f9780e26d96b1f2a9a18ef8fc72d589dbf03ef788137b64f43897e83a91e7feec91610220515b8181106108ba5750610160511161089c575b5050600161016051811b0160d4556105cb565b5f1960f86101605160031b161c199060e05101351690558180610889565b91926020600181928660e051013581550194019201610877565b60d4610220515260206102205120601f610160510160051c8101916020610160511061091f575b601f0160051c01905b818110610911575061058a565b610220518155600101610904565b90915081906108fb565b600190602083359301928160ae0155016104e4565b6001906020833593019281608e0155016104d2565b0135905086806103c5565b601f19821695608d61022051527f37a1be2a88dadcd0e6062f54ddcc01a03360ba61ca7784a744e757488bf8ceb291610220515b8881106109ce575083600195969798106109b5575b505050811b01608d556104ca565b01355f19600384901b60f8161c191690558580806109a7565b90926020600181928686013581550194019101610992565b608d610220515260206102205120601f830160051c81019160208410610a2b575b601f0160051c01905b818110610a1d5750610490565b610220518155600101610a10565b9091508190610a07565b600190602083359301928160670155016103f7565b600190602083359301928160470155016103e5565b013590508c806103c5565b604661022093929351527f128667f541fed74a8429f9d592c26c2c6a4beb9ae5ead9912c98b2595c8423109061022051935b601f1984168510610ade576001945083601f19811610610ac5575b505050811b016046556103dd565b01355f19600384901b60f8161c191690558b8080610ab7565b81810135835560209485019460019093019201610a9c565b6046610220515260206102205120601f840160051c81019160208510610b3b575b601f0160051c01905b818110610b2d57506103a3565b610220518155600101610b20565b9091508190610b17565b600190602083359301928160200155016102fa565b600190602083359301928155016102e8565b6060366003190112611242576004356001600160a01b03811690819003611242576024359063ffffffff8216809203611242576044356001600160401b0381116112425736602382011215611242578060040135906001600160401b03821161133857610be3601f8301601f19166020018661134c565b818552366024838301011161124257815f92602460209301838801378501015282516001600160401b03811161133857610c1f61011c5461139a565b601f81116112d4575b506020601f8211600114611251578190610c589394955f926112465750508160011b915f199060031b1c19161790565b61011c555b6040546041546042546043546044546045547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116989697919692169460c09390931c63ffffffff16939092883b156112425760405163ccaa2d1160e01b815297610cd460048a015f6113d2565b610ce36104048a0160206113d2565b6108048901526108248801526108448701526108648601526108848501526108a48401526108c48301526108e48201526109206109048201525f81604654610d2a8161139a565b90816109248401526001811690815f1461121f57506001146111c3575b505f918190038183865af16111ae575b5060875460885460895490608a549060018060a01b03608b541691608c5493863b1561008a5760405163ccaa2d1160e01b81529563ffffffff9390610da06004890160476113d2565b610daf610404890160676113d2565b610804880152610824870152610844860152808216610864860152602081901c6001600160a01b031661088486015260c01c166108a48401526108c48301526108e482015261092061090482015261022051608d54610e0d8161139a565b90816109248501526001811690815f1461118b5750600114611147575b5081806102205192038161022051865af161112c575b5060ce5460cf5460d0549060d1549060018060a01b0360d254169160d35493863b1561008a5760405163ccaa2d1160e01b81529563ffffffff9390610e8960048901608e6113d2565b610e98610404890160ae6113d2565b610804880152610824870152610844860152808216610864860152602081901c6001600160a01b031661088486015260c01c166108a48401526108c48301526108e48201526109206109048201526102205160d454610ef68161139a565b90816109248501526001811690815f1461110957506001146110c5575b5081806102205192038161022051865af16110aa575b506101155490610116546101175490610118549060018060a01b0361011954169161011a5493853b1561008a5760405163ccaa2d1160e01b81529663ffffffff9390610f7960048a0160d56113d2565b610f886104048a0160f56113d2565b610804890152610824880152610844870152808216610864870152602081901c6001600160a01b031661088487015260c01c166108a48501526108c48401526108e48301526109206109048301526102205161011b5490918391610feb8161139a565b90816109248501526001811690815f146110855750600114611040575b5081806102205194039161022051905af1611025575b6102205180f35b610220516110329161134c565b6102205161008a578061101e565b610220805161011b90525160208120929450915b81831061106a5750508101610944019184611008565b80548387016109440152859350602090920191600101611054565b610940939550600492915060ff1916610944850152151560051b830101019184611008565b610220516110b79161134c565b6102205161008a5781610f29565b905060d461022051526020610220512061022051905b8282106110f15750820161094401905083610f13565b805482850161094401526020909101906001016110db565b6109409350600492915060ff1916610944850152151560051b8301010183610f13565b610220516111399161134c565b6102205161008a5781610e40565b9050608d61022051526020610220512061022051905b8282106111735750820161094401905083610e2a565b8054828501610944015260209091019060010161115d565b6109409350600492915060ff1916610944850152151560051b8301010183610e2a565b5f6111b89161134c565b5f6102205281610d57565b60465f9081529192507f128667f541fed74a8429f9d592c26c2c6a4beb9ae5ead9912c98b2595c8423105b8183106112045750508101610944019080610d47565b805483860161094401528493506020909201916001016111ee565b60ff19166109448085019190915291151560051b83019091019250819050610d47565b5f80fd5b0151905085806103c5565b601f1982169061011c5f527fadd86a4592312086270d45a94ec1626035e36f7028a1706ab88a5151613929fe915f5b8181106112bc575095836001959697106112a4575b505050811b0161011c55610c5d565b01515f1960f88460031b161c19169055848080611295565b9192602060018192868b015181550194019201611280565b61011c5f527fadd86a4592312086270d45a94ec1626035e36f7028a1706ab88a5151613929fe601f830160051c8101916020841061132e575b601f0160051c01905b8181106113235750610c28565b5f8155600101611316565b909150819061130d565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761133857604052565b9181601f84011215611242578235916001600160401b038311611242576020838186019501011161124257565b90600182811c921680156113c8575b60208310146113b457565b634e487b7160e01b5f52602260045260245ffd5b91607f16916113a9565b905f905b602082106113e357505050565b60016020819285548152019301910190916113d656fea2646970667358221220a3f55ee78e17bc56cc030dd521e1918cb672ad27695d1623a019cadedf8f234764736f6c634300081c0033", + "sourceMap": "91:8651:1:-:0;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;2074:30;;91:8651;;;;;;;;2074:30;91:8651;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;-1:-1:-1;91:8651:1;;;;;-1:-1:-1;91:8651:1", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x610240806040526004361015610013575f80fd5b5f610220525f3560e01c9081631806b5f214610b6c5750806377ff9f0b146100915763a3c573eb14610043575f80fd5b3461008a576102205136600319011261008a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6102205180fd5b3461008a5761248036600319011261008a57366104041161008a57366108041161008a57610864356101c081905263ffffffff8116900361008a57610884356101408190526001600160a01b038116900361008a576108a43561010081905263ffffffff8116900361008a576108c4356102008190526001600160a01b038116900361008a57610904356001600160401b03811161008a5761013790369060040161136d565b9036610d241161008a57366111241161008a57611184359163ffffffff8316830361008a576111a435926001600160a01b038416840361008a576111c4359063ffffffff8216820361008a576111e4356001600160a01b038116810361008a57611224356001600160401b03811161008a576101b790369060040161136d565b929096366116441161008a5736611a441161008a57611aa435608081905263ffffffff8116900361008a57611ac435946001600160a01b038616860361008a57611ae4359663ffffffff8816880361008a57611b043560a08190526001600160a01b038116900361008a57611b44356001600160401b03811161008a5761024290369060040161136d565b6101605260e05236611f641161008a57366123641161008a576123c4356101e081905263ffffffff8116900361008a576123e4356101a08190526001600160a01b038116900361008a576124043561018081905263ffffffff8116900361008a57612424356101208190526001600160a01b038116900361008a57612464356001600160401b03811161008a576102dd90369060040161136d565b60c052986004610220515b60208110610b5a575050610404610220515b60208110610b4557505061080435604055610824356041556108443560425560435463ffffffff60c01b6101005160c01b169063ffffffff6101c051169063ffffffff60e01b1617640100000000600160c01b036101405160201b16171760435560018060a01b0361020051166001600160601b0360a01b60445416176044556108e4356045556001600160401b0382116107ef5761039a60465461139a565b601f8111610af6575b506102205190601f8311600114610a6a579180916103d9936102205192610a5f575b50508160011b915f199060031b1c19161790565b6046555b610924610220515b60208110610a4a575050610d24610220515b60208110610a3557505061112435608755611144356088556111643560895563ffffffff608a54918160c01b9060c01b1693169063ffffffff60e01b161790640100000000600160c01b039060201b161717608a5560018060a01b03166001600160601b0360a01b608b541617608b5561120435608c556001600160401b0381116107ef57610487608d5461139a565b601f81116109e6575b5061022051601f821160011461095e5781906104c69394959661022051926109535750508160011b915f199060031b1c19161790565b608d555b611244610220515b6020811061093e575050611644610220515b60208110610929575050611a443560ce55611a643560cf55611a843560d05560d1549163ffffffff60c01b9060c01b169163ffffffff608051169063ffffffff60e01b161790640100000000600160c01b039060201b16171760d15560018060a01b0360a051166001600160601b0360a01b60d254161760d255611b243560d3556001600160401b0361016051116107ef5761058160d45461139a565b601f81116108d4575b5061022051601f6101605111600114610840576105c790610220519061016051610833575b5061016051908160011b915f199060031b1c19161790565b60d4555b611b64610220515b6020811061081e5782611f64610220515b602081106108095782612364356101155561238435610116556123a435610117556101185463ffffffff60c01b6101805160c01b169063ffffffff6101e051169063ffffffff60e01b1617640100000000600160c01b036101a05160201b1617176101185560018060a01b0361012051166001600160601b0360a01b610119541617610119556124443561011a556001600160401b0360c051116107ef5761068e61011b5461139a565b601f811161079b575b506102205190601f60c05111600114610714576106d391610220519160c051610709575b505060c051908160011b915f199060031b1c19161790565b61011b555b7f9d226db03d4d6614ea01926ce8a588879492a2681b9684eb655b1470d32d4b9e6102205161022051a16102205180f35b0135905082806106bb565b601f1960c05116917f1602949b6a84a704c7a81815a36f6a6f1fa73b01dfc68b6dff0fdf23198d7c9092610220515b818110610783575060c05111610768575b505050600160c051811b0161011b556106d8565b5f1960f860c05160031b161c19910135169055808080610754565b91936020600181928787013581550195019201610743565b61011b610220515260206102205120601f60c0510160051c810191602060c051106107e5575b601f0160051c01905b8181106107d75750610697565b6102205181556001016107ca565b90915081906107c1565b634e487b7160e01b61022051526041600452602461022051fd5b600190602083359301928160f50155016105e4565b600190602083359301928160d50155016105d3565b905060e0510135836105af565b601f1961016051169060d461022051527f9780e26d96b1f2a9a18ef8fc72d589dbf03ef788137b64f43897e83a91e7feec91610220515b8181106108ba5750610160511161089c575b5050600161016051811b0160d4556105cb565b5f1960f86101605160031b161c199060e05101351690558180610889565b91926020600181928660e051013581550194019201610877565b60d4610220515260206102205120601f610160510160051c8101916020610160511061091f575b601f0160051c01905b818110610911575061058a565b610220518155600101610904565b90915081906108fb565b600190602083359301928160ae0155016104e4565b6001906020833593019281608e0155016104d2565b0135905086806103c5565b601f19821695608d61022051527f37a1be2a88dadcd0e6062f54ddcc01a03360ba61ca7784a744e757488bf8ceb291610220515b8881106109ce575083600195969798106109b5575b505050811b01608d556104ca565b01355f19600384901b60f8161c191690558580806109a7565b90926020600181928686013581550194019101610992565b608d610220515260206102205120601f830160051c81019160208410610a2b575b601f0160051c01905b818110610a1d5750610490565b610220518155600101610a10565b9091508190610a07565b600190602083359301928160670155016103f7565b600190602083359301928160470155016103e5565b013590508c806103c5565b604661022093929351527f128667f541fed74a8429f9d592c26c2c6a4beb9ae5ead9912c98b2595c8423109061022051935b601f1984168510610ade576001945083601f19811610610ac5575b505050811b016046556103dd565b01355f19600384901b60f8161c191690558b8080610ab7565b81810135835560209485019460019093019201610a9c565b6046610220515260206102205120601f840160051c81019160208510610b3b575b601f0160051c01905b818110610b2d57506103a3565b610220518155600101610b20565b9091508190610b17565b600190602083359301928160200155016102fa565b600190602083359301928155016102e8565b6060366003190112611242576004356001600160a01b03811690819003611242576024359063ffffffff8216809203611242576044356001600160401b0381116112425736602382011215611242578060040135906001600160401b03821161133857610be3601f8301601f19166020018661134c565b818552366024838301011161124257815f92602460209301838801378501015282516001600160401b03811161133857610c1f61011c5461139a565b601f81116112d4575b506020601f8211600114611251578190610c589394955f926112465750508160011b915f199060031b1c19161790565b61011c555b6040546041546042546043546044546045547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116989697919692169460c09390931c63ffffffff16939092883b156112425760405163ccaa2d1160e01b815297610cd460048a015f6113d2565b610ce36104048a0160206113d2565b6108048901526108248801526108448701526108648601526108848501526108a48401526108c48301526108e48201526109206109048201525f81604654610d2a8161139a565b90816109248401526001811690815f1461121f57506001146111c3575b505f918190038183865af16111ae575b5060875460885460895490608a549060018060a01b03608b541691608c5493863b1561008a5760405163ccaa2d1160e01b81529563ffffffff9390610da06004890160476113d2565b610daf610404890160676113d2565b610804880152610824870152610844860152808216610864860152602081901c6001600160a01b031661088486015260c01c166108a48401526108c48301526108e482015261092061090482015261022051608d54610e0d8161139a565b90816109248501526001811690815f1461118b5750600114611147575b5081806102205192038161022051865af161112c575b5060ce5460cf5460d0549060d1549060018060a01b0360d254169160d35493863b1561008a5760405163ccaa2d1160e01b81529563ffffffff9390610e8960048901608e6113d2565b610e98610404890160ae6113d2565b610804880152610824870152610844860152808216610864860152602081901c6001600160a01b031661088486015260c01c166108a48401526108c48301526108e48201526109206109048201526102205160d454610ef68161139a565b90816109248501526001811690815f1461110957506001146110c5575b5081806102205192038161022051865af16110aa575b506101155490610116546101175490610118549060018060a01b0361011954169161011a5493853b1561008a5760405163ccaa2d1160e01b81529663ffffffff9390610f7960048a0160d56113d2565b610f886104048a0160f56113d2565b610804890152610824880152610844870152808216610864870152602081901c6001600160a01b031661088487015260c01c166108a48501526108c48401526108e48301526109206109048301526102205161011b5490918391610feb8161139a565b90816109248501526001811690815f146110855750600114611040575b5081806102205194039161022051905af1611025575b6102205180f35b610220516110329161134c565b6102205161008a578061101e565b610220805161011b90525160208120929450915b81831061106a5750508101610944019184611008565b80548387016109440152859350602090920191600101611054565b610940939550600492915060ff1916610944850152151560051b830101019184611008565b610220516110b79161134c565b6102205161008a5781610f29565b905060d461022051526020610220512061022051905b8282106110f15750820161094401905083610f13565b805482850161094401526020909101906001016110db565b6109409350600492915060ff1916610944850152151560051b8301010183610f13565b610220516111399161134c565b6102205161008a5781610e40565b9050608d61022051526020610220512061022051905b8282106111735750820161094401905083610e2a565b8054828501610944015260209091019060010161115d565b6109409350600492915060ff1916610944850152151560051b8301010183610e2a565b5f6111b89161134c565b5f6102205281610d57565b60465f9081529192507f128667f541fed74a8429f9d592c26c2c6a4beb9ae5ead9912c98b2595c8423105b8183106112045750508101610944019080610d47565b805483860161094401528493506020909201916001016111ee565b60ff19166109448085019190915291151560051b83019091019250819050610d47565b5f80fd5b0151905085806103c5565b601f1982169061011c5f527fadd86a4592312086270d45a94ec1626035e36f7028a1706ab88a5151613929fe915f5b8181106112bc575095836001959697106112a4575b505050811b0161011c55610c5d565b01515f1960f88460031b161c19169055848080611295565b9192602060018192868b015181550194019201611280565b61011c5f527fadd86a4592312086270d45a94ec1626035e36f7028a1706ab88a5151613929fe601f830160051c8101916020841061132e575b601f0160051c01905b8181106113235750610c28565b5f8155600101611316565b909150819061130d565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761133857604052565b9181601f84011215611242578235916001600160401b038311611242576020838186019501011161124257565b90600182811c921680156113c8575b60208310146113b457565b634e487b7160e01b5f52602260045260245ffd5b91607f16916113a9565b905f905b602082106113e357505050565b60016020819285548152019301910190916113d656fea2646970667358221220a3f55ee78e17bc56cc030dd521e1918cb672ad27695d1623a019cadedf8f234764736f6c634300081c0033", + "sourceMap": "91:8651:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;292:52;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4346:36;91:8651;;;4392:34;91:8651;4436:32;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4436:32;91:8651;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;4572:42;91:8651;;;4572:42;91:8651;;;4624:18;91:8651;-1:-1:-1;;;;;91:8651:1;;;;;4652:22;91:8651;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4652:22;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;4842:28;91:8651;;;4880:36;91:8651;;;4926:34;91:8651;;4970:32;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4970:32;91:8651;;;;;;;-1:-1:-1;;;;;91:8651:1;;5106:42;91:8651;;;5106:42;91:8651;;;5158:18;91:8651;-1:-1:-1;;;;;91:8651:1;;;;;5186:22;91:8651;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5186:22;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;5375:28;91:8651;;;5413:36;91:8651;;;5459:34;91:8651;5503:32;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5503:32;91:8651;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;5639:42;91:8651;;;5639:42;91:8651;;;5691:18;91:8651;-1:-1:-1;;;;;91:8651:1;;;;;;5719:22;91:8651;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5719:22;91:8651;;;;;;;;;;;;;;;;;;;;;;;;5909:28;91:8651;;;5947:36;91:8651;;;5993:34;91:8651;6037:32;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6037:32;91:8651;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;6173:42;91:8651;;;6173:42;91:8651;;;6225:18;91:8651;-1:-1:-1;;;;;91:8651:1;;;;;;6253:22;91:8651;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6253:22;91:8651;;6291:18;91:8651;;;;6291:18;91:8651;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;6253:22;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6253:22;-1:-1:-1;;91:8651:1;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;4346:36;91:8651;;;;;;;;;;;;;;;;5849:50;91:8651;;;;;;;;;;;;;;;5791:48;91:8651;;;;;;;;;;;;;;;;;;;;;;5719:22;91:8651;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;5719:22;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5719:22;-1:-1:-1;;91:8651:1;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;5315:50;91:8651;;;;;;;;;;;;;;;5257:48;91:8651;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;5186:22;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5186:22;91:8651;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5186:22;-1:-1:-1;;91:8651:1;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;4782:50;91:8651;;;;;;;;;;;;;;;4724:48;91:8651;;;;;;;;;-1:-1:-1;91:8651:1;;;;;4652:22;91:8651;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;4652:22;91:8651;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4652:22;-1:-1:-1;;91:8651:1;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;-1:-1:-1;;91:8651:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;6509:12;91:8651;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6509:12;91:8651;;;;6725:16;91:8651;6755:15;91:8651;6840:19;91:8651;;;6906:7;91:8651;6588:13;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;6588:358;;;;;91:8651;;-1:-1:-1;;;6588:358:1;;91:8651;;;6588:358;;91:8651;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6927:9;91:8651;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;6588:358;;;91:8651;;6588:358;;;;;91:8651;;7253:12;91:8651;7279:16;91:8651;7309:15;91:8651;;7338:14;91:8651;;;;;;;7427:19;91:8651;;;7460:7;91:8651;7142:358;;;;;;91:8651;;-1:-1:-1;;;7142:358:1;;91:8651;;;;;;7142:358;;7180:22;91:8651;:::i;:::-;;;;;7216:23;91:8651;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;7481:9;91:8651;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;7142:358;;91:8651;;;7142:358;;;;;91:8651;;7807:12;91:8651;7833:16;91:8651;7863:15;91:8651;;7892:14;91:8651;;;;;;;7981:19;91:8651;;;8014:7;91:8651;7696:358;;;;;;91:8651;;-1:-1:-1;;;7696:358:1;;91:8651;;;;;;7696:358;;7734:22;91:8651;:::i;:::-;;;;;7770:23;91:8651;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;8035:9;91:8651;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;7696:358;;91:8651;;;7696:358;;;;;91:8651;;8361:12;91:8651;;8387:16;91:8651;8417:15;91:8651;;8446:14;91:8651;;;;;;;8535:19;91:8651;;;8568:7;91:8651;8250:358;;;;;;91:8651;;-1:-1:-1;;;8250:358:1;;91:8651;;;;;;8250:358;;8288:22;91:8651;:::i;:::-;;;;;8324:23;91:8651;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;8589:9;91:8651;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;8250:358;;91:8651;;;8250:358;;;;;91:8651;;;;;8250:358;91:8651;;8250:358;;;:::i;:::-;91:8651;;;;8250:358;;;91:8651;;;;8589:9;91:8651;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7696:358;91:8651;;7696:358;;;:::i;:::-;91:8651;;;;7696:358;;;91:8651;;;8035:9;91:8651;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7142:358;91:8651;;7142:358;;;:::i;:::-;91:8651;;;;7142:358;;;91:8651;;;7481:9;91:8651;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6588:358;91:8651;6588:358;;;:::i;:::-;91:8651;;;6588:358;;;91:8651;6927:9;91:8651;;;;;;-1:-1:-1;91:8651:1;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;-1:-1:-1;;91:8651:1;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;-1:-1:-1;91:8651:1;;6588:358;91:8651;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;6509:12;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;6509:12;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6509:12;91:8651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:8651:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;91:8651:1;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;", + "linkReferences": {}, + "immutableReferences": { + "302": [ + { "start": 91, "length": 32 }, + { "start": 3185, "length": 32 } + ] + } + }, + "methodIdentifiers": { + "bridgeAddress()": "a3c573eb", + "onMessageReceived(address,uint32,bytes)": "1806b5f2", + "updateParameters(bytes32[32],bytes32[32],uint256,bytes32,bytes32,uint32,address,uint32,address,uint256,bytes,bytes32[32],bytes32[32],uint256,bytes32,bytes32,uint32,address,uint32,address,uint256,bytes,bytes32[32],bytes32[32],uint256,bytes32,bytes32,uint32,address,uint32,address,uint256,bytes,bytes32[32],bytes32[32],uint256,bytes32,bytes32,uint32,address,uint32,address,uint256,bytes)": "77ff9f0b" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPolygonZkEVMBridgeV2\",\"name\":\"_bridgeAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"}],\"name\":\"MessageReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"UpdateParameters\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridgeAddress\",\"outputs\":[{\"internalType\":\"contract IPolygonZkEVMBridgeV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"originAddress1\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"originNetwork1\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"data1\",\"type\":\"bytes\"}],\"name\":\"onMessageReceived\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofLocalExitRoot1\",\"type\":\"bytes32[32]\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofRollupExitRoot1\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"mglobalIndex1\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mmainnetExitRoot1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"mrollupExitRoot1\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moriginNetwork1\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moriginAddress1\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"mdestinationNetwork1\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"mdestinationAddress1\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mamount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"mmetadata1\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofLocalExitRoot2\",\"type\":\"bytes32[32]\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofRollupExitRoot2\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"mglobalIndex2\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mmainnetExitRoot2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"mrollupExitRoot2\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moriginNetwork2\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moriginAddress2\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"mdestinationNetwork2\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"mdestinationAddress2\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mamount2\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"mmetadata2\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofLocalExitRoot3\",\"type\":\"bytes32[32]\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofRollupExitRoot3\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"mglobalIndex3\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mmainnetExitRoot3\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"mrollupExitRoot3\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moriginNetwork3\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moriginAddress3\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"mdestinationNetwork3\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"mdestinationAddress3\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mamount3\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"mmetadata3\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofLocalExitRoot4\",\"type\":\"bytes32[32]\"},{\"internalType\":\"bytes32[32]\",\"name\":\"msmtProofRollupExitRoot4\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"mglobalIndex4\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mmainnetExitRoot4\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"mrollupExitRoot4\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moriginNetwork4\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moriginAddress4\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"mdestinationNetwork4\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"mdestinationAddress4\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mamount4\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"mmetadata4\",\"type\":\"bytes\"}],\"name\":\"updateParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"core/contracts/bridgeAsset/InternalClaims.sol\":\"InternalClaims\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"core/contracts/bridgeAsset/Interfaces.sol\":{\"keccak256\":\"0x24710daa0affa083e6f7a2c79544d2095a1ae82cdb739144fe8a1886d1104017\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d6eec59e7d3b40a1acbf7a951303ec65a09f9e55195458bdad2f47f1a9ecc7fe\",\"dweb:/ipfs/QmXeQaWMEQxitoGEHoHnNe7t8eibA19eSFPNA3PZGbJiWG\"]},\"core/contracts/bridgeAsset/InternalClaims.sol\":{\"keccak256\":\"0xd5a7f1b0dfffd8179ffd1d68b0fde17f93e17228ff687a09bc13ff50e8a269cd\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://21e045a1fbb36aefee5743865c5b8baf14c44017fa4b9ab82024bde31d1b5933\",\"dweb:/ipfs/QmXD9Re6ayQFP9HQwEqxgonPDB76mH72kxeJY2uWsGcxmJ\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.28+commit.7893614a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IPolygonZkEVMBridgeV2", + "name": "_bridgeAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "destinationAddress", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "MessageReceived", + "anonymous": false + }, + { + "inputs": [], + "type": "event", + "name": "UpdateParameters", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "bridgeAddress", + "outputs": [ + { + "internalType": "contract IPolygonZkEVMBridgeV2", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "originAddress1", + "type": "address" + }, + { + "internalType": "uint32", + "name": "originNetwork1", + "type": "uint32" + }, + { "internalType": "bytes", "name": "data1", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "function", + "name": "onMessageReceived" + }, + { + "inputs": [ + { + "internalType": "bytes32[32]", + "name": "msmtProofLocalExitRoot1", + "type": "bytes32[32]" + }, + { + "internalType": "bytes32[32]", + "name": "msmtProofRollupExitRoot1", + "type": "bytes32[32]" + }, + { + "internalType": "uint256", + "name": "mglobalIndex1", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "mmainnetExitRoot1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "mrollupExitRoot1", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "moriginNetwork1", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moriginAddress1", + "type": "address" + }, + { + "internalType": "uint32", + "name": "mdestinationNetwork1", + "type": "uint32" + }, + { + "internalType": "address", + "name": "mdestinationAddress1", + "type": "address" + }, + { + "internalType": "uint256", + "name": "mamount1", + "type": "uint256" + }, + { "internalType": "bytes", "name": "mmetadata1", "type": "bytes" }, + { + "internalType": "bytes32[32]", + "name": "msmtProofLocalExitRoot2", + "type": "bytes32[32]" + }, + { + "internalType": "bytes32[32]", + "name": "msmtProofRollupExitRoot2", + "type": "bytes32[32]" + }, + { + "internalType": "uint256", + "name": "mglobalIndex2", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "mmainnetExitRoot2", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "mrollupExitRoot2", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "moriginNetwork2", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moriginAddress2", + "type": "address" + }, + { + "internalType": "uint32", + "name": "mdestinationNetwork2", + "type": "uint32" + }, + { + "internalType": "address", + "name": "mdestinationAddress2", + "type": "address" + }, + { + "internalType": "uint256", + "name": "mamount2", + "type": "uint256" + }, + { "internalType": "bytes", "name": "mmetadata2", "type": "bytes" }, + { + "internalType": "bytes32[32]", + "name": "msmtProofLocalExitRoot3", + "type": "bytes32[32]" + }, + { + "internalType": "bytes32[32]", + "name": "msmtProofRollupExitRoot3", + "type": "bytes32[32]" + }, + { + "internalType": "uint256", + "name": "mglobalIndex3", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "mmainnetExitRoot3", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "mrollupExitRoot3", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "moriginNetwork3", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moriginAddress3", + "type": "address" + }, + { + "internalType": "uint32", + "name": "mdestinationNetwork3", + "type": "uint32" + }, + { + "internalType": "address", + "name": "mdestinationAddress3", + "type": "address" + }, + { + "internalType": "uint256", + "name": "mamount3", + "type": "uint256" + }, + { "internalType": "bytes", "name": "mmetadata3", "type": "bytes" }, + { + "internalType": "bytes32[32]", + "name": "msmtProofLocalExitRoot4", + "type": "bytes32[32]" + }, + { + "internalType": "bytes32[32]", + "name": "msmtProofRollupExitRoot4", + "type": "bytes32[32]" + }, + { + "internalType": "uint256", + "name": "mglobalIndex4", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "mmainnetExitRoot4", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "mrollupExitRoot4", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "moriginNetwork4", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moriginAddress4", + "type": "address" + }, + { + "internalType": "uint32", + "name": "mdestinationNetwork4", + "type": "uint32" + }, + { + "internalType": "address", + "name": "mdestinationAddress4", + "type": "address" + }, + { + "internalType": "uint256", + "name": "mamount4", + "type": "uint256" + }, + { "internalType": "bytes", "name": "mmetadata4", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateParameters" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", + "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", + "forge-std/=lib/forge-std/src/", + "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "core/contracts/bridgeAsset/InternalClaims.sol": "InternalClaims" + }, + "evmVersion": "cancun", + "libraries": {}, + "viaIR": true + }, + "sources": { + "core/contracts/bridgeAsset/Interfaces.sol": { + "keccak256": "0x24710daa0affa083e6f7a2c79544d2095a1ae82cdb739144fe8a1886d1104017", + "urls": [ + "bzz-raw://d6eec59e7d3b40a1acbf7a951303ec65a09f9e55195458bdad2f47f1a9ecc7fe", + "dweb:/ipfs/QmXeQaWMEQxitoGEHoHnNe7t8eibA19eSFPNA3PZGbJiWG" + ], + "license": "AGPL-3.0" + }, + "core/contracts/bridgeAsset/InternalClaims.sol": { + "keccak256": "0xd5a7f1b0dfffd8179ffd1d68b0fde17f93e17228ff687a09bc13ff50e8a269cd", + "urls": [ + "bzz-raw://21e045a1fbb36aefee5743865c5b8baf14c44017fa4b9ab82024bde31d1b5933", + "dweb:/ipfs/QmXD9Re6ayQFP9HQwEqxgonPDB76mH72kxeJY2uWsGcxmJ" + ], + "license": "AGPL-3.0" + } + }, + "version": 1 + }, + "id": 1 +} diff --git a/core/helpers/agglayer-cdk-common-setup.bash b/core/helpers/agglayer-cdk-common-setup.bash index a6073d171..513bd034b 100644 --- a/core/helpers/agglayer-cdk-common-setup.bash +++ b/core/helpers/agglayer-cdk-common-setup.bash @@ -119,7 +119,7 @@ _resolve_required_urls() { # AGGKIT_BRIDGE_URL aggkit_bridge_url=$(_resolve_url_or_use_env AGGKIT_BRIDGE_URL \ - "aggkit-001-bridge" "rest" "cdk-node-001" "rest" \ + "aggkit-001" "rest" "cdk-node-001" "rest" \ "Failed to resolve aggkit bridge url from all fallback nodes" true) export aggkit_bridge_url diff --git a/core/helpers/scripts/aggkit_bridge_service.bash b/core/helpers/scripts/aggkit_bridge_service.bash index ee84d84c9..e38b57672 100644 --- a/core/helpers/scripts/aggkit_bridge_service.bash +++ b/core/helpers/scripts/aggkit_bridge_service.bash @@ -515,6 +515,53 @@ function get_bridge() { return 1 } +function get_total_bridges() { + local network_id="$1" + local aggkit_url="$2" + local max_attempts="$3" + local poll_frequency="$4" + + local attempt=0 + local bridges_result="" + + while ((attempt < max_attempts)); do + ((attempt++)) + log "๐Ÿ”Ž Attempt $attempt/$max_attempts: fetching total bridges \ +(network id = $network_id, bridge indexer url = $aggkit_url)" + + # Capture both stdout (bridges result) and stderr (error message) + bridges_result=$(curl -s -H "Content-Type: application/json" \ + "$aggkit_url/bridge/v1/bridges?network_id=$network_id" 2>&1) + + # Check if the response contains an error + if [[ "$bridges_result" == *"error"* || "$bridges_result" == *"Error"* ]]; then + log "โš ๏ธ Error: $bridges_result" + sleep "$poll_frequency" + continue + fi + + if [[ "$bridges_result" == "" ]]; then + log "Empty bridges response retrieved, retrying in ${poll_frequency}s..." + sleep "$poll_frequency" + continue + fi + + # Extract the total number of bridges + local total_bridges + total_bridges=$(echo "$bridges_result" | jq -r '.count') + + if [[ "$total_bridges" != "null" && "$total_bridges" != "" ]]; then + echo "$total_bridges" + return 0 + fi + + sleep "$poll_frequency" + done + + log "โŒ Failed to find total bridges after $max_attempts attempts." + return 1 +} + function log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >&3 } diff --git a/tests/aggkit/internal-bridge-tx.bats b/tests/aggkit/internal-bridge-tx.bats new file mode 100644 index 000000000..2b76945e7 --- /dev/null +++ b/tests/aggkit/internal-bridge-tx.bats @@ -0,0 +1,294 @@ +#!/usr/bin/env bats +# bats file_tags=aggkit +# shellcheck disable=SC2154,SC2034 + +setup() { + load '../../core/helpers/agglayer-cdk-common-setup' + _agglayer_cdk_common_setup + + readonly internal_bridge_tx_artifact_path="$PROJECT_ROOT/core/contracts/bridgeAsset/InternalBridgeTx.json" + + # Deploy the InternalBridgeTx contract once for all tests + log "๐Ÿ”ง Deploying InternalBridgeTx contract for all tests" + + # Get bytecode from the contract artifact + local bytecode + bytecode=$(jq -r '.bytecode.object // .bytecode' "$internal_bridge_tx_artifact_path") + if [[ -z "$bytecode" || "$bytecode" == "null" ]]; then + log "โŒ Error: Failed to read bytecode from $internal_bridge_tx_artifact_path" + exit 1 + fi + + # ABI-encode the constructor argument (bridge address) + local encoded_args + encoded_args=$(cast abi-encode "constructor(address)" "$l2_bridge_addr") + if [[ -z "$encoded_args" ]]; then + log "โŒ Failed to ABI-encode constructor argument" + exit 1 + fi + + # Concatenate bytecode and encoded constructor args + local deploy_bytecode="${bytecode}${encoded_args:2}" # Remove 0x from encoded args + + # Set a fixed gas price (1 gwei) + local gas_price=1000000000 + + # Deploy the contract + local deploy_output + deploy_output=$(cast send --rpc-url "$L2_RPC_URL" \ + --private-key "$sender_private_key" \ + --gas-price "$gas_price" \ + --legacy \ + --create "$deploy_bytecode" 2>&1) + + if [[ $? -ne 0 ]]; then + log "โŒ Error: Failed to deploy contract" + log "$deploy_output" + exit 1 + fi + + # Extract contract address from output + internal_bridge_tx_sc_addr=$(echo "$deploy_output" | grep -o 'contractAddress\s\+\(0x[a-fA-F0-9]\{40\}\)' | awk '{print $2}') + if [[ -z "$internal_bridge_tx_sc_addr" ]]; then + log "โŒ Failed to extract deployed contract address" + log "$deploy_output" + exit 1 + fi + readonly internal_bridge_tx_sc_addr + + log "โœ… InternalBridgeTx contract deployed at: $internal_bridge_tx_sc_addr" +} + +@test "Test internal bridge transactions -> 2 bridge tx with different amounts" { + log "๐Ÿงช Testing internal bridge transactions: 2 bridge transactions with different amounts" + + # ======================================== + # STEP 1: Configure Bridge Transaction Parameters + # ======================================== + log "โš™๏ธ STEP 1: Configuring bridge transaction parameters" + + # Bridge transaction parameters + local destination_network_1=$l1_rpc_network_id # Target L1 network + local destination_address_1=$sender_addr # Recipient address + local amount_1="100000000000000000" # 0.1 ETH in wei + local token_1="0x0000000000000000000000000000000000000000" # ETH (zero address) + local force_update_global_exit_root_1=true + local permit_data_1="0x" + + local destination_network_2=$l1_rpc_network_id # Target L1 network + local destination_address_2=$sender_addr # Recipient address + local amount_2="200000000000000000" # 0.2 ETH in wei + local token_2="0x0000000000000000000000000000000000000000" # ETH (zero address) + local force_update_global_exit_root_2=true + local permit_data_2="0x" + + log " ๐ŸŒ‰ Bridge TX #1: $amount_1 wei (0.1 ETH) โ†’ Network $destination_network_1" + log " ๐ŸŒ‰ Bridge TX #2: $amount_2 wei (0.2 ETH) โ†’ Network $destination_network_2" + log " ๐Ÿ“ Recipient: $sender_addr" + + # ======================================== + # STEP 1.5: Get Initial Bridge Count from Database + # ======================================== + log "๐Ÿ“Š STEP 1.5: Getting initial bridge count from bridge database" + + # Get total bridges before our test + local total_bridges_before + total_bridges_before=$(get_total_bridges "$l2_rpc_network_id" "$aggkit_bridge_url" 10 2 2>/dev/null) || { + log "โš ๏ธ Failed to get initial bridge count, continuing with 0" + total_bridges_before=0 + } + log "๐Ÿ“Š Initial bridge count in database: $total_bridges_before" + + # ======================================== + # STEP 2: Configure Contract Bridge Parameters + # ======================================== + log "โš™๏ธ STEP 2: Configuring contract with bridge parameters" + + # Update the contract's internal bridge parameters for both transactions + local update_output + update_output=$(cast send \ + "$internal_bridge_tx_sc_addr" \ + "updateBridgeParameters(uint32,address,uint256,address,bool,bytes,uint32,address,uint256,address,bool,bytes)" \ + "$destination_network_1" \ + "$destination_address_1" \ + "$amount_1" \ + "$token_1" \ + "$force_update_global_exit_root_1" \ + "$permit_data_1" \ + "$destination_network_2" \ + "$destination_address_2" \ + "$amount_2" \ + "$token_2" \ + "$force_update_global_exit_root_2" \ + "$permit_data_2" \ + --rpc-url "$L2_RPC_URL" \ + --private-key "$sender_private_key" \ + --gas-price "$gas_price" 2>&1) + + if [[ $? -ne 0 ]]; then + log "โŒ ERROR: Failed to configure bridge parameters in contract" + log "๐Ÿ“ Error details: $update_output" + exit 1 + fi + + log "โœ… Contract bridge parameters updated successfully" + + # ======================================== + # STEP 3: Fund the contract with ETH for bridge transactions + # ======================================== + log "๐Ÿ’ฐ STEP 3: Funding the contract with ETH for bridge transactions" + local total_amount=$((amount_1 + amount_2)) + local fund_output + fund_output=$(cast send \ + "$internal_bridge_tx_sc_addr" \ + --value "$total_amount" \ + --rpc-url "$L2_RPC_URL" \ + --private-key "$sender_private_key" \ + --gas-price "$gas_price" 2>&1) + + if [[ $? -ne 0 ]]; then + log "โŒ ERROR: Failed to fund contract with ETH" + log "๐Ÿ“ Error details: $fund_output" + exit 1 + fi + + log "โœ… Contract funded with $total_amount wei" + + # Verify contract balance + local contract_balance + contract_balance=$(cast balance "$internal_bridge_tx_sc_addr" --rpc-url "$L2_RPC_URL") + log "๐Ÿ“Š Contract balance: $contract_balance wei" + + # ======================================== + # STEP 4: Execute Bridge Transactions via onMessageReceived + # ======================================== + log "๐Ÿš€ STEP 4: Executing onMessageReceived to trigger both bridge transactions" + + # Call onMessageReceived which will internally execute both bridge transactions + local on_message_output + on_message_output=$(cast send \ + "$internal_bridge_tx_sc_addr" \ + "onMessageReceived(address,uint32,bytes)" \ + "$sender_addr" \ + "$l2_rpc_network_id" \ + "0x" \ + --rpc-url "$L2_RPC_URL" \ + --private-key "$sender_private_key" \ + --gas-price "$gas_price" 2>&1) + + log "๐Ÿ“ onMessageReceived output: $on_message_output" + + # Check if the transaction was successful + if [[ $? -eq 0 ]]; then + # Extract transaction hash from the cast output + local tx_hash + tx_hash=$(echo "$on_message_output" | grep -o '0x[a-fA-F0-9]\{64\}' | tail -1) + log "โœ… onMessageReceived executed successfully" + log "๐Ÿ”— Transaction hash: $tx_hash" + + # Extract block number from transaction receipt + local block_number + block_number=$(cast receipt "$tx_hash" --rpc-url "$L2_RPC_URL" --json | jq -r '.blockNumber') + log "๐Ÿ“ฆ Block number: $block_number" + + # ======================================== + # STEP 5: Verify Bridge Events from L2 Bridge Contract + # ======================================== + log "๐Ÿ” STEP 5: Verifying bridge events from L2 bridge contract" + + # Query bridge events from the specific block where our transaction was mined + log " ๐Ÿ”Ž Searching for bridge events in block $block_number" + local final_logs_output + final_logs_output=$(cast logs \ + --rpc-url "$L2_RPC_URL" \ + --address "$l2_bridge_addr" \ + "0x501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b" \ + --from-block "$block_number" \ + --to-block "$block_number" --json 2>&1) || { + log "โš ๏ธ Failed to query bridge events, using empty result" + final_logs_output="[]" + } + log "๐Ÿ“‹ Bridge events output: $final_logs_output" + + # Count the number of bridge events found + local final_bridge_events=0 + if echo "$final_logs_output" | jq empty 2>/dev/null; then + final_bridge_events=$(echo "$final_logs_output" | jq '. | length' 2>/dev/null || echo "0") + fi + log "๐Ÿ“Š Bridge events found: $final_bridge_events" + + # Verify that exactly 2 bridge events were created + if [[ "$final_bridge_events" -eq 2 ]]; then + log "โœ… SUCCESS: Both bridge transactions executed and events emitted" + else + log "โŒ FAILURE: Expected 2 bridge events, found $final_bridge_events" + log "๐Ÿšจ Test failed - bridge transactions did not execute as expected" + exit 1 + fi + + # ======================================== + # STEP 6: Verify Contract Balance Changes + # ======================================== + log "๐Ÿ’ฐ STEP 6: Verifying contract balance changes" + + # Check contract balance after bridge transactions + local final_contract_balance + final_contract_balance=$(cast balance "$internal_bridge_tx_sc_addr" --rpc-url "$L2_RPC_URL") + log "๐Ÿ“Š Final contract balance: $final_contract_balance wei" + + # Calculate expected balance (should decrease by total bridged amount) + local expected_balance=$((contract_balance - total_amount)) + if [[ "$final_contract_balance" -le "$expected_balance" ]]; then + log "โœ… Contract balance decreased correctly after bridge transactions" + else + log "โš ๏ธ Contract balance did not decrease as expected" + log "๐Ÿ“‹ Expected balance โ‰ค $expected_balance wei" + log "๐Ÿ“‹ Actual balance: $final_contract_balance wei" + fi + + log "๐ŸŽ‰ Internal bridge transactions test completed successfully" + else + log "โŒ ERROR: onMessageReceived transaction failed" + log "๐Ÿ“ Error details: $on_message_output" + exit 1 + fi + + # ======================================== + # STEP 7: Verify Bridge Database Count Increased + # ======================================== + log "๐Ÿ“Š STEP 7: Verifying bridge database count increased" + + # Wait a moment for bridge indexer to process the transactions + sleep 3 + + local total_bridges_after + total_bridges_after=$(get_total_bridges "$l2_rpc_network_id" "$aggkit_bridge_url" 10 2 2>/dev/null) || { + log "โš ๏ธ Failed to get final bridge count, skipping database verification" + total_bridges_after=$total_bridges_before + } + log "๐Ÿ“Š Final bridge count in database: $total_bridges_after" + + if [[ "$total_bridges_after" -eq "$((total_bridges_before + 2))" ]]; then + log "โœ… Bridge database count increased correctly" + else + log "โŒ FAILURE: Bridge database count did not increase as expected" + log "๐Ÿ“‹ Expected increase: 2" + log "๐Ÿ“‹ Actual increase: $((total_bridges_after - total_bridges_before))" + exit 1 + fi + + # ======================================== + # TEST SUMMARY + # ======================================== + log "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" + log "๐ŸŽฏ TEST SUMMARY: Internal Bridge Transactions" + log "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" + log " โœ… Bridge TX #1: $amount_1 wei (0.1 ETH) โ†’ Network $destination_network_1" + log " โœ… Bridge TX #2: $amount_2 wei (0.2 ETH) โ†’ Network $destination_network_2" + log " โœ… Total bridged: $total_amount wei (0.3 ETH)" + log " โœ… Both transactions executed in single onMessageReceived call" + log " โœ… Contract balance decreased appropriately" + log " โœ… Bridge events verified from L2 bridge contract" + log " ๐Ÿ† TEST PASSED: All assertions successful" + log "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" +}