From a11843d469aae7c0314a595a24a86b98e1ff77bd Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Wed, 27 May 2026 12:36:01 +1000 Subject: [PATCH 1/2] Add guarded multicaller to abis --- package.json | 2 +- src/abis.ts | 364 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 365 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index f363c47c..971f420f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@imtbl/contracts", - "version": "3.1.0", + "version": "3.1.1", "description": "Immutable Smart Contracts", "author": "Immutable", "license": "Apache-2.0", diff --git a/src/abis.ts b/src/abis.ts index 3b620fee..ffa1940c 100644 --- a/src/abis.ts +++ b/src/abis.ts @@ -1,3 +1,367 @@ +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// GuardedMulticaller +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const GuardedMulticallerAbi = [ + { + type: 'constructor', + inputs: [ + { name: '_owner', internalType: 'address', type: 'address' }, + { name: '_name', internalType: 'string', type: 'string' }, + { name: '_version', internalType: 'string', type: 'string' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'DEFAULT_ADMIN_ROLE', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'MULTICALL_SIGNER_ROLE', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'eip712Domain', + outputs: [ + { name: 'fields', internalType: 'bytes1', type: 'bytes1' }, + { name: 'name', internalType: 'string', type: 'string' }, + { name: 'version', internalType: 'string', type: 'string' }, + { name: 'chainId', internalType: 'uint256', type: 'uint256' }, + { name: 'verifyingContract', internalType: 'address', type: 'address' }, + { name: 'salt', internalType: 'bytes32', type: 'bytes32' }, + { name: 'extensions', internalType: 'uint256[]', type: 'uint256[]' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_multicallSigner', internalType: 'address', type: 'address' }, + { name: '_reference', internalType: 'bytes32', type: 'bytes32' }, + { name: '_targets', internalType: 'address[]', type: 'address[]' }, + { name: '_data', internalType: 'bytes[]', type: 'bytes[]' }, + { name: '_deadline', internalType: 'uint256', type: 'uint256' }, + { name: '_signature', internalType: 'bytes', type: 'bytes' }, + ], + name: 'execute', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'role', internalType: 'bytes32', type: 'bytes32' }], + name: 'getRoleAdmin', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_user', internalType: 'address', type: 'address' }], + name: 'grantMulticallSignerRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'grantRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_reference', internalType: 'bytes32', type: 'bytes32' }], + name: 'hasBeenExecuted', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'hasRole', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_data', internalType: 'bytes[]', type: 'bytes[]' }], + name: 'hashBytesArray', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: '_target', internalType: 'address', type: 'address' }, + { name: '_functionSelector', internalType: 'bytes4', type: 'bytes4' }, + ], + name: 'isFunctionPermitted', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'renounceRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_user', internalType: 'address', type: 'address' }], + name: 'revokeMulticallSignerRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32' }, + { name: 'account', internalType: 'address', type: 'address' }, + ], + name: 'revokeRole', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { + name: '_functionPermits', + internalType: 'struct GuardedMulticaller.FunctionPermit[]', + type: 'tuple[]', + components: [ + { name: 'target', internalType: 'address', type: 'address' }, + { name: 'functionSelector', internalType: 'bytes4', type: 'bytes4' }, + { name: 'permitted', internalType: 'bool', type: 'bool' }, + ], + }, + ], + name: 'setFunctionPermits', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { type: 'event', anonymous: false, inputs: [], name: 'EIP712DomainChanged' }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: '_target', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: '_functionSelector', + internalType: 'bytes4', + type: 'bytes4', + indexed: false, + }, + { + name: '_permitted', + internalType: 'bool', + type: 'bool', + indexed: false, + }, + ], + name: 'FunctionPermitted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: '_multicallSigner', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: '_reference', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: '_targets', + internalType: 'address[]', + type: 'address[]', + indexed: false, + }, + { + name: '_data', + internalType: 'bytes[]', + type: 'bytes[]', + indexed: false, + }, + { + name: '_deadline', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'Multicalled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'previousAdminRole', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'newAdminRole', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + ], + name: 'RoleAdminChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'account', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'RoleGranted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true }, + { + name: 'account', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'sender', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'RoleRevoked', + }, + { + type: 'error', + inputs: [ + { name: '_addressLength', internalType: 'uint256', type: 'uint256' }, + { name: '_dataLength', internalType: 'uint256', type: 'uint256' }, + ], + name: 'AddressDataArrayLengthsMismatch', + }, + { type: 'error', inputs: [], name: 'EmptyAddressArray' }, + { type: 'error', inputs: [], name: 'EmptyFunctionPermitArray' }, + { + type: 'error', + inputs: [{ name: '_deadline', internalType: 'uint256', type: 'uint256' }], + name: 'Expired', + }, + { + type: 'error', + inputs: [ + { name: '_target', internalType: 'address', type: 'address' }, + { name: '_data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'FailedCall', + }, + { + type: 'error', + inputs: [ + { name: '_target', internalType: 'address', type: 'address' }, + { name: '_data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'InvalidCallData', + }, + { + type: 'error', + inputs: [{ name: '_reference', internalType: 'bytes32', type: 'bytes32' }], + name: 'InvalidReference', + }, + { type: 'error', inputs: [], name: 'InvalidShortString' }, + { + type: 'error', + inputs: [{ name: '_target', internalType: 'address', type: 'address' }], + name: 'NonContractAddress', + }, + { + type: 'error', + inputs: [{ name: '_reference', internalType: 'bytes32', type: 'bytes32' }], + name: 'ReusedReference', + }, + { + type: 'error', + inputs: [{ name: 'str', internalType: 'string', type: 'string' }], + name: 'StringTooLong', + }, + { + type: 'error', + inputs: [ + { name: '_target', internalType: 'address', type: 'address' }, + { name: '_data', internalType: 'bytes', type: 'bytes' }, + ], + name: 'UnauthorizedFunction', + }, + { + type: 'error', + inputs: [{ name: '_signature', internalType: 'bytes', type: 'bytes' }], + name: 'UnauthorizedSignature', + }, + { + type: 'error', + inputs: [ + { name: '_multicallSigner', internalType: 'address', type: 'address' }, + ], + name: 'UnauthorizedSigner', + }, +] as const + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // GuardedMulticaller2 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// From c55fb34b444e0c85000fed5662ec01d6f91172cd Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Wed, 27 May 2026 12:47:48 +1000 Subject: [PATCH 2/2] Add reference to guarded multicaller --- src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.ts b/src/index.ts index 3baa8bf4..ed212981 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,6 +6,7 @@ */ export { + GuardedMulticallerAbi, GuardedMulticaller2Abi, ImmutableERC721Abi, ImmutableERC721MintByIdAbi,