From 435542b946f532e260b79e3af066ec1caa0221fe Mon Sep 17 00:00:00 2001 From: Vectorized Date: Tue, 1 Aug 2023 17:29:49 +0000 Subject: [PATCH] Remove non-malleability check --- .gas-snapshot | 30 +++++++++++++++--------------- API.md | 2 +- README.md | 14 +++++++------- src/LibMulticaller.sol | 2 +- src/MulticallerWithSigner.sol | 13 +++---------- test/Multicaller.t.sol | 8 ++++---- 6 files changed, 31 insertions(+), 38 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index ff01a6e..1a014ea 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,32 +1,32 @@ -MulticallerTest:testMultiCallerWithSignerIncrementNonceSalt(uint256) (runs: 256, μ: 77967, ~: 78971) -MulticallerTest:testMultiCallerWithSignerIncrementNonceSaltWithERC1271(uint256) (runs: 256, μ: 579597, ~: 579501) -MulticallerTest:testMulticallerCdFallback(string) (runs: 256, μ: 307420, ~: 301901) +MulticallerTest:testMultiCallerWithSignerIncrementNonceSalt(uint256) (runs: 256, μ: 78613, ~: 81051) +MulticallerTest:testMultiCallerWithSignerIncrementNonceSaltWithERC1271(uint256) (runs: 256, μ: 579534, ~: 579438) +MulticallerTest:testMulticallerCdFallback(string) (runs: 256, μ: 307357, ~: 301690) MulticallerTest:testMulticallerForwardsMessageValue() (gas: 213836) MulticallerTest:testMulticallerGetNames() (gas: 147569) MulticallerTest:testMulticallerReentrancyGuard() (gas: 18370) -MulticallerTest:testMulticallerRefund(uint256) (runs: 256, μ: 169441, ~: 171973) +MulticallerTest:testMulticallerRefund(uint256) (runs: 256, μ: 169308, ~: 171891) MulticallerTest:testMulticallerReturnDataIsProperlyEncoded() (gas: 122104) -MulticallerTest:testMulticallerReturnDataIsProperlyEncoded(string,string,uint256) (runs: 256, μ: 512999, ~: 485451) +MulticallerTest:testMulticallerReturnDataIsProperlyEncoded(string,string,uint256) (runs: 256, μ: 502591, ~: 485451) MulticallerTest:testMulticallerReturnDataIsProperlyEncoded(uint256,uint256,uint256,uint256) (runs: 256, μ: 122228, ~: 122228) MulticallerTest:testMulticallerRevertWithCustomError() (gas: 32024) MulticallerTest:testMulticallerRevertWithMessage() (gas: 34841) -MulticallerTest:testMulticallerRevertWithMessage(string) (runs: 256, μ: 35700, ~: 35751) +MulticallerTest:testMulticallerRevertWithMessage(string) (runs: 256, μ: 35664, ~: 35751) MulticallerTest:testMulticallerRevertWithNothing() (gas: 31867) MulticallerTest:testMulticallerSenderDoesNotRevertWithoutMulticallerDeployed() (gas: 3408) MulticallerTest:testMulticallerTargetGetMulticallerSender() (gas: 27451) MulticallerTest:testMulticallerWithNoData() (gas: 16181) -MulticallerTest:testMulticallerWithSigner(uint256) (runs: 256, μ: 129657, ~: 121930) +MulticallerTest:testMulticallerWithSigner(uint256) (runs: 256, μ: 129687, ~: 122088) MulticallerTest:testMulticallerWithSignerEIP712Domain() (gas: 12442) -MulticallerTest:testMulticallerWithSignerGetMulticallerSigner() (gas: 139951) -MulticallerTest:testMulticallerWithSignerInvalidateNonces(uint256) (runs: 256, μ: 81467, ~: 80060) -MulticallerTest:testMulticallerWithSignerInvalidateNoncesWithERC1271(uint256) (runs: 256, μ: 586511, ~: 584950) +MulticallerTest:testMulticallerWithSignerGetMulticallerSigner() (gas: 139930) +MulticallerTest:testMulticallerWithSignerInvalidateNonces(uint256) (runs: 256, μ: 80856, ~: 79849) +MulticallerTest:testMulticallerWithSignerInvalidateNoncesWithERC1271(uint256) (runs: 256, μ: 584010, ~: 584701) MulticallerTest:testMulticallerWithSignerNonPayableFunctions() (gas: 48950) -MulticallerTest:testMulticallerWithSignerReentrancyGuard() (gas: 127328) -MulticallerTest:testMulticallerWithSignerRevert() (gas: 211569) +MulticallerTest:testMulticallerWithSignerReentrancyGuard() (gas: 127307) +MulticallerTest:testMulticallerWithSignerRevert() (gas: 211506) MulticallerTest:testMulticallerWithSignerRevertsWithNastyArrayLength() (gas: 9297) -MulticallerTest:testMulticallerWithSignerWithERC1271(uint256) (runs: 256, μ: 626599, ~: 606086) -MulticallerTest:testMulticallerWithSignerWithNoData() (gas: 131569) +MulticallerTest:testMulticallerWithSignerWithERC1271(uint256) (runs: 256, μ: 630925, ~: 606173) +MulticallerTest:testMulticallerWithSignerWithNoData() (gas: 131527) MulticallerTest:testNastyCalldataRevert() (gas: 3388) MulticallerTest:testOffsetTrick(uint256,uint256,uint256) (runs: 256, μ: 571, ~: 571) -MulticallerTest:test__codesize() (gas: 50734) +MulticallerTest:test__codesize() (gas: 50657) TestPlus:test__codesize() (gas: 1102) \ No newline at end of file diff --git a/API.md b/API.md index feb69fa..124c099 100644 --- a/API.md +++ b/API.md @@ -329,7 +329,7 @@ The address of the multicaller with sender contract. #### `MULTICALLER_WITH_SIGNER` ```solidity address internal constant MULTICALLER_WITH_SIGNER = - 0x0000000000007DeD88fff5c18A2Bb6254ECd4130; + 0x0000000000003C6E14B7f65dA82b10132d9904F9; ``` The address of the multicaller with signer contract. diff --git a/README.md b/README.md index 67e5731..077ba3c 100644 --- a/README.md +++ b/README.md @@ -13,31 +13,31 @@ Enables "forwarding" of `msg.sender` to the contracts called. - Ethereum - Multicaller: [`0x0000000000009C27972b97d86134DFcffACAbE15`](https://etherscan.io/address/0x0000000000009C27972b97d86134DFcffACAbE15) - MulticallerWithSender: [`0x00000000002Fd5Aeb385D324B580FCa7c83823A0`](https://etherscan.io/address/0x00000000002Fd5Aeb385D324B580FCa7c83823A0) - - MulticallerWithSigner: [`0x0000000000007DeD88fff5c18A2Bb6254ECd4130`](https://etherscan.io/address/0x0000000000007DeD88fff5c18A2Bb6254ECd4130) + - MulticallerWithSigner: [`0x0000000000003C6E14B7f65dA82b10132d9904F9`](https://etherscan.io/address/0x0000000000003C6E14B7f65dA82b10132d9904F9) - Goerli - Multicaller: [`0x0000000000009C27972b97d86134DFcffACAbE15`](https://goerli.etherscan.io/address/0x0000000000009C27972b97d86134DFcffACAbE15) - MulticallerWithSender: [`0x00000000002Fd5Aeb385D324B580FCa7c83823A0`](https://goerli.etherscan.io/address/0x00000000002Fd5Aeb385D324B580FCa7c83823A0) - - MulticallerWithSigner: [`0x0000000000007DeD88fff5c18A2Bb6254ECd4130`](https://goerli.etherscan.io/address/0x0000000000007DeD88fff5c18A2Bb6254ECd4130) + - MulticallerWithSigner: [`0x0000000000003C6E14B7f65dA82b10132d9904F9`](https://goerli.etherscan.io/address/0x0000000000003C6E14B7f65dA82b10132d9904F9) - Sepolia - Multicaller: [`0x0000000000009C27972b97d86134DFcffACAbE15`](https://sepolia.etherscan.io/address/0x0000000000009C27972b97d86134DFcffACAbE15) - MulticallerWithSender: [`0x00000000002Fd5Aeb385D324B580FCa7c83823A0`](https://sepolia.etherscan.io/address/0x00000000002Fd5Aeb385D324B580FCa7c83823A0) - - MulticallerWithSigner: [`0x0000000000007DeD88fff5c18A2Bb6254ECd4130`](https://sepolia.etherscan.io/address/0x0000000000007DeD88fff5c18A2Bb6254ECd4130) + - MulticallerWithSigner: [`0x0000000000003C6E14B7f65dA82b10132d9904F9`](https://sepolia.etherscan.io/address/0x0000000000003C6E14B7f65dA82b10132d9904F9) - Polygon - Multicaller: [`0x0000000000009C27972b97d86134DFcffACAbE15`](https://polygonscan.com/address/0x0000000000009C27972b97d86134DFcffACAbE15) - MulticallerWithSender: [`0x00000000002Fd5Aeb385D324B580FCa7c83823A0`](https://polygonscan.com/address/0x00000000002Fd5Aeb385D324B580FCa7c83823A0) - - MulticallerWithSigner: [`0x0000000000007DeD88fff5c18A2Bb6254ECd4130`](https://polygonscan.com/address/0x0000000000007DeD88fff5c18A2Bb6254ECd4130) + - MulticallerWithSigner: [`0x0000000000003C6E14B7f65dA82b10132d9904F9`](https://polygonscan.com/address/0x0000000000003C6E14B7f65dA82b10132d9904F9) - Mumbai - Multicaller: [`0x0000000000009C27972b97d86134DFcffACAbE15`](https://mumbai.polygonscan.com/address/0x0000000000009C27972b97d86134DFcffACAbE15) - MulticallerWithSender: [`0x00000000002Fd5Aeb385D324B580FCa7c83823A0`](https://mumbai.polygonscan.com/address/0x00000000002Fd5Aeb385D324B580FCa7c83823A0) - - MulticallerWithSigner: [`0x0000000000007DeD88fff5c18A2Bb6254ECd4130`](https://mumbai.polygonscan.com/address/0x0000000000007DeD88fff5c18A2Bb6254ECd4130) + - MulticallerWithSigner: [`0x0000000000003C6E14B7f65dA82b10132d9904F9`](https://mumbai.polygonscan.com/address/0x0000000000003C6E14B7f65dA82b10132d9904F9) - Optimism - Multicaller: [`0x0000000000009C27972b97d86134DFcffACAbE15`](https://optimistic.etherscan.io/address/0x0000000000009C27972b97d86134DFcffACAbE15) - MulticallerWithSender: [`0x00000000002Fd5Aeb385D324B580FCa7c83823A0`](https://optimistic.etherscan.io/address/0x00000000002Fd5Aeb385D324B580FCa7c83823A0) - - MulticallerWithSigner: [`0x0000000000007DeD88fff5c18A2Bb6254ECd4130`](https://optimistic.etherscan.io/address/0x0000000000007DeD88fff5c18A2Bb6254ECd4130) + - MulticallerWithSigner: [`0x0000000000003C6E14B7f65dA82b10132d9904F9`](https://optimistic.etherscan.io/address/0x0000000000003C6E14B7f65dA82b10132d9904F9) - Arbitrum - Multicaller: [`0x0000000000009C27972b97d86134DFcffACAbE15`](https://arbiscan.io/address/0x0000000000009C27972b97d86134DFcffACAbE15) - MulticallerWithSender: [`0x00000000002Fd5Aeb385D324B580FCa7c83823A0`](https://arbiscan.io/address/0x00000000002Fd5Aeb385D324B580FCa7c83823A0) - - MulticallerWithSigner: [`0x0000000000007DeD88fff5c18A2Bb6254ECd4130`](https://arbiscan.io/address/0x0000000000007DeD88fff5c18A2Bb6254ECd4130) + - MulticallerWithSigner: [`0x0000000000003C6E14B7f65dA82b10132d9904F9`](https://arbiscan.io/address/0x0000000000003C6E14B7f65dA82b10132d9904F9) Please open an issue if you need help to deploy to an EVM chain of your choice. diff --git a/src/LibMulticaller.sol b/src/LibMulticaller.sol index 4ebdd8b..8191a8f 100644 --- a/src/LibMulticaller.sol +++ b/src/LibMulticaller.sol @@ -20,7 +20,7 @@ library LibMulticaller { /** * @dev The address of the multicaller with signer contract. */ - address internal constant MULTICALLER_WITH_SIGNER = 0x0000000000007DeD88fff5c18A2Bb6254ECd4130; + address internal constant MULTICALLER_WITH_SIGNER = 0x0000000000003C6E14B7f65dA82b10132d9904F9; /** * @dev Returns the caller of `aggregateWithSender` on `MULTICALLER_WITH_SENDER`. diff --git a/src/MulticallerWithSigner.sol b/src/MulticallerWithSigner.sol index ba16713..168167c 100644 --- a/src/MulticallerWithSigner.sol +++ b/src/MulticallerWithSigner.sol @@ -86,13 +86,6 @@ contract MulticallerWithSigner { bytes32 private constant _VERSION_HASH = 0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6; - /** - * @dev The number which `s` must be less than in order for - * the signature to be non-malleable. - */ - bytes32 private constant _S_THRES = - 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1; - // ============================================================= // ERRORS // ============================================================= @@ -220,7 +213,7 @@ contract MulticallerWithSigner { mstore(returndatasize(), digest) // Store the digest. calldatacopy(0x40, signature.offset, signature.length) // Copy `r`, `s`, `v`. mstore(0x20, byte(returndatasize(), mload(0x80))) // `v`. - let t := staticcall(gas(), lt(mload(0x60), _S_THRES), 0x00, 0x80, 0x01, 0x20) + let t := staticcall(gas(), 1, 0x00, 0x80, 0x01, 0x20) signatureIsValid := mul(returndatasize(), eq(signer, mload(t))) } // ERC1271 fallback. @@ -387,7 +380,7 @@ contract MulticallerWithSigner { mstore(returndatasize(), digest) // Store the digest. calldatacopy(0x40, signature.offset, signature.length) // Copy `r`, `s`, `v`. mstore(0x20, byte(returndatasize(), mload(0x80))) // `v`. - let t := staticcall(gas(), lt(mload(0x60), _S_THRES), 0x00, 0x80, 0x01, 0x20) + let t := staticcall(gas(), 1, 0x00, 0x80, 0x01, 0x20) signatureIsValid := mul(returndatasize(), eq(signer, mload(t))) } // ERC1271 fallback. @@ -505,7 +498,7 @@ contract MulticallerWithSigner { mstore(returndatasize(), digest) // Store the digest. calldatacopy(0x40, signature.offset, signature.length) // Copy `r`, `s`, `v`. mstore(0x20, byte(returndatasize(), mload(0x80))) // `v`. - let t := staticcall(gas(), lt(mload(0x60), _S_THRES), 0x00, 0x80, 0x01, 0x20) + let t := staticcall(gas(), 1, 0x00, 0x80, 0x01, 0x20) signatureIsValid := mul(returndatasize(), eq(signer, mload(t))) } // ERC1271 fallback. diff --git a/test/Multicaller.t.sol b/test/Multicaller.t.sol index 74ae88c..358ed58 100644 --- a/test/Multicaller.t.sol +++ b/test/Multicaller.t.sol @@ -120,16 +120,16 @@ contract MulticallerTest is TestPlus { 0x00000000002Fd5Aeb385D324B580FCa7c83823A0; bytes public constant MULTICALLER_WITH_SIGNER_INITCODE = - hex"6080806040523060a01b3d55610b0890816100188239f3fe6040608081526004361015610020575b50361561001b57600080fd5b6107d4565b6000803560e01c91826317447cf1146100aa57505080632eb48a80146100a55780633aeb2206146100a05780634eb311501461009b57806356b1a87f1461009657806384b0196e1461009157806387ec11ca1461008c5763f0c60f1a14610087573861000f565b61077e565b610564565b61050f565b610334565b61028f565b61023e565b6101a3565b346101275780600319360112610127576100c261012b565b9060243567ffffffffffffffff8111610123576100e3903690600401610172565b909284528060051b92845b848103610102575050602084526020520190f35b80602091830135808352603f8820549060ff161c60011681860152016100ee565b8380fd5b5080fd5b600435906001600160a01b038216820361014157565b600080fd5b60a435906001600160a01b038216820361014157565b602435906001600160a01b038216820361014157565b9181601f840112156101415782359167ffffffffffffffff8311610141576020808501948460051b01011161014157565b34610141576020806003193601126101415760043567ffffffffffffffff8111610141576101d5903690600401610172565b6000913383528160051b91835b83810361021f5750848495849552526040377fc45e3a0dd412bcad8d62398d74d66b1c8449f38beb10da275e4da0c6d3a811a4339160400183a280f35b8086918401358083526001603f88209160ff161b8154179055016101e2565b346101415760203660031901126101415761025761012b565b3001543d5260203df35b9181601f840112156101415782359167ffffffffffffffff8311610141576020838186019501011161014157565b60e03660031901126101415767ffffffffffffffff60048035828111610141576102bc9036908301610261565b9190602435848111610141576102d59036908401610172565b9094604435818111610141576102ee9036908601610172565b90606435838111610141576103069036908801610172565b949093610311610146565b9760c4359182116101415761032891369101610261565b999098608435976107e6565b346101415760403660031901126101415761034d61012b565b60243567ffffffffffffffff81116101415761036d903690600401610261565b9190308201908154907f898da98c106c91ce6f05405740b0ed23b5c4dc847a0dd1996fb93189d8310bef3d5260209482865260403d206040527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6060527f301013e8a31863902646dc218ecd889c37491c2967a8104d5ff1cf42af0f9ea46080527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660a0524660c0523060e05260a060602086526119013d52856042601e2091600093604182146104d2575b8415610494575b50505050156104865760019060001943014060e01c01018091556000527f997a42216df16c8b9e7caf2fc71c59dba956f1f2b12320f87a80a5879464217d826000a26000f35b638baa579f6000526004601cfd5b6000929394509080606492630b135d3f60e11b9687865260045260406024528160445283370181875afa90853d149060005114161638858180610440565b93600160808492863d52848860403781513d1a84526fa2a8918ca85bafe22016d0b997e4df5f600160ff1b03606051105afa5187143d0293610439565b3461014157600036600319011261014157600f3d5360e060205275154d756c746963616c6c6572576974685369676e657260f55261012060405261013161012152466060523060805261016060c0526101803df35b346101415760603660031901126101415767ffffffffffffffff60043581811161014157610596903690600401610172565b6105a192919261015c565b91604435908111610141576105ba903690600401610261565b90938260051b927fe75b4aefef1358e66ac7ed2f180022e0a7f661dcd2781630ce58e05bb8bdb1c13d526020958483883784872087523086015493604094855260603d2085527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6060527f301013e8a31863902646dc218ecd889c37491c2967a8104d5ff1cf42af0f9ea46080527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660a0524660c0523060e05260a060602088526119013d52876042601e209160009360418214610742575b8415610705575b5050505015610486578460005260005b8481036106e55750908391867fc45e3a0dd412bcad8d62398d74d66b1c8449f38beb10da275e4da0c6d3a811a49697600052528237016000a2005b8087918401358083526001603f6000209160ff161b8154179055016106aa565b6000929394509080606492630b135d3f60e11b96878652600452896024528160445283370181895afa90873d14906000511416163887818061069a565b93600160808492863d5284888c3781513d1a84526fa2a8918ca85bafe22016d0b997e4df5f600160ff1b03606051105afa5189143d0293610693565b34610141576000806003193601126107d1576020903033016001815460001943014060e01c01018091558152337f997a42216df16c8b9e7caf2fc71c59dba956f1f2b12320f87a80a5879464217d8383a2f35b80fd5b3d546001600160a01b03163d5260203df35b97919099959498939692986060938114818b141615610ac5573d5460a01c15610ab85760059b9a9b1b997fc4d2f044d99707794280032fc14879a220a3f7dc766d75100809624f91d69e973d528b60209c8d9a8b378920895260409b8c918c8484378c832083523d5b8d8103610a9557508c862086526080988d898b378d8a208a528560a0523088015460c05260e03d2084527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f87527f301013e8a31863902646dc218ecd889c37491c2967a8104d5ff1cf42af0f9ea48a527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660a0524660c0523060e05260a0872083526119013d526042601e209360009a60418414610a5a575b508a15610a1a575b505050505083600052818852603f938460002092835493600198898360ff161b90868216901517610486578e9517905589600052878a528352807fc45e3a0dd412bcad8d62398d74d66b1c8449f38beb10da275e4da0c6d3a811a4856000a28a15610a12578695949392506000558a968a818d378b8b8101965b61099f575b8b8b8b523060a01b600055016000f35b976000808b839e969798999a9b845186019088019481869235938491018337603f19818d0181013591890101355af115610a0857838a918e958e523d90523d60008783013e3d018601601f19169b0197878914610a015796959493928761098a565b508261098f565b3d6000803e3d6000fd5b828b8a526000f35b60009394959a50918091606493630b135d3f60e11b978887526004526024528160445283370181875afa90883d149060005114161694388881808e610910565b600190829c858588958a3d523781513d1a84526fa2a8918ca85bafe22016d0b997e4df5f600160ff1b038b51105afa5188143d029938610908565b9092508581018a8201358b0180359081908501833781209052018c918a9161084f565b63ab143c063d526004601cfd5b633b800a463d526004601cfdfea2646970667358221220d3c4d3ef5d014ffa12aba8a974a78788effac209c2d0add0a68d19f1a19b18ed64736f6c63430008120033"; + hex"6080806040523060a01b3d55610abb90816100188239f3fe6040608081526004361015610020575b50361561001b57600080fd5b6107a0565b6000803560e01c91826317447cf1146100aa57505080632eb48a80146100a55780633aeb2206146100a05780634eb311501461009b57806356b1a87f1461009657806384b0196e1461009157806387ec11ca1461008c5763f0c60f1a14610087573861000f565b61074a565b61054a565b6104f5565b610334565b61028f565b61023e565b6101a3565b346101275780600319360112610127576100c261012b565b9060243567ffffffffffffffff8111610123576100e3903690600401610172565b909284528060051b92845b848103610102575050602084526020520190f35b80602091830135808352603f8820549060ff161c60011681860152016100ee565b8380fd5b5080fd5b600435906001600160a01b038216820361014157565b600080fd5b60a435906001600160a01b038216820361014157565b602435906001600160a01b038216820361014157565b9181601f840112156101415782359167ffffffffffffffff8311610141576020808501948460051b01011161014157565b34610141576020806003193601126101415760043567ffffffffffffffff8111610141576101d5903690600401610172565b6000913383528160051b91835b83810361021f5750848495849552526040377fc45e3a0dd412bcad8d62398d74d66b1c8449f38beb10da275e4da0c6d3a811a4339160400183a280f35b8086918401358083526001603f88209160ff161b8154179055016101e2565b346101415760203660031901126101415761025761012b565b3001543d5260203df35b9181601f840112156101415782359167ffffffffffffffff8311610141576020838186019501011161014157565b60e03660031901126101415767ffffffffffffffff60048035828111610141576102bc9036908301610261565b9190602435848111610141576102d59036908401610172565b9094604435818111610141576102ee9036908601610172565b90606435838111610141576103069036908801610172565b949093610311610146565b9760c4359182116101415761032891369101610261565b999098608435976107b2565b346101415760403660031901126101415761034d61012b565b60243567ffffffffffffffff81116101415761036d903690600401610261565b9190308201908154907f898da98c106c91ce6f05405740b0ed23b5c4dc847a0dd1996fb93189d8310bef3d5260209482865260403d206040527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6060527f301013e8a31863902646dc218ecd889c37491c2967a8104d5ff1cf42af0f9ea46080527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660a0524660c0523060e05260a060602086526119013d52856042601e2091600093604182146104d2575b8415610494575b50505050156104865760019060001943014060e01c01018091556000527f997a42216df16c8b9e7caf2fc71c59dba956f1f2b12320f87a80a5879464217d826000a26000f35b638baa579f6000526004601cfd5b6000929394509080606492630b135d3f60e11b9687865260045260406024528160445283370181875afa90853d149060005114161638858180610440565b93600160808492863d52848860403781513d1a8452825afa5187143d0293610439565b3461014157600036600319011261014157600f3d5360e060205275154d756c746963616c6c6572576974685369676e657260f55261012060405261013161012152466060523060805261016060c0526101803df35b346101415760603660031901126101415767ffffffffffffffff6004358181116101415761057c903690600401610172565b61058792919261015c565b91604435908111610141576105a0903690600401610261565b90938260051b927fe75b4aefef1358e66ac7ed2f180022e0a7f661dcd2781630ce58e05bb8bdb1c13d526020958483883784872087523086015493604094855260603d2085527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6060527f301013e8a31863902646dc218ecd889c37491c2967a8104d5ff1cf42af0f9ea46080527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660a0524660c0523060e05260a060602088526119013d52876042601e209160009360418214610728575b84156106eb575b5050505015610486578460005260005b8481036106cb5750908391867fc45e3a0dd412bcad8d62398d74d66b1c8449f38beb10da275e4da0c6d3a811a49697600052528237016000a2005b8087918401358083526001603f6000209160ff161b815417905501610690565b6000929394509080606492630b135d3f60e11b96878652600452896024528160445283370181895afa90873d149060005114161638878180610680565b93600160808492863d5284888c3781513d1a8452825afa5189143d0293610679565b346101415760008060031936011261079d576020903033016001815460001943014060e01c01018091558152337f997a42216df16c8b9e7caf2fc71c59dba956f1f2b12320f87a80a5879464217d8383a2f35b80fd5b3d546001600160a01b03163d5260203df35b97919099959498939692986060938114818b141615610a78573d5460a01c15610a6b5760059b9a9b1b997fc4d2f044d99707794280032fc14879a220a3f7dc766d75100809624f91d69e973d528b60209c8d9a8b378920895260409b8c918c8484378c832083523d5b8d8103610a4857508c862086526080988d898b378d8a208a528560a0523088015460c05260e03d2084527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f87527f301013e8a31863902646dc218ecd889c37491c2967a8104d5ff1cf42af0f9ea48a527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660a0524660c0523060e05260a0872083526119013d526042601e209360009a60418414610a26575b508a156109e6575b505050505083600052818852603f938460002092835493600198898360ff161b90868216901517610486578e9517905589600052878a528352807fc45e3a0dd412bcad8d62398d74d66b1c8449f38beb10da275e4da0c6d3a811a4856000a28a156109de578695949392506000558a968a818d378b8b8101965b61096b575b8b8b8b523060a01b600055016000f35b976000808b839e969798999a9b845186019088019481869235938491018337603f19818d0181013591890101355af1156109d457838a918e958e523d90523d60008783013e3d018601601f19169b01978789146109cd57969594939287610956565b508261095b565b3d6000803e3d6000fd5b828b8a526000f35b60009394959a50918091606493630b135d3f60e11b978887526004526024528160445283370181875afa90883d149060005114161694388881808e6108dc565b600190829c858588958a3d523781513d1a8452825afa5188143d0299386108d4565b9092508581018a8201358b0180359081908501833781209052018c918a9161081b565b63ab143c063d526004601cfd5b633b800a463d526004601cfdfea2646970667358221220df065481586e05c7c3518fad15b937e606ace5837d907434182eff1b7731690764736f6c63430008120033"; bytes32 public constant MULTICALLER_WITH_SIGNER_INITCODEHASH = - 0x26bc769329f915c0c057ae95434fa59a795c3a23332d8e16241c1461e8ca0f7b; + 0x07da29be562a291a6ccd5765eac970beb654a7fa41201149c78acd5f22a3015d; bytes32 public constant MULTICALLER_WITH_SIGNER_CREATE2_SALT = - 0x0000000000000000000000000000000000000000c6bc6bef0708920389010934; + 0x00000000000000000000000000000000000000008c6c52f2e388bb008fe279ec; address public constant MULTICALLER_WITH_SIGNER_CREATE2_DEPLOYED_ADDRESS = - 0x0000000000007DeD88fff5c18A2Bb6254ECd4130; + 0x0000000000003C6E14B7f65dA82b10132d9904F9; Multicaller multicaller; MulticallerWithSender multicallerWithSender;