diff --git a/TECHNICAL_OVERVIEW.md b/TECHNICAL_OVERVIEW.md index e36e3fbd..81ac047b 100644 --- a/TECHNICAL_OVERVIEW.md +++ b/TECHNICAL_OVERVIEW.md @@ -90,7 +90,7 @@ Central state struct; all mutations go through EngineBlox. ### 3.2 TxStatus and TxAction (EngineBlox.sol) -- **TxStatus**: UNDEFINED, PENDING, EXECUTING, PROCESSING_PAYMENT, CANCELLED, COMPLETED, FAILED, REJECTED. +- **TxStatus**: UNDEFINED, PENDING, EXECUTING, PROCESSING_PAYMENT, CANCELLED, COMPLETED, FAILED. Critical invariant: approval/execution/cancel only allowed when status is PENDING; status is set to EXECUTING (or CANCELLED) **before** any external call to prevent reentrancy-based bypass. - **TxAction** (9 values): Distinguish **who** can do **what**: - Time-delay: `EXECUTE_TIME_DELAY_REQUEST`, `EXECUTE_TIME_DELAY_APPROVE`, `EXECUTE_TIME_DELAY_CANCEL` @@ -179,7 +179,7 @@ The protocol deliberately enforces the same security rules in multiple places. A ### 6.2 Custom Errors (SharedValidation.sol) — Canonical List - **Address**: InvalidAddress, NotNewAddress, validateNotZeroAddress, validateAddressUpdate, validateTargetAddress, validateHandlerContract -- **Time / deadline**: InvalidTimeLockPeriod, TimeLockPeriodZero, DeadlineInPast, MetaTxExpired, BeforeReleaseTime, NewTimelockSame; validateReleaseTime, validateMetaTxDeadline +- **Time / deadline**: InvalidTimeLockPeriod, TimeLockPeriodZero, MetaTxExpired, BeforeReleaseTime, NewTimelockSame; validateReleaseTime, validateMetaTxDeadline - **Permissions**: NoPermission, NoPermissionForFunction, RestrictedOwner, RestrictedOwnerRecovery, RestrictedRecovery, RestrictedBroadcaster, SignerNotAuthorized, OnlyCallableByContract - **Transaction / state**: NotSupported, InvalidOperationType, ZeroOperationTypeNotAllowed, TransactionStatusMismatch, AlreadyInitialized, NotInitialized, TransactionIdMismatch, PendingSecureRequest - **Signature / meta-tx**: InvalidSignatureLength, InvalidSignature, InvalidNonce, ChainIdMismatch, InvalidHandlerSelector, InvalidSValue, InvalidVValue, ECDSAInvalidSignature, GasPriceExceedsMax diff --git a/abi/AccountBlox.abi.json b/abi/AccountBlox.abi.json index f18208a0..f5bcdaed 100644 --- a/abi/AccountBlox.abi.json +++ b/abi/AccountBlox.abi.json @@ -1,3929 +1,3978 @@ [ { - "inputs": [ - { - "internalType": "uint256", - "name": "array1Length", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "array2Length", - "type": "uint256" - } - ], - "name": "ArrayLengthMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxSize", - "type": "uint256" - } - ], - "name": "BatchSizeExceeded", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "resourceId", - "type": "bytes32" - } - ], - "name": "CannotModifyProtected", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - } - ], - "name": "ContractFunctionMustBeProtected", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - } - ], - "name": "InternalFunctionNotAccessible", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidPayment", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signedContract", - "type": "address" - }, - { - "internalType": "address", - "name": "entryContract", - "type": "address" - } - ], - "name": "MetaTxHandlerContractMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "signedSelector", - "type": "bytes4" - }, - { - "internalType": "bytes4", - "name": "entrySelector", - "type": "bytes4" - } - ], - "name": "MetaTxHandlerSelectorMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "NoPermission", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "NotSupported", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "OnlyCallableByContract", - "type": "error" - }, - { - "inputs": [], - "name": "PendingSecureRequest", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "rangeSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxRangeSize", - "type": "uint256" - } - ], - "name": "RangeSizeExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyGuardReentrantCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "resourceId", - "type": "bytes32" - } - ], - "name": "ResourceNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "RestrictedOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedOwnerRecovery", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedRecovery", - "type": "error" + "type": "fallback", + "stateMutability": "payable" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ComponentEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "EthReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" + "type": "receive", + "stateMutability": "payable" }, { + "type": "function", + "name": "approveTimeLockExecution", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "approveTimeLockExecution", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "approveTimeLockExecutionWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "approveTimeLockExecutionWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "cancelTimeLockExecution", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "cancelTimeLockExecution", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "cancelTimeLockExecutionWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "cancelTimeLockExecutionWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "createMetaTxParams", "inputs": [ { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "createMetaTxParams", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "executeBroadcasterUpdate", "inputs": [ { - "internalType": "address", "name": "newBroadcaster", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "location", - "type": "uint256" + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "name": "executeBroadcasterUpdate", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeGuardConfigBatch", "inputs": [ { + "name": "actions", + "type": "tuple[]", + "internalType": "struct IGuardController.GuardConfigAction[]", "components": [ { - "internalType": "enum IGuardController.GuardConfigActionType", "name": "actionType", - "type": "uint8" + "type": "uint8", + "internalType": "enum IGuardController.GuardConfigActionType" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct IGuardController.GuardConfigAction[]", - "name": "actions", - "type": "tuple[]" + ] } ], - "name": "executeGuardConfigBatch", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeRecoveryUpdate", "inputs": [ { - "internalType": "address", "name": "newRecoveryAddress", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "executeRecoveryUpdate", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeRoleConfigBatch", "inputs": [ { + "name": "actions", + "type": "tuple[]", + "internalType": "struct IRuntimeRBAC.RoleConfigAction[]", "components": [ { - "internalType": "enum IRuntimeRBAC.RoleConfigActionType", "name": "actionType", - "type": "uint8" + "type": "uint8", + "internalType": "enum IRuntimeRBAC.RoleConfigActionType" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct IRuntimeRBAC.RoleConfigAction[]", - "name": "actions", - "type": "tuple[]" + ] } ], - "name": "executeRoleConfigBatch", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeTimeLockUpdate", "inputs": [ { - "internalType": "uint256", "name": "newTimeLockPeriodSec", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "executeTimeLockUpdate", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeTransferOwnership", "inputs": [ { - "internalType": "address", "name": "newOwner", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "executeTransferOwnership", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeWithPayment", "inputs": [ { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "params", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "paymentDetails", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "paymentDetails", - "type": "tuple" + ] } ], - "name": "executeWithPayment", "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeWithTimeLock", "inputs": [ { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "params", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "executeWithTimeLock", "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForExisting", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForExisting", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForNew", "inputs": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForNew", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + "type": "uint256", + "internalType": "uint256" + } + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getActiveRolePermissions", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getActiveRolePermissions", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.FunctionPermission[]", "components": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "uint16", "name": "grantedActionsBitmap", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "bytes4[]", "name": "handlerForSelectors", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } - ], - "internalType": "struct EngineBlox.FunctionPermission[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getAuthorizedWallets", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getAuthorizedWallets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getBroadcasters", + "inputs": [], "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getFunctionSchema", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getFunctionSchema", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.FunctionSchema", "components": [ { - "internalType": "string", "name": "functionSignature", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "string", "name": "operationName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "uint16", "name": "supportedActionsBitmap", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "bool", "name": "enforceHandlerRelations", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" + }, + { + "name": "isGrantRevocable", + "type": "bool", + "internalType": "bool" }, { - "internalType": "bytes4[]", "name": "handlerForSelectors", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } - ], - "internalType": "struct EngineBlox.FunctionSchema", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getFunctionWhitelistTargets", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getFunctionWhitelistTargets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getHooks", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getHooks", "outputs": [ { - "internalType": "address[]", "name": "hooks", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getPendingTransactions", + "inputs": [], "outputs": [ { - "internalType": "uint256[]", "name": "", - "type": "uint256[]" + "type": "uint256[]", + "internalType": "uint256[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getRecovery", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getRole", "outputs": [ { - "internalType": "string", "name": "roleName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes32", "name": "hash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", "name": "maxWallets", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "walletCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getSignerNonce", "inputs": [ { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getSignerNonce", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedFunctions", + "inputs": [], "outputs": [ { - "internalType": "bytes4[]", "name": "", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedOperationTypes", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedRoles", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getTimeLockPeriodSec", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransaction", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransaction", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransactionHistory", "inputs": [ { - "internalType": "uint256", "name": "fromTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "toTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransactionHistory", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.TxRecord[]", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getWalletRoles", "inputs": [ { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getWalletRoles", "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "guardConfigBatchRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "guardConfigBatchRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "hasRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "hasRole", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "initialOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "broadcaster", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + }, + { + "name": "timeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "eventForwarder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", "name": "initialized", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "owner", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "requestAndApproveExecution", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "requestAndApproveExecution", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "roleConfigBatchRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "roleConfigBatchRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "supportsInterface", "inputs": [ { - "internalType": "bytes4", "name": "interfaceId", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "supportsInterface", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "transferOwnershipApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipDelayedApproval", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "transferOwnershipRequest", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + "type": "bytes", + "internalType": "bytes" + } + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterDelayedApproval", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterRequest", "inputs": [ { - "internalType": "address", "name": "newBroadcaster", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "location", - "type": "uint256" + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "name": "updateBroadcasterRequest", "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateRecoveryRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateRecoveryRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateTimeLockRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateTimeLockRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "stateMutability": "payable", - "type": "receive" + "type": "event", + "name": "ComponentEvent", + "inputs": [ + { + "name": "functionSelector", + "type": "bytes4", + "indexed": true, + "internalType": "bytes4" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false }, { + "type": "event", + "name": "EthReceived", "inputs": [ { - "internalType": "address", - "name": "initialOwner", - "type": "address" + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "broadcaster", - "type": "address" + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ArrayLengthMismatch", + "inputs": [ + { + "name": "array1Length", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", - "name": "recovery", - "type": "address" + "name": "array2Length", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "BatchSizeExceeded", + "inputs": [ + { + "name": "currentSize", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "timeLockPeriodSec", - "type": "uint256" + "name": "maxSize", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "CannotModifyProtected", + "inputs": [ + { + "name": "resourceId", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ContractFunctionMustBeProtected", + "inputs": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + }, + { + "type": "error", + "name": "InternalFunctionNotAccessible", + "inputs": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidOperation", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidPayment", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidTimeLockPeriod", + "inputs": [ + { + "name": "provided", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ItemAlreadyExists", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ItemNotFound", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "MetaTxHandlerContractMismatch", + "inputs": [ + { + "name": "signedContract", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "eventForwarder", - "type": "address" + "name": "entryContract", + "type": "address", + "internalType": "address" } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] + }, + { + "type": "error", + "name": "MetaTxHandlerSelectorMismatch", + "inputs": [ + { + "name": "signedSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "entrySelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + }, + { + "type": "error", + "name": "NoPermission", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "NotSupported", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCallableByContract", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "contractAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "PendingSecureRequest", + "inputs": [] + }, + { + "type": "error", + "name": "RangeSizeExceeded", + "inputs": [ + { + "name": "rangeSize", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxRangeSize", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "ResourceNotFound", + "inputs": [ + { + "name": "resourceId", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "RestrictedOwner", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "RestrictedOwnerRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "RestrictedRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] } ] \ No newline at end of file diff --git a/abi/SecureOwnable.abi.json b/abi/SecureOwnable.abi.json index 530c0279..e5b866fc 100644 --- a/abi/SecureOwnable.abi.json +++ b/abi/SecureOwnable.abi.json @@ -1,2731 +1,2769 @@ [ { + "type": "function", + "name": "createMetaTxParams", "inputs": [ { - "internalType": "uint256", - "name": "array1Length", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "array2Length", - "type": "uint256" - } - ], - "name": "ArrayLengthMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - } - ], - "name": "ContractFunctionMustBeProtected", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signedContract", - "type": "address" - }, - { - "internalType": "address", - "name": "entryContract", - "type": "address" - } - ], - "name": "MetaTxHandlerContractMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "signedSelector", - "type": "bytes4" - }, - { - "internalType": "bytes4", - "name": "entrySelector", - "type": "bytes4" - } - ], - "name": "MetaTxHandlerSelectorMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "NoPermission", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "OnlyCallableByContract", - "type": "error" - }, - { - "inputs": [], - "name": "PendingSecureRequest", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "rangeSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxRangeSize", - "type": "uint256" - } - ], - "name": "RangeSizeExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyGuardReentrantCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "resourceId", - "type": "bytes32" - } - ], - "name": "ResourceNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "RestrictedOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedOwnerRecovery", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedRecovery", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ComponentEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "createMetaTxParams", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "", - "type": "tuple" + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "executeBroadcasterUpdate", + "inputs": [ + { + "name": "newBroadcaster", + "type": "address", + "internalType": "address" + }, + { + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeRecoveryUpdate", + "inputs": [ + { + "name": "newRecoveryAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeTimeLockUpdate", + "inputs": [ + { + "name": "newTimeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeTransferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "generateUnsignedMetaTransactionForExisting", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForExisting", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForNew", "inputs": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForNew", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getActiveRolePermissions", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getActiveRolePermissions", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.FunctionPermission[]", "components": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "uint16", "name": "grantedActionsBitmap", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "bytes4[]", "name": "handlerForSelectors", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } - ], - "internalType": "struct EngineBlox.FunctionPermission[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getAuthorizedWallets", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getAuthorizedWallets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getBroadcasters", + "inputs": [], "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getFunctionSchema", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getFunctionSchema", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.FunctionSchema", "components": [ { - "internalType": "string", "name": "functionSignature", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "string", "name": "operationName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "uint16", "name": "supportedActionsBitmap", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "bool", "name": "enforceHandlerRelations", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" + }, + { + "name": "isGrantRevocable", + "type": "bool", + "internalType": "bool" }, { - "internalType": "bytes4[]", "name": "handlerForSelectors", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } - ], - "internalType": "struct EngineBlox.FunctionSchema", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getFunctionWhitelistTargets", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getFunctionWhitelistTargets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getHooks", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getHooks", "outputs": [ { - "internalType": "address[]", "name": "hooks", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getPendingTransactions", + "inputs": [], "outputs": [ { - "internalType": "uint256[]", "name": "", - "type": "uint256[]" + "type": "uint256[]", + "internalType": "uint256[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getRecovery", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getRole", "outputs": [ { - "internalType": "string", "name": "roleName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes32", "name": "hash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", "name": "maxWallets", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "walletCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getSignerNonce", "inputs": [ { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getSignerNonce", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedFunctions", + "inputs": [], "outputs": [ { - "internalType": "bytes4[]", "name": "", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedOperationTypes", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedRoles", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getTimeLockPeriodSec", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransaction", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransaction", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransactionHistory", "inputs": [ { - "internalType": "uint256", "name": "fromTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "toTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransactionHistory", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.TxRecord[]", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getWalletRoles", "inputs": [ { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getWalletRoles", "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "hasRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "hasRole", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "initialize", "inputs": [ { - "internalType": "address", "name": "initialOwner", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "broadcaster", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "recovery", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "timeLockPeriodSec", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "eventForwarder", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "initialize", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", + "type": "function", + "name": "initialized", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "owner", "inputs": [], - "name": "transferOwnershipRequest", "outputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "", + "type": "address", + "internalType": "address" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "supportsInterface", "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "transferOwnershipDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "transferOwnershipApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipDelayedApproval", "inputs": [ { - "internalType": "address", - "name": "newBroadcaster", - "type": "address" - }, - { - "internalType": "uint256", - "name": "location", - "type": "uint256" + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterRequest", "outputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - } - ], - "name": "updateBroadcasterDelayedApproval", + "type": "function", + "name": "transferOwnershipRequest", + "inputs": [], "outputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateBroadcasterDelayedApproval", + "inputs": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateBroadcasterRequest", + "inputs": [ + { + "name": "newBroadcaster", + "type": "address", + "internalType": "address" + }, + { + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateRecoveryRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateRecoveryRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateTimeLockRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateTimeLockRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "event", + "name": "ComponentEvent", "inputs": [ { - "internalType": "address", - "name": "newOwner", - "type": "address" + "name": "functionSelector", + "type": "bytes4", + "indexed": true, + "internalType": "bytes4" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], - "name": "executeTransferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "Initialized", "inputs": [ { - "internalType": "address", - "name": "newBroadcaster", - "type": "address" + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ArrayLengthMismatch", + "inputs": [ + { + "name": "array1Length", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "location", - "type": "uint256" + "name": "array2Length", + "type": "uint256", + "internalType": "uint256" } - ], - "name": "executeBroadcasterUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "ContractFunctionMustBeProtected", "inputs": [ { - "internalType": "address", - "name": "newRecoveryAddress", - "type": "address" + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "executeRecoveryUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] }, { + "type": "error", + "name": "InvalidOperation", "inputs": [ { - "internalType": "uint256", - "name": "newTimeLockPeriodSec", - "type": "uint256" + "name": "item", + "type": "address", + "internalType": "address" } - ], - "name": "executeTimeLockUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] + }, + { + "type": "error", + "name": "ItemAlreadyExists", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ItemNotFound", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "MetaTxHandlerContractMismatch", + "inputs": [ + { + "name": "signedContract", + "type": "address", + "internalType": "address" + }, + { + "name": "entryContract", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "MetaTxHandlerSelectorMismatch", + "inputs": [ + { + "name": "signedSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "entrySelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + }, + { + "type": "error", + "name": "NoPermission", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCallableByContract", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "contractAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "PendingSecureRequest", + "inputs": [] + }, + { + "type": "error", + "name": "RangeSizeExceeded", + "inputs": [ + { + "name": "rangeSize", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxRangeSize", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "ResourceNotFound", + "inputs": [ + { + "name": "resourceId", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "RestrictedOwner", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "RestrictedOwnerRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "RestrictedRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] } ] \ No newline at end of file diff --git a/abi/SimpleRWA20.abi.json b/abi/SimpleRWA20.abi.json index ea8c49be..e7639273 100644 --- a/abi/SimpleRWA20.abi.json +++ b/abi/SimpleRWA20.abi.json @@ -1,4010 +1,4048 @@ [ { + "type": "function", + "name": "allowance", "inputs": [ { - "internalType": "uint256", - "name": "array1Length", - "type": "uint256" + "name": "owner", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "array2Length", - "type": "uint256" + "name": "spender", + "type": "address", + "internalType": "address" } ], - "name": "ArrayLengthMismatch", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ContractFunctionMustBeProtected", - "type": "error" + "stateMutability": "view" }, { + "type": "function", + "name": "approve", "inputs": [ { - "internalType": "address", "name": "spender", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, + "name": "value", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ { - "internalType": "uint256", - "name": "needed", - "type": "uint256" + "name": "", + "type": "bool", + "internalType": "bool" } ], - "name": "ERC20InsufficientAllowance", - "type": "error" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "balanceOf", "inputs": [ { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ { - "internalType": "uint256", - "name": "needed", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ERC20InsufficientBalance", - "type": "error" + "stateMutability": "view" }, { + "type": "function", + "name": "burn", "inputs": [ { - "internalType": "address", - "name": "approver", - "type": "address" + "name": "value", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ERC20InvalidApprover", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "burnFrom", "inputs": [ { - "internalType": "address", - "name": "receiver", - "type": "address" + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ERC20InvalidReceiver", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "burnWithMetaTx", "inputs": [ { - "internalType": "address", - "name": "sender", - "type": "address" + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", + "components": [ + { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", + "components": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "releaseTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", + "components": [ + { + "name": "requester", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "gasLimit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "executionParams", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "erc20TokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "erc20TokenAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] } ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "address", - "name": "spender", - "type": "address" + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ERC20InvalidSpender", - "type": "error" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "createMetaTxParams", "inputs": [ { - "internalType": "address", - "name": "provided", - "type": "address" + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" } ], - "name": "InvalidAddress", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] } ], - "name": "InvalidHandlerSelector", - "type": "error" + "stateMutability": "view" }, { + "type": "function", + "name": "decimals", "inputs": [], - "name": "InvalidInitialization", - "type": "error" + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "executeBroadcasterUpdate", "inputs": [ { - "internalType": "bytes32", - "name": "actualType", - "type": "bytes32" + "name": "newBroadcaster", + "type": "address", + "internalType": "address" }, { - "internalType": "bytes32", - "name": "expectedType", - "type": "bytes32" + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "name": "InvalidOperationType", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeBurn", "inputs": [ { - "internalType": "address", - "name": "signedContract", - "type": "address" + "name": "from", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "entryContract", - "type": "address" + "name": "amount", + "type": "uint256", + "internalType": "uint256" } ], - "name": "MetaTxHandlerContractMismatch", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeMint", "inputs": [ { - "internalType": "bytes4", - "name": "signedSelector", - "type": "bytes4" + "name": "to", + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", - "name": "entrySelector", - "type": "bytes4" + "name": "amount", + "type": "uint256", + "internalType": "uint256" } ], - "name": "MetaTxHandlerSelectorMismatch", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeRecoveryUpdate", "inputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" + "name": "newRecoveryAddress", + "type": "address", + "internalType": "address" } ], - "name": "NoPermission", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "NotSupported", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeTimeLockUpdate", "inputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "OnlyCallableByContract", - "type": "error" - }, - { - "inputs": [], - "name": "PendingSecureRequest", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "rangeSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxRangeSize", - "type": "uint256" - } - ], - "name": "RangeSizeExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyGuardReentrantCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "resourceId", - "type": "bytes32" - } - ], - "name": "ResourceNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "RestrictedOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedOwnerRecovery", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedRecovery", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ComponentEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokensBurned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokensMinted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" + "name": "newTimeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" } ], - "name": "burn", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeTransferOwnership", "inputs": [ { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" + "name": "newOwner", + "type": "address", + "internalType": "address" } ], - "name": "burnFrom", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "generateUnsignedBurnMetaTx", "inputs": [ { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" + "name": "from", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" + "name": "amount", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "createMetaTxParams", - "outputs": [ - { + "name": "params", + "type": "tuple", + "internalType": "struct SimpleRWA20.TokenMetaTxParams", "components": [ { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newBroadcaster", - "type": "address" - }, - { - "internalType": "uint256", - "name": "location", - "type": "uint256" - } - ], - "name": "executeBroadcasterUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newRecoveryAddress", - "type": "address" - } - ], - "name": "executeRecoveryUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newTimeLockPeriodSec", - "type": "uint256" - } - ], - "name": "executeTimeLockUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", + "components": [ + { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", + "components": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "releaseTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", + "components": [ + { + "name": "requester", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "gasLimit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "executionParams", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "erc20TokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "erc20TokenAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] } ], - "name": "executeTransferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForExisting", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForExisting", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForNew", "inputs": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForNew", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedMintMetaTx", "inputs": [ { - "internalType": "bytes32", - "name": "roleHash", - "type": "bytes32" - } - ], - "name": "getActiveRolePermissions", - "outputs": [ + "name": "to", + "type": "address", + "internalType": "address" + }, { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct SimpleRWA20.TokenMetaTxParams", "components": [ { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "internalType": "uint16", - "name": "grantedActionsBitmap", - "type": "uint16" + "name": "deadline", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes4[]", - "name": "handlerForSelectors", - "type": "bytes4[]" + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.FunctionPermission[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "roleHash", - "type": "bytes32" - } - ], - "name": "getAuthorizedWallets", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" + ] } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getBroadcasters", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - } - ], - "name": "getFunctionSchema", - "outputs": [ - { + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { - "internalType": "string", - "name": "functionSignature", - "type": "string" - }, - { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "string", - "name": "operationName", - "type": "string" - }, - { - "internalType": "uint16", + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", + "components": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "releaseTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", + "components": [ + { + "name": "requester", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "gasLimit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "executionParams", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "erc20TokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "erc20TokenAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getActiveRolePermissions", + "inputs": [ + { + "name": "roleHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.FunctionPermission[]", + "components": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "grantedActionsBitmap", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "handlerForSelectors", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAuthorizedWallets", + "inputs": [ + { + "name": "roleHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBroadcasters", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getFunctionSchema", + "inputs": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.FunctionSchema", + "components": [ + { + "name": "functionSignature", + "type": "string", + "internalType": "string" + }, + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "operationName", + "type": "string", + "internalType": "string" + }, + { "name": "supportedActionsBitmap", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "bool", "name": "enforceHandlerRelations", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" + }, + { + "name": "isGrantRevocable", + "type": "bool", + "internalType": "bool" }, { - "internalType": "bytes4[]", "name": "handlerForSelectors", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } - ], - "internalType": "struct EngineBlox.FunctionSchema", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getFunctionWhitelistTargets", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getFunctionWhitelistTargets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getHooks", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getHooks", "outputs": [ { - "internalType": "address[]", "name": "hooks", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getPendingTransactions", + "inputs": [], "outputs": [ { - "internalType": "uint256[]", "name": "", - "type": "uint256[]" + "type": "uint256[]", + "internalType": "uint256[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getRecovery", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getRole", "outputs": [ { - "internalType": "string", "name": "roleName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes32", "name": "hash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", "name": "maxWallets", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "walletCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getSignerNonce", "inputs": [ { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getSignerNonce", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedFunctions", + "inputs": [], "outputs": [ { - "internalType": "bytes4[]", "name": "", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedOperationTypes", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedRoles", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getTimeLockPeriodSec", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransaction", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransaction", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransactionHistory", "inputs": [ { - "internalType": "uint256", "name": "fromTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "toTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransactionHistory", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.TxRecord[]", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getWalletRoles", "inputs": [ { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getWalletRoles", "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "hasRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "hasRole", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "initialized", - "outputs": [ + "type": "function", + "name": "initialize", + "inputs": [ { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ + "name": "initialOwner", + "type": "address", + "internalType": "address" + }, { - "internalType": "string", - "name": "", - "type": "string" + "name": "broadcaster", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + }, + { + "name": "timeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "eventForwarder", + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "symbol", + "type": "string", + "internalType": "string" + }, + { + "name": "initialOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "broadcaster", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + }, + { + "name": "timeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "eventForwarder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialized", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "mintWithMetaTx", + "inputs": [ + { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", + "components": [ + { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", + "components": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "releaseTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", + "components": [ + { + "name": "requester", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "gasLimit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "executionParams", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "erc20TokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "erc20TokenAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "outputs": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "name", "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "owner", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "supportsInterface", "inputs": [ { - "internalType": "bytes4", "name": "interfaceId", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "supportsInterface", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "symbol", + "inputs": [], "outputs": [ { - "internalType": "string", "name": "", - "type": "string" + "type": "string", + "internalType": "string" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "totalSupply", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "transfer", "inputs": [ { - "internalType": "address", "name": "to", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transfer", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferFrom", "inputs": [ { - "internalType": "address", "name": "from", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "to", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferFrom", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipDelayedApproval", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "transferOwnershipRequest", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterDelayedApproval", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterRequest", "inputs": [ { - "internalType": "address", "name": "newBroadcaster", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "location", - "type": "uint256" + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "name": "updateBroadcasterRequest", "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateRecoveryRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateRecoveryRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateTimeLockRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateTimeLockRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "event", + "name": "Approval", "inputs": [ { - "internalType": "address", - "name": "initialOwner", - "type": "address" + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "broadcaster", - "type": "address" + "name": "spender", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "recovery", - "type": "address" - }, + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ComponentEvent", + "inputs": [ { - "internalType": "uint256", - "name": "timeLockPeriodSec", - "type": "uint256" + "name": "functionSelector", + "type": "bytes4", + "indexed": true, + "internalType": "bytes4" }, { - "internalType": "address", - "name": "eventForwarder", - "type": "address" + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "Initialized", "inputs": [ { - "internalType": "string", - "name": "name", - "type": "string" - }, + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TokensBurned", + "inputs": [ { - "internalType": "string", - "name": "symbol", - "type": "string" + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "initialOwner", - "type": "address" - }, + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TokensMinted", + "inputs": [ { - "internalType": "address", - "name": "broadcaster", - "type": "address" + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "recovery", - "type": "address" + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "uint256", - "name": "timeLockPeriodSec", - "type": "uint256" + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "eventForwarder", - "type": "address" + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { + "type": "error", + "name": "ArrayLengthMismatch", "inputs": [ { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - }, - { - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "bytes4", - "name": "executionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "erc20TokenAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" - } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + "name": "array1Length", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "array2Length", + "type": "uint256", + "internalType": "uint256" } - ], - "name": "mintWithMetaTx", - "outputs": [ + ] + }, + { + "type": "error", + "name": "ContractFunctionMustBeProtected", + "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" } - ], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "ERC20InsufficientAllowance", "inputs": [ { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - }, - { - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "bytes4", - "name": "executionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "erc20TokenAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" - } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "allowance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "needed", + "type": "uint256", + "internalType": "uint256" } - ], - "name": "burnWithMetaTx", - "outputs": [ + ] + }, + { + "type": "error", + "name": "ERC20InsufficientBalance", + "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "sender", + "type": "address", + "internalType": "address" + }, + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "needed", + "type": "uint256", + "internalType": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "ERC20InvalidApprover", "inputs": [ { - "internalType": "address", - "name": "to", - "type": "address" + "name": "approver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidReceiver", + "inputs": [ + { + "name": "receiver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidSender", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidSpender", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidAddress", + "inputs": [ + { + "name": "provided", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidHandlerSelector", + "inputs": [ + { + "name": "selector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidOperation", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidOperationType", + "inputs": [ + { + "name": "actualType", + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "expectedType", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ItemAlreadyExists", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ItemNotFound", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "MetaTxHandlerContractMismatch", + "inputs": [ + { + "name": "signedContract", + "type": "address", + "internalType": "address" }, { - "components": [ - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - } - ], - "internalType": "struct SimpleRWA20.TokenMetaTxParams", - "name": "params", - "type": "tuple" + "name": "entryContract", + "type": "address", + "internalType": "address" } - ], - "name": "generateUnsignedMintMetaTx", - "outputs": [ + ] + }, + { + "type": "error", + "name": "MetaTxHandlerSelectorMismatch", + "inputs": [ { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - }, - { - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "bytes4", - "name": "executionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "erc20TokenAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" - } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + "name": "signedSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "entrySelector", + "type": "bytes4", + "internalType": "bytes4" } - ], - "stateMutability": "view", - "type": "function" + ] }, { + "type": "error", + "name": "NoPermission", "inputs": [ { - "internalType": "address", - "name": "from", - "type": "address" + "name": "caller", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "NotSupported", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCallableByContract", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "contractAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "PendingSecureRequest", + "inputs": [] + }, + { + "type": "error", + "name": "RangeSizeExceeded", + "inputs": [ + { + "name": "rangeSize", + "type": "uint256", + "internalType": "uint256" }, { - "components": [ - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - } - ], - "internalType": "struct SimpleRWA20.TokenMetaTxParams", - "name": "params", - "type": "tuple" + "name": "maxRangeSize", + "type": "uint256", + "internalType": "uint256" } - ], - "name": "generateUnsignedBurnMetaTx", - "outputs": [ + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "ResourceNotFound", + "inputs": [ { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - }, - { - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "bytes4", - "name": "executionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "erc20TokenAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" - } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + "name": "resourceId", + "type": "bytes32", + "internalType": "bytes32" } - ], - "stateMutability": "view", - "type": "function" + ] }, { + "type": "error", + "name": "RestrictedOwner", "inputs": [ { - "internalType": "address", - "name": "to", - "type": "address" + "name": "caller", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "owner", + "type": "address", + "internalType": "address" } - ], - "name": "executeMint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "RestrictedOwnerRecovery", "inputs": [ { - "internalType": "address", - "name": "from", - "type": "address" + "name": "caller", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" } - ], - "name": "executeBurn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] + }, + { + "type": "error", + "name": "RestrictedRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] } ] \ No newline at end of file diff --git a/abi/SimpleVault.abi.json b/abi/SimpleVault.abi.json index 02e196b4..ca46d2d9 100644 --- a/abi/SimpleVault.abi.json +++ b/abi/SimpleVault.abi.json @@ -1,3385 +1,3423 @@ [ { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "approveWithdrawalAfterDelay", "inputs": [ { - "internalType": "uint256", - "name": "array1Length", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "array2Length", - "type": "uint256" + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ArrayLengthMismatch", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ContractFunctionMustBeProtected", - "type": "error" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "approveWithdrawalWithMetaTx", "inputs": [ { - "internalType": "address", - "name": "provided", - "type": "address" + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", + "components": [ + { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", + "components": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "releaseTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", + "components": [ + { + "name": "requester", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "gasLimit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "executionParams", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "erc20TokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "erc20TokenAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] } ], - "name": "InvalidAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "uint256", - "name": "provided", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "InvalidTimeLockPeriod", - "type": "error" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "cancelWithdrawal", "inputs": [ { - "internalType": "address", - "name": "signedContract", - "type": "address" - }, + "name": "txId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ { - "internalType": "address", - "name": "entryContract", - "type": "address" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "MetaTxHandlerContractMismatch", - "type": "error" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "createMetaTxParams", "inputs": [ { - "internalType": "bytes4", - "name": "signedSelector", - "type": "bytes4" + "name": "handlerContract", + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", - "name": "entrySelector", - "type": "bytes4" + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" } ], - "name": "MetaTxHandlerSelectorMismatch", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] } ], - "name": "NoPermission", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "NotSupported", - "type": "error" + "stateMutability": "view" }, { + "type": "function", + "name": "executeBroadcasterUpdate", "inputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" + "name": "newBroadcaster", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "contractAddress", - "type": "address" + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "name": "OnlyCallableByContract", - "type": "error" - }, - { - "inputs": [], - "name": "PendingSecureRequest", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeRecoveryUpdate", "inputs": [ { - "internalType": "uint256", - "name": "rangeSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxRangeSize", - "type": "uint256" + "name": "newRecoveryAddress", + "type": "address", + "internalType": "address" } ], - "name": "RangeSizeExceeded", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "ReentrancyGuardReentrantCall", - "type": "error" + "type": "function", + "name": "executeTimeLockUpdate", + "inputs": [ + { + "name": "newTimeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeTransferOwnership", "inputs": [ { - "internalType": "bytes32", - "name": "resourceId", - "type": "bytes32" + "name": "newOwner", + "type": "address", + "internalType": "address" } ], - "name": "ResourceNotFound", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeWithdrawEth", "inputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" + "name": "to", + "type": "address", + "internalType": "address payable" }, { - "internalType": "address", - "name": "owner", - "type": "address" + "name": "amount", + "type": "uint256", + "internalType": "uint256" } ], - "name": "RestrictedOwner", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeWithdrawToken", "inputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" + "name": "token", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "owner", - "type": "address" + "name": "to", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "recovery", - "type": "address" + "name": "amount", + "type": "uint256", + "internalType": "uint256" } ], - "name": "RestrictedOwnerRecovery", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForExisting", "inputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" + "name": "txId", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedRecovery", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ComponentEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "EthReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "EthWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokenWithdrawn", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "createMetaTxParams", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], + "name": "metaTxParams", + "type": "tuple", "internalType": "struct EngineBlox.MetaTxParams", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newBroadcaster", - "type": "address" - }, - { - "internalType": "uint256", - "name": "location", - "type": "uint256" - } - ], - "name": "executeBroadcasterUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newRecoveryAddress", - "type": "address" - } - ], - "name": "executeRecoveryUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newTimeLockPeriodSec", - "type": "uint256" - } - ], - "name": "executeTimeLockUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "executeTransferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForExisting", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForNew", "inputs": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForNew", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedWithdrawalMetaTxApproval", "inputs": [ { - "internalType": "bytes32", - "name": "roleHash", - "type": "bytes32" - } - ], - "name": "getActiveRolePermissions", - "outputs": [ + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct SimpleVault.VaultMetaTxParams", "components": [ { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "internalType": "uint16", - "name": "grantedActionsBitmap", - "type": "uint16" + "name": "deadline", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes4[]", - "name": "handlerForSelectors", - "type": "bytes4[]" + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.FunctionPermission[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "roleHash", - "type": "bytes32" + ] } ], - "name": "getAuthorizedWallets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getBroadcasters", - "outputs": [ + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", + "components": [ + { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", + "components": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "releaseTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", + "components": [ + { + "name": "requester", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "gasLimit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "executionParams", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "erc20TokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "erc20TokenAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getActiveRolePermissions", + "inputs": [ + { + "name": "roleHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "tuple[]", + "internalType": "struct EngineBlox.FunctionPermission[]", + "components": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "grantedActionsBitmap", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "handlerForSelectors", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getAuthorizedWallets", "inputs": [ { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" + "name": "roleHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBroadcasters", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getEthBalance", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" } ], + "stateMutability": "view" + }, + { + "type": "function", "name": "getFunctionSchema", + "inputs": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + } + ], "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.FunctionSchema", "components": [ { - "internalType": "string", "name": "functionSignature", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "string", "name": "operationName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "uint16", "name": "supportedActionsBitmap", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "bool", "name": "enforceHandlerRelations", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" + }, + { + "name": "isGrantRevocable", + "type": "bool", + "internalType": "bool" }, { - "internalType": "bytes4[]", "name": "handlerForSelectors", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } - ], - "internalType": "struct EngineBlox.FunctionSchema", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getFunctionWhitelistTargets", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getFunctionWhitelistTargets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getHooks", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getHooks", "outputs": [ { - "internalType": "address[]", "name": "hooks", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getPendingTransactions", + "inputs": [], "outputs": [ { - "internalType": "uint256[]", "name": "", - "type": "uint256[]" + "type": "uint256[]", + "internalType": "uint256[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getRecovery", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getRole", "outputs": [ { - "internalType": "string", "name": "roleName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes32", "name": "hash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", "name": "maxWallets", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "walletCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getSignerNonce", "inputs": [ { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getSignerNonce", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedFunctions", + "inputs": [], "outputs": [ { - "internalType": "bytes4[]", "name": "", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedOperationTypes", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedRoles", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getTimeLockPeriodSec", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTokenBalance", "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" } ], + "stateMutability": "view" + }, + { + "type": "function", "name": "getTransaction", + "inputs": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + } + ], "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransactionHistory", "inputs": [ { - "internalType": "uint256", "name": "fromTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "toTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransactionHistory", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.TxRecord[]", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getWalletRoles", "inputs": [ { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getWalletRoles", "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "hasRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "hasRole", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "initialOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "broadcaster", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + }, + { + "name": "timeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "eventForwarder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", "name": "initialized", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "owner", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "supportsInterface", "inputs": [ { - "internalType": "bytes4", "name": "interfaceId", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "supportsInterface", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "transferOwnershipApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipDelayedApproval", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "transferOwnershipRequest", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterDelayedApproval", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterRequest", "inputs": [ { - "internalType": "address", "name": "newBroadcaster", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "location", - "type": "uint256" + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "name": "updateBroadcasterRequest", "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateRecoveryRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateRecoveryRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateTimeLockRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateTimeLockRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "withdrawEthRequest", "inputs": [ { - "internalType": "address", - "name": "initialOwner", - "type": "address" + "name": "to", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "broadcaster", - "type": "address" - }, + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ { - "internalType": "address", - "name": "recovery", - "type": "address" + "name": "txId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "withdrawTokenRequest", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "timeLockPeriodSec", - "type": "uint256" + "name": "to", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "eventForwarder", - "type": "address" + "name": "amount", + "type": "uint256", + "internalType": "uint256" } ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getEthBalance", "outputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "event", + "name": "ComponentEvent", "inputs": [ { - "internalType": "address", - "name": "token", - "type": "address" + "name": "functionSelector", + "type": "bytes4", + "indexed": true, + "internalType": "bytes4" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], - "name": "getTokenBalance", - "outputs": [ + "anonymous": false + }, + { + "type": "event", + "name": "EthReceived", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "EthWithdrawn", "inputs": [ { - "internalType": "address", "name": "to", - "type": "address" + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "name": "withdrawEthRequest", - "outputs": [ + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" } ], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "TokenWithdrawn", "inputs": [ { - "internalType": "address", "name": "token", - "type": "address" + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", "name": "to", - "type": "address" + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "name": "withdrawTokenRequest", - "outputs": [ + "anonymous": false + }, + { + "type": "error", + "name": "ArrayLengthMismatch", + "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "array1Length", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "array2Length", + "type": "uint256", + "internalType": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "ContractFunctionMustBeProtected", "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "approveWithdrawalAfterDelay", - "outputs": [ + ] + }, + { + "type": "error", + "name": "InvalidAddress", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "provided", + "type": "address", + "internalType": "address" } - ], - "stateMutability": "nonpayable", - "type": "function" + ] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] }, { + "type": "error", + "name": "InvalidOperation", "inputs": [ { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - }, - { - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "bytes4", - "name": "executionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "erc20TokenAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" - } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + "name": "item", + "type": "address", + "internalType": "address" } - ], - "name": "approveWithdrawalWithMetaTx", - "outputs": [ + ] + }, + { + "type": "error", + "name": "InvalidTimeLockPeriod", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "provided", + "type": "uint256", + "internalType": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "ItemAlreadyExists", "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "item", + "type": "address", + "internalType": "address" } - ], - "name": "cancelWithdrawal", - "outputs": [ + ] + }, + { + "type": "error", + "name": "ItemNotFound", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "item", + "type": "address", + "internalType": "address" } - ], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "MetaTxHandlerContractMismatch", "inputs": [ { - "internalType": "address payable", - "name": "to", - "type": "address" + "name": "signedContract", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "entryContract", + "type": "address", + "internalType": "address" } - ], - "name": "executeWithdrawEth", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "MetaTxHandlerSelectorMismatch", "inputs": [ { - "internalType": "address", - "name": "token", - "type": "address" + "name": "signedSelector", + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "address", - "name": "to", - "type": "address" + "name": "entrySelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + }, + { + "type": "error", + "name": "NoPermission", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "NotSupported", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCallableByContract", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "contractAddress", + "type": "address", + "internalType": "address" } - ], - "name": "executeWithdrawToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "PendingSecureRequest", + "inputs": [] + }, + { + "type": "error", + "name": "RangeSizeExceeded", "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "rangeSize", + "type": "uint256", + "internalType": "uint256" }, { - "components": [ - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - } - ], - "internalType": "struct SimpleVault.VaultMetaTxParams", - "name": "metaTxParams", - "type": "tuple" + "name": "maxRangeSize", + "type": "uint256", + "internalType": "uint256" } - ], - "name": "generateUnsignedWithdrawalMetaTxApproval", - "outputs": [ + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "ResourceNotFound", + "inputs": [ { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - }, - { - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "bytes4", - "name": "executionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "erc20TokenAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" - } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + "name": "resourceId", + "type": "bytes32", + "internalType": "bytes32" } - ], - "stateMutability": "view", - "type": "function" + ] + }, + { + "type": "error", + "name": "RestrictedOwner", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "RestrictedOwnerRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "RestrictedRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] } ] \ No newline at end of file diff --git a/contracts/core/access/RuntimeRBAC.sol b/contracts/core/access/RuntimeRBAC.sol index f0c87219..8f56a030 100644 --- a/contracts/core/access/RuntimeRBAC.sol +++ b/contracts/core/access/RuntimeRBAC.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; // Contract imports import "../base/BaseStateMachine.sol"; @@ -30,10 +30,9 @@ import "./interface/IRuntimeRBAC.sol"; * - For ADD_WALLET and REVOKE_WALLET we call _requireRoleNotProtected so batch ops cannot * change who holds system roles. For REMOVE_ROLE we rely on EngineBlox.removeRole, which * enforces the same policy at the library layer (cannot remove protected roles). - * - Function-permission updates on protected roles are intentionally supported for flexibility, - * but EngineBlox.removeFunctionFromRole still blocks removal of protected function schemas - * (isProtected == true). This prevents bricking core protected operations like ownership flow - * selectors while still allowing policy updates for non-protected selectors. + * - Function-permission updates on protected roles are intentionally supported for flexibility. + * EngineBlox.removeFunctionFromRole allows removing a grant whenever the schema's **`isGrantRevocable`** + * is true (including from protected roles); **`GrantNotRevocable`** applies when it is false. * - The **only** place to modify system wallets (protected roles) is the SecureOwnable * security component (e.g. transferOwnershipRequest, broadcaster/recovery changes). * - This layering is intentional: RBAC cannot touch protected roles; SecureOwnable is the @@ -231,10 +230,9 @@ abstract contract RuntimeRBAC is BaseStateMachine, IRuntimeRBAC { * @dev Executes REMOVE_FUNCTION_FROM_ROLE: removes a function permission from a role. * @param data ABI-encoded (bytes32 roleHash, bytes4 functionSelector) * @custom:security By design we allow removing function permissions from protected roles (OWNER, BROADCASTER, RECOVERY) - * to retain flexibility to adjust which functions system roles can call; only wallet add/revoke - * are restricted on protected roles. EngineBlox.removeFunctionFromRole still blocks - * removing protected function schemas (isProtected == true), so critical protected - * selectors cannot be stripped from roles. + * for flexibility; only wallet add/revoke are restricted on protected roles. EngineBlox.removeFunctionFromRole + * enforces **`GrantNotRevocable`** when the schema's **`isGrantRevocable`** is false; when true, + * grants may be removed from protected roles as well as custom roles. */ function _executeRemoveFunctionFromRole(bytes calldata data) internal { (bytes32 roleHash, bytes4 functionSelector) = abi.decode(data, (bytes32, bytes4)); diff --git a/contracts/core/access/interface/IRuntimeRBAC.sol b/contracts/core/access/interface/IRuntimeRBAC.sol index ea5aacc7..ac651421 100644 --- a/contracts/core/access/interface/IRuntimeRBAC.sol +++ b/contracts/core/access/interface/IRuntimeRBAC.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../lib/EngineBlox.sol"; diff --git a/contracts/core/access/lib/definitions/RuntimeRBACDefinitions.sol b/contracts/core/access/lib/definitions/RuntimeRBACDefinitions.sol index de4e70a3..e1e0542e 100644 --- a/contracts/core/access/lib/definitions/RuntimeRBACDefinitions.sol +++ b/contracts/core/access/lib/definitions/RuntimeRBACDefinitions.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import "../../../lib/EngineBlox.sol"; @@ -30,7 +30,7 @@ library RuntimeRBACDefinitions { bytes4 public constant ROLE_CONFIG_BATCH_META_SELECTOR = bytes4( keccak256( - "roleConfigBatchRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))" + "roleConfigBatchRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))" ) ); @@ -57,13 +57,14 @@ library RuntimeRBACDefinitions { handlerForSelectors[0] = ROLE_CONFIG_BATCH_EXECUTE_SELECTOR; schemas[0] = EngineBlox.FunctionSchema({ - functionSignature: "roleConfigBatchRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "roleConfigBatchRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: ROLE_CONFIG_BATCH_META_SELECTOR, operationType: ROLE_CONFIG_BATCH, operationName: "ROLE_CONFIG_BATCH", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: handlerForSelectors }); @@ -86,6 +87,7 @@ library RuntimeRBACDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(executionActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: executionHandlerForSelectors }); diff --git a/contracts/core/base/BaseStateMachine.sol b/contracts/core/base/BaseStateMachine.sol index d5540ae0..e9bf0637 100644 --- a/contracts/core/base/BaseStateMachine.sol +++ b/contracts/core/base/BaseStateMachine.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; // OpenZeppelin imports import "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; @@ -524,7 +524,7 @@ abstract contract BaseStateMachine is Initializable, ERC165Upgradeable, Reentran /** * @dev Gets function schema information * @param functionSelector The function selector to get information for - * @return The full FunctionSchema struct (functionSignature, functionSelector, operationType, operationName, supportedActionsBitmap, enforceHandlerRelations, isProtected, handlerForSelectors) + * @return The full FunctionSchema struct (functionSignature, functionSelector, operationType, operationName, supportedActionsBitmap, enforceHandlerRelations, isProtected, isGrantRevocable, handlerForSelectors) * @notice Reverts with ResourceNotFound if the schema does not exist */ function getFunctionSchema(bytes4 functionSelector) external view returns (EngineBlox.FunctionSchema memory) { @@ -701,7 +701,8 @@ abstract contract BaseStateMachine is Initializable, ERC165Upgradeable, Reentran * @param operationName The operation name * @param supportedActionsBitmap The bitmap of supported actions * @param enforceHandlerRelations Whether to enforce strict handler/schema alignment - * @param isProtected Whether the function schema is protected + * @param isProtected Whether the function schema is protected from unregister + * @param isGrantRevocable Whether role grants for this schema may be removed via `removeFunctionFromRole` (any role, including protected roles, when true) * @param handlerForSelectors Array of handler selectors * @notice This function is virtual to allow extensions to add hook functionality */ @@ -712,6 +713,7 @@ abstract contract BaseStateMachine is Initializable, ERC165Upgradeable, Reentran uint16 supportedActionsBitmap, bool enforceHandlerRelations, bool isProtected, + bool isGrantRevocable, bytes4[] memory handlerForSelectors ) internal virtual { EngineBlox.registerFunction( @@ -722,6 +724,7 @@ abstract contract BaseStateMachine is Initializable, ERC165Upgradeable, Reentran supportedActionsBitmap, enforceHandlerRelations, isProtected, + isGrantRevocable, handlerForSelectors ); } @@ -909,6 +912,7 @@ abstract contract BaseStateMachine is Initializable, ERC165Upgradeable, Reentran functionSchemas[i].supportedActionsBitmap, functionSchemas[i].enforceHandlerRelations, functionSchemas[i].isProtected, + functionSchemas[i].isGrantRevocable, functionSchemas[i].handlerForSelectors ); } diff --git a/contracts/core/base/interface/IBaseStateMachine.sol b/contracts/core/base/interface/IBaseStateMachine.sol index 390600c9..85fc6cb4 100644 --- a/contracts/core/base/interface/IBaseStateMachine.sol +++ b/contracts/core/base/interface/IBaseStateMachine.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; // Contracts imports import "../../lib/EngineBlox.sol"; diff --git a/contracts/core/execution/GuardController.sol b/contracts/core/execution/GuardController.sol index 5fb4e0be..28399716 100644 --- a/contracts/core/execution/GuardController.sol +++ b/contracts/core/execution/GuardController.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../base/BaseStateMachine.sol"; import "../lib/utils/SharedValidation.sol"; @@ -447,6 +447,7 @@ abstract contract GuardController is BaseStateMachine { supportedActionsBitmap, true, // enforceHandlerRelations for dynamically registered execution selectors false, // isProtected = false for dynamically registered functions + true, // isGrantRevocable: dynamically registered schemas may be revoked from roles executionHandlers // handlerForSelectors with self-reference for execution selectors ); } diff --git a/contracts/core/execution/interface/IGuardController.sol b/contracts/core/execution/interface/IGuardController.sol index 362f8a4b..0d5747a3 100644 --- a/contracts/core/execution/interface/IGuardController.sol +++ b/contracts/core/execution/interface/IGuardController.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../lib/EngineBlox.sol"; diff --git a/contracts/core/execution/lib/definitions/GuardControllerDefinitions.sol b/contracts/core/execution/lib/definitions/GuardControllerDefinitions.sol index 9001cb48..7e55945c 100644 --- a/contracts/core/execution/lib/definitions/GuardControllerDefinitions.sol +++ b/contracts/core/execution/lib/definitions/GuardControllerDefinitions.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import "../../../lib/EngineBlox.sol"; @@ -53,28 +53,28 @@ library GuardControllerDefinitions { // GuardController: approveTimeLockExecutionWithMetaTx(EngineBlox.MetaTransaction) bytes4 public constant APPROVE_TIMELOCK_EXECUTION_META_SELECTOR = bytes4( keccak256( - "approveTimeLockExecutionWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))" + "approveTimeLockExecutionWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))" ) ); // GuardController: cancelTimeLockExecutionWithMetaTx(EngineBlox.MetaTransaction) bytes4 public constant CANCEL_TIMELOCK_EXECUTION_META_SELECTOR = bytes4( keccak256( - "cancelTimeLockExecutionWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))" + "cancelTimeLockExecutionWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))" ) ); // GuardController: requestAndApproveExecution(EngineBlox.MetaTransaction) bytes4 public constant REQUEST_AND_APPROVE_EXECUTION_SELECTOR = bytes4( keccak256( - "requestAndApproveExecution(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))" + "requestAndApproveExecution(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))" ) ); // GuardController: guardConfigBatchRequestAndApprove(...) bytes4 public constant GUARD_CONFIG_BATCH_META_SELECTOR = bytes4( keccak256( - "guardConfigBatchRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))" + "guardConfigBatchRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))" ) ); @@ -163,6 +163,7 @@ library GuardControllerDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayRequestActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: executeWithTimeLockHandlerForSelectors }); @@ -175,6 +176,7 @@ library GuardControllerDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayApproveActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: approveTimeLockExecutionHandlerForSelectors }); @@ -187,54 +189,59 @@ library GuardControllerDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayCancelActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: cancelTimeLockExecutionHandlerForSelectors }); // Schema 3: GuardController.approveTimeLockExecutionWithMetaTx schemas[3] = EngineBlox.FunctionSchema({ - functionSignature: "approveTimeLockExecutionWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "approveTimeLockExecutionWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: APPROVE_TIMELOCK_EXECUTION_META_SELECTOR, operationType: CONTROLLER_OPERATION, operationName: "CONTROLLER_OPERATION", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxApproveActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: approveTimeLockExecutionMetaHandlerForSelectors }); // Schema 4: GuardController.cancelTimeLockExecutionWithMetaTx schemas[4] = EngineBlox.FunctionSchema({ - functionSignature: "cancelTimeLockExecutionWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "cancelTimeLockExecutionWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: CANCEL_TIMELOCK_EXECUTION_META_SELECTOR, operationType: CONTROLLER_OPERATION, operationName: "CONTROLLER_OPERATION", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxCancelActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: cancelTimeLockExecutionMetaHandlerForSelectors }); // Schema 5: GuardController.requestAndApproveExecution schemas[5] = EngineBlox.FunctionSchema({ - functionSignature: "requestAndApproveExecution(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "requestAndApproveExecution(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: REQUEST_AND_APPROVE_EXECUTION_SELECTOR, operationType: CONTROLLER_OPERATION, operationName: "CONTROLLER_OPERATION", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxRequestApproveActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: requestAndApproveExecutionHandlerForSelectors }); // Schema 6: GuardController.guardConfigBatchRequestAndApprove schemas[6] = EngineBlox.FunctionSchema({ - functionSignature: "guardConfigBatchRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "guardConfigBatchRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: GUARD_CONFIG_BATCH_META_SELECTOR, operationType: CONTROLLER_CONFIG_BATCH, operationName: "CONTROLLER_CONFIG_BATCH", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: guardConfigHandlerForSelectors }); @@ -251,6 +258,7 @@ library GuardControllerDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(guardConfigExecutionActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: guardConfigBatchExecuteHandlerForSelectors }); @@ -269,6 +277,7 @@ library GuardControllerDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayRequestActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: executeWithPaymentHandlerForSelectors }); @@ -295,6 +304,7 @@ library GuardControllerDefinitions { supportedActionsBitmap: allActionsBitmap, enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: true, handlerForSelectors: attachedPaymentRecipientHandlers }); @@ -308,6 +318,7 @@ library GuardControllerDefinitions { supportedActionsBitmap: allActionsBitmap, enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: true, handlerForSelectors: nativeTransferHandlers }); @@ -321,6 +332,7 @@ library GuardControllerDefinitions { supportedActionsBitmap: allActionsBitmap, enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: true, handlerForSelectors: erc20TransferHandlers }); diff --git a/contracts/core/lib/EngineBlox.sol b/contracts/core/lib/EngineBlox.sol index 204a8768..2fcf99bf 100644 --- a/contracts/core/lib/EngineBlox.sol +++ b/contracts/core/lib/EngineBlox.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; @@ -56,11 +56,6 @@ library EngineBlox { /// @dev Maximum total number of functions allowed in the system (prevents gas exhaustion in function operations) uint256 public constant MAX_FUNCTIONS = 2000; - - /// @dev Maximum bytes copied from call returndata into memory (and later persisted in `TxRecord.result`). - /// Full returndata from the callee may be larger; only the first `MAX_RESULT_PREVIEW_BYTES` are retained. - /// Chosen as 32 KiB to maximize debug/audit surface while bounding memory expansion and storage growth. - uint256 public constant MAX_RESULT_PREVIEW_BYTES = 32 * 1024; using SharedValidation for *; using EnumerableSet for EnumerableSet.UintSet; @@ -75,8 +70,7 @@ library EngineBlox { PROCESSING_PAYMENT, CANCELLED, COMPLETED, - FAILED, - REJECTED + FAILED } enum TxAction { @@ -118,7 +112,9 @@ library EngineBlox { TxStatus status; TxParams params; bytes32 message; - bytes result; + /// @dev Commitment to execution returndata: `bytes32(0)` when empty, else `keccak256(returndata)`. + /// Full returndata is emitted in `TxExecutionResult` on terminal execution (COMPLETED/FAILED). + bytes32 resultHash; PaymentDetails payment; } @@ -164,6 +160,9 @@ library EngineBlox { /// When false (flexible mode): no such check; forward references and unregistered selectors in handlerForSelectors are allowed at registration. bool enforceHandlerRelations; bool isProtected; + /// @dev When false, `removeFunctionFromRole` cannot remove this selector from any role (revoke + re-add updates blocked). + /// When true, grants may be removed from any role, including protected system roles; `isProtected` still blocks `unregisterFunction` for the schema. + bool isGrantRevocable; bytes4[] handlerForSelectors; } @@ -254,9 +253,13 @@ library EngineBlox { TxStatus status, address indexed requester, address target, - bytes32 operationType + bytes32 operationType, + bytes32 resultHash ); + /// @dev Emitted only on terminal execution (COMPLETED/FAILED). Full returndata; verify `keccak256(result) == resultHash`. + event TxExecutionResult(uint256 indexed txId, bytes result); + // ============ SYSTEM STATE FUNCTIONS ============ /** @@ -473,14 +476,15 @@ library EngineBlox { uint256 txId, bytes4 handlerSelector ) public returns (TxRecord memory) { - // Validate both execution and handler selector permissions + // CHECK: Validate both execution and handler selector permissions _validateExecutionAndHandlerPermissions(self, msg.sender, self.txRecords[txId].params.executionSelector, handlerSelector, TxAction.EXECUTE_TIME_DELAY_APPROVE); _validateTxStatus(self, txId, TxStatus.PENDING); + _validateTargetWhitelist(self, self.txRecords[txId].params.executionSelector, self.txRecords[txId].params.target); SharedValidation.validateReleaseTime(self.txRecords[txId].releaseTime); - + // EFFECT: Update status to EXECUTING before external call to prevent reentrancy self.txRecords[txId].status = TxStatus.EXECUTING; - + // INTERACT: External call after state update (bool success, bytes memory result) = executeTransaction(self, self.txRecords[txId]); @@ -560,17 +564,19 @@ library EngineBlox { * (direct path enforces releaseTime) and meta-tx workflows (delegated, time-flexible approval). */ function _txApprovalWithMetaTx(SecureOperationState storage self, MetaTransaction memory metaTx) private returns (TxRecord memory) { + // CHECK: Validate transaction parameters uint256 txId = metaTx.txRecord.txId; _validateTxStatus(self, txId, TxStatus.PENDING); + _validateTargetWhitelist(self, self.txRecords[txId].params.executionSelector, self.txRecords[txId].params.target); _validateMetaTxMatchRecord(self, txId, metaTx.txRecord); _validateMetaTxPaymentMatchRecord(self, txId, metaTx.txRecord); if (!verifySignature(self, metaTx)) revert SharedValidation.InvalidSignature(metaTx.signature); - + incrementSignerNonce(self, metaTx.params.signer); - + // EFFECT: Update status to EXECUTING before external call to prevent reentrancy self.txRecords[txId].status = TxStatus.EXECUTING; - + // INTERACT: External call after state update (bool success, bytes memory result) = executeTransaction(self, self.txRecords[txId]); @@ -612,46 +618,6 @@ library EngineBlox { return _txApprovalWithMetaTx(self, metaTx); } - /** - * @dev Performs `address.call` without copying unbounded returndata into memory. - * @param target Callee address - * @param value Native value to forward - * @param callGas Gas to forward to the callee - * @param data Full calldata for the call - * @return success Whether the call returned success - * @return result First `min(returndatasize(), MAX_RESULT_PREVIEW_BYTES)` bytes of returndata - */ - function _callWithBoundedReturndata( - address target, - uint256 value, - uint256 callGas, - bytes memory data - ) private returns (bool success, bytes memory result) { - uint256 dataLength = data.length; - assembly ("memory-safe") { - success := call( - callGas, - target, - value, - add(data, 0x20), - dataLength, - 0, - 0 - ) - } - uint256 returnSize; - assembly ("memory-safe") { - returnSize := returndatasize() - } - uint256 copyLength = returnSize > MAX_RESULT_PREVIEW_BYTES ? MAX_RESULT_PREVIEW_BYTES : returnSize; - result = new bytes(copyLength); - assembly ("memory-safe") { - if gt(copyLength, 0) { - returndatacopy(add(result, 0x20), 0, copyLength) - } - } - } - /** * @dev Executes a transaction based on its execution type and attached payment. * @param self The SecureOperationState storage reference (for validation) @@ -666,13 +632,12 @@ library EngineBlox { * causing _validateTxPending to revert in entry functions * 4. Status flow is one-way: PENDING → EXECUTING → (COMPLETED/FAILED) * This creates an effective reentrancy guard without additional storage overhead. - * @notice Returndata from the target is captured up to `MAX_RESULT_PREVIEW_BYTES` only (low-level `call` with - * zero output area, then bounded `returndatacopy`). This prevents unbounded memory expansion from - * malicious or buggy callees while preserving a large preview for debugging and audits. * @notice **Atomicity:** If the main call succeeds but `executeAttachedPayment` reverts (e.g. * insufficient balance, whitelist mismatch), the **entire** approval/execute transaction reverts—main * effect included. This is **intentional all-or-nothing** semantics; splitting finalize vs payment * would require a separate design with reentrancy and state-machine implications. + * @notice `record` is a memory copy: final `status` and `resultHash` are written to storage by `_completeTransaction`; + * full returndata is emitted in `TxExecutionResult`. */ function executeTransaction(SecureOperationState storage self, TxRecord memory record) private returns (bool, bytes memory) { // Validate that transaction is in EXECUTING status (set by caller before this function) @@ -690,24 +655,15 @@ library EngineBlox { // Execute the main transaction // REENTRANCY SAFE: Status is EXECUTING, preventing reentry through entry functions // that require PENDING status. Any reentry attempt would fail at _validateTxStatus(..., PENDING). - (bool success, bytes memory result) = _callWithBoundedReturndata( - record.params.target, - record.params.value, - gas, + (bool success, bytes memory result) = record.params.target.call{value: record.params.value, gas: gas}( txData ); if (success) { - record.status = TxStatus.COMPLETED; - record.result = result; - // Execute attached payment if transaction was successful if (record.payment.recipient != address(0)) { executeAttachedPayment(self, record); } - } else { - record.status = TxStatus.FAILED; - record.result = result; } return (success, result); @@ -839,7 +795,7 @@ library EngineBlox { executionParams: executionParams }), message: 0, - result: "", + resultHash: bytes32(0), payment: payment }); } @@ -850,8 +806,7 @@ library EngineBlox { * @param txId The transaction ID to add to the pending set. */ function addPendingTx(SecureOperationState storage self, uint256 txId) private { - SharedValidation.validateTransactionExists(txId); - _validateTxStatus(self, txId, TxStatus.PENDING); + SharedValidation.validateTransactionExists(txId, self.txCounter); // Try to add transaction ID to the set - add() returns false if already exists if (!self.pendingTransactionsSet.add(txId)) { @@ -865,7 +820,7 @@ library EngineBlox { * @param txId The transaction ID to remove from the pending set. */ function removePendingTx(SecureOperationState storage self, uint256 txId) private { - SharedValidation.validateTransactionExists(txId); + SharedValidation.validateTransactionExists(txId, self.txCounter); // Remove the transaction ID from the set (O(1) operation) if (!self.pendingTransactionsSet.remove(txId)) { @@ -1108,8 +1063,8 @@ library EngineBlox { * @param functionPermission The function permission to add. * @notice Reverts **`ResourceAlreadyExists`** if the selector is already present on the role. To update * bitmap or `handlerForSelectors`, **`removeFunctionFromRole`** first then re-add. - * Protected schemas cannot be removed from roles (`CannotModifyProtected`), so grants of - * protected selectors to a role are effectively **permanent** unless the role itself is removed. + * **`removeFunctionFromRole`** succeeds only when the schema's **`isGrantRevocable`** is true (see there); + * **`isProtected`** on the schema does not, by itself, block removing a grant from a role. */ function addFunctionToRole( SecureOperationState storage self, @@ -1142,10 +1097,10 @@ library EngineBlox { * @param self The SecureOperationState to modify. * @param roleHash The role hash to remove the function permission from. * @param functionSelector The function selector to remove from the role. - * @notice **Protected schemas cannot be removed from roles** (`CannotModifyProtected`). Granting a protected - * selector to a role is therefore an **irreversible expansion** of that role's capability unless the - * role itself is removed. Operators should only add protected selectors to roles when the - * permanent authority is intended. + * @notice When the selector is registered, reverts **`GrantNotRevocable`** if **`isGrantRevocable == false`** + * (no role may drop this grant). When **`isGrantRevocable == true`**, the grant may be removed from + * any role, including protected system roles; **`isProtected`** on the schema still blocks + * **`unregisterFunction`** independently, and **`removeRole`** still blocks protected roles. */ function removeFunctionFromRole( SecureOperationState storage self, @@ -1155,12 +1110,10 @@ library EngineBlox { // Check if role exists (checks both roles mapping and supportedRolesSet) _validateRoleExists(self, roleHash); - // Security check: Prevent removing protected functions from roles - // Check if function exists and is protected if (self.supportedFunctionsSet.contains(bytes32(functionSelector))) { FunctionSchema memory functionSchema = self.functions[functionSelector]; - if (functionSchema.isProtected) { - revert SharedValidation.CannotModifyProtected(bytes32(functionSelector)); + if (!functionSchema.isGrantRevocable) { + revert SharedValidation.GrantNotRevocable(functionSelector); } } @@ -1259,7 +1212,8 @@ library EngineBlox { * @param operationName The name of the operation type. * @param supportedActionsBitmap Bitmap of permissions required to execute this function. * @param enforceHandlerRelations When true (strict mode), handlerForSelectors in role permissions must match this schema's handlerForSelectors at use time. When false (flexible mode), forward references are allowed. - * @param isProtected Whether the function schema is protected from removal. + * @param isProtected Whether the function schema is protected from **unregister** (`unregisterFunction`). + * @param isGrantRevocable When false, `removeFunctionFromRole` cannot remove this selector from any role; when true, grants may be removed from any role, including protected system roles. * @param handlerForSelectors Non-empty array required - execution selectors must contain self-reference, handler selectors must point to execution selectors. * @custom:security OPERATIONAL MODES: We do not require handlerForSelectors[i] to be in supportedFunctionsSet at registration. * - Strict mode (enforceHandlerRelations == true): at use time (_validateHandlerForSelectors) we require role permissions' handlerForSelectors to match this schema's handlerForSelectors; registration order is flexible. @@ -1273,6 +1227,7 @@ library EngineBlox { uint16 supportedActionsBitmap, bool enforceHandlerRelations, bool isProtected, + bool isGrantRevocable, bytes4[] memory handlerForSelectors ) public { // Validate that functionSignature matches functionSelector @@ -1323,6 +1278,7 @@ library EngineBlox { schema.supportedActionsBitmap = supportedActionsBitmap; schema.enforceHandlerRelations = enforceHandlerRelations; schema.isProtected = isProtected; + schema.isGrantRevocable = isGrantRevocable; schema.handlerForSelectors = handlerForSelectors; // Add to supportedFunctionsSet @@ -2058,7 +2014,7 @@ library EngineBlox { SharedValidation.validateChainId(metaTxParams.chainId); SharedValidation.validateMetaTxHandlerContractBinding(metaTxParams.handlerContract); SharedValidation.validateHandlerSelector(metaTxParams.handlerSelector); - SharedValidation.validateDeadline(metaTxParams.deadline); + SharedValidation.validateMetaTxDeadline(metaTxParams.deadline); SharedValidation.validateNotZeroAddress(metaTxParams.signer); // Populate the nonce directly from storage for security @@ -2128,6 +2084,8 @@ library EngineBlox { * @notice **Gas tradeoff:** There is no explicit `{gas: ...}` stipend; the subcall receives the usual EIP-150 * bounded share of remaining gas (not the entire tx). Primary state updates in callers run **before** * `logTxEvent` where applicable. Optional hardening: configurable stipend + explicit failure event. + * @notice **Execution returndata:** full bytes are emitted only via `TxExecutionResult` from `_completeTransaction`; + * this function emits lifecycle `TransactionEvent` with `resultHash` (zero on request/cancel). * @custom:security REENTRANCY PROTECTION: This function is safe from reentrancy because: * 1. It is called AFTER all state changes are complete (in _completeTransaction, * _cancelTransaction, and txRequest) @@ -2145,21 +2103,17 @@ library EngineBlox { bytes4 functionSelector ) public { TxRecord memory txRecord = self.txRecords[txId]; - - // Emit only non-sensitive public data + emit TransactionEvent( txId, functionSelector, txRecord.status, txRecord.params.requester, txRecord.params.target, - txRecord.params.operationType + txRecord.params.operationType, + txRecord.resultHash ); - - // Forward event data to event forwarder - // REENTRANCY SAFE: External call is wrapped in try-catch and doesn't modify - // critical state. Even if eventForwarder is malicious, reentry attempts fail - // because transactions are no longer in PENDING status (they're COMPLETED/CANCELLED). + if (self.eventForwarder != address(0)) { try IEventForwarder(self.eventForwarder).forwardTxEvent( txId, @@ -2167,12 +2121,9 @@ library EngineBlox { txRecord.status, txRecord.params.requester, txRecord.params.target, - txRecord.params.operationType - ) { - // Event forwarded successfully - } catch { - // Forwarding failed, continue execution (non-critical operation) - } + txRecord.params.operationType, + txRecord.resultHash + ) {} catch {} } } @@ -2258,33 +2209,26 @@ library EngineBlox { * @param self The SecureOperationState to modify * @param txId The transaction ID to complete * @param success Whether the transaction execution was successful - * @param result The result of the transaction execution + * @param executionResult Returndata from the main target call (emitted in `TxExecutionResult`). */ function _completeTransaction( SecureOperationState storage self, uint256 txId, bool success, - bytes memory result + bytes memory executionResult ) private { - // enforce that the requested target is whitelisted for this selector. - _validateTargetWhitelist(self, self.txRecords[txId].params.executionSelector, self.txRecords[txId].params.target); - - // Update storage with new status and result + bytes32 resultHash = _executionResultHash(executionResult); if (success) { self.txRecords[txId].status = TxStatus.COMPLETED; - self.txRecords[txId].result = result; } else { self.txRecords[txId].status = TxStatus.FAILED; - self.txRecords[txId].result = result; // Store failure reason for debugging - // Note: FAILED status is intentional - transactions can be valid when requested - // but fail when executed (e.g., conditions changed, insufficient balance, etc.) - // Users can query status via getTransaction() or listen to TransactionEvent } - - // Remove from pending transactions list + self.txRecords[txId].resultHash = resultHash; + removePendingTx(self, txId); - + logTxEvent(self, txId, self.txRecords[txId].params.executionSelector); + emit TxExecutionResult(txId, executionResult); } /** @@ -2296,9 +2240,6 @@ library EngineBlox { SecureOperationState storage self, uint256 txId ) private { - // enforce that the requested target is whitelisted for this selector. - _validateTargetWhitelist(self, self.txRecords[txId].params.executionSelector, self.txRecords[txId].params.target); - self.txRecords[txId].status = TxStatus.CANCELLED; // Remove from pending transactions list @@ -2307,7 +2248,16 @@ library EngineBlox { logTxEvent(self, txId, self.txRecords[txId].params.executionSelector); } - /** + /** + * @dev Hashes execution returndata for storage and events + * @param executionResult The execution returndata to hash + * @return The hash of the execution returndata + */ + function _executionResultHash(bytes memory executionResult) private pure returns (bytes32) { + return executionResult.length == 0 ? bytes32(0) : keccak256(executionResult); + } + + /** * @dev Validates that the caller has any role permission * @param self The SecureOperationState to check * @notice This function consolidates the repeated permission check pattern to reduce contract size @@ -2390,7 +2340,8 @@ library EngineBlox { sp.gasLimit != mp.gasLimit || sp.operationType != mp.operationType || keccak256(sp.executionParams) != keccak256(mp.executionParams) || - stored.releaseTime != metaTxRecord.releaseTime + stored.releaseTime != metaTxRecord.releaseTime || + metaTxRecord.resultHash != bytes32(0) ) { revert SharedValidation.MetaTxRecordMismatchStoredTx(txId); } diff --git a/contracts/core/lib/interfaces/IDefinition.sol b/contracts/core/lib/interfaces/IDefinition.sol index 7fe8a411..2ce92c84 100644 --- a/contracts/core/lib/interfaces/IDefinition.sol +++ b/contracts/core/lib/interfaces/IDefinition.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import "../EngineBlox.sol"; diff --git a/contracts/core/lib/interfaces/IEventForwarder.sol b/contracts/core/lib/interfaces/IEventForwarder.sol index c9f4e39d..9bb224d9 100644 --- a/contracts/core/lib/interfaces/IEventForwarder.sol +++ b/contracts/core/lib/interfaces/IEventForwarder.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; // Import TxRecord struct from EngineBlox import "../EngineBlox.sol"; @@ -21,6 +21,7 @@ interface IEventForwarder { * @param requester The address of the requester * @param target The target contract address * @param operationType The type of operation + * @param resultHash Commitment to execution returndata (`bytes32(0)` when none). Full bytes: `TxExecutionResult` log. */ function forwardTxEvent( uint256 txId, @@ -28,6 +29,7 @@ interface IEventForwarder { EngineBlox.TxStatus status, address requester, address target, - bytes32 operationType + bytes32 operationType, + bytes32 resultHash ) external; } diff --git a/contracts/core/lib/utils/SharedValidation.sol b/contracts/core/lib/utils/SharedValidation.sol index efb58e8c..04090a98 100644 --- a/contracts/core/lib/utils/SharedValidation.sol +++ b/contracts/core/lib/utils/SharedValidation.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; /** * @title SharedValidation @@ -38,7 +38,6 @@ library SharedValidation { // Time and deadline errors with context error InvalidTimeLockPeriod(uint256 provided); error TimeLockPeriodZero(uint256 provided); - error DeadlineInPast(uint256 deadline, uint256 currentTime); error MetaTxExpired(uint256 deadline, uint256 currentTime); error BeforeReleaseTime(uint256 releaseTime, uint256 currentTime); error NewTimelockSame(uint256 newPeriod, uint256 currentPeriod); @@ -82,6 +81,7 @@ library SharedValidation { error ResourceNotFound(bytes32 resourceId); error ResourceAlreadyExists(bytes32 resourceId); error CannotModifyProtected(bytes32 resourceId); + error GrantNotRevocable(bytes4 functionSelector); // Consolidated item errors (for addresses: wallets, policies, etc.) error ItemAlreadyExists(address item); @@ -222,14 +222,6 @@ library SharedValidation { if (timeLockPeriod == 0) revert TimeLockPeriodZero(timeLockPeriod); } - /** - * @dev Validates that a deadline is in the future - * @param deadline The deadline timestamp to validate - */ - function validateDeadline(uint256 deadline) internal view { - if (deadline <= block.timestamp) revert DeadlineInPast(deadline, block.timestamp); - } - /** * @dev Validates that a new time lock period is different from the current one * @param newPeriod The new time lock period @@ -249,8 +241,9 @@ library SharedValidation { } /** - * @dev Validates that a meta-transaction has not expired - * @param deadline The deadline of the meta-transaction + * @dev Validates that a meta-transaction deadline has not passed (inclusive boundary: `block.timestamp == deadline` is valid). + * Used both when building unsigned meta-tx payloads (`EngineBlox.generateMetaTransaction`) and when verifying submitted meta-txs. + * @param deadline The deadline timestamp from `MetaTxParams` */ function validateMetaTxDeadline(uint256 deadline) internal view { if (block.timestamp > deadline) revert MetaTxExpired(deadline, block.timestamp); @@ -360,11 +353,12 @@ library SharedValidation { } /** - * @dev Validates that a transaction exists (has non-zero ID) + * @dev Validates that `txId` refers to a minted record: non-zero and at most `txCounter` (inclusive). * @param txId The transaction ID to validate + * @param txCounter The engine's `txCounter` after the record was allocated (valid ids are `1..txCounter`) */ - function validateTransactionExists(uint256 txId) internal pure { - if (txId == 0) revert ResourceNotFound(bytes32(uint256(txId))); + function validateTransactionExists(uint256 txId, uint256 txCounter) internal pure { + if (txId == 0 || txId > txCounter) revert ResourceNotFound(bytes32(uint256(txId))); } /** diff --git a/contracts/core/pattern/Account.sol b/contracts/core/pattern/Account.sol index 4e2db434..7bb895cd 100644 --- a/contracts/core/pattern/Account.sol +++ b/contracts/core/pattern/Account.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../execution/GuardController.sol"; import "../execution/interface/IGuardController.sol"; diff --git a/contracts/core/security/SecureOwnable.sol b/contracts/core/security/SecureOwnable.sol index 7496ce74..7c75ab56 100644 --- a/contracts/core/security/SecureOwnable.sol +++ b/contracts/core/security/SecureOwnable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; // Contracts imports import "../base/BaseStateMachine.sol"; @@ -174,21 +174,18 @@ abstract contract SecureOwnable is BaseStateMachine, ISecureOwnable { // Broadcaster Management /** - * @dev Requests an update to the broadcaster at a specific location (index). + * @dev Requests a broadcaster role change identified by addresses. * @notice Requires no pending broadcaster-update and no pending ownership-transfer request. - * @param newBroadcaster The new broadcaster address (zero address to revoke at location) - * @param location The index in the broadcaster role's authorized wallets set + * @param newBroadcaster New broadcaster (`address(0)` to revoke `currentBroadcaster`) + * @param currentBroadcaster Existing broadcaster to replace or revoke; `address(0)` to add `newBroadcaster` * @return txId The transaction ID for the pending request (use getTransaction(txId) for full record) */ - function updateBroadcasterRequest(address newBroadcaster, uint256 location) public returns (uint256 txId) { + function updateBroadcasterRequest(address newBroadcaster, address currentBroadcaster) public returns (uint256 txId) { SharedValidation.validateOwner(owner()); _requireNoPendingRequest(SecureOwnableDefinitions.BROADCASTER_UPDATE); _requireNoPendingRequest(SecureOwnableDefinitions.OWNERSHIP_TRANSFER); - // Get the current broadcaster at the specified location. zero address if no broadcaster at location. - address currentBroadcaster = location < _getSecureState().roles[EngineBlox.BROADCASTER_ROLE].walletCount - ? _getAuthorizedWalletAt(EngineBlox.BROADCASTER_ROLE, location) - : address(0); + _validateBroadcasterUpdatePair(newBroadcaster, currentBroadcaster); EngineBlox.TxRecord memory txRecord = _requestTransaction( msg.sender, @@ -197,7 +194,7 @@ abstract contract SecureOwnable is BaseStateMachine, ISecureOwnable { 0, // gas limit SecureOwnableDefinitions.BROADCASTER_UPDATE, SecureOwnableDefinitions.UPDATE_BROADCASTER_SELECTOR, - abi.encode(newBroadcaster, location) + abi.encode(newBroadcaster, currentBroadcaster) ); _hasOpenBroadcasterRequest = true; @@ -290,12 +287,12 @@ abstract contract SecureOwnable is BaseStateMachine, ISecureOwnable { /** * @dev External function that can only be called by the contract itself to execute broadcaster update - * @param newBroadcaster The new broadcaster address (zero address to revoke at location) - * @param location The index in the broadcaster role's authorized wallets set + * @param newBroadcaster New broadcaster (`address(0)` to revoke `currentBroadcaster`) + * @param currentBroadcaster Existing broadcaster to replace or revoke; `address(0)` to add `newBroadcaster` */ - function executeBroadcasterUpdate(address newBroadcaster, uint256 location) external { + function executeBroadcasterUpdate(address newBroadcaster, address currentBroadcaster) external { _validateExecuteBySelf(); - _updateBroadcaster(newBroadcaster, location); + _updateBroadcaster(newBroadcaster, currentBroadcaster); } /** @@ -390,49 +387,43 @@ abstract contract SecureOwnable is BaseStateMachine, ISecureOwnable { } /** - * @dev Updates the broadcaster role at a specific index (location) - * @param newBroadcaster The new broadcaster address (zero address to revoke) - * @param location The index in the broadcaster role's authorized wallets set - * - * Logic: - * - If a broadcaster exists at `location` and `newBroadcaster` is non-zero, - * update that slot from old to new (role remains full). - * - If no broadcaster exists at `location` and `newBroadcaster` is non-zero, - * assign `newBroadcaster` to the broadcaster role (respecting maxWallets). - * - If `newBroadcaster` is the zero address and a broadcaster exists at `location`, - * revoke that broadcaster from the role. + * @dev Validates broadcaster update pair at request time. + * @param newBroadcaster New broadcaster (`address(0)` to revoke) + * @param currentBroadcaster Existing broadcaster; `address(0)` to add `newBroadcaster` */ - function _updateBroadcaster(address newBroadcaster, uint256 location) internal virtual { - EngineBlox.Role storage role = _getSecureState().roles[EngineBlox.BROADCASTER_ROLE]; - - address oldBroadcaster; - uint256 length = role.walletCount; - - if (location < length) { - oldBroadcaster = _getAuthorizedWalletAt(EngineBlox.BROADCASTER_ROLE, location); - } else { - oldBroadcaster = address(0); + function _validateBroadcasterUpdatePair(address newBroadcaster, address currentBroadcaster) internal view { + if (newBroadcaster == address(0) && currentBroadcaster == address(0)) { + revert SharedValidation.InvalidOperation(address(0)); } + bytes32 role = EngineBlox.BROADCASTER_ROLE; + if (currentBroadcaster != address(0)) { + if (!hasRole(role, currentBroadcaster)) revert SharedValidation.ItemNotFound(currentBroadcaster); + } + if (newBroadcaster != address(0)) { + if (newBroadcaster == currentBroadcaster) revert SharedValidation.InvalidOperation(newBroadcaster); + if (hasRole(role, newBroadcaster)) revert SharedValidation.ItemAlreadyExists(newBroadcaster); + } + } - // Case 1: Revoke existing broadcaster at location + /** + * @dev Updates the broadcaster role by address pair (revoke, replace, or add). + * @param newBroadcaster New broadcaster (`address(0)` to revoke `currentBroadcaster`) + * @param currentBroadcaster Existing broadcaster; `address(0)` to add `newBroadcaster` + */ + function _updateBroadcaster(address newBroadcaster, address currentBroadcaster) internal virtual { + bytes32 role = EngineBlox.BROADCASTER_ROLE; if (newBroadcaster == address(0)) { - if (oldBroadcaster != address(0)) { - _revokeWallet(EngineBlox.BROADCASTER_ROLE, oldBroadcaster); - _logAddressPairEvent(oldBroadcaster, address(0)); - } + _revokeWallet(role, currentBroadcaster); + _logAddressPairEvent(currentBroadcaster, address(0)); return; } - - // Case 2: Update existing broadcaster at location - if (oldBroadcaster != address(0)) { - _updateWallet(EngineBlox.BROADCASTER_ROLE, newBroadcaster, oldBroadcaster); - _logAddressPairEvent(oldBroadcaster, newBroadcaster); + if (currentBroadcaster == address(0)) { + _assignWallet(role, newBroadcaster); + _logAddressPairEvent(address(0), newBroadcaster); return; } - - // Case 3: No broadcaster at location, assign a new one (will respect maxWallets) - _assignWallet(EngineBlox.BROADCASTER_ROLE, newBroadcaster); - _logAddressPairEvent(address(0), newBroadcaster); + _updateWallet(role, newBroadcaster, currentBroadcaster); + _logAddressPairEvent(currentBroadcaster, newBroadcaster); } /** diff --git a/contracts/core/security/interface/ISecureOwnable.sol b/contracts/core/security/interface/ISecureOwnable.sol index 840c72cf..504cda36 100644 --- a/contracts/core/security/interface/ISecureOwnable.sol +++ b/contracts/core/security/interface/ISecureOwnable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; // Contracts imports import "../../lib/EngineBlox.sol"; @@ -50,12 +50,12 @@ interface ISecureOwnable { // ============ BROADCASTER MANAGEMENT ============ /** - * @dev Requests an update to the broadcaster at a specific location (index). - * @param newBroadcaster The new broadcaster address (zero address to revoke at location) - * @param location The index in the broadcaster role's authorized wallets set + * @dev Requests a broadcaster role change identified by addresses. + * @param newBroadcaster New broadcaster (zero address to revoke `currentBroadcaster`) + * @param currentBroadcaster Existing broadcaster to replace or revoke; zero address to add `newBroadcaster` * @return txId The transaction ID (use getTransaction(txId) for full record) */ - function updateBroadcasterRequest(address newBroadcaster, uint256 location) external returns (uint256 txId); + function updateBroadcasterRequest(address newBroadcaster, address currentBroadcaster) external returns (uint256 txId); /** * @dev Approves a pending broadcaster update transaction after the release time diff --git a/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol b/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol index 7d1d1f5c..11b85627 100644 --- a/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol +++ b/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import "../../../lib/EngineBlox.sol"; @@ -32,7 +32,7 @@ library SecureOwnableDefinitions { // Function Selector Constants bytes4 public constant TRANSFER_OWNERSHIP_SELECTOR = bytes4(keccak256("executeTransferOwnership(address)")); - bytes4 public constant UPDATE_BROADCASTER_SELECTOR = bytes4(keccak256("executeBroadcasterUpdate(address,uint256)")); + bytes4 public constant UPDATE_BROADCASTER_SELECTOR = bytes4(keccak256("executeBroadcasterUpdate(address,address)")); bytes4 public constant UPDATE_RECOVERY_SELECTOR = bytes4(keccak256("executeRecoveryUpdate(address)")); bytes4 public constant UPDATE_TIMELOCK_SELECTOR = bytes4(keccak256("executeTimeLockUpdate(uint256)")); @@ -40,19 +40,19 @@ library SecureOwnableDefinitions { bytes4 public constant TRANSFER_OWNERSHIP_REQUEST_SELECTOR = bytes4(keccak256("transferOwnershipRequest()")); bytes4 public constant TRANSFER_OWNERSHIP_DELAYED_APPROVAL_SELECTOR = bytes4(keccak256("transferOwnershipDelayedApproval(uint256)")); bytes4 public constant TRANSFER_OWNERSHIP_CANCELLATION_SELECTOR = bytes4(keccak256("transferOwnershipCancellation(uint256)")); - bytes4 public constant UPDATE_BROADCASTER_REQUEST_SELECTOR = bytes4(keccak256("updateBroadcasterRequest(address,uint256)")); + bytes4 public constant UPDATE_BROADCASTER_REQUEST_SELECTOR = bytes4(keccak256("updateBroadcasterRequest(address,address)")); bytes4 public constant UPDATE_BROADCASTER_DELAYED_APPROVAL_SELECTOR = bytes4(keccak256("updateBroadcasterDelayedApproval(uint256)")); bytes4 public constant UPDATE_BROADCASTER_CANCELLATION_SELECTOR = bytes4(keccak256("updateBroadcasterCancellation(uint256)")); // Meta-transaction Function Selectors (Handler Functions - checked via msg.sig) // Note: Solidity function selector calculation for struct parameters uses 2 opening parentheses: ((tuple)) // Verified: This format produces selector 0x458102e4 which matches the actual function selector - bytes4 public constant TRANSFER_OWNERSHIP_APPROVE_META_SELECTOR = bytes4(keccak256("transferOwnershipApprovalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); - bytes4 public constant TRANSFER_OWNERSHIP_CANCEL_META_SELECTOR = bytes4(keccak256("transferOwnershipCancellationWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); - bytes4 public constant UPDATE_BROADCASTER_APPROVE_META_SELECTOR = bytes4(keccak256("updateBroadcasterApprovalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); - bytes4 public constant UPDATE_BROADCASTER_CANCEL_META_SELECTOR = bytes4(keccak256("updateBroadcasterCancellationWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); - bytes4 public constant UPDATE_RECOVERY_META_SELECTOR = bytes4(keccak256("updateRecoveryRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); - bytes4 public constant UPDATE_TIMELOCK_META_SELECTOR = bytes4(keccak256("updateTimeLockRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); + bytes4 public constant TRANSFER_OWNERSHIP_APPROVE_META_SELECTOR = bytes4(keccak256("transferOwnershipApprovalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); + bytes4 public constant TRANSFER_OWNERSHIP_CANCEL_META_SELECTOR = bytes4(keccak256("transferOwnershipCancellationWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); + bytes4 public constant UPDATE_BROADCASTER_APPROVE_META_SELECTOR = bytes4(keccak256("updateBroadcasterApprovalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); + bytes4 public constant UPDATE_BROADCASTER_CANCEL_META_SELECTOR = bytes4(keccak256("updateBroadcasterCancellationWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); + bytes4 public constant UPDATE_RECOVERY_META_SELECTOR = bytes4(keccak256("updateRecoveryRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); + bytes4 public constant UPDATE_TIMELOCK_META_SELECTOR = bytes4(keccak256("updateTimeLockRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); /** * @dev Returns predefined function schemas @@ -123,68 +123,74 @@ library SecureOwnableDefinitions { // Meta-transaction functions schemas[0] = EngineBlox.FunctionSchema({ - functionSignature: "transferOwnershipApprovalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "transferOwnershipApprovalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: TRANSFER_OWNERSHIP_APPROVE_META_SELECTOR, operationType: OWNERSHIP_TRANSFER, operationName: "OWNERSHIP_TRANSFER", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: transferOwnershipHandlerForSelectors }); schemas[1] = EngineBlox.FunctionSchema({ - functionSignature: "transferOwnershipCancellationWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "transferOwnershipCancellationWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: TRANSFER_OWNERSHIP_CANCEL_META_SELECTOR, operationType: OWNERSHIP_TRANSFER, operationName: "OWNERSHIP_TRANSFER", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: transferOwnershipHandlerForSelectors }); schemas[2] = EngineBlox.FunctionSchema({ - functionSignature: "updateBroadcasterApprovalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "updateBroadcasterApprovalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: UPDATE_BROADCASTER_APPROVE_META_SELECTOR, operationType: BROADCASTER_UPDATE, operationName: "BROADCASTER_UPDATE", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: broadcasterHandlerForSelectors }); schemas[3] = EngineBlox.FunctionSchema({ - functionSignature: "updateBroadcasterCancellationWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "updateBroadcasterCancellationWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: UPDATE_BROADCASTER_CANCEL_META_SELECTOR, operationType: BROADCASTER_UPDATE, operationName: "BROADCASTER_UPDATE", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: broadcasterHandlerForSelectors }); schemas[4] = EngineBlox.FunctionSchema({ - functionSignature: "updateRecoveryRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "updateRecoveryRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: UPDATE_RECOVERY_META_SELECTOR, operationType: RECOVERY_UPDATE, operationName: "RECOVERY_UPDATE", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: recoveryHandlerForSelectors }); schemas[5] = EngineBlox.FunctionSchema({ - functionSignature: "updateTimeLockRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "updateTimeLockRequestAndApprove(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: UPDATE_TIMELOCK_META_SELECTOR, operationType: TIMELOCK_UPDATE, operationName: "TIMELOCK_UPDATE", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: timelockHandlerForSelectors }); @@ -197,6 +203,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayRequestActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: transferOwnershipHandlerForSelectors }); @@ -208,6 +215,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: transferOwnershipHandlerForSelectors }); @@ -219,17 +227,19 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: transferOwnershipHandlerForSelectors }); schemas[9] = EngineBlox.FunctionSchema({ - functionSignature: "updateBroadcasterRequest(address,uint256)", + functionSignature: "updateBroadcasterRequest(address,address)", functionSelector: UPDATE_BROADCASTER_REQUEST_SELECTOR, operationType: BROADCASTER_UPDATE, operationName: "BROADCASTER_UPDATE", supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayRequestActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: broadcasterHandlerForSelectors }); @@ -241,6 +251,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: broadcasterHandlerForSelectors }); @@ -252,6 +263,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: broadcasterHandlerForSelectors }); @@ -265,17 +277,19 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(executionApproveCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: transferOwnershipExecutionHandlerForSelectors }); schemas[13] = EngineBlox.FunctionSchema({ - functionSignature: "executeBroadcasterUpdate(address,uint256)", + functionSignature: "executeBroadcasterUpdate(address,address)", functionSelector: UPDATE_BROADCASTER_SELECTOR, operationType: BROADCASTER_UPDATE, operationName: "BROADCASTER_UPDATE", supportedActionsBitmap: EngineBlox.createBitmapFromActions(executionApproveCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: broadcasterExecutionHandlerForSelectors }); @@ -287,6 +301,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(executionMetaRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: recoveryExecutionHandlerForSelectors }); @@ -298,6 +313,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(executionMetaRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: timelockExecutionHandlerForSelectors }); diff --git a/contracts/examples/applications/CopyBlox/CopyBlox.sol b/contracts/examples/applications/CopyBlox/CopyBlox.sol index 4ca8c77e..c984e398 100644 --- a/contracts/examples/applications/CopyBlox/CopyBlox.sol +++ b/contracts/examples/applications/CopyBlox/CopyBlox.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "@openzeppelin/contracts/proxy/Clones.sol"; import "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; @@ -169,7 +169,8 @@ contract CopyBlox is BaseStateMachine, IEventForwarder { EngineBlox.TxStatus status, address requester, address target, - bytes32 operationType + bytes32 operationType, + bytes32 resultHash ); /** @@ -189,7 +190,8 @@ contract CopyBlox is BaseStateMachine, IEventForwarder { EngineBlox.TxStatus status, address requester, address target, - bytes32 operationType + bytes32 operationType, + bytes32 resultHash ) external override { if (!_clones.contains(msg.sender)) revert SharedValidation.NoPermission(msg.sender); @@ -201,7 +203,8 @@ contract CopyBlox is BaseStateMachine, IEventForwarder { status, requester, target, - operationType + operationType, + resultHash ); // If CopyBlox itself has an eventForwarder, forward the event further @@ -214,7 +217,8 @@ contract CopyBlox is BaseStateMachine, IEventForwarder { status, requester, target, - operationType + operationType, + resultHash ) { // Event forwarded successfully } catch { diff --git a/contracts/examples/applications/PayBlox/PayBlox.sol b/contracts/examples/applications/PayBlox/PayBlox.sol index 2307895d..17b2c411 100644 --- a/contracts/examples/applications/PayBlox/PayBlox.sol +++ b/contracts/examples/applications/PayBlox/PayBlox.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.34; +pragma solidity 0.8.35; // Particle imports import "../../../core/security/SecureOwnable.sol"; diff --git a/contracts/examples/applications/PayBlox/PayBloxDefinitions.sol b/contracts/examples/applications/PayBlox/PayBloxDefinitions.sol index b9a9c174..c628a2cf 100644 --- a/contracts/examples/applications/PayBlox/PayBloxDefinitions.sol +++ b/contracts/examples/applications/PayBlox/PayBloxDefinitions.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../../core/lib/EngineBlox.sol"; import "../../../core/lib/interfaces/IDefinition.sol"; @@ -65,6 +65,7 @@ library PayBloxDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayRequestActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: nativeTransferHandlerForSelectors }); @@ -76,6 +77,7 @@ library PayBloxDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: approvePaymentDelayedHandlerForSelectors }); @@ -87,6 +89,7 @@ library PayBloxDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: cancelPaymentHandlerForSelectors }); diff --git a/contracts/examples/applications/SimpleRWA20/SimpleRWA20.sol b/contracts/examples/applications/SimpleRWA20/SimpleRWA20.sol index 773f9f20..0cc4cf8e 100644 --- a/contracts/examples/applications/SimpleRWA20/SimpleRWA20.sol +++ b/contracts/examples/applications/SimpleRWA20/SimpleRWA20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.34; +pragma solidity 0.8.35; // OpenZeppelin imports import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; diff --git a/contracts/examples/applications/SimpleRWA20/SimpleRWA20Definitions.sol b/contracts/examples/applications/SimpleRWA20/SimpleRWA20Definitions.sol index 0cb8e2e6..170ccc6a 100644 --- a/contracts/examples/applications/SimpleRWA20/SimpleRWA20Definitions.sol +++ b/contracts/examples/applications/SimpleRWA20/SimpleRWA20Definitions.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../../core/lib/EngineBlox.sol"; import "../../../core/lib/interfaces/IDefinition.sol"; @@ -24,8 +24,8 @@ library SimpleRWA20Definitions { bytes4 public constant BURN_TOKENS_SELECTOR = bytes4(keccak256("executeBurn(address,uint256)")); // Meta-transaction Function Selectors - bytes4 public constant MINT_TOKENS_META_SELECTOR = bytes4(keccak256("mintWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); - bytes4 public constant BURN_TOKENS_META_SELECTOR = bytes4(keccak256("burnWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); + bytes4 public constant MINT_TOKENS_META_SELECTOR = bytes4(keccak256("mintWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); + bytes4 public constant BURN_TOKENS_META_SELECTOR = bytes4(keccak256("burnWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); /** * @dev Returns predefined function schemas @@ -47,24 +47,26 @@ library SimpleRWA20Definitions { // Meta-transaction functions schemas[0] = EngineBlox.FunctionSchema({ - functionSignature: "mintWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "mintWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: MINT_TOKENS_META_SELECTOR, operationType: MINT_TOKENS, operationName: "MINT_TOKENS", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: mintHandlerForSelectors }); schemas[1] = EngineBlox.FunctionSchema({ - functionSignature: "burnWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "burnWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: BURN_TOKENS_META_SELECTOR, operationType: BURN_TOKENS, operationName: "BURN_TOKENS", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: burnHandlerForSelectors }); @@ -82,6 +84,7 @@ library SimpleRWA20Definitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: mintExecutionHandlerForSelectors }); @@ -93,6 +96,7 @@ library SimpleRWA20Definitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: burnExecutionHandlerForSelectors }); diff --git a/contracts/examples/applications/SimpleVault/SimpleVault.sol b/contracts/examples/applications/SimpleVault/SimpleVault.sol index 0854dade..718cdf32 100644 --- a/contracts/examples/applications/SimpleVault/SimpleVault.sol +++ b/contracts/examples/applications/SimpleVault/SimpleVault.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.34; +pragma solidity 0.8.35; // OpenZeppelin imports import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/examples/applications/SimpleVault/SimpleVaultDefinitions.sol b/contracts/examples/applications/SimpleVault/SimpleVaultDefinitions.sol index e78a03b4..cf339bff 100644 --- a/contracts/examples/applications/SimpleVault/SimpleVaultDefinitions.sol +++ b/contracts/examples/applications/SimpleVault/SimpleVaultDefinitions.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../../core/lib/EngineBlox.sol"; import "../../../core/lib/interfaces/IDefinition.sol"; @@ -33,7 +33,7 @@ library SimpleVaultDefinitions { bytes4 public constant CANCEL_WITHDRAWAL_SELECTOR = bytes4(keccak256("cancelWithdrawal(uint256)")); // Meta-transaction Function Selectors - bytes4 public constant APPROVE_WITHDRAWAL_META_SELECTOR = bytes4(keccak256("approveWithdrawalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); + bytes4 public constant APPROVE_WITHDRAWAL_META_SELECTOR = bytes4(keccak256("approveWithdrawalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); /** * @dev Returns predefined function schemas @@ -81,6 +81,7 @@ library SimpleVaultDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayRequestActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: withdrawEthHandlerForSelectors }); @@ -92,6 +93,7 @@ library SimpleVaultDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayRequestActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: withdrawTokenHandlerForSelectors }); @@ -103,6 +105,7 @@ library SimpleVaultDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: approveWithdrawalDelayedHandlerForSelectors }); @@ -114,18 +117,20 @@ library SimpleVaultDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: cancelWithdrawalHandlerForSelectors }); // Meta-transaction functions schemas[4] = EngineBlox.FunctionSchema({ - functionSignature: "approveWithdrawalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "approveWithdrawalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: APPROVE_WITHDRAWAL_META_SELECTOR, operationType: GENERIC_META_APPROVAL, operationName: "GENERIC_META_APPROVAL", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: approveWithdrawalMetaHandlerForSelectors }); @@ -149,6 +154,7 @@ library SimpleVaultDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(executionActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: withdrawEthExecutionHandlerForSelectors }); @@ -160,6 +166,7 @@ library SimpleVaultDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(executionActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: withdrawTokenExecutionHandlerForSelectors }); diff --git a/contracts/examples/extra/BasicERC20.sol b/contracts/examples/extra/BasicERC20.sol index 821240ad..81e41011 100644 --- a/contracts/examples/extra/BasicERC20.sol +++ b/contracts/examples/extra/BasicERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; diff --git a/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafe.sol b/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafe.sol index 58c5c2e2..0a03f656 100644 --- a/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafe.sol +++ b/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafe.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../../../core/security/SecureOwnable.sol"; import "../../../../core/lib/utils/SharedValidation.sol"; diff --git a/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafeDefinitions.sol b/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafeDefinitions.sol index 25591731..98d729b9 100644 --- a/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafeDefinitions.sol +++ b/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafeDefinitions.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../../../core/lib/EngineBlox.sol"; import "../../../../core/lib/interfaces/IDefinition.sol"; @@ -27,9 +27,9 @@ library GuardianSafeDefinitions { bytes4 public constant CANCEL_TX_SELECTOR = bytes4(keccak256("cancelTransaction(uint256)")); // Meta-transaction Function Selectors - bytes4 public constant APPROVE_TX_META_SELECTOR = bytes4(keccak256("approveTransactionWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); - bytes4 public constant CANCEL_TX_META_SELECTOR = bytes4(keccak256("cancelTransactionWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); - bytes4 public constant REQUEST_AND_APPROVE_TX_META_SELECTOR = bytes4(keccak256("requestAndApproveTransactionWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); + bytes4 public constant APPROVE_TX_META_SELECTOR = bytes4(keccak256("approveTransactionWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); + bytes4 public constant CANCEL_TX_META_SELECTOR = bytes4(keccak256("cancelTransactionWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); + bytes4 public constant REQUEST_AND_APPROVE_TX_META_SELECTOR = bytes4(keccak256("requestAndApproveTransactionWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))")); /** * @dev Returns predefined function schemas @@ -74,6 +74,7 @@ library GuardianSafeDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayRequestActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: execSafeTxHandlerForSelectors }); @@ -85,6 +86,7 @@ library GuardianSafeDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: execSafeTxHandlerForSelectors }); @@ -96,40 +98,44 @@ library GuardianSafeDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: execSafeTxHandlerForSelectors }); // Meta-transaction functions schemas[3] = EngineBlox.FunctionSchema({ - functionSignature: "approveTransactionWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "approveTransactionWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: APPROVE_TX_META_SELECTOR, operationType: EXEC_SAFE_TX, operationName: "EXEC_SAFE_TX", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: execSafeTxHandlerForSelectors }); schemas[4] = EngineBlox.FunctionSchema({ - functionSignature: "cancelTransactionWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "cancelTransactionWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: CANCEL_TX_META_SELECTOR, operationType: EXEC_SAFE_TX, operationName: "EXEC_SAFE_TX", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: execSafeTxHandlerForSelectors }); schemas[5] = EngineBlox.FunctionSchema({ - functionSignature: "requestAndApproveTransactionWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", + functionSignature: "requestAndApproveTransactionWithMetaTx((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes32,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))", functionSelector: REQUEST_AND_APPROVE_TX_META_SELECTOR, operationType: EXEC_SAFE_TX, operationName: "EXEC_SAFE_TX", supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: execSafeTxHandlerForSelectors }); @@ -156,6 +162,7 @@ library GuardianSafeDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(executionActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: execSafeTxExecutionHandlerForSelectors }); diff --git a/contracts/examples/templates/AccountBlox.sol b/contracts/examples/templates/AccountBlox.sol index 042feed8..6e526f80 100644 --- a/contracts/examples/templates/AccountBlox.sol +++ b/contracts/examples/templates/AccountBlox.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../core/pattern/Account.sol"; import "../../core/lib/utils/SharedValidation.sol"; diff --git a/contracts/experimental/hook/HookManager.sol b/contracts/experimental/hook/HookManager.sol index d2a5e009..5dc40677 100644 --- a/contracts/experimental/hook/HookManager.sol +++ b/contracts/experimental/hook/HookManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; diff --git a/contracts/standards/behavior/ICopyable.sol b/contracts/standards/behavior/ICopyable.sol index 722b6b89..2c8290aa 100644 --- a/contracts/standards/behavior/ICopyable.sol +++ b/contracts/standards/behavior/ICopyable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; /** * @title ICopyable diff --git a/contracts/standards/hooks/IOnActionHook.sol b/contracts/standards/hooks/IOnActionHook.sol index 45acd728..a2b5eae2 100644 --- a/contracts/standards/hooks/IOnActionHook.sol +++ b/contracts/standards/hooks/IOnActionHook.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../core/lib/EngineBlox.sol"; diff --git a/docgen/hardhat.config.cjs b/docgen/hardhat.config.cjs index c525f072..8baf2655 100644 --- a/docgen/hardhat.config.cjs +++ b/docgen/hardhat.config.cjs @@ -4,7 +4,7 @@ const path = require("path"); /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { solidity: { - version: "0.8.34", + version: "0.8.35", settings: { optimizer: { enabled: true, diff --git a/docs/core/lib/utils/SharedValidation.md b/docs/core/lib/utils/SharedValidation.md index e608ec26..e5a29926 100644 --- a/docs/core/lib/utils/SharedValidation.md +++ b/docs/core/lib/utils/SharedValidation.md @@ -121,21 +121,6 @@ Validates that a time lock period is greater than zero ---- - -### validateDeadline - -```solidity -function validateDeadline(uint256 deadline) internal view -``` - -Validates that a deadline is in the future - -**Parameters:** -- `` (): The deadline timestamp to validate - - - --- ### validateTimeLockUpdate @@ -175,7 +160,7 @@ Validates that the current time is after the release time function validateMetaTxDeadline(uint256 deadline) internal view ``` -Validates that a meta-transaction has not expired +Validates that a meta-transaction deadline has not passed (inclusive boundary: `block.timestamp == deadline` is valid). Used for unsigned payload construction and on-chain verification. **Parameters:** - `` (): The deadline of the meta-transaction @@ -356,13 +341,14 @@ Validates that an operation type matches the expected type ### validateTransactionExists ```solidity -function validateTransactionExists(uint256 txId) internal pure +function validateTransactionExists(uint256 txId, uint256 txCounter) internal pure ``` -Validates that a transaction exists (has non-zero ID) +Validates that `txId` refers to a minted record: non-zero and at most `txCounter` (inclusive). **Parameters:** - `` (): The transaction ID to validate +- `` (): The engine's `txCounter` after the record was allocated (valid ids are `1..txCounter`) diff --git a/env.deployment.example b/env.deployment.example index 28383832..0bd61d2e 100644 --- a/env.deployment.example +++ b/env.deployment.example @@ -21,7 +21,9 @@ DEPLOY_NETWORK_NAME=sepolia # ----------------------------------------------------------------------------- # Deployer wallet (required for deployment) # ----------------------------------------------------------------------------- -# Private key of the account that will pay gas and own deployments. +# CAUTION: this plain private-key-in-env approach is mainly for local/testing use. +# It is NOT advised from a security perspective for production deployments. +# For production, use secure key management (HSM/KMS, hardware wallet, vault, or signer service). # Must have no leading 0x; or with 0x both are accepted by common loaders. # NEVER commit this file with a real key. Use .env.deployment (gitignored). DEPLOY_PRIVATE_KEY=your_deployer_private_key_here diff --git a/foundry.toml b/foundry.toml index 29f51503..7b1c192c 100644 --- a/foundry.toml +++ b/foundry.toml @@ -6,7 +6,7 @@ test = "test/foundry" cache_path = "cache_forge" # Solidity compiler settings -solc = "0.8.34" +solc = "0.8.35" optimizer = true optimizer_runs = 200 via_ir = true diff --git a/hardhat.config.ts b/hardhat.config.ts index 9f4bf552..66d115a6 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -43,8 +43,8 @@ if (Number.isNaN(chainId) || chainId <= 0) { } const deployNetworkName = process.env.DEPLOY_NETWORK_NAME?.trim(); -// Compiler settings aligned with foundry.toml: solc 0.8.34, optimizer 200, via_ir, evm osaka -const SOLIDITY_VERSION = "0.8.34"; +// Compiler settings aligned with foundry.toml: solc 0.8.35, optimizer 200, via_ir, evm osaka +const SOLIDITY_VERSION = "0.8.35"; const OPTIMIZER_RUNS = 200; const EVM_VERSION = "osaka"; diff --git a/package-lock.json b/package-lock.json index 48cd2522..c48c3831 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1489,9 +1489,9 @@ "license": "MIT" }, "node_modules/@xmldom/xmldom": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.12.tgz", - "integrity": "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", + "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index e2724c84..c9b109d7 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "deploy:hardhat:foundation": "hardhat run scripts/deployment/deploy-foundation-libraries.js --network sepolia", "deploy:hardhat:copyblox": "hardhat run scripts/deployment/deploy-example-copyblox.js --network sepolia", "create-wallet": "node scripts/deployment/create-wallet-copyblox.js", + "create-erc20": "node scripts/deployment/create-erc20-token.js", "test:sanity": "node scripts/sanity/run-all-tests.cjs", "test:sanity:core": "node scripts/sanity/run-all-tests.cjs --core", "test:sanity:examples": "node scripts/sanity/run-all-tests.cjs --examples", diff --git a/scripts/deployment/create-erc20-token.js b/scripts/deployment/create-erc20-token.js new file mode 100644 index 00000000..47ddc0fd --- /dev/null +++ b/scripts/deployment/create-erc20-token.js @@ -0,0 +1,255 @@ +/** + * Interactive script: deploy a new BasicERC20 token. + * Uses the deployer key from .env.deployment. Prompts for: + * - Network (default from DEPLOY_NETWORK_NAME or sepolia) + * - Token config: name, symbol, totalSupply + * - Minter address (defaults to AccountBlox from deployed-addresses.json when available) + * - Owner address (DEFAULT_ADMIN_ROLE recipient; deployer can renounce admin after handover) + * + * Usage (from repo root): + * node scripts/deployment/create-erc20-token.js + * npm run create-erc20 + * + * Non-interactive (defaults): + * CREATE_ERC20_USE_DEFAULTS=1 node scripts/deployment/create-erc20-token.js + * + * Ensure .env.deployment has DEPLOY_RPC_URL, DEPLOY_PRIVATE_KEY, and optionally + * DEPLOY_NETWORK_NAME and DEPLOY_CHAIN_ID. + */ + +import { createInterface } from "readline"; +import { config } from "dotenv"; +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT_DIR = path.join(__dirname, "..", ".."); +const ENV_DEPLOYMENT = path.join(ROOT_DIR, ".env.deployment"); +const ADDRESSES_FILE = path.join(ROOT_DIR, "deployed-addresses.json"); +const BASIC_ERC20_ARTIFACT_PATH = path.join( + ROOT_DIR, + "artifacts", + "contracts", + "examples", + "extra", + "BasicERC20.sol", + "BasicERC20.json" +); + +config({ path: ENV_DEPLOYMENT }); + +function question(rl, prompt, defaultValue = "") { + const p = defaultValue !== "" ? `${prompt} [${defaultValue}]: ` : `${prompt}: `; + return new Promise((resolve) => rl.question(p, (answer) => resolve((answer && answer.trim()) || defaultValue))); +} + +function isAddress(s) { + return /^0x[a-fA-F0-9]{40}$/.test(s); +} + +function isYes(value) { + const v = `${value ?? ""}`.trim().toLowerCase(); + return v === "y" || v === "yes" || v === "1" || v === "true"; +} + +function parseUnits(value, decimals = 18) { + const input = `${value ?? ""}`.trim(); + if (!/^\d+(\.\d+)?$/.test(input)) { + throw new Error(`Invalid numeric amount: "${value}"`); + } + + const [whole, frac = ""] = input.split("."); + if (frac.length > decimals) { + throw new Error(`Too many decimal places. Max supported decimals: ${decimals}`); + } + + const wholePart = BigInt(whole || "0") * 10n ** BigInt(decimals); + const fracPart = frac.length > 0 ? BigInt(frac.padEnd(decimals, "0")) : 0n; + return wholePart + fracPart; +} + +async function main() { + const useDefaults = + process.env.CREATE_ERC20_USE_DEFAULTS === "1" || process.env.CREATE_ERC20_USE_DEFAULTS === "true"; + const rl = useDefaults ? null : createInterface({ input: process.stdin, output: process.stdout }); + const ask = async (prompt, defaultValue) => (rl ? question(rl, prompt, defaultValue) : Promise.resolve(defaultValue)); + + console.log("\n🪙 Deploy a new BasicERC20 token\n"); + + if (!process.env.DEPLOY_PRIVATE_KEY || !process.env.DEPLOY_RPC_URL) { + console.error("Missing DEPLOY_PRIVATE_KEY or DEPLOY_RPC_URL in .env.deployment."); + if (rl) rl.close(); + process.exit(1); + } + + const defaultNetwork = process.env.DEPLOY_NETWORK_NAME || "sepolia"; + let accountBloxFromFile = ""; + if (fs.existsSync(ADDRESSES_FILE)) { + try { + const addresses = JSON.parse(fs.readFileSync(ADDRESSES_FILE, "utf8")); + accountBloxFromFile = addresses?.[defaultNetwork]?.AccountBlox?.address || ""; + } catch { + accountBloxFromFile = ""; + } + } + + const network = await ask("Network name (used only for defaults display)", defaultNetwork); + if (!accountBloxFromFile && fs.existsSync(ADDRESSES_FILE)) { + try { + const addresses = JSON.parse(fs.readFileSync(ADDRESSES_FILE, "utf8")); + accountBloxFromFile = addresses?.[network]?.AccountBlox?.address || ""; + } catch { + accountBloxFromFile = ""; + } + } + + const chainId = parseInt(process.env.DEPLOY_CHAIN_ID || "11155111", 10); + const rpc = process.env.DEPLOY_RPC_URL; + const pk = process.env.DEPLOY_PRIVATE_KEY.startsWith("0x") + ? process.env.DEPLOY_PRIVATE_KEY + : `0x${process.env.DEPLOY_PRIVATE_KEY}`; + + const { createWalletClient, createPublicClient, http } = await import("viem"); + const { privateKeyToAccount } = await import("viem/accounts"); + const { waitForTransactionReceipt, deployContract } = await import("viem/actions"); + const chain = + chainId === 11155111 + ? (await import("viem/chains")).sepolia + : { + id: chainId, + name: "Custom", + nativeCurrency: { decimals: 18, name: "Ether", symbol: "ETH" }, + rpcUrls: { default: { http: [rpc] } }, + }; + const deployerAccount = privateKeyToAccount(pk); + const walletClient = createWalletClient({ account: deployerAccount, chain, transport: http(rpc) }); + const publicClient = createPublicClient({ chain, transport: http(rpc) }); + + const deployerAddr = deployerAccount.address; + const tokenName = await ask("Token name", "Basic Token"); + const tokenSymbol = await ask("Token symbol", "BASIC"); + const totalSupplyHuman = await ask("Total supply (human units, 18 decimals)", "1000000"); + const ownerAddress = await ask("Owner/admin address", deployerAddr); + const defaultMinter = isAddress(accountBloxFromFile) ? accountBloxFromFile : deployerAddr; + const minterAddress = await ask("Minter address (AccountBlox recommended)", defaultMinter); + const transferSupplyAnswer = await ask("Transfer initial supply to owner? (y/n)", "y"); + const renounceAdminAnswer = await ask("Renounce deployer admin after owner setup? (y/n)", "y"); + + if (!tokenName || !tokenSymbol) { + console.error("Token name and symbol are required."); + if (rl) rl.close(); + process.exit(1); + } + + if (!isAddress(minterAddress)) { + console.error("Invalid minter address."); + if (rl) rl.close(); + process.exit(1); + } + if (!isAddress(ownerAddress)) { + console.error("Invalid owner/admin address."); + if (rl) rl.close(); + process.exit(1); + } + + let totalSupply; + try { + totalSupply = parseUnits(totalSupplyHuman, 18); + } catch (err) { + console.error(err instanceof Error ? err.message : String(err)); + if (rl) rl.close(); + process.exit(1); + } + + if (totalSupply <= 0n) { + console.error("Total supply must be greater than zero."); + if (rl) rl.close(); + process.exit(1); + } + + if (rl) rl.close(); + + if (!fs.existsSync(BASIC_ERC20_ARTIFACT_PATH)) { + throw new Error(`BasicERC20 artifact not found at ${BASIC_ERC20_ARTIFACT_PATH}. Run "npx hardhat compile".`); + } + + const basicErc20Artifact = JSON.parse(fs.readFileSync(BASIC_ERC20_ARTIFACT_PATH, "utf8")); + + console.log("\n📤 Deploying BasicERC20..."); + const hash = await deployContract(walletClient, { + abi: basicErc20Artifact.abi, + bytecode: basicErc20Artifact.bytecode, + account: deployerAccount, + args: [tokenName, tokenSymbol, totalSupply, minterAddress], + }); + console.log(` Tx hash: ${hash}`); + + const receipt = await waitForTransactionReceipt(publicClient, { hash }); + const tokenAddress = receipt.contractAddress; + if (!tokenAddress) { + throw new Error(`Deployment transaction ${hash} did not return contractAddress.`); + } + + const transferSupplyToOwner = isYes(transferSupplyAnswer); + const renounceDeployerAdmin = isYes(renounceAdminAnswer); + const defaultAdminRole = "0x0000000000000000000000000000000000000000000000000000000000000000"; + + if (ownerAddress.toLowerCase() !== deployerAddr.toLowerCase()) { + console.log("\n🔧 Configuring owner/admin role..."); + const grantAdminHash = await walletClient.writeContract({ + address: tokenAddress, + abi: basicErc20Artifact.abi, + functionName: "grantRole", + args: [defaultAdminRole, ownerAddress], + account: deployerAccount, + }); + await waitForTransactionReceipt(publicClient, { hash: grantAdminHash }); + console.log(` ✅ Granted DEFAULT_ADMIN_ROLE to owner (tx: ${grantAdminHash})`); + + if (transferSupplyToOwner) { + const transferHash = await walletClient.writeContract({ + address: tokenAddress, + abi: basicErc20Artifact.abi, + functionName: "transfer", + args: [ownerAddress, totalSupply], + account: deployerAccount, + }); + await waitForTransactionReceipt(publicClient, { hash: transferHash }); + console.log(` ✅ Transferred initial supply to owner (tx: ${transferHash})`); + } + + if (renounceDeployerAdmin) { + const renounceHash = await walletClient.writeContract({ + address: tokenAddress, + abi: basicErc20Artifact.abi, + functionName: "renounceRole", + args: [defaultAdminRole, deployerAddr], + account: deployerAccount, + }); + await waitForTransactionReceipt(publicClient, { hash: renounceHash }); + console.log(` ✅ Deployer renounced DEFAULT_ADMIN_ROLE (tx: ${renounceHash})`); + } + } else if (transferSupplyToOwner) { + console.log("\nℹ️ Owner equals deployer, initial supply already belongs to owner."); + } + + console.log("\n✅ BasicERC20 deployed:"); + console.log(` Network: ${network}`); + console.log(` Address: ${tokenAddress}`); + console.log(` Name: ${tokenName}`); + console.log(` Symbol: ${tokenSymbol}`); + console.log(` Total Supply (raw): ${totalSupply.toString()}`); + console.log(` Minter: ${minterAddress}`); + console.log(` Owner/Admin: ${ownerAddress}`); + console.log(` Transfer supply to owner: ${transferSupplyToOwner ? "yes" : "no"}`); + console.log(` Renounce deployer admin: ${renounceDeployerAdmin ? "yes" : "no"}`); + if (chainId === 11155111) { + console.log(` Explorer: https://sepolia.etherscan.io/address/${tokenAddress}`); + } +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/scripts/sanity-sdk/base/test-helpers.ts b/scripts/sanity-sdk/base/test-helpers.ts index de3ee811..2b5bef06 100644 --- a/scripts/sanity-sdk/base/test-helpers.ts +++ b/scripts/sanity-sdk/base/test-helpers.ts @@ -165,10 +165,11 @@ export function getStatusName(status: number): string { const statusMap: Record = { 0: 'UNDEFINED', 1: 'PENDING', - 2: 'CANCELLED', - 3: 'COMPLETED', - 4: 'FAILED', - 5: 'REJECTED', + 2: 'EXECUTING', + 3: 'PROCESSING_PAYMENT', + 4: 'CANCELLED', + 5: 'COMPLETED', + 6: 'FAILED', }; return statusMap[status] || 'UNKNOWN'; } diff --git a/scripts/sanity-sdk/guard-controller/base-test.ts b/scripts/sanity-sdk/guard-controller/base-test.ts index b8fc6dcd..ec29f512 100644 --- a/scripts/sanity-sdk/guard-controller/base-test.ts +++ b/scripts/sanity-sdk/guard-controller/base-test.ts @@ -767,17 +767,9 @@ export abstract class BaseGuardControllerTest extends BaseSDKTest { : txRecord.status; console.log(` 📋 Role config tx record status: ${status} (5=COMPLETED, 6=FAILED)`); if (status === 6) { - const result = txRecord.result ?? '0x'; - const resultHex = - typeof result === 'string' - ? result - : result && typeof result === 'object' && 'length' in result - ? '0x' + - Array.from(new Uint8Array(result as ArrayBuffer)) - .map((b) => b.toString(16).padStart(2, '0')) - .join('') - : String(result); - const errorSelector = this.decodeErrorSelector(result); + const executionResult = this.extractExecutionResultFromReceipt(receipt, txId); + const resultHex = this.normalizeResultToHex(executionResult); + const errorSelector = this.decodeErrorSelector(executionResult); const errorName = errorSelector ? this.getErrorName(errorSelector) : 'Unknown'; console.log(` 🔍 Role config revert selector: ${errorSelector ?? 'none'} (${errorName})`); // Treat idempotent role-config replays as soft success so that re-running tests on @@ -902,6 +894,46 @@ export abstract class BaseGuardControllerTest extends BaseSDKTest { return false; } + protected normalizeResultToHex(result: unknown): string { + if (result == null) return '0x'; + if (typeof result === 'string') { + return result.startsWith('0x') ? result : `0x${result}`; + } + if (result instanceof Uint8Array) { + return '0x' + Array.from(result).map((b) => b.toString(16).padStart(2, '0')).join(''); + } + if (Array.isArray(result)) { + return '0x' + result.map((b) => Number(b).toString(16).padStart(2, '0')).join(''); + } + return '0x'; + } + + protected extractExecutionResultFromReceipt(receipt: any, txId: bigint): unknown { + if (!receipt?.logs?.length) { + return '0x'; + } + const eventSignature = keccak256(toBytes('TxExecutionResult(uint256,bytes)')) as Hex; + for (const log of receipt.logs) { + if (log.topics?.[0] !== eventSignature || !log.topics?.[1]) { + continue; + } + try { + if (BigInt(log.topics[1]) !== txId) { + continue; + } + if (log.data && log.data.length > 2) { + const data = log.data.startsWith('0x') ? log.data.slice(2) : log.data; + const resultLen = parseInt(data.slice(64, 128), 16) * 2; + const resultBytes = data.slice(128, 128 + resultLen); + return resultLen > 0 ? (`0x${resultBytes}` as Hex) : '0x'; + } + } catch { + // continue + } + } + return '0x'; + } + /** * Decode error selector from transaction result (revert data) */ @@ -947,7 +979,7 @@ export abstract class BaseGuardControllerTest extends BaseSDKTest { protected extractTxIdFromReceipt(receipt: any): bigint | null { if (!receipt?.logs?.length) return null; const eventSignature = keccak256( - toBytes('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32)') + toBytes('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32,bytes32)') ) as Hex; for (const log of receipt.logs) { if (log.topics?.[0] === eventSignature && log.topics.length >= 2) { @@ -1093,14 +1125,9 @@ export abstract class BaseGuardControllerTest extends BaseSDKTest { : txRecord.status; console.log(` 📋 Guard config tx record status: ${status} (5=COMPLETED, 6=FAILED)`); if (status === 6) { - const result = txRecord.result ?? '0x'; - const resultHex = - typeof result === 'string' - ? result - : result && typeof result === 'object' && 'length' in result - ? '0x' + Array.from(new Uint8Array(result as ArrayBuffer)).map((b) => b.toString(16).padStart(2, '0')).join('') - : String(result); - const errorSelector = this.decodeErrorSelector(result); + const executionResult = this.extractExecutionResultFromReceipt(receipt, txId); + const resultHex = this.normalizeResultToHex(executionResult); + const errorSelector = this.decodeErrorSelector(executionResult); const errorName = errorSelector ? this.getErrorName(errorSelector) : 'Unknown'; console.log(` 🔍 Revert selector: ${errorSelector ?? 'none'} (${errorName})`); if (!errorSelector || errorName.startsWith('Unknown')) { diff --git a/scripts/sanity-sdk/guard-controller/erc20-mint-controller-tests.ts b/scripts/sanity-sdk/guard-controller/erc20-mint-controller-tests.ts index 102b6895..c9a27426 100644 --- a/scripts/sanity-sdk/guard-controller/erc20-mint-controller-tests.ts +++ b/scripts/sanity-sdk/guard-controller/erc20-mint-controller-tests.ts @@ -1015,7 +1015,7 @@ export class Erc20MintControllerSdkTests extends BaseGuardControllerTest { operationType: params.operationType != null ? toHex(params.operationType) : '0x' + '0'.repeat(64), } : metaTx.txRecord?.params, - result: metaTx.txRecord?.result != null ? toHex(metaTx.txRecord.result) : metaTx.txRecord?.result, + resultHash: metaTx.txRecord?.resultHash ?? `0x${'0'.repeat(64)}`, }, }; } diff --git a/scripts/sanity-sdk/runtime-rbac/base-test.ts b/scripts/sanity-sdk/runtime-rbac/base-test.ts index 96f1be36..6d57bc27 100644 --- a/scripts/sanity-sdk/runtime-rbac/base-test.ts +++ b/scripts/sanity-sdk/runtime-rbac/base-test.ts @@ -606,7 +606,7 @@ export abstract class BaseRuntimeRBACTest extends BaseSDKTest { } const eventSignature = keccak256( - toBytes('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32)') + toBytes('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32,bytes32)') ) as Hex; for (const log of receipt.logs) { @@ -625,6 +625,35 @@ export abstract class BaseRuntimeRBACTest extends BaseSDKTest { return null; } + /** + * Read full execution returndata from `TxExecutionResult` in a receipt. + */ + protected extractExecutionResultFromReceipt(receipt: any, txId: bigint): unknown { + if (!receipt?.logs?.length) { + return '0x'; + } + const eventSignature = keccak256(toBytes('TxExecutionResult(uint256,bytes)')) as Hex; + for (const log of receipt.logs) { + if (log.topics?.[0] !== eventSignature || !log.topics?.[1]) { + continue; + } + try { + if (BigInt(log.topics[1]) !== txId) { + continue; + } + if (log.data && log.data.length > 2) { + const data = log.data.startsWith('0x') ? log.data.slice(2) : log.data; + const resultLen = parseInt(data.slice(64, 128), 16) * 2; + const resultBytes = data.slice(128, 128 + resultLen); + return resultLen > 0 ? (`0x${resultBytes}` as Hex) : '0x'; + } + } catch { + // continue scanning logs + } + } + return '0x'; + } + /** * Get transaction record from contract */ @@ -751,18 +780,25 @@ export abstract class BaseRuntimeRBACTest extends BaseSDKTest { console.log(` 📋 Transaction record status: ${status} (0=UNDEFINED, 1=PENDING, 2=EXECUTING, 5=COMPLETED, 6=FAILED)`); if (status === 6) { - // Transaction failed internally; normalize result (viem may return bytes as string, Uint8Array, or array) - const resultHex = this.normalizeResultToHex(txRecord.result); - const errorSelector = this.decodeErrorSelector(txRecord.result); + const executionResult = this.extractExecutionResultFromReceipt(receipt, txId); + const resultHex = this.normalizeResultToHex(executionResult); + const errorSelector = this.decodeErrorSelector(executionResult); const errorName = errorSelector ? this.getErrorName(errorSelector) : 'Unknown'; - + const resultHash = + typeof txRecord.resultHash === 'string' + ? txRecord.resultHash + : txRecord.resultHash != null + ? `0x${Buffer.from(txRecord.resultHash as Uint8Array).toString('hex')}` + : '0x0'; + console.log(` ❌ Transaction failed internally (status 6) for ${operationName}`); + console.log(` 🔍 Stored resultHash: ${resultHash}`); if (errorSelector) { console.log(` 🔍 Error selector: ${errorSelector} (${errorName})`); } else if (resultHex.length > 2) { - console.log(` 🔍 Raw result (first 20 chars): ${resultHex.slice(0, 20)}...`); + console.log(` 🔍 Raw result from event (first 20 chars): ${resultHex.slice(0, 20)}...`); } else { - console.log(` 🔍 No revert data in tx record (result empty); run against local node or inspect chain to see revert reason`); + console.log(` 🔍 No revert data in TransactionEvent; inspect approval tx logs`); } return { diff --git a/scripts/sanity-sdk/secure-ownable/broadcaster-update-tests.ts b/scripts/sanity-sdk/secure-ownable/broadcaster-update-tests.ts index e8f128ea..3ccf779f 100644 --- a/scripts/sanity-sdk/secure-ownable/broadcaster-update-tests.ts +++ b/scripts/sanity-sdk/secure-ownable/broadcaster-update-tests.ts @@ -94,7 +94,7 @@ export class BroadcasterUpdateTests extends BaseSecureOwnableTest { const secureOwnableOwner = this.createSecureOwnableWithWallet(ownerWalletName); const result = await secureOwnableOwner.updateBroadcasterRequest( newBroadcaster, - 0n, + currentBroadcaster, // Explicit gas so viem does not call eth_estimateGas for broadcaster update flows (remote RPC may hang). this.getTxOptions(ownerWallet.address, { gas: 500_000n }) ); @@ -166,7 +166,7 @@ export class BroadcasterUpdateTests extends BaseSecureOwnableTest { const secureOwnableOwner = this.createSecureOwnableWithWallet(ownerWalletName); const result = await secureOwnableOwner.updateBroadcasterRequest( newBroadcaster, - 0n, + currentBroadcaster, this.getTxOptions(ownerWallet.address, { gas: 500_000n }) ); @@ -219,7 +219,7 @@ export class BroadcasterUpdateTests extends BaseSecureOwnableTest { const secureOwnableOwner = this.createSecureOwnableWithWallet(ownerWalletName); const result = await secureOwnableOwner.updateBroadcasterRequest( newBroadcaster, - 0n, + currentBroadcaster, this.getTxOptions(ownerWallet.address, { gas: 500_000n }) ); @@ -309,7 +309,7 @@ export class BroadcasterUpdateTests extends BaseSecureOwnableTest { const secureOwnableOwner = this.createSecureOwnableWithWallet(ownerWalletName); const result = await secureOwnableOwner.updateBroadcasterRequest( newBroadcaster, - 0n, + currentBroadcaster, this.getTxOptions(ownerWallet.address, { gas: 500_000n }) ); diff --git a/scripts/sanity-sdk/secure-ownable/meta-tx-execution-tests.ts b/scripts/sanity-sdk/secure-ownable/meta-tx-execution-tests.ts index 1feb1b7a..ce4e9593 100644 --- a/scripts/sanity-sdk/secure-ownable/meta-tx-execution-tests.ts +++ b/scripts/sanity-sdk/secure-ownable/meta-tx-execution-tests.ts @@ -45,7 +45,7 @@ export class MetaTxExecutionTests extends BaseSecureOwnableTest { const secureOwnableOwner = this.createSecureOwnableWithWallet(ownerWalletName); const result = await secureOwnableOwner.updateBroadcasterRequest( newBroadcaster, - 0n, + currentBroadcaster, // Explicit gas so viem does not call eth_estimateGas for broadcaster request (remote RPC may hang). this.getTxOptions(ownerWallet.address, { gas: 500_000n }) ); diff --git a/scripts/sanity/guard-controller/base-test.cjs b/scripts/sanity/guard-controller/base-test.cjs index 49b6221a..273c140e 100644 --- a/scripts/sanity/guard-controller/base-test.cjs +++ b/scripts/sanity/guard-controller/base-test.cjs @@ -149,8 +149,7 @@ class BaseGuardControllerTest { PROCESSING_PAYMENT: 3, CANCELLED: 4, COMPLETED: 5, - FAILED: 6, - REJECTED: 7 + FAILED: 6 }; // GuardController constants @@ -1925,7 +1924,7 @@ class BaseGuardControllerTest { return null; } - const eventSignature = this.web3.utils.keccak256('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32)'); + const eventSignature = this.web3.utils.keccak256('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32,bytes32)'); for (const log of receipt.logs) { if (log.topics && log.topics[0] === eventSignature) { diff --git a/scripts/sanity/guard-controller/erc20-mint-controller-tests.cjs b/scripts/sanity/guard-controller/erc20-mint-controller-tests.cjs index ddc60c01..e4f1248f 100644 --- a/scripts/sanity/guard-controller/erc20-mint-controller-tests.cjs +++ b/scripts/sanity/guard-controller/erc20-mint-controller-tests.cjs @@ -625,7 +625,7 @@ class ERC20MintControllerTests extends BaseGuardControllerTest { // ignore } } - const eventSignature = this.web3.utils.keccak256('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32)'); + const eventSignature = this.web3.utils.keccak256('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32,bytes32)'); let statusFromLog = null; if (receipt && receipt.logs) { for (const log of receipt.logs) { diff --git a/scripts/sanity/runtime-rbac/base-test.cjs b/scripts/sanity/runtime-rbac/base-test.cjs index eb87ae3d..056a9d9a 100644 --- a/scripts/sanity/runtime-rbac/base-test.cjs +++ b/scripts/sanity/runtime-rbac/base-test.cjs @@ -1045,7 +1045,7 @@ class BaseRuntimeRBACTest { console.log(` 📋 Transaction emitted ${receipt.logs.length} log(s)`); // Try to find TransactionEvent - const eventSignature = this.web3.utils.keccak256('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32)'); + const eventSignature = this.web3.utils.keccak256('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32,bytes32)'); for (let i = 0; i < receipt.logs.length; i++) { const log = receipt.logs[i]; if (log.topics && log.topics[0] === eventSignature) { @@ -1341,7 +1341,7 @@ class BaseRuntimeRBACTest { return null; } - const eventSignature = this.web3.utils.keccak256('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32)'); + const eventSignature = this.web3.utils.keccak256('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32,bytes32)'); for (let i = 0; i < receipt.logs.length; i++) { const log = receipt.logs[i]; if (log.topics && log.topics[0] === eventSignature) { diff --git a/scripts/sanity/runtime-rbac/rbac-tests.cjs b/scripts/sanity/runtime-rbac/rbac-tests.cjs index e4621ed7..e52e93aa 100644 --- a/scripts/sanity/runtime-rbac/rbac-tests.cjs +++ b/scripts/sanity/runtime-rbac/rbac-tests.cjs @@ -2489,7 +2489,7 @@ class RuntimeRBACTests extends BaseRuntimeRBACTest { // Try to get txId from receipt logs or other fields if (receipt.logs && receipt.logs.length > 0) { // Look for TransactionEvent in logs - const eventSignature = this.web3.utils.keccak256('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32)'); + const eventSignature = this.web3.utils.keccak256('TransactionEvent(uint256,bytes4,uint8,address,address,bytes32,bytes32)'); for (const log of receipt.logs) { if (log.topics && log.topics[0] === eventSignature && log.topics[1]) { verifyTxId = this.web3.utils.hexToNumberString(log.topics[1]); diff --git a/scripts/sanity/secure-ownable/base-test.cjs b/scripts/sanity/secure-ownable/base-test.cjs index cfee7e4c..aa583ede 100644 --- a/scripts/sanity/secure-ownable/base-test.cjs +++ b/scripts/sanity/secure-ownable/base-test.cjs @@ -547,10 +547,11 @@ class BaseSecureOwnableTest { const statusMap = { 0: 'UNDEFINED', 1: 'PENDING', - 2: 'CANCELLED', - 3: 'COMPLETED', - 4: 'FAILED', - 5: 'REJECTED' + 2: 'EXECUTING', + 3: 'PROCESSING_PAYMENT', + 4: 'CANCELLED', + 5: 'COMPLETED', + 6: 'FAILED' }; return statusMap[status] || 'UNKNOWN'; } diff --git a/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs b/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs index ce4aa881..44830060 100644 --- a/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs +++ b/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs @@ -117,7 +117,7 @@ class BroadcasterUpdateTests extends BaseSecureOwnableTest { console.log(` 📋 Transaction Hash: ${receipt.transactionHash}`); // Verify transaction is cancelled - // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED, 7=REJECTED + // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); this.assertTest(tx.status === '4', 'Transaction cancelled successfully'); @@ -189,7 +189,7 @@ class BroadcasterUpdateTests extends BaseSecureOwnableTest { console.log(` 📋 Transaction Hash: ${receipt.transactionHash}`); // Verify transaction is cancelled - // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED, 7=REJECTED + // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); this.assertTest(tx.status === '4', 'Transaction cancelled successfully'); @@ -272,7 +272,7 @@ class BroadcasterUpdateTests extends BaseSecureOwnableTest { await new Promise(resolve => setTimeout(resolve, 1500)); // Verify transaction is completed - // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED, 7=REJECTED + // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); const statusVal = tx.status !== undefined ? tx.status : tx[2]; // Web3 may return struct as object or array const statusNum = typeof statusVal === 'object' && statusVal != null && typeof statusVal.toNumber === 'function' @@ -352,7 +352,7 @@ class BroadcasterUpdateTests extends BaseSecureOwnableTest { console.log(` 📋 Transaction Hash: ${receipt.transactionHash}`); // Verify transaction is completed (use owner wallet since broadcaster has changed) - // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED, 7=REJECTED + // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId), this.getRoleWalletObject('owner')); const statusVal = tx.status !== undefined ? tx.status : tx[2]; const statusNum = typeof statusVal === 'object' && statusVal != null && typeof statusVal.toNumber === 'function' @@ -390,7 +390,7 @@ class BroadcasterUpdateTests extends BaseSecureOwnableTest { // Send the request await this.sendTransaction( - this.contract.methods.updateBroadcasterRequest(newBroadcaster, 0), + this.contract.methods.updateBroadcasterRequest(newBroadcaster, currentBroadcaster), this.getRoleWalletObject('owner') ); @@ -469,7 +469,7 @@ class BroadcasterUpdateTests extends BaseSecureOwnableTest { // Send the request to change to target broadcaster await this.sendTransaction( - this.contract.methods.updateBroadcasterRequest(targetBroadcaster, 0), + this.contract.methods.updateBroadcasterRequest(targetBroadcaster, currentBroadcaster), this.getRoleWalletObject('owner') ); diff --git a/scripts/sanity/secure-ownable/ownership-transfer-tests.cjs b/scripts/sanity/secure-ownable/ownership-transfer-tests.cjs index 63d59a80..b49947e7 100644 --- a/scripts/sanity/secure-ownable/ownership-transfer-tests.cjs +++ b/scripts/sanity/secure-ownable/ownership-transfer-tests.cjs @@ -191,7 +191,7 @@ class OwnershipTransferTests extends BaseSecureOwnableTest { console.log(` 📋 Transaction Hash: ${receipt.transactionHash}`); // Verify transaction is cancelled - // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED, 7=REJECTED + // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); this.assertTest(tx.status === '4', 'Transaction cancelled successfully'); @@ -309,7 +309,7 @@ class OwnershipTransferTests extends BaseSecureOwnableTest { console.log(` 📋 Transaction Hash: ${receipt.transactionHash}`); // Verify transaction is cancelled - // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED, 7=REJECTED + // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); this.assertTest(tx.status === '4', 'Transaction cancelled successfully'); @@ -438,7 +438,7 @@ class OwnershipTransferTests extends BaseSecureOwnableTest { console.log(` 📋 Transaction Hash: ${receipt.transactionHash}`); // Verify transaction is completed (use recovery wallet since owner has changed) - // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED, 7=REJECTED + // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId), this.getRoleWalletObject('recovery')); this.assertTest(Number(tx.status) === 5, 'Transaction completed successfully'); @@ -656,7 +656,7 @@ class OwnershipTransferTests extends BaseSecureOwnableTest { console.log(` 📋 Transaction Hash: ${receipt.transactionHash}`); // Verify transaction is completed (use recovery wallet since owner has changed) - // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED, 7=REJECTED + // TxStatus enum: 0=UNDEFINED, 1=PENDING, 2=EXECUTING, 3=PROCESSING_PAYMENT, 4=CANCELLED, 5=COMPLETED, 6=FAILED const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId), this.getRoleWalletObject('recovery')); this.assertTest(Number(tx.status) === 5, 'Transaction completed successfully'); diff --git a/sdk/typescript/README.md b/sdk/typescript/README.md index 24faaef5..007d7546 100644 --- a/sdk/typescript/README.md +++ b/sdk/typescript/README.md @@ -312,10 +312,11 @@ import { TxStatus } from '@bloxchain/sdk'; TxStatus.UNDEFINED TxStatus.PENDING +TxStatus.EXECUTING +TxStatus.PROCESSING_PAYMENT TxStatus.CANCELLED TxStatus.COMPLETED TxStatus.FAILED -TxStatus.REJECTED ``` ## Error Handling diff --git a/sdk/typescript/abi/AccountBlox.abi.json b/sdk/typescript/abi/AccountBlox.abi.json index f18208a0..f5bcdaed 100644 --- a/sdk/typescript/abi/AccountBlox.abi.json +++ b/sdk/typescript/abi/AccountBlox.abi.json @@ -1,3929 +1,3978 @@ [ { - "inputs": [ - { - "internalType": "uint256", - "name": "array1Length", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "array2Length", - "type": "uint256" - } - ], - "name": "ArrayLengthMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxSize", - "type": "uint256" - } - ], - "name": "BatchSizeExceeded", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "resourceId", - "type": "bytes32" - } - ], - "name": "CannotModifyProtected", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - } - ], - "name": "ContractFunctionMustBeProtected", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - } - ], - "name": "InternalFunctionNotAccessible", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidPayment", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signedContract", - "type": "address" - }, - { - "internalType": "address", - "name": "entryContract", - "type": "address" - } - ], - "name": "MetaTxHandlerContractMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "signedSelector", - "type": "bytes4" - }, - { - "internalType": "bytes4", - "name": "entrySelector", - "type": "bytes4" - } - ], - "name": "MetaTxHandlerSelectorMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "NoPermission", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "NotSupported", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "OnlyCallableByContract", - "type": "error" - }, - { - "inputs": [], - "name": "PendingSecureRequest", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "rangeSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxRangeSize", - "type": "uint256" - } - ], - "name": "RangeSizeExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyGuardReentrantCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "resourceId", - "type": "bytes32" - } - ], - "name": "ResourceNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "RestrictedOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedOwnerRecovery", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedRecovery", - "type": "error" + "type": "fallback", + "stateMutability": "payable" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ComponentEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "EthReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" + "type": "receive", + "stateMutability": "payable" }, { + "type": "function", + "name": "approveTimeLockExecution", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "approveTimeLockExecution", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "approveTimeLockExecutionWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "approveTimeLockExecutionWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "cancelTimeLockExecution", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "cancelTimeLockExecution", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "cancelTimeLockExecutionWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "cancelTimeLockExecutionWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "createMetaTxParams", "inputs": [ { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "createMetaTxParams", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "executeBroadcasterUpdate", "inputs": [ { - "internalType": "address", "name": "newBroadcaster", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "location", - "type": "uint256" + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "name": "executeBroadcasterUpdate", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeGuardConfigBatch", "inputs": [ { + "name": "actions", + "type": "tuple[]", + "internalType": "struct IGuardController.GuardConfigAction[]", "components": [ { - "internalType": "enum IGuardController.GuardConfigActionType", "name": "actionType", - "type": "uint8" + "type": "uint8", + "internalType": "enum IGuardController.GuardConfigActionType" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct IGuardController.GuardConfigAction[]", - "name": "actions", - "type": "tuple[]" + ] } ], - "name": "executeGuardConfigBatch", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeRecoveryUpdate", "inputs": [ { - "internalType": "address", "name": "newRecoveryAddress", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "executeRecoveryUpdate", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeRoleConfigBatch", "inputs": [ { + "name": "actions", + "type": "tuple[]", + "internalType": "struct IRuntimeRBAC.RoleConfigAction[]", "components": [ { - "internalType": "enum IRuntimeRBAC.RoleConfigActionType", "name": "actionType", - "type": "uint8" + "type": "uint8", + "internalType": "enum IRuntimeRBAC.RoleConfigActionType" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct IRuntimeRBAC.RoleConfigAction[]", - "name": "actions", - "type": "tuple[]" + ] } ], - "name": "executeRoleConfigBatch", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeTimeLockUpdate", "inputs": [ { - "internalType": "uint256", "name": "newTimeLockPeriodSec", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "executeTimeLockUpdate", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeTransferOwnership", "inputs": [ { - "internalType": "address", "name": "newOwner", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "executeTransferOwnership", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeWithPayment", "inputs": [ { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "params", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "paymentDetails", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "paymentDetails", - "type": "tuple" + ] } ], - "name": "executeWithPayment", "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeWithTimeLock", "inputs": [ { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "params", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "executeWithTimeLock", "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForExisting", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForExisting", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForNew", "inputs": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForNew", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + "type": "uint256", + "internalType": "uint256" + } + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getActiveRolePermissions", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getActiveRolePermissions", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.FunctionPermission[]", "components": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "uint16", "name": "grantedActionsBitmap", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "bytes4[]", "name": "handlerForSelectors", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } - ], - "internalType": "struct EngineBlox.FunctionPermission[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getAuthorizedWallets", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getAuthorizedWallets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getBroadcasters", + "inputs": [], "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getFunctionSchema", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getFunctionSchema", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.FunctionSchema", "components": [ { - "internalType": "string", "name": "functionSignature", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "string", "name": "operationName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "uint16", "name": "supportedActionsBitmap", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "bool", "name": "enforceHandlerRelations", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" + }, + { + "name": "isGrantRevocable", + "type": "bool", + "internalType": "bool" }, { - "internalType": "bytes4[]", "name": "handlerForSelectors", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } - ], - "internalType": "struct EngineBlox.FunctionSchema", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getFunctionWhitelistTargets", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getFunctionWhitelistTargets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getHooks", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getHooks", "outputs": [ { - "internalType": "address[]", "name": "hooks", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getPendingTransactions", + "inputs": [], "outputs": [ { - "internalType": "uint256[]", "name": "", - "type": "uint256[]" + "type": "uint256[]", + "internalType": "uint256[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getRecovery", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getRole", "outputs": [ { - "internalType": "string", "name": "roleName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes32", "name": "hash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", "name": "maxWallets", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "walletCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getSignerNonce", "inputs": [ { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getSignerNonce", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedFunctions", + "inputs": [], "outputs": [ { - "internalType": "bytes4[]", "name": "", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedOperationTypes", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedRoles", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getTimeLockPeriodSec", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransaction", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransaction", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransactionHistory", "inputs": [ { - "internalType": "uint256", "name": "fromTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "toTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransactionHistory", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.TxRecord[]", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getWalletRoles", "inputs": [ { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getWalletRoles", "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "guardConfigBatchRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "guardConfigBatchRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "hasRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "hasRole", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "initialOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "broadcaster", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + }, + { + "name": "timeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "eventForwarder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", "name": "initialized", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "owner", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "requestAndApproveExecution", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "requestAndApproveExecution", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "roleConfigBatchRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "roleConfigBatchRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "supportsInterface", "inputs": [ { - "internalType": "bytes4", "name": "interfaceId", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "supportsInterface", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "transferOwnershipApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipDelayedApproval", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "transferOwnershipRequest", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + "type": "bytes", + "internalType": "bytes" + } + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterDelayedApproval", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterRequest", "inputs": [ { - "internalType": "address", "name": "newBroadcaster", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "location", - "type": "uint256" + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "name": "updateBroadcasterRequest", "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateRecoveryRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateRecoveryRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateTimeLockRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateTimeLockRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "stateMutability": "payable", - "type": "receive" + "type": "event", + "name": "ComponentEvent", + "inputs": [ + { + "name": "functionSelector", + "type": "bytes4", + "indexed": true, + "internalType": "bytes4" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false }, { + "type": "event", + "name": "EthReceived", "inputs": [ { - "internalType": "address", - "name": "initialOwner", - "type": "address" + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "broadcaster", - "type": "address" + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ArrayLengthMismatch", + "inputs": [ + { + "name": "array1Length", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", - "name": "recovery", - "type": "address" + "name": "array2Length", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "BatchSizeExceeded", + "inputs": [ + { + "name": "currentSize", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "timeLockPeriodSec", - "type": "uint256" + "name": "maxSize", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "CannotModifyProtected", + "inputs": [ + { + "name": "resourceId", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ContractFunctionMustBeProtected", + "inputs": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + }, + { + "type": "error", + "name": "InternalFunctionNotAccessible", + "inputs": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidOperation", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidPayment", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidTimeLockPeriod", + "inputs": [ + { + "name": "provided", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ItemAlreadyExists", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ItemNotFound", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "MetaTxHandlerContractMismatch", + "inputs": [ + { + "name": "signedContract", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "eventForwarder", - "type": "address" + "name": "entryContract", + "type": "address", + "internalType": "address" } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] + }, + { + "type": "error", + "name": "MetaTxHandlerSelectorMismatch", + "inputs": [ + { + "name": "signedSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "entrySelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + }, + { + "type": "error", + "name": "NoPermission", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "NotSupported", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCallableByContract", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "contractAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "PendingSecureRequest", + "inputs": [] + }, + { + "type": "error", + "name": "RangeSizeExceeded", + "inputs": [ + { + "name": "rangeSize", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxRangeSize", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "ResourceNotFound", + "inputs": [ + { + "name": "resourceId", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "RestrictedOwner", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "RestrictedOwnerRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "RestrictedRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] } ] \ No newline at end of file diff --git a/sdk/typescript/abi/SecureOwnable.abi.json b/sdk/typescript/abi/SecureOwnable.abi.json index 530c0279..e5b866fc 100644 --- a/sdk/typescript/abi/SecureOwnable.abi.json +++ b/sdk/typescript/abi/SecureOwnable.abi.json @@ -1,2731 +1,2769 @@ [ { + "type": "function", + "name": "createMetaTxParams", "inputs": [ { - "internalType": "uint256", - "name": "array1Length", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "array2Length", - "type": "uint256" - } - ], - "name": "ArrayLengthMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - } - ], - "name": "ContractFunctionMustBeProtected", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signedContract", - "type": "address" - }, - { - "internalType": "address", - "name": "entryContract", - "type": "address" - } - ], - "name": "MetaTxHandlerContractMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "signedSelector", - "type": "bytes4" - }, - { - "internalType": "bytes4", - "name": "entrySelector", - "type": "bytes4" - } - ], - "name": "MetaTxHandlerSelectorMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "NoPermission", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "OnlyCallableByContract", - "type": "error" - }, - { - "inputs": [], - "name": "PendingSecureRequest", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "rangeSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxRangeSize", - "type": "uint256" - } - ], - "name": "RangeSizeExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyGuardReentrantCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "resourceId", - "type": "bytes32" - } - ], - "name": "ResourceNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "RestrictedOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedOwnerRecovery", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedRecovery", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ComponentEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "createMetaTxParams", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "", - "type": "tuple" + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "executeBroadcasterUpdate", + "inputs": [ + { + "name": "newBroadcaster", + "type": "address", + "internalType": "address" + }, + { + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeRecoveryUpdate", + "inputs": [ + { + "name": "newRecoveryAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeTimeLockUpdate", + "inputs": [ + { + "name": "newTimeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeTransferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "generateUnsignedMetaTransactionForExisting", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForExisting", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForNew", "inputs": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForNew", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getActiveRolePermissions", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getActiveRolePermissions", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.FunctionPermission[]", "components": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "uint16", "name": "grantedActionsBitmap", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "bytes4[]", "name": "handlerForSelectors", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } - ], - "internalType": "struct EngineBlox.FunctionPermission[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getAuthorizedWallets", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getAuthorizedWallets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getBroadcasters", + "inputs": [], "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getFunctionSchema", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getFunctionSchema", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.FunctionSchema", "components": [ { - "internalType": "string", "name": "functionSignature", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "string", "name": "operationName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "uint16", "name": "supportedActionsBitmap", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "bool", "name": "enforceHandlerRelations", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" + }, + { + "name": "isGrantRevocable", + "type": "bool", + "internalType": "bool" }, { - "internalType": "bytes4[]", "name": "handlerForSelectors", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } - ], - "internalType": "struct EngineBlox.FunctionSchema", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getFunctionWhitelistTargets", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getFunctionWhitelistTargets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getHooks", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getHooks", "outputs": [ { - "internalType": "address[]", "name": "hooks", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getPendingTransactions", + "inputs": [], "outputs": [ { - "internalType": "uint256[]", "name": "", - "type": "uint256[]" + "type": "uint256[]", + "internalType": "uint256[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getRecovery", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getRole", "outputs": [ { - "internalType": "string", "name": "roleName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes32", "name": "hash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", "name": "maxWallets", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "walletCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getSignerNonce", "inputs": [ { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getSignerNonce", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedFunctions", + "inputs": [], "outputs": [ { - "internalType": "bytes4[]", "name": "", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedOperationTypes", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedRoles", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getTimeLockPeriodSec", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransaction", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransaction", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransactionHistory", "inputs": [ { - "internalType": "uint256", "name": "fromTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "toTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransactionHistory", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.TxRecord[]", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getWalletRoles", "inputs": [ { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getWalletRoles", "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "hasRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "hasRole", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "initialize", "inputs": [ { - "internalType": "address", "name": "initialOwner", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "broadcaster", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "recovery", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "timeLockPeriodSec", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "eventForwarder", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "initialize", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", + "type": "function", + "name": "initialized", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "owner", "inputs": [], - "name": "transferOwnershipRequest", "outputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "", + "type": "address", + "internalType": "address" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "supportsInterface", "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "transferOwnershipDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "transferOwnershipApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipDelayedApproval", "inputs": [ { - "internalType": "address", - "name": "newBroadcaster", - "type": "address" - }, - { - "internalType": "uint256", - "name": "location", - "type": "uint256" + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterRequest", "outputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - } - ], - "name": "updateBroadcasterDelayedApproval", + "type": "function", + "name": "transferOwnershipRequest", + "inputs": [], "outputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateBroadcasterDelayedApproval", + "inputs": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateBroadcasterRequest", + "inputs": [ + { + "name": "newBroadcaster", + "type": "address", + "internalType": "address" + }, + { + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateRecoveryRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateRecoveryRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateTimeLockRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateTimeLockRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "event", + "name": "ComponentEvent", "inputs": [ { - "internalType": "address", - "name": "newOwner", - "type": "address" + "name": "functionSelector", + "type": "bytes4", + "indexed": true, + "internalType": "bytes4" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], - "name": "executeTransferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "Initialized", "inputs": [ { - "internalType": "address", - "name": "newBroadcaster", - "type": "address" + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ArrayLengthMismatch", + "inputs": [ + { + "name": "array1Length", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", - "name": "location", - "type": "uint256" + "name": "array2Length", + "type": "uint256", + "internalType": "uint256" } - ], - "name": "executeBroadcasterUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "ContractFunctionMustBeProtected", "inputs": [ { - "internalType": "address", - "name": "newRecoveryAddress", - "type": "address" + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "executeRecoveryUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] }, { + "type": "error", + "name": "InvalidOperation", "inputs": [ { - "internalType": "uint256", - "name": "newTimeLockPeriodSec", - "type": "uint256" + "name": "item", + "type": "address", + "internalType": "address" } - ], - "name": "executeTimeLockUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] + }, + { + "type": "error", + "name": "ItemAlreadyExists", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ItemNotFound", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "MetaTxHandlerContractMismatch", + "inputs": [ + { + "name": "signedContract", + "type": "address", + "internalType": "address" + }, + { + "name": "entryContract", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "MetaTxHandlerSelectorMismatch", + "inputs": [ + { + "name": "signedSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "entrySelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + }, + { + "type": "error", + "name": "NoPermission", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCallableByContract", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "contractAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "PendingSecureRequest", + "inputs": [] + }, + { + "type": "error", + "name": "RangeSizeExceeded", + "inputs": [ + { + "name": "rangeSize", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxRangeSize", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "ResourceNotFound", + "inputs": [ + { + "name": "resourceId", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "RestrictedOwner", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "RestrictedOwnerRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "RestrictedRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] } ] \ No newline at end of file diff --git a/sdk/typescript/abi/SimpleRWA20.abi.json b/sdk/typescript/abi/SimpleRWA20.abi.json index ea8c49be..e7639273 100644 --- a/sdk/typescript/abi/SimpleRWA20.abi.json +++ b/sdk/typescript/abi/SimpleRWA20.abi.json @@ -1,4010 +1,4048 @@ [ { + "type": "function", + "name": "allowance", "inputs": [ { - "internalType": "uint256", - "name": "array1Length", - "type": "uint256" + "name": "owner", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "array2Length", - "type": "uint256" + "name": "spender", + "type": "address", + "internalType": "address" } ], - "name": "ArrayLengthMismatch", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ContractFunctionMustBeProtected", - "type": "error" + "stateMutability": "view" }, { + "type": "function", + "name": "approve", "inputs": [ { - "internalType": "address", "name": "spender", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, + "name": "value", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ { - "internalType": "uint256", - "name": "needed", - "type": "uint256" + "name": "", + "type": "bool", + "internalType": "bool" } ], - "name": "ERC20InsufficientAllowance", - "type": "error" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "balanceOf", "inputs": [ { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ { - "internalType": "uint256", - "name": "needed", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ERC20InsufficientBalance", - "type": "error" + "stateMutability": "view" }, { + "type": "function", + "name": "burn", "inputs": [ { - "internalType": "address", - "name": "approver", - "type": "address" + "name": "value", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ERC20InvalidApprover", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "burnFrom", "inputs": [ { - "internalType": "address", - "name": "receiver", - "type": "address" + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ERC20InvalidReceiver", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "burnWithMetaTx", "inputs": [ { - "internalType": "address", - "name": "sender", - "type": "address" + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", + "components": [ + { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", + "components": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "releaseTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", + "components": [ + { + "name": "requester", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "gasLimit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "executionParams", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "erc20TokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "erc20TokenAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] } ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "address", - "name": "spender", - "type": "address" + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ERC20InvalidSpender", - "type": "error" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "createMetaTxParams", "inputs": [ { - "internalType": "address", - "name": "provided", - "type": "address" + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" } ], - "name": "InvalidAddress", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] } ], - "name": "InvalidHandlerSelector", - "type": "error" + "stateMutability": "view" }, { + "type": "function", + "name": "decimals", "inputs": [], - "name": "InvalidInitialization", - "type": "error" + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" }, { + "type": "function", + "name": "executeBroadcasterUpdate", "inputs": [ { - "internalType": "bytes32", - "name": "actualType", - "type": "bytes32" + "name": "newBroadcaster", + "type": "address", + "internalType": "address" }, { - "internalType": "bytes32", - "name": "expectedType", - "type": "bytes32" + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "name": "InvalidOperationType", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeBurn", "inputs": [ { - "internalType": "address", - "name": "signedContract", - "type": "address" + "name": "from", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "entryContract", - "type": "address" + "name": "amount", + "type": "uint256", + "internalType": "uint256" } ], - "name": "MetaTxHandlerContractMismatch", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeMint", "inputs": [ { - "internalType": "bytes4", - "name": "signedSelector", - "type": "bytes4" + "name": "to", + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", - "name": "entrySelector", - "type": "bytes4" + "name": "amount", + "type": "uint256", + "internalType": "uint256" } ], - "name": "MetaTxHandlerSelectorMismatch", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeRecoveryUpdate", "inputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" + "name": "newRecoveryAddress", + "type": "address", + "internalType": "address" } ], - "name": "NoPermission", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "NotSupported", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeTimeLockUpdate", "inputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "OnlyCallableByContract", - "type": "error" - }, - { - "inputs": [], - "name": "PendingSecureRequest", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "rangeSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxRangeSize", - "type": "uint256" - } - ], - "name": "RangeSizeExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyGuardReentrantCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "resourceId", - "type": "bytes32" - } - ], - "name": "ResourceNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "RestrictedOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedOwnerRecovery", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedRecovery", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ComponentEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokensBurned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokensMinted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" + "name": "newTimeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" } ], - "name": "burn", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeTransferOwnership", "inputs": [ { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" + "name": "newOwner", + "type": "address", + "internalType": "address" } ], - "name": "burnFrom", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "generateUnsignedBurnMetaTx", "inputs": [ { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" + "name": "from", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" + "name": "amount", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "createMetaTxParams", - "outputs": [ - { + "name": "params", + "type": "tuple", + "internalType": "struct SimpleRWA20.TokenMetaTxParams", "components": [ { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newBroadcaster", - "type": "address" - }, - { - "internalType": "uint256", - "name": "location", - "type": "uint256" - } - ], - "name": "executeBroadcasterUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newRecoveryAddress", - "type": "address" - } - ], - "name": "executeRecoveryUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newTimeLockPeriodSec", - "type": "uint256" - } - ], - "name": "executeTimeLockUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", + "components": [ + { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", + "components": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "releaseTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", + "components": [ + { + "name": "requester", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "gasLimit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "executionParams", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "erc20TokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "erc20TokenAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] } ], - "name": "executeTransferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForExisting", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForExisting", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForNew", "inputs": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForNew", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedMintMetaTx", "inputs": [ { - "internalType": "bytes32", - "name": "roleHash", - "type": "bytes32" - } - ], - "name": "getActiveRolePermissions", - "outputs": [ + "name": "to", + "type": "address", + "internalType": "address" + }, { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct SimpleRWA20.TokenMetaTxParams", "components": [ { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "internalType": "uint16", - "name": "grantedActionsBitmap", - "type": "uint16" + "name": "deadline", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes4[]", - "name": "handlerForSelectors", - "type": "bytes4[]" + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.FunctionPermission[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "roleHash", - "type": "bytes32" - } - ], - "name": "getAuthorizedWallets", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" + ] } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getBroadcasters", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - } - ], - "name": "getFunctionSchema", - "outputs": [ - { + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { - "internalType": "string", - "name": "functionSignature", - "type": "string" - }, - { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "string", - "name": "operationName", - "type": "string" - }, - { - "internalType": "uint16", + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", + "components": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "releaseTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", + "components": [ + { + "name": "requester", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "gasLimit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "executionParams", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "erc20TokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "erc20TokenAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getActiveRolePermissions", + "inputs": [ + { + "name": "roleHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.FunctionPermission[]", + "components": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "grantedActionsBitmap", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "handlerForSelectors", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAuthorizedWallets", + "inputs": [ + { + "name": "roleHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBroadcasters", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getFunctionSchema", + "inputs": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.FunctionSchema", + "components": [ + { + "name": "functionSignature", + "type": "string", + "internalType": "string" + }, + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "operationName", + "type": "string", + "internalType": "string" + }, + { "name": "supportedActionsBitmap", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "bool", "name": "enforceHandlerRelations", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" + }, + { + "name": "isGrantRevocable", + "type": "bool", + "internalType": "bool" }, { - "internalType": "bytes4[]", "name": "handlerForSelectors", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } - ], - "internalType": "struct EngineBlox.FunctionSchema", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getFunctionWhitelistTargets", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getFunctionWhitelistTargets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getHooks", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getHooks", "outputs": [ { - "internalType": "address[]", "name": "hooks", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getPendingTransactions", + "inputs": [], "outputs": [ { - "internalType": "uint256[]", "name": "", - "type": "uint256[]" + "type": "uint256[]", + "internalType": "uint256[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getRecovery", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getRole", "outputs": [ { - "internalType": "string", "name": "roleName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes32", "name": "hash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", "name": "maxWallets", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "walletCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getSignerNonce", "inputs": [ { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getSignerNonce", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedFunctions", + "inputs": [], "outputs": [ { - "internalType": "bytes4[]", "name": "", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedOperationTypes", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedRoles", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getTimeLockPeriodSec", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransaction", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransaction", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransactionHistory", "inputs": [ { - "internalType": "uint256", "name": "fromTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "toTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransactionHistory", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.TxRecord[]", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getWalletRoles", "inputs": [ { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getWalletRoles", "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "hasRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "hasRole", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "initialized", - "outputs": [ + "type": "function", + "name": "initialize", + "inputs": [ { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ + "name": "initialOwner", + "type": "address", + "internalType": "address" + }, { - "internalType": "string", - "name": "", - "type": "string" + "name": "broadcaster", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + }, + { + "name": "timeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "eventForwarder", + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "symbol", + "type": "string", + "internalType": "string" + }, + { + "name": "initialOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "broadcaster", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + }, + { + "name": "timeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "eventForwarder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialized", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "mintWithMetaTx", + "inputs": [ + { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", + "components": [ + { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", + "components": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "releaseTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", + "components": [ + { + "name": "requester", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "gasLimit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "executionParams", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "erc20TokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "erc20TokenAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "outputs": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "name", "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "owner", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "supportsInterface", "inputs": [ { - "internalType": "bytes4", "name": "interfaceId", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "supportsInterface", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "symbol", + "inputs": [], "outputs": [ { - "internalType": "string", "name": "", - "type": "string" + "type": "string", + "internalType": "string" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "totalSupply", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "transfer", "inputs": [ { - "internalType": "address", "name": "to", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transfer", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferFrom", "inputs": [ { - "internalType": "address", "name": "from", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "to", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferFrom", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipDelayedApproval", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "transferOwnershipRequest", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterDelayedApproval", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterRequest", "inputs": [ { - "internalType": "address", "name": "newBroadcaster", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "location", - "type": "uint256" + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "name": "updateBroadcasterRequest", "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateRecoveryRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateRecoveryRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateTimeLockRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateTimeLockRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "event", + "name": "Approval", "inputs": [ { - "internalType": "address", - "name": "initialOwner", - "type": "address" + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "broadcaster", - "type": "address" + "name": "spender", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "recovery", - "type": "address" - }, + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ComponentEvent", + "inputs": [ { - "internalType": "uint256", - "name": "timeLockPeriodSec", - "type": "uint256" + "name": "functionSelector", + "type": "bytes4", + "indexed": true, + "internalType": "bytes4" }, { - "internalType": "address", - "name": "eventForwarder", - "type": "address" + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "Initialized", "inputs": [ { - "internalType": "string", - "name": "name", - "type": "string" - }, + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TokensBurned", + "inputs": [ { - "internalType": "string", - "name": "symbol", - "type": "string" + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "initialOwner", - "type": "address" - }, + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TokensMinted", + "inputs": [ { - "internalType": "address", - "name": "broadcaster", - "type": "address" + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "recovery", - "type": "address" + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "uint256", - "name": "timeLockPeriodSec", - "type": "uint256" + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "eventForwarder", - "type": "address" + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { + "type": "error", + "name": "ArrayLengthMismatch", "inputs": [ { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - }, - { - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "bytes4", - "name": "executionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "erc20TokenAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" - } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + "name": "array1Length", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "array2Length", + "type": "uint256", + "internalType": "uint256" } - ], - "name": "mintWithMetaTx", - "outputs": [ + ] + }, + { + "type": "error", + "name": "ContractFunctionMustBeProtected", + "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" } - ], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "ERC20InsufficientAllowance", "inputs": [ { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - }, - { - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "bytes4", - "name": "executionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "erc20TokenAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" - } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "allowance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "needed", + "type": "uint256", + "internalType": "uint256" } - ], - "name": "burnWithMetaTx", - "outputs": [ + ] + }, + { + "type": "error", + "name": "ERC20InsufficientBalance", + "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "sender", + "type": "address", + "internalType": "address" + }, + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "needed", + "type": "uint256", + "internalType": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "ERC20InvalidApprover", "inputs": [ { - "internalType": "address", - "name": "to", - "type": "address" + "name": "approver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidReceiver", + "inputs": [ + { + "name": "receiver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidSender", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC20InvalidSpender", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidAddress", + "inputs": [ + { + "name": "provided", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidHandlerSelector", + "inputs": [ + { + "name": "selector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidOperation", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidOperationType", + "inputs": [ + { + "name": "actualType", + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "expectedType", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ItemAlreadyExists", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ItemNotFound", + "inputs": [ + { + "name": "item", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "MetaTxHandlerContractMismatch", + "inputs": [ + { + "name": "signedContract", + "type": "address", + "internalType": "address" }, { - "components": [ - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - } - ], - "internalType": "struct SimpleRWA20.TokenMetaTxParams", - "name": "params", - "type": "tuple" + "name": "entryContract", + "type": "address", + "internalType": "address" } - ], - "name": "generateUnsignedMintMetaTx", - "outputs": [ + ] + }, + { + "type": "error", + "name": "MetaTxHandlerSelectorMismatch", + "inputs": [ { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - }, - { - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "bytes4", - "name": "executionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "erc20TokenAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" - } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + "name": "signedSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "entrySelector", + "type": "bytes4", + "internalType": "bytes4" } - ], - "stateMutability": "view", - "type": "function" + ] }, { + "type": "error", + "name": "NoPermission", "inputs": [ { - "internalType": "address", - "name": "from", - "type": "address" + "name": "caller", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "NotSupported", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCallableByContract", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "contractAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "PendingSecureRequest", + "inputs": [] + }, + { + "type": "error", + "name": "RangeSizeExceeded", + "inputs": [ + { + "name": "rangeSize", + "type": "uint256", + "internalType": "uint256" }, { - "components": [ - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - } - ], - "internalType": "struct SimpleRWA20.TokenMetaTxParams", - "name": "params", - "type": "tuple" + "name": "maxRangeSize", + "type": "uint256", + "internalType": "uint256" } - ], - "name": "generateUnsignedBurnMetaTx", - "outputs": [ + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "ResourceNotFound", + "inputs": [ { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - }, - { - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "bytes4", - "name": "executionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "erc20TokenAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" - } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + "name": "resourceId", + "type": "bytes32", + "internalType": "bytes32" } - ], - "stateMutability": "view", - "type": "function" + ] }, { + "type": "error", + "name": "RestrictedOwner", "inputs": [ { - "internalType": "address", - "name": "to", - "type": "address" + "name": "caller", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "owner", + "type": "address", + "internalType": "address" } - ], - "name": "executeMint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "RestrictedOwnerRecovery", "inputs": [ { - "internalType": "address", - "name": "from", - "type": "address" + "name": "caller", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" } - ], - "name": "executeBurn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] + }, + { + "type": "error", + "name": "RestrictedRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] } ] \ No newline at end of file diff --git a/sdk/typescript/abi/SimpleVault.abi.json b/sdk/typescript/abi/SimpleVault.abi.json index 02e196b4..ca46d2d9 100644 --- a/sdk/typescript/abi/SimpleVault.abi.json +++ b/sdk/typescript/abi/SimpleVault.abi.json @@ -1,3385 +1,3423 @@ [ { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "approveWithdrawalAfterDelay", "inputs": [ { - "internalType": "uint256", - "name": "array1Length", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "array2Length", - "type": "uint256" + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ArrayLengthMismatch", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "ContractFunctionMustBeProtected", - "type": "error" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "approveWithdrawalWithMetaTx", "inputs": [ { - "internalType": "address", - "name": "provided", - "type": "address" + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", + "components": [ + { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", + "components": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "releaseTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", + "components": [ + { + "name": "requester", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "gasLimit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "executionParams", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "erc20TokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "erc20TokenAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] } ], - "name": "InvalidAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "uint256", - "name": "provided", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "InvalidTimeLockPeriod", - "type": "error" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "cancelWithdrawal", "inputs": [ { - "internalType": "address", - "name": "signedContract", - "type": "address" - }, + "name": "txId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ { - "internalType": "address", - "name": "entryContract", - "type": "address" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "MetaTxHandlerContractMismatch", - "type": "error" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "createMetaTxParams", "inputs": [ { - "internalType": "bytes4", - "name": "signedSelector", - "type": "bytes4" + "name": "handlerContract", + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", - "name": "entrySelector", - "type": "bytes4" + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" } ], - "name": "MetaTxHandlerSelectorMismatch", - "type": "error" - }, - { - "inputs": [ + "outputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] } ], - "name": "NoPermission", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "NotSupported", - "type": "error" + "stateMutability": "view" }, { + "type": "function", + "name": "executeBroadcasterUpdate", "inputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" + "name": "newBroadcaster", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "contractAddress", - "type": "address" + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "name": "OnlyCallableByContract", - "type": "error" - }, - { - "inputs": [], - "name": "PendingSecureRequest", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeRecoveryUpdate", "inputs": [ { - "internalType": "uint256", - "name": "rangeSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxRangeSize", - "type": "uint256" + "name": "newRecoveryAddress", + "type": "address", + "internalType": "address" } ], - "name": "RangeSizeExceeded", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "ReentrancyGuardReentrantCall", - "type": "error" + "type": "function", + "name": "executeTimeLockUpdate", + "inputs": [ + { + "name": "newTimeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeTransferOwnership", "inputs": [ { - "internalType": "bytes32", - "name": "resourceId", - "type": "bytes32" + "name": "newOwner", + "type": "address", + "internalType": "address" } ], - "name": "ResourceNotFound", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeWithdrawEth", "inputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" + "name": "to", + "type": "address", + "internalType": "address payable" }, { - "internalType": "address", - "name": "owner", - "type": "address" + "name": "amount", + "type": "uint256", + "internalType": "uint256" } ], - "name": "RestrictedOwner", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "executeWithdrawToken", "inputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" + "name": "token", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "owner", - "type": "address" + "name": "to", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "recovery", - "type": "address" + "name": "amount", + "type": "uint256", + "internalType": "uint256" } ], - "name": "RestrictedOwnerRecovery", - "type": "error" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForExisting", "inputs": [ { - "internalType": "address", - "name": "caller", - "type": "address" + "name": "txId", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", - "name": "recovery", - "type": "address" - } - ], - "name": "RestrictedRecovery", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ComponentEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "EthReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "EthWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokenWithdrawn", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "createMetaTxParams", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], + "name": "metaTxParams", + "type": "tuple", "internalType": "struct EngineBlox.MetaTxParams", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newBroadcaster", - "type": "address" - }, - { - "internalType": "uint256", - "name": "location", - "type": "uint256" - } - ], - "name": "executeBroadcasterUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newRecoveryAddress", - "type": "address" - } - ], - "name": "executeRecoveryUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newTimeLockPeriodSec", - "type": "uint256" - } - ], - "name": "executeTimeLockUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "executeTransferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForExisting", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedMetaTransactionForNew", "inputs": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "metaTxParams", - "type": "tuple" + ] } ], - "name": "generateUnsignedMetaTransactionForNew", "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "generateUnsignedWithdrawalMetaTxApproval", "inputs": [ { - "internalType": "bytes32", - "name": "roleHash", - "type": "bytes32" - } - ], - "name": "getActiveRolePermissions", - "outputs": [ + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, { + "name": "metaTxParams", + "type": "tuple", + "internalType": "struct SimpleVault.VaultMetaTxParams", "components": [ { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" - }, - { - "internalType": "uint16", - "name": "grantedActionsBitmap", - "type": "uint16" + "name": "deadline", + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes4[]", - "name": "handlerForSelectors", - "type": "bytes4[]" + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.FunctionPermission[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "roleHash", - "type": "bytes32" + ] } ], - "name": "getAuthorizedWallets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getBroadcasters", - "outputs": [ + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", + "components": [ + { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", + "components": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "releaseTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", + "components": [ + { + "name": "requester", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "gasLimit", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "operationType", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "executionParams", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", + "components": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "erc20TokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "erc20TokenAmount", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", + "components": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "message", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getActiveRolePermissions", + "inputs": [ + { + "name": "roleHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "tuple[]", + "internalType": "struct EngineBlox.FunctionPermission[]", + "components": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "grantedActionsBitmap", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "handlerForSelectors", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getAuthorizedWallets", "inputs": [ { - "internalType": "bytes4", - "name": "functionSelector", - "type": "bytes4" + "name": "roleHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBroadcasters", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getEthBalance", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" } ], + "stateMutability": "view" + }, + { + "type": "function", "name": "getFunctionSchema", + "inputs": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + } + ], "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.FunctionSchema", "components": [ { - "internalType": "string", "name": "functionSignature", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "string", "name": "operationName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "uint16", "name": "supportedActionsBitmap", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "bool", "name": "enforceHandlerRelations", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" + }, + { + "name": "isGrantRevocable", + "type": "bool", + "internalType": "bool" }, { - "internalType": "bytes4[]", "name": "handlerForSelectors", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } - ], - "internalType": "struct EngineBlox.FunctionSchema", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getFunctionWhitelistTargets", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getFunctionWhitelistTargets", "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getHooks", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "getHooks", "outputs": [ { - "internalType": "address[]", "name": "hooks", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getPendingTransactions", + "inputs": [], "outputs": [ { - "internalType": "uint256[]", "name": "", - "type": "uint256[]" + "type": "uint256[]", + "internalType": "uint256[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getRecovery", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getRole", "outputs": [ { - "internalType": "string", "name": "roleName", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes32", "name": "hash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", "name": "maxWallets", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "walletCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bool", "name": "isProtected", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getSignerNonce", "inputs": [ { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getSignerNonce", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedFunctions", + "inputs": [], "outputs": [ { - "internalType": "bytes4[]", "name": "", - "type": "bytes4[]" + "type": "bytes4[]", + "internalType": "bytes4[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedOperationTypes", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSupportedRoles", + "inputs": [], "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getTimeLockPeriodSec", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTokenBalance", "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" } ], + "stateMutability": "view" + }, + { + "type": "function", "name": "getTransaction", + "inputs": [ + { + "name": "txId", + "type": "uint256", + "internalType": "uint256" + } + ], "outputs": [ { + "name": "", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "", - "type": "tuple" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTransactionHistory", "inputs": [ { - "internalType": "uint256", "name": "fromTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "toTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "getTransactionHistory", "outputs": [ { + "name": "", + "type": "tuple[]", + "internalType": "struct EngineBlox.TxRecord[]", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord[]", - "name": "", - "type": "tuple[]" + ] } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getWalletRoles", "inputs": [ { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getWalletRoles", "outputs": [ { - "internalType": "bytes32[]", "name": "", - "type": "bytes32[]" + "type": "bytes32[]", + "internalType": "bytes32[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "hasRole", "inputs": [ { - "internalType": "bytes32", "name": "roleHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "wallet", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "hasRole", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "initialOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "broadcaster", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + }, + { + "name": "timeLockPeriodSec", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "eventForwarder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", "name": "initialized", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "owner", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "supportsInterface", "inputs": [ { - "internalType": "bytes4", "name": "interfaceId", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } ], - "name": "supportsInterface", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "transferOwnershipApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "transferOwnershipCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOwnershipDelayedApproval", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "transferOwnershipDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "transferOwnershipRequest", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterApprovalWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterApprovalWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellation", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterCancellation", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterCancellationWithMetaTx", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateBroadcasterCancellationWithMetaTx", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterDelayedApproval", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "updateBroadcasterDelayedApproval", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateBroadcasterRequest", "inputs": [ { - "internalType": "address", "name": "newBroadcaster", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "location", - "type": "uint256" + "name": "currentBroadcaster", + "type": "address", + "internalType": "address" } ], - "name": "updateBroadcasterRequest", "outputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateRecoveryRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateRecoveryRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateTimeLockRequestAndApprove", "inputs": [ { + "name": "metaTx", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTransaction", "components": [ { + "name": "txRecord", + "type": "tuple", + "internalType": "struct EngineBlox.TxRecord", "components": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "enum EngineBlox.TxStatus", "name": "status", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxStatus" }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.TxParams", "components": [ { - "internalType": "address", "name": "requester", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "value", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "gasLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "operationType", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes4", "name": "executionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes", "name": "executionParams", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", - "name": "result", - "type": "bytes" + "name": "resultHash", + "type": "bytes32", + "internalType": "bytes32" }, { + "name": "payment", + "type": "tuple", + "internalType": "struct EngineBlox.PaymentDetails", "components": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "nativeTokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "erc20TokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "erc20TokenAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" + ] } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" + ] }, { + "name": "params", + "type": "tuple", + "internalType": "struct EngineBlox.MetaTxParams", "components": [ { - "internalType": "uint256", "name": "chainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "nonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "handlerContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "handlerSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "enum EngineBlox.TxAction", "name": "action", - "type": "uint8" + "type": "uint8", + "internalType": "enum EngineBlox.TxAction" }, { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" + ] }, { - "internalType": "bytes32", "name": "message", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "data", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + ] } ], - "name": "updateTimeLockRequestAndApprove", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "withdrawEthRequest", "inputs": [ { - "internalType": "address", - "name": "initialOwner", - "type": "address" + "name": "to", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "broadcaster", - "type": "address" - }, + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ { - "internalType": "address", - "name": "recovery", - "type": "address" + "name": "txId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "withdrawTokenRequest", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "timeLockPeriodSec", - "type": "uint256" + "name": "to", + "type": "address", + "internalType": "address" }, { - "internalType": "address", - "name": "eventForwarder", - "type": "address" + "name": "amount", + "type": "uint256", + "internalType": "uint256" } ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getEthBalance", "outputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "txId", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "event", + "name": "ComponentEvent", "inputs": [ { - "internalType": "address", - "name": "token", - "type": "address" + "name": "functionSelector", + "type": "bytes4", + "indexed": true, + "internalType": "bytes4" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], - "name": "getTokenBalance", - "outputs": [ + "anonymous": false + }, + { + "type": "event", + "name": "EthReceived", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "EthWithdrawn", "inputs": [ { - "internalType": "address", "name": "to", - "type": "address" + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "name": "withdrawEthRequest", - "outputs": [ + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" } ], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "TokenWithdrawn", "inputs": [ { - "internalType": "address", "name": "token", - "type": "address" + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", "name": "to", - "type": "address" + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "name": "withdrawTokenRequest", - "outputs": [ + "anonymous": false + }, + { + "type": "error", + "name": "ArrayLengthMismatch", + "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "array1Length", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "array2Length", + "type": "uint256", + "internalType": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "ContractFunctionMustBeProtected", "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "approveWithdrawalAfterDelay", - "outputs": [ + ] + }, + { + "type": "error", + "name": "InvalidAddress", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "provided", + "type": "address", + "internalType": "address" } - ], - "stateMutability": "nonpayable", - "type": "function" + ] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] }, { + "type": "error", + "name": "InvalidOperation", "inputs": [ { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - }, - { - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "bytes4", - "name": "executionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "erc20TokenAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" - } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "metaTx", - "type": "tuple" + "name": "item", + "type": "address", + "internalType": "address" } - ], - "name": "approveWithdrawalWithMetaTx", - "outputs": [ + ] + }, + { + "type": "error", + "name": "InvalidTimeLockPeriod", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "provided", + "type": "uint256", + "internalType": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "ItemAlreadyExists", "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "item", + "type": "address", + "internalType": "address" } - ], - "name": "cancelWithdrawal", - "outputs": [ + ] + }, + { + "type": "error", + "name": "ItemNotFound", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "item", + "type": "address", + "internalType": "address" } - ], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "MetaTxHandlerContractMismatch", "inputs": [ { - "internalType": "address payable", - "name": "to", - "type": "address" + "name": "signedContract", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "entryContract", + "type": "address", + "internalType": "address" } - ], - "name": "executeWithdrawEth", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "MetaTxHandlerSelectorMismatch", "inputs": [ { - "internalType": "address", - "name": "token", - "type": "address" + "name": "signedSelector", + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "address", - "name": "to", - "type": "address" + "name": "entrySelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + }, + { + "type": "error", + "name": "NoPermission", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "NotSupported", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCallableByContract", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "contractAddress", + "type": "address", + "internalType": "address" } - ], - "name": "executeWithdrawToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ] }, { + "type": "error", + "name": "PendingSecureRequest", + "inputs": [] + }, + { + "type": "error", + "name": "RangeSizeExceeded", "inputs": [ { - "internalType": "uint256", - "name": "txId", - "type": "uint256" + "name": "rangeSize", + "type": "uint256", + "internalType": "uint256" }, { - "components": [ - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - } - ], - "internalType": "struct SimpleVault.VaultMetaTxParams", - "name": "metaTxParams", - "type": "tuple" + "name": "maxRangeSize", + "type": "uint256", + "internalType": "uint256" } - ], - "name": "generateUnsignedWithdrawalMetaTxApproval", - "outputs": [ + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "ResourceNotFound", + "inputs": [ { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - }, - { - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - }, - { - "internalType": "bytes4", - "name": "executionSelector", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "executionParams", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.TxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nativeTokenAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "erc20TokenAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "erc20TokenAmount", - "type": "uint256" - } - ], - "internalType": "struct EngineBlox.PaymentDetails", - "name": "payment", - "type": "tuple" - } - ], - "internalType": "struct EngineBlox.TxRecord", - "name": "txRecord", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "message", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct EngineBlox.MetaTransaction", - "name": "", - "type": "tuple" + "name": "resourceId", + "type": "bytes32", + "internalType": "bytes32" } - ], - "stateMutability": "view", - "type": "function" + ] + }, + { + "type": "error", + "name": "RestrictedOwner", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "RestrictedOwnerRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "RestrictedRecovery", + "inputs": [ + { + "name": "caller", + "type": "address", + "internalType": "address" + }, + { + "name": "recovery", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] } ] \ No newline at end of file diff --git a/sdk/typescript/contracts/core/SecureOwnable.tsx b/sdk/typescript/contracts/core/SecureOwnable.tsx index 460ee4d5..b75833be 100644 --- a/sdk/typescript/contracts/core/SecureOwnable.tsx +++ b/sdk/typescript/contracts/core/SecureOwnable.tsx @@ -42,8 +42,8 @@ export class SecureOwnable extends BaseStateMachine implements ISecureOwnable { } // Broadcaster Management - async updateBroadcasterRequest(newBroadcaster: Address, location: bigint, options: TransactionOptions): Promise { - return this.executeWriteContract('updateBroadcasterRequest', [newBroadcaster, location], options); + async updateBroadcasterRequest(newBroadcaster: Address, currentBroadcaster: Address, options: TransactionOptions): Promise { + return this.executeWriteContract('updateBroadcasterRequest', [newBroadcaster, currentBroadcaster], options); } async updateBroadcasterDelayedApproval(txId: bigint, options: TransactionOptions): Promise { diff --git a/sdk/typescript/docs/api-reference.md b/sdk/typescript/docs/api-reference.md index e94432b6..9c961d8c 100644 --- a/sdk/typescript/docs/api-reference.md +++ b/sdk/typescript/docs/api-reference.md @@ -74,13 +74,14 @@ const result = await secureOwnable.transferOwnershipRequest({ from: account.addr ##### `transferOwnershipDelayedApproval(txId: bigint, options?: TransactionOptions): Promise` Approves a pending ownership transfer after the time lock. Callable by **current** owner or **current** recovery; execution still assigns owner to the address snapshotted at request time (may differ from `getRecovery()` at approval time). -##### `updateBroadcasterRequest(newBroadcaster: Address, location: bigint, options?: TransactionOptions): Promise` -Requests a broadcaster update at the given index (location in the broadcaster role set). +##### `updateBroadcasterRequest(newBroadcaster: Address, currentBroadcaster: Address, options?: TransactionOptions): Promise` +Requests a broadcaster update by address pair: replace (`currentBroadcaster` → `newBroadcaster`), add (`currentBroadcaster` = zero), or revoke (`newBroadcaster` = zero). ```typescript +const [current] = await secureOwnable.getBroadcasters() const result = await secureOwnable.updateBroadcasterRequest( - '0x...', - locationIndex, + '0x...', // new broadcaster (or zero to revoke) + current, // existing broadcaster (or zero to add) { from: account.address } ) ``` diff --git a/sdk/typescript/docs/examples-basic.md b/sdk/typescript/docs/examples-basic.md index 7e0bd6ce..e52533eb 100644 --- a/sdk/typescript/docs/examples-basic.md +++ b/sdk/typescript/docs/examples-basic.md @@ -120,12 +120,12 @@ async function transferOwnership(txIdForApproval: bigint) { ### **Administrative Updates** ```typescript -// Update broadcaster (time-delay workflow): pass new address and index in broadcaster set -async function updateBroadcaster(newBroadcaster: Address, locationIndex: bigint) { +// Update broadcaster (time-delay workflow): pass new address and current broadcaster to replace +async function updateBroadcaster(newBroadcaster: Address, currentBroadcaster: Address) { try { const result = await secureOwnable.updateBroadcasterRequest( newBroadcaster, - locationIndex, + currentBroadcaster, { from: account.address } ) console.log('Broadcaster update requested:', result.hash) diff --git a/sdk/typescript/docs/meta-transactions.md b/sdk/typescript/docs/meta-transactions.md index 8ebb9a37..16776b09 100644 --- a/sdk/typescript/docs/meta-transactions.md +++ b/sdk/typescript/docs/meta-transactions.md @@ -547,9 +547,9 @@ if (!isAddress(requesterAddress)) { throw new Error('Invalid requester address'); } -// Validate deadlines -if (deadline <= BigInt(Math.floor(Date.now() / 1000))) { - throw new Error('Deadline must be in the future'); +// Validate deadlines (matches on-chain `validateMetaTxDeadline`: valid while `block.timestamp <= deadline`) +if (deadline < BigInt(Math.floor(Date.now() / 1000))) { + throw new Error('Deadline is in the past'); } // Validate gas limits diff --git a/sdk/typescript/docs/runtime-rbac.md b/sdk/typescript/docs/runtime-rbac.md index e879c610..b1e67862 100644 --- a/sdk/typescript/docs/runtime-rbac.md +++ b/sdk/typescript/docs/runtime-rbac.md @@ -498,7 +498,7 @@ describe('RuntimeRBAC Integration', () => { **Solution**: Ensure `handlerForSelectors` array in function permission matches the function schema's `handlerForSelectors` array. Use `bytes4(0)` for execution selectors. ### **Issue: `ResourceAlreadyExists` when adding a function to a role** -**Solution**: Re-adding the same selector with **`RoleConfigActionType.ADD_FUNCTION_TO_ROLE`** hits the same **`ResourceAlreadyExists`** revert as a direct **`addFunctionToRole`** would when the selector is already on the role. To change the stored permission bitmap or **`handlerForSelectors`**, include **`RoleConfigActionType.REMOVE_FUNCTION_FROM_ROLE`** in a **`roleConfigBatchRequestAndApprove` → `executeRoleConfigBatch`** flow first, then **`ADD_FUNCTION_TO_ROLE`** with the new values—the engine applies removal through that batch path; there is no supported separate public **`removeFunctionFromRole`** entrypoint for integrators. Note: **protected schemas** cannot be removed from roles (`CannotModifyProtected`), so grants of protected selectors are effectively permanent unless the role itself is removed. +**Solution**: Re-adding the same selector with **`RoleConfigActionType.ADD_FUNCTION_TO_ROLE`** hits the same **`ResourceAlreadyExists`** revert as a direct **`addFunctionToRole`** would when the selector is already on the role. To change the stored permission bitmap or **`handlerForSelectors`**, include **`RoleConfigActionType.REMOVE_FUNCTION_FROM_ROLE`** in a **`roleConfigBatchRequestAndApprove` → `executeRoleConfigBatch`** flow first, then **`ADD_FUNCTION_TO_ROLE`** with the new values—the engine applies removal through that batch path; there is no supported separate public **`removeFunctionFromRole`** entrypoint for integrators. Note: for registered selectors, **`removeFunctionFromRole`** reverts with **`GrantNotRevocable`** when the schema's **`isGrantRevocable`** is false; when true, grants may be removed from protected roles (OWNER / BROADCASTER / RECOVERY) as well as custom roles. ## 📚 **Related Documentation** diff --git a/sdk/typescript/docs/secure-ownable.md b/sdk/typescript/docs/secure-ownable.md index 976fa39e..ccb388a6 100644 --- a/sdk/typescript/docs/secure-ownable.md +++ b/sdk/typescript/docs/secure-ownable.md @@ -74,10 +74,11 @@ console.log('Ownership transfer approved:', txHash) #### **Broadcaster Management** ```typescript -// Request broadcaster update (location = index in broadcaster role's wallet set) +// Request broadcaster update (replace / add / revoke by address pair) +const [currentBroadcaster] = await secureOwnable.getBroadcasters() const txHash = await secureOwnable.updateBroadcasterRequest( - '0x...', // new broadcaster address (or zero to revoke at location) - locationIndex, // bigint: index in getBroadcasters() + '0x...', // new broadcaster (or zero to revoke currentBroadcaster) + currentBroadcaster, // existing to replace/revoke; zero address to add { from: account.address } ) ``` @@ -155,10 +156,10 @@ const txHash = await secureOwnable.updateRecoveryRequestAndApprove( ### **Hybrid Workflow (Broadcaster Update)** ```typescript -// Option 1: Time-delay request (newBroadcaster + location index) +// Option 1: Time-delay request (newBroadcaster + currentBroadcaster) const requestTx = await secureOwnable.updateBroadcasterRequest( newBroadcaster, - locationIndex, + currentBroadcaster, { from: account.address } ) diff --git a/sdk/typescript/docs/state-abstraction-vs-account-abstraction.md b/sdk/typescript/docs/state-abstraction-vs-account-abstraction.md index 0d67fe48..8703b3c5 100644 --- a/sdk/typescript/docs/state-abstraction-vs-account-abstraction.md +++ b/sdk/typescript/docs/state-abstraction-vs-account-abstraction.md @@ -114,7 +114,7 @@ struct SecureOperationState { TxStatus status; TxParams params; bytes32 message; - bytes result; + bytes32 resultHash; PaymentDetails payment; } ``` diff --git a/sdk/typescript/docs/state-abstraction.md b/sdk/typescript/docs/state-abstraction.md index 4a61a6e8..c8edab41 100644 --- a/sdk/typescript/docs/state-abstraction.md +++ b/sdk/typescript/docs/state-abstraction.md @@ -57,7 +57,7 @@ struct SecureOperationState { TxStatus status; // Current state TxParams params; // Operation parameters bytes32 message; // EIP-712 message hash - bytes result; // Execution result + bytes32 resultHash; // keccak256(execution returndata); full bytes in TransactionEvent PaymentDetails payment; // Payment information } ``` diff --git a/sdk/typescript/docs/state-machine-engine.md b/sdk/typescript/docs/state-machine-engine.md index 0b939a7e..6b6e61c1 100644 --- a/sdk/typescript/docs/state-machine-engine.md +++ b/sdk/typescript/docs/state-machine-engine.md @@ -68,7 +68,7 @@ struct SecureOperationState { **Key sub-structures:** -- **`TxRecord`** — `txId`, `releaseTime`, `status` (`TxStatus` enum), `params` (`TxParams`), `message`, `result`, `payment` (`PaymentDetails`). The **`result`** field is **not** full callee returndata: `EngineBlox.executeTransaction` runs the target via **`_callWithBoundedReturndata`**, which copies at most the first **`MAX_RESULT_PREVIEW_BYTES`** (32 KiB; see `contracts/core/lib/EngineBlox.sol`) of returndata into `TxRecord.result`. Anything beyond that is discarded on-chain. SDK reads such as **`BaseStateMachine.getTransaction()`** and **`getTransactionHistory()`** return that stored record as-is—do not assume **`result`** contains the complete ABI return payload for large responses. +- **`TxRecord`** — `txId`, `releaseTime`, `status` (`TxStatus` enum), `params` (`TxParams`), `message`, `resultHash`, `payment` (`PaymentDetails`). **`resultHash`** is `bytes32(0)` when execution returndata is empty, else `keccak256(returndata)`. Full returndata is emitted in **`TxExecutionResult`** on terminal execution (`COMPLETED` / `FAILED`). - **`Role`** — `roleName`, `roleHash`, `authorizedWallets` (enumerable set), per-selector `functionPermissions`, `maxWallets`, `walletCount`, `isProtected`. - **`FunctionSchema`** — `functionSignature`, `functionSelector`, `operationType`, `operationName`, `supportedActionsBitmap`, `enforceHandlerRelations`, `isProtected`, `handlerForSelectors`. - **`FunctionPermission`** — `functionSelector`, `grantedActionsBitmap` (9-bit `TxAction` bitmap), `handlerForSelectors`. @@ -96,8 +96,6 @@ UNDEFINED ─── (request) ───► PENDING ─┬── (delayed approve │ └──► revert (atomic rollback) ``` -`TxStatus` also defines **`REJECTED`**, but **`EngineBlox` never assigns it** (there is no “reject” transition in the diagram above). The member is **intentionally unused** in the current engine: abandonment is **`CANCELLED`**; failed execution is **`FAILED`**. **`REJECTED`** stays in the enum for **ABI / layout stability** and **reserved** for possible future protocol or extension behavior — see NatSpec on `TxStatus` in `contracts/core/lib/EngineBlox.sol`. - | From | To | Trigger | |------|----|---------| | `UNDEFINED` | `PENDING` | `_txRequest` — creates a `TxRecord` with `txId = self.txCounter + 1`, stores it, increments `txCounter`, sets `releaseTime = block.timestamp + timeLockPeriodSec`, adds to `pendingTransactionsSet`. | @@ -109,7 +107,7 @@ UNDEFINED ─── (request) ───► PENDING ─┬── (delayed approve | `EXECUTING` | `FAILED` | Main call returns `success == false`; `_completeTransaction` records the failure. | | `PENDING` | `CANCELLED` | `txCancellation` (direct) or `txCancellationWithMetaTx` (meta; wrapper selector in `MetaTxParams.handlerSelector`). | -There is **no** `APPROVED` or `EXECUTED` status in the enum — the engine transitions directly from `PENDING` to `EXECUTING`. There is also **no** runtime use of **`TxStatus.REJECTED`** (see note under the diagram). +There is **no** `APPROVED` or `EXECUTED` status in the enum — the engine transitions directly from `PENDING` to `EXECUTING`. ### 2. Role Management @@ -118,7 +116,7 @@ Roles are created and configured via `EngineBlox` library functions (exposed thr - **`createRole`** — registers a new role with `roleName`, `maxWallets`, `isProtected`. - **`removeRole`** — deletes the role, revokes all wallets, removes all function permissions. Protected roles cannot be removed. - **`assignWallet` / `revokeWallet` / `updateWallet`** — manage membership. -- **`addFunctionToRole` / `removeFunctionFromRole`** — grant or revoke per-selector `FunctionPermission` entries. +- **`addFunctionToRole` / `removeFunctionFromRole`** — grant or revoke per-selector `FunctionPermission` entries. For registered selectors, `removeFunctionFromRole` reverts with `GrantNotRevocable` when the schema's `isGrantRevocable` is false; when true, grants may be removed from any role, including protected system roles. Schema `isProtected` governs `unregisterFunction`, not grant removal. ### 3. Operation Types @@ -146,13 +144,13 @@ Public request entrypoints take a **handler selector** (`bytes4 handlerSelector` ### 3. **Transaction approval (delayed)** -`txDelayedApproval(SecureOperationState, uint256 txId, bytes4 handlerSelector)` — validates `PENDING`, checks permissions for `executionSelector` from the stored record **and** `handlerSelector`, enforces `releaseTime` (timelock), sets `EXECUTING`, runs `executeTransaction`, finalizes via `_completeTransaction`. +`txDelayedApproval(SecureOperationState, uint256 txId, bytes4 handlerSelector)` — validates `PENDING`, checks permissions for `executionSelector` from the stored record **and** `handlerSelector`, enforces `releaseTime` (timelock), **`_validateTargetWhitelist` before any external call**, sets `EXECUTING`, runs `executeTransaction`, finalizes via `_completeTransaction` (status/resultHash/pending set; returndata in event). ### 4. **Transaction approval (meta-tx)** `txApprovalWithMetaTx(SecureOperationState, MetaTransaction metaTx)` — public entrypoint: validates `SIGN_META_APPROVE`, checks permissions using `metaTx.txRecord.params.executionSelector` and **`metaTx.params.handlerSelector`** (wrapper selector in the typed-data payload), then returns `_txApprovalWithMetaTx(self, metaTx)`. -`_txApprovalWithMetaTx(SecureOperationState, MetaTransaction metaTx)` — private: verifies EIP-712 (including `handlerSelector` / handler contract binding where applicable), increments signer nonce, sets `EXECUTING`, executes. **`validateReleaseTime` is not used** — timelock is **not** enforced on meta approval (by design). +`_txApprovalWithMetaTx(SecureOperationState, MetaTransaction metaTx)` — private: verifies EIP-712 (including `handlerSelector` / handler contract binding where applicable), **`_validateTargetWhitelist` before any external call**, increments signer nonce, sets `EXECUTING`, executes. **`validateReleaseTime` is not used** — timelock is **not** enforced on meta approval (by design). ### 5. **Request and approve (one-step meta-tx)** @@ -160,7 +158,7 @@ Public request entrypoints take a **handler selector** (`bytes4 handlerSelector` ### 6. **Cancellation** -`txCancellation(SecureOperationState, uint256 txId, bytes4 handlerSelector)` — validates `PENDING`, checks permissions for the stored `executionSelector` and `handlerSelector`, then cancels and removes from `pendingTransactionsSet`. +`txCancellation(SecureOperationState, uint256 txId, bytes4 handlerSelector)` — validates `PENDING`, checks permissions for the stored `executionSelector` and `handlerSelector`, then cancels and removes from `pendingTransactionsSet` (**no** target whitelist re-check: a pending tx can be cancelled after the target was removed from the whitelist). `txCancellationWithMetaTx(SecureOperationState, MetaTransaction metaTx)` — validates `SIGN_META_CANCEL`, permissions using **`metaTx.params.handlerSelector`**, record match, signature, then cancels the pending tx. @@ -194,11 +192,16 @@ event TransactionEvent( TxStatus status, address indexed requester, address target, - bytes32 operationType + bytes32 operationType, + bytes32 resultHash ); + +event TxExecutionResult(uint256 indexed txId, bytes result); ``` -The value in **`functionHash`** is the same **`bytes4`** passed into **`logTxEvent`** (the execution selector for that lifecycle step); the ABI names the indexed topic **`functionHash`**, not `functionSelector`. **`requester`** is **indexed** so it appears as a log topic for filters. Generated ABIs (for example **`sdk/typescript/abi/EngineBlox.abi.json`**) and viem **`watchContractEvent` / `getLogs`** `args` use those names—filter on **`functionHash`** and **`requester`**, not legacy `functionSelector` on this event. +The value in **`functionHash`** is the same **`bytes4`** passed into **`logTxEvent`** (the execution selector for that lifecycle step). **`resultHash`** is zero on request/cancel; on **`COMPLETED`** / **`FAILED`** it is set before **`TxExecutionResult`** is emitted in the same transaction. Verify off-chain: `keccak256(TxExecutionResult.result) == resultHash` from `getTransaction(txId)`. + +Generated ABIs (for example **`sdk/typescript/abi/EngineBlox.abi.json`**) and viem **`watchContractEvent` / `getLogs`** use those names. Lifecycle topic: `TransactionEvent(uint256,bytes4,uint8,address,address,bytes32,bytes32)`. Returndata topic: `TxExecutionResult(uint256,bytes)`. This is the **authoritative** audit trail for all transaction state changes. Components also emit **`ComponentEvent(bytes4, bytes)`** for config changes (guard config, RBAC config). diff --git a/sdk/typescript/interfaces/core.security.index.tsx b/sdk/typescript/interfaces/core.security.index.tsx index af36ffe3..3dbd9043 100644 --- a/sdk/typescript/interfaces/core.security.index.tsx +++ b/sdk/typescript/interfaces/core.security.index.tsx @@ -67,7 +67,7 @@ export interface ISecureOwnable { transferOwnershipCancellationWithMetaTx(metaTx: MetaTransaction, options: TransactionOptions): Promise; // Broadcaster Management - updateBroadcasterRequest(newBroadcaster: Address, location: bigint, options: TransactionOptions): Promise; + updateBroadcasterRequest(newBroadcaster: Address, currentBroadcaster: Address, options: TransactionOptions): Promise; updateBroadcasterDelayedApproval(txId: bigint, options: TransactionOptions): Promise; updateBroadcasterApprovalWithMetaTx(metaTx: MetaTransaction, options: TransactionOptions): Promise; updateBroadcasterCancellation(txId: bigint, options: TransactionOptions): Promise; diff --git a/sdk/typescript/interfaces/lib.index.tsx b/sdk/typescript/interfaces/lib.index.tsx index 2af8abeb..93d3c0c6 100644 --- a/sdk/typescript/interfaces/lib.index.tsx +++ b/sdk/typescript/interfaces/lib.index.tsx @@ -39,7 +39,7 @@ export interface TxRecord { status: TxStatus; params: TxParams; message: Hex; - result: Hex; + resultHash: Hex; payment: PaymentDetails; } diff --git a/sdk/typescript/lib/EngineBlox.tsx b/sdk/typescript/lib/EngineBlox.tsx index 4da7d3bf..9b4fa4f6 100644 --- a/sdk/typescript/lib/EngineBlox.tsx +++ b/sdk/typescript/lib/EngineBlox.tsx @@ -45,12 +45,6 @@ export class EngineBlox { */ static readonly VERSION: string = "1.0.0"; - /** - * Maximum bytes retained from callee returndata on guarded execution (`EngineBlox.executeTransaction` path). - * Matches `EngineBlox.MAX_RESULT_PREVIEW_BYTES` (32 KiB). - */ - static readonly MAX_RESULT_PREVIEW_BYTES: bigint = 32768n; - // ============ FUNCTION SELECTORS ============ /** @@ -200,6 +194,16 @@ export class EngineBlox { return actions; } + + /** + * Hash of execution returndata (`bytes32(0)` when empty). Matches `EngineBlox.executionResultHash` on-chain. + */ + static executionResultHash(executionResult: Hex): Hex { + if (!executionResult || executionResult === '0x') { + return `0x${'0'.repeat(64)}` as Hex; + } + return k256(executionResult) as Hex; + } } /** diff --git a/sdk/typescript/types/core.security.index.tsx b/sdk/typescript/types/core.security.index.tsx index a922d229..f8e6e522 100644 --- a/sdk/typescript/types/core.security.index.tsx +++ b/sdk/typescript/types/core.security.index.tsx @@ -21,7 +21,7 @@ export type OperationType = typeof OPERATION_TYPES[keyof typeof OPERATION_TYPES] export const FUNCTION_SELECTORS = { // Execution selectors TRANSFER_OWNERSHIP_SELECTOR: keccak256(new TextEncoder().encode("executeTransferOwnership(address)")).slice(0, 10) as Hex, - UPDATE_BROADCASTER_SELECTOR: keccak256(new TextEncoder().encode("executeBroadcasterUpdate(address,uint256)")).slice(0, 10) as Hex, + UPDATE_BROADCASTER_SELECTOR: keccak256(new TextEncoder().encode("executeBroadcasterUpdate(address,address)")).slice(0, 10) as Hex, UPDATE_RECOVERY_SELECTOR: keccak256(new TextEncoder().encode("executeRecoveryUpdate(address)")).slice(0, 10) as Hex, UPDATE_TIMELOCK_SELECTOR: keccak256(new TextEncoder().encode("executeTimeLockUpdate(uint256)")).slice(0, 10) as Hex, @@ -29,7 +29,7 @@ export const FUNCTION_SELECTORS = { TRANSFER_OWNERSHIP_REQUEST_SELECTOR: keccak256(new TextEncoder().encode("transferOwnershipRequest()")).slice(0, 10) as Hex, TRANSFER_OWNERSHIP_DELAYED_APPROVAL_SELECTOR: keccak256(new TextEncoder().encode("transferOwnershipDelayedApproval(uint256)")).slice(0, 10) as Hex, TRANSFER_OWNERSHIP_CANCELLATION_SELECTOR: keccak256(new TextEncoder().encode("transferOwnershipCancellation(uint256)")).slice(0, 10) as Hex, - UPDATE_BROADCASTER_REQUEST_SELECTOR: keccak256(new TextEncoder().encode("updateBroadcasterRequest(address,uint256)")).slice(0, 10) as Hex, + UPDATE_BROADCASTER_REQUEST_SELECTOR: keccak256(new TextEncoder().encode("updateBroadcasterRequest(address,address)")).slice(0, 10) as Hex, UPDATE_BROADCASTER_DELAYED_APPROVAL_SELECTOR: keccak256(new TextEncoder().encode("updateBroadcasterDelayedApproval(uint256)")).slice(0, 10) as Hex, UPDATE_BROADCASTER_CANCELLATION_SELECTOR: keccak256(new TextEncoder().encode("updateBroadcasterCancellation(uint256)")).slice(0, 10) as Hex, diff --git a/sdk/typescript/types/lib.index.tsx b/sdk/typescript/types/lib.index.tsx index f3f94d48..e156b806 100644 --- a/sdk/typescript/types/lib.index.tsx +++ b/sdk/typescript/types/lib.index.tsx @@ -17,8 +17,7 @@ export const TxStatus = { PROCESSING_PAYMENT: 3, CANCELLED: 4, COMPLETED: 5, - FAILED: 6, - REJECTED: 7 + FAILED: 6 } as const; export type TxStatus = typeof TxStatus[keyof typeof TxStatus]; diff --git a/sdk/typescript/utils/contract-errors.ts b/sdk/typescript/utils/contract-errors.ts index 00c83694..7a0c4f8e 100644 --- a/sdk/typescript/utils/contract-errors.ts +++ b/sdk/typescript/utils/contract-errors.ts @@ -69,11 +69,6 @@ export interface TimeLockPeriodZeroError extends ContractError { params: { provided: string } } -export interface DeadlineInPastError extends ContractError { - name: 'DeadlineInPast' - params: { deadline: string; currentTime: string } -} - export interface MetaTxExpiredError extends ContractError { name: 'MetaTxExpired' params: { deadline: string; currentTime: string } @@ -506,7 +501,6 @@ export type GuardianContractError = | NotNewAddressError | InvalidTimeLockPeriodError | TimeLockPeriodZeroError - | DeadlineInPastError | MetaTxExpiredError | BeforeReleaseTimeError | NewTimelockSameError @@ -619,11 +613,6 @@ export const ERROR_SIGNATURES: Record `TimeLockPeriodZero: Time lock period must be greater than zero` }, - '0x0e6fd6e4': { - name: 'DeadlineInPast', - params: ['deadline', 'currentTime'], - userMessage: () => `DeadlineInPast: Transaction deadline has passed` - }, '0x0ce5c69c': { name: 'MetaTxExpired', params: ['deadline', 'currentTime'], diff --git a/sdk/typescript/utils/interface-ids.tsx b/sdk/typescript/utils/interface-ids.tsx index 6853bfb0..70d848fe 100644 --- a/sdk/typescript/utils/interface-ids.tsx +++ b/sdk/typescript/utils/interface-ids.tsx @@ -56,7 +56,7 @@ export const INTERFACE_IDS = { 'transferOwnershipApprovalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))', 'transferOwnershipCancellation(uint256)', 'transferOwnershipCancellationWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))', - 'updateBroadcasterRequest(address,uint256)', + 'updateBroadcasterRequest(address,address)', 'updateBroadcasterDelayedApproval(uint256)', 'updateBroadcasterApprovalWithMetaTx(((uint256,uint256,uint8,(address,address,uint256,uint256,bytes32,bytes4,bytes),bytes32,bytes,(address,uint256,address,uint256)),(uint256,uint256,address,bytes4,uint8,uint256,uint256,address),bytes32,bytes,bytes))', 'updateBroadcasterCancellation(uint256)', diff --git a/sdk/typescript/utils/validations.ts b/sdk/typescript/utils/validations.ts index 44e4695a..8c572592 100644 --- a/sdk/typescript/utils/validations.ts +++ b/sdk/typescript/utils/validations.ts @@ -76,18 +76,16 @@ export class ContractValidations { // Validate params await this.validateTxParams(txRecord.params); - // Validate result (must be empty for pending transactions) - if (txRecord.result) { - // First check if it's a valid hex string - if (!this.isValidHex(txRecord.result)) { - throw new Error("Invalid hex format for transaction result"); - } - - // For pending transactions, only allow '0x' or '0x0' or '0x000000' - const strippedResult = txRecord.result.replace(/^0x0*$/, '0x'); - if (strippedResult !== '0x') { - throw new Error("Result must be empty for pending transactions"); - } + // Validate resultHash (must be zero for pending transactions) + const zeroHash = '0x' + '0'.repeat(64); + if (!txRecord.resultHash) { + throw new Error("Missing transaction resultHash"); + } + if (!this.isValidHex(txRecord.resultHash) || txRecord.resultHash.length !== 66) { + throw new Error("Invalid hex format for transaction resultHash"); + } + if (txRecord.resultHash !== zeroHash) { + throw new Error("resultHash must be zero for pending transactions"); } // Validate payment details if present diff --git a/test/foundry/CommonBase.sol b/test/foundry/CommonBase.sol index 9598f692..a53e8245 100644 --- a/test/foundry/CommonBase.sol +++ b/test/foundry/CommonBase.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "forge-std/Test.sol"; import "../../contracts/core/lib/EngineBlox.sol"; @@ -52,7 +52,7 @@ contract CommonBase is Test { // Function selectors bytes4 public constant TRANSFER_OWNERSHIP_SELECTOR = bytes4(keccak256("executeTransferOwnership(address)")); - bytes4 public constant UPDATE_BROADCASTER_SELECTOR = bytes4(keccak256("executeBroadcasterUpdate(address,uint256)")); + bytes4 public constant UPDATE_BROADCASTER_SELECTOR = bytes4(keccak256("executeBroadcasterUpdate(address,address)")); bytes4 public constant UPDATE_RECOVERY_SELECTOR = bytes4(keccak256("executeRecoveryUpdate(address)")); bytes4 public constant UPDATE_TIMELOCK_SELECTOR = bytes4(keccak256("executeTimeLockUpdate(uint256)")); diff --git a/test/foundry/docs/ATTACK_VECTORS_CODEX.md b/test/foundry/docs/ATTACK_VECTORS_CODEX.md index e665ae88..972de706 100644 --- a/test/foundry/docs/ATTACK_VECTORS_CODEX.md +++ b/test/foundry/docs/ATTACK_VECTORS_CODEX.md @@ -3525,24 +3525,22 @@ Config batch meta-tx paths could carry non-zero payment fields and drain funds f --- -### 19.3 Bounded Returndata (DoS Prevention) +### 19.3 Returndata Storage (Accepted Risk) #### MEDIUM: Unbounded Returndata Storage in Tx Finalization - **ID**: `AUDIT-005` - **Finding**: AgentArena #5 -- **Location**: `EngineBlox.sol:executeTransaction`, `EngineBlox.sol:_callWithBoundedReturndata` -- **Severity**: MEDIUM -- **Status**: ✅ **PROTECTED** +- **Location**: `EngineBlox.sol:executeTransaction`, `EngineBlox.sol:_completeTransaction` +- **Severity**: MEDIUM (downgraded — accepted operational risk) +- **Status**: ⚪ **ACCEPTED RISK** (bounded cap reverted) **Description**: -A malicious whitelisted target returning very large returndata could blow up memory/gas during `_completeTransaction`, preventing finalization. +A whitelisted target returning very large returndata could increase memory/SSTORE cost during finalization; approval txs may revert or be expensive for the approver. -**Current Protection**: -- ✅ `_callWithBoundedReturndata` with low-level `call` and `returndatacopy` capped at `MAX_RESULT_PREVIEW_BYTES` (32 KiB) -- ✅ Only the bounded preview is stored in `TxRecord.result` - -**Related Tests**: -- `testFuzz_Finding5_MaxResultPreviewBytesIs32KiB` +**Rationale (no on-chain cap)**: +- Returndata size is bounded by callee `gasLimit` and block/tx gas; failed approvals revert atomically (tx stays `PENDING`, not stuck in `EXECUTING`). +- Targets are whitelist-trusted; approvers can cancel or simulate before approving. +- A 32 KiB preview cap was removed as defense-in-depth with incomplete audit value. --- @@ -3711,7 +3709,7 @@ No on-chain maximum for the timelock period. Extremely large values make delayed |---|---------|----------|-----------|--------|------| | 1 | Meta-tx handler spoofing | **High** | AUDIT-001 / MT-008 | ✅ Protected | `testFuzz_Finding1_HandlerSelectorMismatchRejected`, `testFuzz_Finding1_HandlerMismatch_GuardSignedRoleSubmitted`, `testFuzz_Finding1_HandlerContractMismatchRejected` | | 3 | Config batch payment rail | **Medium** | AUDIT-003 | ✅ Protected | `testFuzz_Finding3_RBACBatchRejectsNonZeroPayment`, `testFuzz_Finding3_GuardBatchRejectsNonZeroPayment`, `testFuzz_Finding3_RBACBatchRejectsNativeOnlyNonZeroPayment` | -| 5 | Unbounded returndata DoS | **Medium** | AUDIT-005 | ✅ Protected | `testFuzz_Finding5_MaxResultPreviewBytesIs32KiB` | +| 5 | Unbounded returndata DoS | **Medium** | AUDIT-005 | ⚪ Accepted risk | — | | 6 | Whitelist bypass via payments | **Medium** | AUDIT-006 | ✅ Protected | `testFuzz_Finding6_NonWhitelistedRecipientRejected`, `testFuzz_Finding6_NonWhitelistedERC20Rejected` | | 7 | Stale recovery snapshot | **Medium** | AUDIT-007 | ⚠️ Intentional | `testFuzz_Finding7_OwnershipTransferSnapshotsCurrentRecovery` | | 8 | Recovery update during pending ownership | **Medium** | AUDIT-008 | ⚠️ Intentional | `testFuzz_Finding8_RecoveryUpdateNotBlockedByPendingOwnership` | diff --git a/test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol b/test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol index 579ebed8..0aa5cb82 100644 --- a/test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol +++ b/test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; @@ -22,12 +22,11 @@ import "../helpers/PaymentTestHelper.sol"; * Coverage: * - Finding 1 (HIGH) : Meta-tx handler spoofing → entrypoint binding * - Finding 3 (MEDIUM) : Config batch payment rail → validateEmptyPayment - * - Finding 5 (MEDIUM) : Unbounded returndata DoS → bounded returndata constant * - Finding 6 (MEDIUM) : Whitelist bypass via payments → payout whitelists * - Finding 7 (MEDIUM) : Stale recovery in ownership transfer → snapshot semantics * - Finding 8 (MEDIUM) : Recovery update while ownership pending → documented behavior * - Finding 11 (LOW) : Whitelist skip for unregistered selectors → ResourceNotFound - * - Finding 14 (LOW) : Pending tx after whitelist delist → re-validate on cancel/complete + * - Finding 14 (LOW) : Pending tx after whitelist delist → approve reverts; cancel allowed without re-whitelist * - Finding 22 (LOW) : getTransactionHistory empty revert → returns [] * - Finding 24 (LOW) : Predictable txId DoS → sequential counter * - Finding 29 (LOW) : Gas limit zero → gasleft() convention @@ -399,18 +398,6 @@ contract AuditDerivedAttackVectorsFuzzTest is CommonBase { accountBlox.roleConfigBatchRequestAndApprove(metaTx); } - // ========================================================================= - // Finding 5 — Bounded returndata constant (MEDIUM) - // ========================================================================= - - /** - * @dev Audit Finding 5: MAX_RESULT_PREVIEW_BYTES is 32 KiB. Verify the - * on-chain constant matches the documented cap. - */ - function testFuzz_Finding5_MaxResultPreviewBytesIs32KiB() public pure { - assertEq(EngineBlox.MAX_RESULT_PREVIEW_BYTES, 32 * 1024); - } - // ========================================================================= // Finding 6 — Payment recipient whitelist enforcement (MEDIUM) // ========================================================================= @@ -594,11 +581,9 @@ contract AuditDerivedAttackVectorsFuzzTest is CommonBase { // ========================================================================= /** - * @dev Audit Finding 14: A pending tx created while `target` was whitelisted must - * still pass `_validateTargetWhitelist` on cancel/complete. Removing the - * whitelist entry after request must block both cancel and delayed approve. + * @dev Finding 14 (cancel path): after delist, cancellation must still succeed (no call to target). */ - function testFuzz_Finding14_PendingTxAfterWhitelistDelist_CancelReverts() public { + function testFuzz_Finding14_PendingTxAfterWhitelistDelist_CancelSucceeds() public { // Keep owner as msg.sender for all helper calls (expectRevert can interact poorly with one-shot prank) vm.startPrank(owner); paymentHelper.whitelistTargetForTesting(address(mockTarget), EngineBlox.NATIVE_TRANSFER_SELECTOR); @@ -616,20 +601,14 @@ contract AuditDerivedAttackVectorsFuzzTest is CommonBase { paymentHelper.removeTargetFromWhitelistForTesting(address(mockTarget), EngineBlox.NATIVE_TRANSFER_SELECTOR); - vm.expectRevert( - abi.encodeWithSelector( - SharedValidation.TargetNotWhitelisted.selector, - address(mockTarget), - EngineBlox.NATIVE_TRANSFER_SELECTOR - ) - ); paymentHelper.cancelTransaction(txId); + assertEq(uint8(paymentHelper.getTransaction(txId).status), uint8(EngineBlox.TxStatus.CANCELLED)); vm.stopPrank(); } /** - * @dev Finding 14 (approve path): after delist, delayed approval must revert at - * `_completeTransaction` → `_validateTargetWhitelist` even though the tx was valid at request. + * @dev Finding 14 (approve path): after delist, delayed approval must revert on + * `_validateTargetWhitelist` before any external execution. */ function testFuzz_Finding14_PendingTxAfterWhitelistDelist_ApproveReverts() public { vm.prank(owner); diff --git a/test/foundry/fuzz/ComprehensiveAccessControlFuzz.t.sol b/test/foundry/fuzz/ComprehensiveAccessControlFuzz.t.sol index 245bf677..e7d64d30 100644 --- a/test/foundry/fuzz/ComprehensiveAccessControlFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveAccessControlFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; @@ -77,7 +77,7 @@ contract ComprehensiveAccessControlFuzzTest is CommonBase { SharedValidation.CannotModifyProtected.selector, protectedRoleHash ); - assertEq(txRecord.result, expectedError); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); } /** @@ -176,7 +176,7 @@ contract ComprehensiveAccessControlFuzzTest is CommonBase { SharedValidation.CannotModifyProtected.selector, protectedRoleHash ); - assertEq(txRecord.result, expectedError); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); } // ============ PERMISSION ESCALATION ATTACKS ============ @@ -467,7 +467,7 @@ contract ComprehensiveAccessControlFuzzTest is CommonBase { maxWallets, maxWallets ); - assertEq(txRecord.result, expectedError); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); } /** @@ -617,7 +617,7 @@ contract ComprehensiveAccessControlFuzzTest is CommonBase { SharedValidation.ItemAlreadyExists.selector, wallet ); - assertEq(txRecord.result, expectedError); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); } /** diff --git a/test/foundry/fuzz/ComprehensiveCompositeFuzz.t.sol b/test/foundry/fuzz/ComprehensiveCompositeFuzz.t.sol index e6e671a4..c0bf94b4 100644 --- a/test/foundry/fuzz/ComprehensiveCompositeFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveCompositeFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; diff --git a/test/foundry/fuzz/ComprehensiveDefinitionSecurityFuzz.t.sol b/test/foundry/fuzz/ComprehensiveDefinitionSecurityFuzz.t.sol index 89b6d649..09fa0731 100644 --- a/test/foundry/fuzz/ComprehensiveDefinitionSecurityFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveDefinitionSecurityFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/lib/EngineBlox.sol"; @@ -96,6 +96,7 @@ contract ComprehensiveDefinitionSecurityFuzzTest is CommonBase { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -165,6 +166,7 @@ contract ComprehensiveDefinitionSecurityFuzzTest is CommonBase { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: emptyHandlers // Empty array }); @@ -204,6 +206,7 @@ contract ComprehensiveDefinitionSecurityFuzzTest is CommonBase { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -493,6 +496,7 @@ contract ComprehensiveDefinitionSecurityFuzzTest is CommonBase { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, // Protected because function exists in contract + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -562,6 +566,7 @@ contract ComprehensiveDefinitionSecurityFuzzTest is CommonBase { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: false, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors1 }); @@ -583,6 +588,7 @@ contract ComprehensiveDefinitionSecurityFuzzTest is CommonBase { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: false, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors2 }); @@ -674,6 +680,7 @@ contract ComprehensiveDefinitionSecurityFuzzTest is CommonBase { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: false, // Non-protected - should fail when enforcing + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -718,6 +725,7 @@ contract ComprehensiveDefinitionSecurityFuzzTest is CommonBase { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -756,6 +764,7 @@ contract ComprehensiveDefinitionSecurityFuzzTest is CommonBase { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: false, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -802,6 +811,7 @@ contract ComprehensiveDefinitionSecurityFuzzTest is CommonBase { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: false, // First non-protected - reverts with this selector + isGrantRevocable: true, handlerForSelectors: handlerForSelectors1 }); schemas[1] = EngineBlox.FunctionSchema({ @@ -812,6 +822,7 @@ contract ComprehensiveDefinitionSecurityFuzzTest is CommonBase { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors2 }); diff --git a/test/foundry/fuzz/ComprehensiveEIP712AndViewFuzz.t.sol b/test/foundry/fuzz/ComprehensiveEIP712AndViewFuzz.t.sol index 73d4f95b..c7fb95ed 100644 --- a/test/foundry/fuzz/ComprehensiveEIP712AndViewFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveEIP712AndViewFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; diff --git a/test/foundry/fuzz/ComprehensiveEventForwardingFuzz.t.sol b/test/foundry/fuzz/ComprehensiveEventForwardingFuzz.t.sol index 25b97068..e5898521 100644 --- a/test/foundry/fuzz/ComprehensiveEventForwardingFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveEventForwardingFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/lib/EngineBlox.sol"; @@ -109,6 +109,7 @@ contract MaliciousEventForwarder is IEventForwarder { EngineBlox.TxStatus, address, address, + bytes32, bytes32 ) external pure override { // Always revert - malicious behavior @@ -127,6 +128,7 @@ contract GasIntensiveEventForwarder is IEventForwarder { EngineBlox.TxStatus, address, address, + bytes32, bytes32 ) external pure override { // Consume gas through computation diff --git a/test/foundry/fuzz/ComprehensiveGasExhaustionFuzz.t.sol b/test/foundry/fuzz/ComprehensiveGasExhaustionFuzz.t.sol index 48ecfaaa..0752b2d1 100644 --- a/test/foundry/fuzz/ComprehensiveGasExhaustionFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveGasExhaustionFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; @@ -11,6 +11,7 @@ import "../../../contracts/core/lib/utils/SharedValidation.sol"; import "../../../contracts/core/lib/EngineBlox.sol"; import "../../../contracts/standards/hooks/IOnActionHook.sol"; import "../helpers/MockContracts.sol"; +import "../helpers/TestHelpers.sol"; /** * @title ComprehensiveGasExhaustionFuzzTest @@ -484,9 +485,8 @@ contract ComprehensiveGasExhaustionFuzzTest is CommonBase { EngineBlox.TxRecord memory txRecord = accountBlox.getTransaction(txId); // May succeed or fail depending on function protection if (txRecord.status == EngineBlox.TxStatus.FAILED) { - bytes4 errorSelector = bytes4(txRecord.result); - if (errorSelector == SharedValidation.CannotModifyProtected.selector) { - // Function is protected, skip test + // Protected functions fail with non-empty returndata commitment + if (txRecord.resultHash != bytes32(0)) { return; } } @@ -563,22 +563,9 @@ contract ComprehensiveGasExhaustionFuzzTest is CommonBase { // With MAX_BATCH_SIZE = 200, batch operations can consume significant gas // The actual gas consumption is measured by Foundry's gas reporting, not inline // If transaction failed due to limit (e.g., MaxRolesExceeded), that's expected behavior - if (txRecord.status == EngineBlox.TxStatus.FAILED) { - // Failed batch - check if it's due to limit enforcement (expected) - bytes memory result = txRecord.result; - if (result.length >= 4) { - bytes4 errorSelector = bytes4(result); - if (errorSelector == SharedValidation.MaxRolesExceeded.selector || - errorSelector == SharedValidation.BatchSizeExceeded.selector || - errorSelector == SharedValidation.ResourceAlreadyExists.selector) { - // Expected failure due to limit or duplicate - test passes - return; // Expected failure, test passes - } - } - // Other failures - still acceptable as long as it fails gracefully - // (e.g., permission issues, validation errors) + if (txRecord.status == EngineBlox.TxStatus.FAILED && txRecord.resultHash != bytes32(0)) { + return; } - // If completed, the batch operation succeeded - test passes } /** @@ -624,7 +611,7 @@ contract ComprehensiveGasExhaustionFuzzTest is CommonBase { rolesInBatch, EngineBlox.MAX_BATCH_SIZE ); - assertEq(txRecord.result, expectedError); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); } /** @@ -695,20 +682,9 @@ contract ComprehensiveGasExhaustionFuzzTest is CommonBase { // With MAX_BATCH_SIZE = 200, batch operations can consume significant gas // Gas consumption is measured by Foundry's gas reporting system, not inline // If transaction failed due to limit (e.g., MaxFunctionsExceeded), that's expected behavior - if (txRecord.status == EngineBlox.TxStatus.FAILED) { - // Failed batch - check if it's due to limit enforcement (expected) - bytes memory result = txRecord.result; - if (result.length >= 4) { - bytes4 errorSelector = bytes4(result); - if (errorSelector == SharedValidation.MaxFunctionsExceeded.selector || - errorSelector == SharedValidation.BatchSizeExceeded.selector) { - // Expected failure due to limit - test passes - return; - } - } - // Other failures - still acceptable as long as it fails gracefully + if (txRecord.status == EngineBlox.TxStatus.FAILED && txRecord.resultHash != bytes32(0)) { + return; } - // If completed, the batch operation succeeded - test passes } // ============ TRANSACTION HISTORY GAS EXHAUSTION TESTS ============ @@ -879,15 +855,8 @@ contract ComprehensiveGasExhaustionFuzzTest is CommonBase { // Count successfully created roles if (txRecord.status == EngineBlox.TxStatus.COMPLETED) { rolesCreated++; - } else if (txRecord.status == EngineBlox.TxStatus.FAILED) { - // If failed due to limit, that's expected - break early - bytes memory result = txRecord.result; - if (result.length >= 4) { - bytes4 errorSelector = bytes4(result); - if (errorSelector == SharedValidation.MaxRolesExceeded.selector) { - break; // Expected failure, stop creating roles - } - } + } else if (txRecord.status == EngineBlox.TxStatus.FAILED && txRecord.resultHash != bytes32(0)) { + break; } } @@ -1052,7 +1021,7 @@ contract ComprehensiveGasExhaustionFuzzTest is CommonBase { EngineBlox.MAX_ROLES, EngineBlox.MAX_ROLES ); - assertEq(txRecord.result, expectedError); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); } /** @@ -1123,7 +1092,7 @@ contract ComprehensiveGasExhaustionFuzzTest is CommonBase { EngineBlox.MAX_FUNCTIONS, EngineBlox.MAX_FUNCTIONS ); - assertEq(txRecord.result, expectedError); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); } } @@ -1181,21 +1150,9 @@ contract ComprehensiveGasExhaustionFuzzTest is CommonBase { // Composite operations combine multiple gas-intensive operations // Gas consumption is measured by Foundry's gas reporting system, not inline // If transaction failed due to limit (e.g., MaxRolesExceeded), that's expected behavior - if (txRecord.status == EngineBlox.TxStatus.FAILED) { - // Failed operation - check if it's due to limit enforcement (expected) - bytes memory result = txRecord.result; - if (result.length >= 4) { - bytes4 errorSelector = bytes4(result); - if (errorSelector == SharedValidation.MaxRolesExceeded.selector || - errorSelector == SharedValidation.BatchSizeExceeded.selector || - errorSelector == SharedValidation.ResourceAlreadyExists.selector) { - // Expected failure due to limit - test passes - return; - } - } - // Other failures - still acceptable as long as it fails gracefully + if (txRecord.status == EngineBlox.TxStatus.FAILED && txRecord.resultHash != bytes32(0)) { + return; } - // If completed, the composite operation succeeded - test passes } // ============ HELPER FUNCTIONS ============ diff --git a/test/foundry/fuzz/ComprehensiveHookSystemFuzz.t.sol b/test/foundry/fuzz/ComprehensiveHookSystemFuzz.t.sol index 3fa8e769..5abace79 100644 --- a/test/foundry/fuzz/ComprehensiveHookSystemFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveHookSystemFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/lib/EngineBlox.sol"; diff --git a/test/foundry/fuzz/ComprehensiveInitializationFuzz.t.sol b/test/foundry/fuzz/ComprehensiveInitializationFuzz.t.sol index 3e86b94a..03a8ddc6 100644 --- a/test/foundry/fuzz/ComprehensiveInitializationFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveInitializationFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/lib/EngineBlox.sol"; diff --git a/test/foundry/fuzz/ComprehensiveInputValidationFuzz.t.sol b/test/foundry/fuzz/ComprehensiveInputValidationFuzz.t.sol index aca609c6..8a99970e 100644 --- a/test/foundry/fuzz/ComprehensiveInputValidationFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveInputValidationFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; @@ -114,7 +114,7 @@ contract ComprehensiveInputValidationFuzzTest is CommonBase { SharedValidation.InvalidAddress.selector, address(0) ); - assertEq(txRecord.result, expectedError); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); } // ============ ARRAY MANIPULATION ATTACKS ============ @@ -495,7 +495,7 @@ contract ComprehensiveInputValidationFuzzTest is CommonBase { SharedValidation.MaxWalletsZero.selector, 0 ); - assertEq(txRecord.result, expectedError); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); } } diff --git a/test/foundry/fuzz/ComprehensiveMetaTransactionFuzz.t.sol b/test/foundry/fuzz/ComprehensiveMetaTransactionFuzz.t.sol index 89227070..4c80664e 100644 --- a/test/foundry/fuzz/ComprehensiveMetaTransactionFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveMetaTransactionFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; @@ -421,7 +421,7 @@ contract ComprehensiveMetaTransactionFuzzTest is CommonBase { vm.expectRevert( abi.encodeWithSelector( - SharedValidation.DeadlineInPast.selector, + SharedValidation.MetaTxExpired.selector, deadline, block.timestamp ) diff --git a/test/foundry/fuzz/ComprehensivePaymentSecurityFuzz.t.sol b/test/foundry/fuzz/ComprehensivePaymentSecurityFuzz.t.sol index bbcc1f2f..906fe02a 100644 --- a/test/foundry/fuzz/ComprehensivePaymentSecurityFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensivePaymentSecurityFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/execution/GuardController.sol"; @@ -356,7 +356,7 @@ contract ComprehensivePaymentSecurityFuzzTest is CommonBase { EngineBlox.TxRecord memory result = paymentHelper.getTransaction(txId); // If it doesn't revert, verify it failed assertEq(uint8(result.status), uint8(EngineBlox.TxStatus.FAILED), "Should fail with invalid token address"); - assertTrue(result.result.length > 0, "Should have error message"); + assertTrue(result.resultHash != bytes32(0), "Should have error message"); } catch { // Revert is also acceptable for invalid token addresses // This verifies that invalid tokens are rejected diff --git a/test/foundry/fuzz/ComprehensiveSecurityEdgeCasesFuzz.t.sol b/test/foundry/fuzz/ComprehensiveSecurityEdgeCasesFuzz.t.sol index 1e2e3823..72fdfc7c 100644 --- a/test/foundry/fuzz/ComprehensiveSecurityEdgeCasesFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveSecurityEdgeCasesFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/lib/EngineBlox.sol"; diff --git a/test/foundry/fuzz/ComprehensiveStateMachineFuzz.t.sol b/test/foundry/fuzz/ComprehensiveStateMachineFuzz.t.sol index 3999a726..0ef2f61d 100644 --- a/test/foundry/fuzz/ComprehensiveStateMachineFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveStateMachineFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/execution/GuardController.sol"; @@ -961,7 +961,7 @@ contract ComprehensiveStateMachineFuzzTest is CommonBase { // Transaction should be marked as FAILED, not revert assertEq(uint8(result.status), uint8(EngineBlox.TxStatus.FAILED)); - assertTrue(result.result.length > 0, "Result should contain revert reason"); + assertTrue(result.resultHash != bytes32(0), "Result should contain revert reason"); vm.stopPrank(); } catch (bytes memory reason) { vm.stopPrank(); @@ -998,10 +998,7 @@ contract ComprehensiveStateMachineFuzzTest is CommonBase { result.status == EngineBlox.TxStatus.FAILED || result.status == EngineBlox.TxStatus.COMPLETED, "Must not leave inconsistent state" ); - if (result.status == EngineBlox.TxStatus.FAILED) { - // EIP-150: low gas caused failure; catch path must not have set COMPLETED - assertTrue(result.result.length > 0 || true, "Failure recorded"); - } + // EIP-150: OOG failures may leave empty returndata and zero resultHash; FAILED (not COMPLETED) is the invariant vm.stopPrank(); } catch (bytes memory reason) { vm.stopPrank(); @@ -1201,7 +1198,7 @@ contract ComprehensiveStateMachineFuzzTest is CommonBase { accountBlox.approveTimeLockExecution(txId); EngineBlox.TxRecord memory result = accountBlox.getTransaction(txId); assertEq(uint8(result.status), uint8(EngineBlox.TxStatus.FAILED)); - assertTrue(result.result.length > 0, "Result should contain revert reason"); + assertTrue(result.resultHash != bytes32(0), "Result should contain revert reason"); vm.stopPrank(); } diff --git a/test/foundry/fuzz/ComprehensiveWhitelistSchemaFuzz.t.sol b/test/foundry/fuzz/ComprehensiveWhitelistSchemaFuzz.t.sol index 46b260cd..c7e69967 100644 --- a/test/foundry/fuzz/ComprehensiveWhitelistSchemaFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveWhitelistSchemaFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/lib/EngineBlox.sol"; diff --git a/test/foundry/fuzz/EdgeCasesFuzz.t.sol b/test/foundry/fuzz/EdgeCasesFuzz.t.sol index 67220c07..cfeddc43 100644 --- a/test/foundry/fuzz/EdgeCasesFuzz.t.sol +++ b/test/foundry/fuzz/EdgeCasesFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; @@ -74,7 +74,7 @@ contract EdgeCasesFuzzTest is CommonBase { SharedValidation.CannotModifyProtected.selector, OWNER_ROLE ); - assertEq(txRecord.result, expectedError, "Should fail with CannotModifyProtected"); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError), "Should fail with CannotModifyProtected"); } /** diff --git a/test/foundry/fuzz/GuardControllerFuzz.t.sol b/test/foundry/fuzz/GuardControllerFuzz.t.sol index 7ad1ac36..ab9932e3 100644 --- a/test/foundry/fuzz/GuardControllerFuzz.t.sol +++ b/test/foundry/fuzz/GuardControllerFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/execution/GuardController.sol"; diff --git a/test/foundry/fuzz/MetaTransactionSecurityFuzz.t.sol b/test/foundry/fuzz/MetaTransactionSecurityFuzz.t.sol index 856621c8..ce63abb4 100644 --- a/test/foundry/fuzz/MetaTransactionSecurityFuzz.t.sol +++ b/test/foundry/fuzz/MetaTransactionSecurityFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; @@ -54,10 +54,10 @@ contract MetaTransactionSecurityFuzzTest is CommonBase { ); metaTxParams.deadline = pastDeadline; - // generateUnsignedMetaTransactionForNew reverts with DeadlineInPast when deadline is in the past + // generateUnsignedMetaTransactionForNew reverts with MetaTxExpired when deadline is in the past vm.expectRevert( abi.encodeWithSelector( - SharedValidation.DeadlineInPast.selector, + SharedValidation.MetaTxExpired.selector, pastDeadline, block.timestamp ) diff --git a/test/foundry/fuzz/ProtectedResourceFuzz.t.sol b/test/foundry/fuzz/ProtectedResourceFuzz.t.sol index 29e46ddf..1c7b193d 100644 --- a/test/foundry/fuzz/ProtectedResourceFuzz.t.sol +++ b/test/foundry/fuzz/ProtectedResourceFuzz.t.sol @@ -1,9 +1,10 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; import "../../../contracts/core/access/lib/definitions/RuntimeRBACDefinitions.sol"; +import "../../../contracts/core/execution/lib/definitions/GuardControllerDefinitions.sol"; import "../../../contracts/core/lib/utils/SharedValidation.sol"; import "../helpers/TestHelpers.sol"; @@ -12,7 +13,8 @@ import "../helpers/TestHelpers.sol"; * @dev Comprehensive fuzz tests for protected resource boundaries * * These tests specifically target the security boundaries that were missed - * in the original fuzz tests, particularly the CannotModifyProtected protection. + * in the original fuzz tests, particularly `GrantNotRevocable` on grant removal and + * `CannotModifyProtected` on protected role / wallet boundaries. */ contract ProtectedResourceFuzzTest is CommonBase { using TestHelpers for *; @@ -69,7 +71,7 @@ contract ProtectedResourceFuzzTest is CommonBase { SharedValidation.CannotModifyProtected.selector, protectedRoles[i] ); - assertEq(txRecord.result, expectedError, "Should fail with CannotModifyProtected"); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError), "Should fail with CannotModifyProtected"); } } @@ -104,7 +106,7 @@ contract ProtectedResourceFuzzTest is CommonBase { SharedValidation.CannotModifyProtected.selector, OWNER_ROLE ); - assertEq(txRecord.result, expectedError, "Should revert with CannotModifyProtected"); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError), "Should revert with CannotModifyProtected"); } /** @@ -140,10 +142,179 @@ contract ProtectedResourceFuzzTest is CommonBase { SharedValidation.CannotModifyProtected.selector, protectedRoles[i] ); - assertEq(txRecord.result, expectedError, "Should fail with CannotModifyProtected"); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError), "Should fail with CannotModifyProtected"); } } + /** + * @dev Revoking a grant for a **revocable** protected policy schema (`isGrantRevocable: true`, e.g. NATIVE_TRANSFER) + * from a non-protected custom role succeeds. Core GuardController execution selectors use `isGrantRevocable: false` + * and cannot be removed via `REMOVE_FUNCTION_FROM_ROLE` from any role. + * The granted bitmap must not mix meta-sign and meta-execute actions (`_validateMetaTxPermissions`). + */ + function test_RemoveProtectedSchemaFromNonProtectedRole_succeeds() public { + string memory roleName = "CUSTOM_REMOVE_PROT_SCHEMA"; + bytes32 roleHash = keccak256(bytes(roleName)); + + EngineBlox.FunctionPermission[] memory emptyPerms = new EngineBlox.FunctionPermission[](0); + IRuntimeRBAC.RoleConfigAction[] memory createActions = new IRuntimeRBAC.RoleConfigAction[](1); + createActions[0] = IRuntimeRBAC.RoleConfigAction({ + actionType: IRuntimeRBAC.RoleConfigActionType.CREATE_ROLE, + data: abi.encode(roleName, uint256(10), emptyPerms) + }); + bytes memory createParams = RuntimeRBACDefinitions.roleConfigBatchExecutionParams(abi.encode(createActions)); + EngineBlox.MetaTransaction memory createMetaTx = _createMetaTxForRoleConfig(owner, createParams, 1 hours); + vm.prank(broadcaster); + uint256 createTxId = accountBlox.roleConfigBatchRequestAndApprove(createMetaTx); + vm.prank(broadcaster); + assertEq( + uint8(accountBlox.getTransaction(createTxId).status), + uint8(EngineBlox.TxStatus.COMPLETED), + "create role" + ); + + IRuntimeRBAC.RoleConfigAction[] memory addWalletActions = new IRuntimeRBAC.RoleConfigAction[](1); + addWalletActions[0] = IRuntimeRBAC.RoleConfigAction({ + actionType: IRuntimeRBAC.RoleConfigActionType.ADD_WALLET, + data: abi.encode(roleHash, owner) + }); + bytes memory addWalletParams = RuntimeRBACDefinitions.roleConfigBatchExecutionParams(abi.encode(addWalletActions)); + EngineBlox.MetaTransaction memory addWalletMetaTx = _createMetaTxForRoleConfig(owner, addWalletParams, 1 hours); + vm.prank(broadcaster); + uint256 addWalletTxId = accountBlox.roleConfigBatchRequestAndApprove(addWalletMetaTx); + vm.prank(broadcaster); + assertEq(uint8(accountBlox.getTransaction(addWalletTxId).status), uint8(EngineBlox.TxStatus.COMPLETED), "add wallet"); + + EngineBlox.TxAction[] memory grantActs = new EngineBlox.TxAction[](1); + grantActs[0] = EngineBlox.TxAction.EXECUTE_TIME_DELAY_REQUEST; + uint16 grantBitmap = EngineBlox.createBitmapFromActions(grantActs); + bytes4[] memory handlers = new bytes4[](1); + handlers[0] = EngineBlox.NATIVE_TRANSFER_SELECTOR; + EngineBlox.FunctionPermission memory fp = EngineBlox.FunctionPermission({ + functionSelector: EngineBlox.NATIVE_TRANSFER_SELECTOR, + grantedActionsBitmap: grantBitmap, + handlerForSelectors: handlers + }); + IRuntimeRBAC.RoleConfigAction[] memory addFnActions = new IRuntimeRBAC.RoleConfigAction[](1); + addFnActions[0] = IRuntimeRBAC.RoleConfigAction({ + actionType: IRuntimeRBAC.RoleConfigActionType.ADD_FUNCTION_TO_ROLE, + data: abi.encode(roleHash, fp) + }); + bytes memory addFnParams = RuntimeRBACDefinitions.roleConfigBatchExecutionParams(abi.encode(addFnActions)); + EngineBlox.MetaTransaction memory addFnMetaTx = _createMetaTxForRoleConfig(owner, addFnParams, 1 hours); + vm.prank(broadcaster); + uint256 addFnTxId = accountBlox.roleConfigBatchRequestAndApprove(addFnMetaTx); + vm.prank(broadcaster); + assertEq(uint8(accountBlox.getTransaction(addFnTxId).status), uint8(EngineBlox.TxStatus.COMPLETED), "add native transfer fn"); + + IRuntimeRBAC.RoleConfigAction[] memory removeActions = new IRuntimeRBAC.RoleConfigAction[](1); + removeActions[0] = IRuntimeRBAC.RoleConfigAction({ + actionType: IRuntimeRBAC.RoleConfigActionType.REMOVE_FUNCTION_FROM_ROLE, + data: abi.encode(roleHash, EngineBlox.NATIVE_TRANSFER_SELECTOR) + }); + bytes memory removeParams = RuntimeRBACDefinitions.roleConfigBatchExecutionParams(abi.encode(removeActions)); + EngineBlox.MetaTransaction memory removeMetaTx = _createMetaTxForRoleConfig(owner, removeParams, 1 hours); + vm.prank(broadcaster); + uint256 removeTxId = accountBlox.roleConfigBatchRequestAndApprove(removeMetaTx); + vm.prank(broadcaster); + assertEq(uint8(accountBlox.getTransaction(removeTxId).status), uint8(EngineBlox.TxStatus.COMPLETED), "remove native transfer fn"); + } + + /** + * @dev `REMOVE_FUNCTION_FROM_ROLE` for a schema with `isGrantRevocable: false` fails on a custom role (`GrantNotRevocable`). + */ + function test_RemoveNonRevocableSchemaFromNonProtectedRole_reverts() public { + string memory roleName = "CUSTOM_REMOVE_NONREV"; + bytes32 roleHash = keccak256(bytes(roleName)); + + EngineBlox.FunctionPermission[] memory emptyPerms = new EngineBlox.FunctionPermission[](0); + IRuntimeRBAC.RoleConfigAction[] memory createActions = new IRuntimeRBAC.RoleConfigAction[](1); + createActions[0] = IRuntimeRBAC.RoleConfigAction({ + actionType: IRuntimeRBAC.RoleConfigActionType.CREATE_ROLE, + data: abi.encode(roleName, uint256(10), emptyPerms) + }); + bytes memory createParams = RuntimeRBACDefinitions.roleConfigBatchExecutionParams(abi.encode(createActions)); + EngineBlox.MetaTransaction memory createMetaTx = _createMetaTxForRoleConfig(owner, createParams, 1 hours); + vm.prank(broadcaster); + uint256 createTxId = accountBlox.roleConfigBatchRequestAndApprove(createMetaTx); + vm.prank(broadcaster); + assertEq(uint8(accountBlox.getTransaction(createTxId).status), uint8(EngineBlox.TxStatus.COMPLETED), "create role"); + + IRuntimeRBAC.RoleConfigAction[] memory addWalletActions = new IRuntimeRBAC.RoleConfigAction[](1); + addWalletActions[0] = IRuntimeRBAC.RoleConfigAction({ + actionType: IRuntimeRBAC.RoleConfigActionType.ADD_WALLET, + data: abi.encode(roleHash, owner) + }); + bytes memory addWalletParams = RuntimeRBACDefinitions.roleConfigBatchExecutionParams(abi.encode(addWalletActions)); + EngineBlox.MetaTransaction memory addWalletMetaTx2 = _createMetaTxForRoleConfig(owner, addWalletParams, 1 hours); + vm.prank(broadcaster); + uint256 addWalletTxId = accountBlox.roleConfigBatchRequestAndApprove(addWalletMetaTx2); + vm.prank(broadcaster); + assertEq(uint8(accountBlox.getTransaction(addWalletTxId).status), uint8(EngineBlox.TxStatus.COMPLETED), "add wallet"); + + EngineBlox.TxAction[] memory tlActs = new EngineBlox.TxAction[](1); + tlActs[0] = EngineBlox.TxAction.EXECUTE_TIME_DELAY_REQUEST; + bytes4[] memory handlers = new bytes4[](1); + handlers[0] = GuardControllerDefinitions.EXECUTE_WITH_TIMELOCK_SELECTOR; + EngineBlox.FunctionPermission memory fp = EngineBlox.FunctionPermission({ + functionSelector: GuardControllerDefinitions.EXECUTE_WITH_TIMELOCK_SELECTOR, + grantedActionsBitmap: EngineBlox.createBitmapFromActions(tlActs), + handlerForSelectors: handlers + }); + IRuntimeRBAC.RoleConfigAction[] memory addFnActions = new IRuntimeRBAC.RoleConfigAction[](1); + addFnActions[0] = IRuntimeRBAC.RoleConfigAction({ + actionType: IRuntimeRBAC.RoleConfigActionType.ADD_FUNCTION_TO_ROLE, + data: abi.encode(roleHash, fp) + }); + bytes memory addFnParams = RuntimeRBACDefinitions.roleConfigBatchExecutionParams(abi.encode(addFnActions)); + EngineBlox.MetaTransaction memory addFnMetaTx2 = _createMetaTxForRoleConfig(owner, addFnParams, 1 hours); + vm.prank(broadcaster); + uint256 addFnTxId = accountBlox.roleConfigBatchRequestAndApprove(addFnMetaTx2); + vm.prank(broadcaster); + assertEq(uint8(accountBlox.getTransaction(addFnTxId).status), uint8(EngineBlox.TxStatus.COMPLETED), "add timelock fn"); + + IRuntimeRBAC.RoleConfigAction[] memory removeActions = new IRuntimeRBAC.RoleConfigAction[](1); + removeActions[0] = IRuntimeRBAC.RoleConfigAction({ + actionType: IRuntimeRBAC.RoleConfigActionType.REMOVE_FUNCTION_FROM_ROLE, + data: abi.encode(roleHash, GuardControllerDefinitions.EXECUTE_WITH_TIMELOCK_SELECTOR) + }); + bytes memory removeParams = RuntimeRBACDefinitions.roleConfigBatchExecutionParams(abi.encode(removeActions)); + EngineBlox.MetaTransaction memory removeMetaTx2 = _createMetaTxForRoleConfig(owner, removeParams, 1 hours); + vm.prank(broadcaster); + uint256 removeTxId = accountBlox.roleConfigBatchRequestAndApprove(removeMetaTx2); + vm.prank(broadcaster); + EngineBlox.TxRecord memory txRecord = accountBlox.getTransaction(removeTxId); + assertEq(uint8(txRecord.status), uint8(EngineBlox.TxStatus.FAILED)); + bytes memory expectedError = abi.encodeWithSelector( + SharedValidation.GrantNotRevocable.selector, + GuardControllerDefinitions.EXECUTE_WITH_TIMELOCK_SELECTOR + ); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); + } + + /** + * @dev Removing a grant for a **non-revocable** schema (`isGrantRevocable: false`) fails when targeting OWNER_ROLE (`GrantNotRevocable`). + */ + function test_RemoveProtectedSchemaFromProtectedRole_reverts() public { + IRuntimeRBAC.RoleConfigAction[] memory actions = new IRuntimeRBAC.RoleConfigAction[](1); + actions[0] = IRuntimeRBAC.RoleConfigAction({ + actionType: IRuntimeRBAC.RoleConfigActionType.REMOVE_FUNCTION_FROM_ROLE, + data: abi.encode(OWNER_ROLE, GuardControllerDefinitions.EXECUTE_WITH_TIMELOCK_SELECTOR) + }); + bytes memory params = RuntimeRBACDefinitions.roleConfigBatchExecutionParams(abi.encode(actions)); + EngineBlox.MetaTransaction memory metaTx = _createMetaTxForRoleConfig(owner, params, 1 hours); + vm.prank(broadcaster); + uint256 txId = accountBlox.roleConfigBatchRequestAndApprove(metaTx); + vm.prank(broadcaster); + EngineBlox.TxRecord memory txRecord = accountBlox.getTransaction(txId); + assertEq(uint8(txRecord.status), uint8(EngineBlox.TxStatus.FAILED)); + bytes memory expectedError = abi.encodeWithSelector( + SharedValidation.GrantNotRevocable.selector, + GuardControllerDefinitions.EXECUTE_WITH_TIMELOCK_SELECTOR + ); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); + } + /** * @dev Fuzz test: Protected roles remain unchanged after any operation */ diff --git a/test/foundry/fuzz/RBACPermissionFuzz.t.sol b/test/foundry/fuzz/RBACPermissionFuzz.t.sol index 00fcbd8c..fb17a16f 100644 --- a/test/foundry/fuzz/RBACPermissionFuzz.t.sol +++ b/test/foundry/fuzz/RBACPermissionFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; @@ -156,7 +156,7 @@ contract RBACPermissionFuzzTest is CommonBase { maxWallets, maxWallets ); - assertEq(txRecord.result, expectedError, "Should fail with RoleWalletLimitReached"); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError), "Should fail with RoleWalletLimitReached"); } /** @@ -240,7 +240,7 @@ contract RBACPermissionFuzzTest is CommonBase { SharedValidation.ItemAlreadyExists.selector, wallet ); - assertEq(txRecord.result, expectedError, "Should fail with ItemAlreadyExists"); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError), "Should fail with ItemAlreadyExists"); } /** diff --git a/test/foundry/fuzz/RuntimeRBACFuzz.t.sol b/test/foundry/fuzz/RuntimeRBACFuzz.t.sol index 5d36e663..98d4c111 100644 --- a/test/foundry/fuzz/RuntimeRBACFuzz.t.sol +++ b/test/foundry/fuzz/RuntimeRBACFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; diff --git a/test/foundry/fuzz/SecureOwnableFuzz.t.sol b/test/foundry/fuzz/SecureOwnableFuzz.t.sol index b6ec8ac5..ed21e1ac 100644 --- a/test/foundry/fuzz/SecureOwnableFuzz.t.sol +++ b/test/foundry/fuzz/SecureOwnableFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../helpers/AccountPatternTest.sol"; @@ -57,7 +57,7 @@ contract SecureOwnableFuzzTest is CommonBase { vm.assume(newBroadcaster != recovery); vm.prank(owner); - uint256 txId = accountBlox.updateBroadcasterRequest(newBroadcaster, 0); + uint256 txId = accountBlox.updateBroadcasterRequest(newBroadcaster, broadcaster); vm.prank(owner); EngineBlox.TxRecord memory requestTx = accountBlox.getTransaction(txId); @@ -76,7 +76,7 @@ contract SecureOwnableFuzzTest is CommonBase { vm.assume(newBroadcaster != broadcaster); vm.prank(owner); - uint256 brTxId = accountBlox.updateBroadcasterRequest(newBroadcaster, 0); + uint256 brTxId = accountBlox.updateBroadcasterRequest(newBroadcaster, broadcaster); vm.prank(recovery); uint256 ownTxId = accountBlox.transferOwnershipRequest(); diff --git a/test/foundry/fuzz/StateMachineWorkflowFuzz.t.sol b/test/foundry/fuzz/StateMachineWorkflowFuzz.t.sol index ccbd026b..27fc067f 100644 --- a/test/foundry/fuzz/StateMachineWorkflowFuzz.t.sol +++ b/test/foundry/fuzz/StateMachineWorkflowFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/execution/GuardController.sol"; diff --git a/test/foundry/fuzz/SystemMacroSelectorSecurityFuzz.t.sol b/test/foundry/fuzz/SystemMacroSelectorSecurityFuzz.t.sol index ba31a870..dd3dbde3 100644 --- a/test/foundry/fuzz/SystemMacroSelectorSecurityFuzz.t.sol +++ b/test/foundry/fuzz/SystemMacroSelectorSecurityFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/lib/EngineBlox.sol"; diff --git a/test/foundry/fuzz/UnregisterFunctionFuzz.t.sol b/test/foundry/fuzz/UnregisterFunctionFuzz.t.sol index 84e7b276..e322b733 100644 --- a/test/foundry/fuzz/UnregisterFunctionFuzz.t.sol +++ b/test/foundry/fuzz/UnregisterFunctionFuzz.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/lib/EngineBlox.sol"; @@ -44,6 +44,7 @@ contract EngineBloxUnregisterHarness { bitmap, true, // enforceHandlerRelations false, + true, handlers ); diff --git a/test/foundry/helpers/AccountPatternTest.sol b/test/foundry/helpers/AccountPatternTest.sol index f266baf2..c2d4f1a9 100644 --- a/test/foundry/helpers/AccountPatternTest.sol +++ b/test/foundry/helpers/AccountPatternTest.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../../contracts/core/pattern/Account.sol"; diff --git a/test/foundry/helpers/DefinitionValidator.sol b/test/foundry/helpers/DefinitionValidator.sol index 3aca549f..cf8a78ed 100644 --- a/test/foundry/helpers/DefinitionValidator.sol +++ b/test/foundry/helpers/DefinitionValidator.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../../contracts/core/lib/EngineBlox.sol"; import "../../../contracts/core/lib/interfaces/IDefinition.sol"; diff --git a/test/foundry/helpers/HookTestBlox.sol b/test/foundry/helpers/HookTestBlox.sol index a7ec381b..bbf60097 100644 --- a/test/foundry/helpers/HookTestBlox.sol +++ b/test/foundry/helpers/HookTestBlox.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../../contracts/core/pattern/Account.sol"; import "../../../contracts/core/base/BaseStateMachine.sol"; diff --git a/test/foundry/helpers/MaliciousDefinitions.sol b/test/foundry/helpers/MaliciousDefinitions.sol index 48aa9aa0..4323604a 100644 --- a/test/foundry/helpers/MaliciousDefinitions.sol +++ b/test/foundry/helpers/MaliciousDefinitions.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../../contracts/core/lib/EngineBlox.sol"; import "../../../contracts/core/lib/interfaces/IDefinition.sol"; @@ -33,6 +33,7 @@ library MaliciousDefinitions_MissingProtected { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: false, // ❌ Should be true - function exists in contract bytecode + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -70,6 +71,7 @@ library MaliciousDefinitions_MismatchedSignature { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -108,6 +110,7 @@ library MaliciousDefinitions_InvalidHandler { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: false, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -144,6 +147,7 @@ library MaliciousDefinitions_EmptyHandlerArray { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, // Must be true if selector exists in contract bytecode + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -217,6 +221,7 @@ library MaliciousDefinitions_MismatchedArrays { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, // Must be true if selector exists in contract bytecode + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -273,6 +278,7 @@ library MaliciousDefinitions_EmptyBitmap { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, // Must be true if selector exists in contract bytecode + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -324,6 +330,7 @@ library MaliciousDefinitions_InvalidSelfReference { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, // Must be true if selector exists in contract bytecode + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -379,6 +386,7 @@ library MaliciousDefinitions_DuplicateSchemas { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, // Must be true if selector exists in contract bytecode + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -391,6 +399,7 @@ library MaliciousDefinitions_DuplicateSchemas { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: false, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); diff --git a/test/foundry/helpers/MockContracts.sol b/test/foundry/helpers/MockContracts.sol index 5fc688a4..9b02ade8 100644 --- a/test/foundry/helpers/MockContracts.sol +++ b/test/foundry/helpers/MockContracts.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; diff --git a/test/foundry/helpers/PaymentTestHelper.sol b/test/foundry/helpers/PaymentTestHelper.sol index fa9eb60d..98294c8f 100644 --- a/test/foundry/helpers/PaymentTestHelper.sol +++ b/test/foundry/helpers/PaymentTestHelper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "../../../contracts/core/base/BaseStateMachine.sol"; @@ -81,6 +81,7 @@ contract PaymentTestHelper is BaseStateMachine { policySchemaActionsBitmap, false, true, + true, prh ); } @@ -95,6 +96,7 @@ contract PaymentTestHelper is BaseStateMachine { policySchemaActionsBitmap, false, true, + true, eth ); } @@ -138,6 +140,7 @@ contract PaymentTestHelper is BaseStateMachine { policySchemaActionsBitmap, false, true, + true, nativeTransferHandlers ); } @@ -176,6 +179,7 @@ contract PaymentTestHelper is BaseStateMachine { requestActionsBitmap, true, // enforceHandlerRelations true, // isProtected = true (required because function exists in contract bytecode) + true, requestTxHandlers ); } @@ -210,6 +214,7 @@ contract PaymentTestHelper is BaseStateMachine { requestActionsBitmap, true, // enforceHandlerRelations true, + true, requestWithPaymentHandlers ); } @@ -241,6 +246,7 @@ contract PaymentTestHelper is BaseStateMachine { approveActionsBitmap, true, // enforceHandlerRelations true, // isProtected = true (required because function exists in contract bytecode) + true, approveTxHandlers ); } @@ -255,7 +261,7 @@ contract PaymentTestHelper is BaseStateMachine { EngineBlox.addFunctionToRole(state, ownerRoleHash, approveTxPermission); } - // Register cancelTransaction for EXECUTE_TIME_DELAY_CANCEL (whitelist re-check on cancel) + // Register cancelTransaction for EXECUTE_TIME_DELAY_CANCEL EngineBlox.TxAction[] memory cancelActions = new EngineBlox.TxAction[](1); cancelActions[0] = EngineBlox.TxAction.EXECUTE_TIME_DELAY_CANCEL; uint16 cancelActionsBitmap = EngineBlox.createBitmapFromActions(cancelActions); @@ -274,6 +280,7 @@ contract PaymentTestHelper is BaseStateMachine { cancelActionsBitmap, true, true, + true, cancelTxHandlers ); } diff --git a/test/foundry/helpers/TestDefinitionContracts.sol b/test/foundry/helpers/TestDefinitionContracts.sol index 183147fb..f0c2d9cc 100644 --- a/test/foundry/helpers/TestDefinitionContracts.sol +++ b/test/foundry/helpers/TestDefinitionContracts.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../../contracts/core/lib/EngineBlox.sol"; import "../../../contracts/core/lib/interfaces/IDefinition.sol"; @@ -34,6 +34,7 @@ library TestDefinitions_Valid { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, // Protected because function exists in contract + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -71,6 +72,7 @@ library TestDefinitions_MissingProtected { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: false, // ❌ Should be true - function exists in contract bytecode + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -108,6 +110,7 @@ library TestDefinitions_MismatchedSignature { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -146,6 +149,7 @@ library TestDefinitions_Duplicate { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); @@ -158,6 +162,7 @@ library TestDefinitions_Duplicate { supportedActionsBitmap: EngineBlox.createBitmapFromActions(actions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: handlerForSelectors }); diff --git a/test/foundry/helpers/TestHelpers.sol b/test/foundry/helpers/TestHelpers.sol index 71f19a49..e21d4aa4 100644 --- a/test/foundry/helpers/TestHelpers.sol +++ b/test/foundry/helpers/TestHelpers.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {Test} from "forge-std/Test.sol"; @@ -26,6 +26,13 @@ library TestHelpers { return bytes4(keccak256(bytes(signature))); } + /** + * @dev Matches `EngineBlox.executionResultHash` for test assertions. + */ + function executionResultHash(bytes memory executionResult) internal pure returns (bytes32) { + return executionResult.length == 0 ? bytes32(0) : keccak256(executionResult); + } + /** * @dev Hashes TxRecord for EIP-712 */ @@ -36,7 +43,7 @@ library TestHelpers { uint8(record.status), _hashTxParams(record.params), record.message, - keccak256(record.result), + record.resultHash, _hashPaymentDetails(record.payment) )); } diff --git a/test/foundry/helpers/TestStateMachine.sol b/test/foundry/helpers/TestStateMachine.sol index d6d0ce68..b2b2854e 100644 --- a/test/foundry/helpers/TestStateMachine.sol +++ b/test/foundry/helpers/TestStateMachine.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../../../contracts/core/base/BaseStateMachine.sol"; import "../../../contracts/core/lib/EngineBlox.sol"; diff --git a/test/foundry/integration/MetaTransaction.t.sol b/test/foundry/integration/MetaTransaction.t.sol index 7d0c1f6b..33e11dd0 100644 --- a/test/foundry/integration/MetaTransaction.t.sol +++ b/test/foundry/integration/MetaTransaction.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../helpers/TestHelpers.sol"; diff --git a/test/foundry/integration/WhitelistWorkflow.t.sol b/test/foundry/integration/WhitelistWorkflow.t.sol index 09cbb79c..77a88af7 100644 --- a/test/foundry/integration/WhitelistWorkflow.t.sol +++ b/test/foundry/integration/WhitelistWorkflow.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../helpers/TestHelpers.sol"; diff --git a/test/foundry/invariant/RoleInvariants.t.sol b/test/foundry/invariant/RoleInvariants.t.sol index ff2382ab..f25f8df8 100644 --- a/test/foundry/invariant/RoleInvariants.t.sol +++ b/test/foundry/invariant/RoleInvariants.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "forge-std/StdInvariant.sol"; diff --git a/test/foundry/invariant/StateMachineInvariants.t.sol b/test/foundry/invariant/StateMachineInvariants.t.sol index b7fc1f6e..5c8bdeb0 100644 --- a/test/foundry/invariant/StateMachineInvariants.t.sol +++ b/test/foundry/invariant/StateMachineInvariants.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "forge-std/StdInvariant.sol"; diff --git a/test/foundry/invariant/TransactionInvariants.t.sol b/test/foundry/invariant/TransactionInvariants.t.sol index b71db87e..edc08103 100644 --- a/test/foundry/invariant/TransactionInvariants.t.sol +++ b/test/foundry/invariant/TransactionInvariants.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "forge-std/StdInvariant.sol"; @@ -49,7 +49,8 @@ contract TransactionInvariantsTest is CommonBase { status == EngineBlox.TxStatus.COMPLETED || status == EngineBlox.TxStatus.CANCELLED || status == EngineBlox.TxStatus.FAILED || - status == EngineBlox.TxStatus.REJECTED + status == EngineBlox.TxStatus.PROCESSING_PAYMENT || + status == EngineBlox.TxStatus.UNDEFINED ); } } diff --git a/test/foundry/security/AccessControl.t.sol b/test/foundry/security/AccessControl.t.sol index ec2cafa6..eca371b1 100644 --- a/test/foundry/security/AccessControl.t.sol +++ b/test/foundry/security/AccessControl.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; @@ -75,6 +75,6 @@ contract AccessControlTest is CommonBase { // Owner-only functions should reject non-owners vm.prank(attacker); vm.expectRevert(abi.encodeWithSelector(SharedValidation.RestrictedOwner.selector, attacker, owner)); - accountBlox.updateBroadcasterRequest(user1, 0); + accountBlox.updateBroadcasterRequest(user1, broadcaster); } } diff --git a/test/foundry/security/EdgeCases.t.sol b/test/foundry/security/EdgeCases.t.sol index b5c2a7b0..1ee40166 100644 --- a/test/foundry/security/EdgeCases.t.sol +++ b/test/foundry/security/EdgeCases.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; @@ -115,7 +115,7 @@ contract EdgeCasesTest is CommonBase { vm.prank(owner); vm.expectRevert(SharedValidation.PendingSecureRequest.selector); - accountBlox.updateBroadcasterRequest(user1, 0); + accountBlox.updateBroadcasterRequest(user1, broadcaster); vm.prank(owner); uint256[] memory pending = accountBlox.getPendingTransactions(); @@ -124,7 +124,7 @@ contract EdgeCasesTest is CommonBase { function test_OwnershipRequest_AllowedWhileBroadcasterPending() public { vm.prank(owner); - accountBlox.updateBroadcasterRequest(user1, 0); + accountBlox.updateBroadcasterRequest(user1, broadcaster); vm.prank(recovery); uint256 ownTxId = accountBlox.transferOwnershipRequest(); @@ -135,7 +135,7 @@ contract EdgeCasesTest is CommonBase { vm.prank(owner); vm.expectRevert(SharedValidation.PendingSecureRequest.selector); - accountBlox.updateBroadcasterRequest(user2, 0); + accountBlox.updateBroadcasterRequest(user2, broadcaster); vm.prank(recovery); vm.expectRevert(SharedValidation.PendingSecureRequest.selector); diff --git a/test/foundry/security/Reentrancy.t.sol b/test/foundry/security/Reentrancy.t.sol index 425a39bc..8abf6dcf 100644 --- a/test/foundry/security/Reentrancy.t.sol +++ b/test/foundry/security/Reentrancy.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../helpers/MockContracts.sol"; diff --git a/test/foundry/unit/BaseStateMachine.t.sol b/test/foundry/unit/BaseStateMachine.t.sol index e2cfbf71..bedcce8e 100644 --- a/test/foundry/unit/BaseStateMachine.t.sol +++ b/test/foundry/unit/BaseStateMachine.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/base/BaseStateMachine.sol"; @@ -75,7 +75,7 @@ contract BaseStateMachineTest is CommonBase { // Create second transaction (broadcaster request) as new owner vm.prank(recovery); - uint256 txId2 = accountBlox.updateBroadcasterRequest(user1, 0); + uint256 txId2 = accountBlox.updateBroadcasterRequest(user1, broadcaster); vm.prank(recovery); EngineBlox.TxRecord memory tx2 = accountBlox.getTransaction(txId2); diff --git a/test/foundry/unit/GuardController.t.sol b/test/foundry/unit/GuardController.t.sol index f66ea8c6..cfeb7d3f 100644 --- a/test/foundry/unit/GuardController.t.sol +++ b/test/foundry/unit/GuardController.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/execution/GuardController.sol"; diff --git a/test/foundry/unit/PaymentRecipientWhitelist.t.sol b/test/foundry/unit/PaymentRecipientWhitelist.t.sol index b4034b1d..4c416201 100644 --- a/test/foundry/unit/PaymentRecipientWhitelist.t.sol +++ b/test/foundry/unit/PaymentRecipientWhitelist.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/lib/EngineBlox.sol"; diff --git a/test/foundry/unit/RuntimeRBAC.t.sol b/test/foundry/unit/RuntimeRBAC.t.sol index 6789b5a6..b382c947 100644 --- a/test/foundry/unit/RuntimeRBAC.t.sol +++ b/test/foundry/unit/RuntimeRBAC.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/access/RuntimeRBAC.sol"; diff --git a/test/foundry/unit/SecureOwnable.t.sol b/test/foundry/unit/SecureOwnable.t.sol index 9bf3da1c..fff4686d 100644 --- a/test/foundry/unit/SecureOwnable.t.sol +++ b/test/foundry/unit/SecureOwnable.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../helpers/AccountPatternTest.sol"; @@ -208,7 +208,7 @@ contract SecureOwnableTest is CommonBase { function test_UpdateBroadcasterRequest_OwnerCanRequest() public { address newBroadcaster = user1; vm.prank(owner); - uint256 txId = accountBlox.updateBroadcasterRequest(newBroadcaster, 0); + uint256 txId = accountBlox.updateBroadcasterRequest(newBroadcaster, broadcaster); vm.prank(owner); EngineBlox.TxRecord memory txRecord = accountBlox.getTransaction(txId); @@ -220,13 +220,31 @@ contract SecureOwnableTest is CommonBase { function test_UpdateBroadcasterRequest_Revert_Unauthorized() public { vm.prank(attacker); vm.expectRevert(); - accountBlox.updateBroadcasterRequest(user1, 0); + accountBlox.updateBroadcasterRequest(user1, broadcaster); + } + + function test_UpdateBroadcasterRequest_Revert_NoOpReplace() public { + vm.prank(owner); + vm.expectRevert(abi.encodeWithSelector(SharedValidation.InvalidOperation.selector, broadcaster)); + accountBlox.updateBroadcasterRequest(broadcaster, broadcaster); + } + + function test_UpdateBroadcasterRequest_Revert_AlreadyActiveBroadcaster() public { + vm.prank(owner); + uint256 addTxId = accountBlox.updateBroadcasterRequest(user2, address(0)); + advanceTime(DEFAULT_TIMELOCK_PERIOD + 1); + vm.prank(owner); + accountBlox.updateBroadcasterDelayedApproval(addTxId); + + vm.prank(owner); + vm.expectRevert(abi.encodeWithSelector(SharedValidation.ItemAlreadyExists.selector, broadcaster)); + accountBlox.updateBroadcasterRequest(broadcaster, user2); } function test_UpdateBroadcasterDelayedApproval_AfterTimelock() public { address newBroadcaster = user1; vm.prank(owner); - uint256 requestTxId = accountBlox.updateBroadcasterRequest(newBroadcaster, 0); + uint256 requestTxId = accountBlox.updateBroadcasterRequest(newBroadcaster, broadcaster); vm.prank(owner); EngineBlox.TxRecord memory requestTx = accountBlox.getTransaction(requestTxId); uint256 txId = requestTx.txId; @@ -246,7 +264,7 @@ contract SecureOwnableTest is CommonBase { function test_UpdateBroadcasterCancellation_OwnerCanCancel() public { address newBroadcaster = user1; vm.prank(owner); - uint256 requestTxId = accountBlox.updateBroadcasterRequest(newBroadcaster, 0); + uint256 requestTxId = accountBlox.updateBroadcasterRequest(newBroadcaster, broadcaster); vm.prank(owner); EngineBlox.TxRecord memory requestTx = accountBlox.getTransaction(requestTxId); uint256 txId = requestTx.txId; @@ -262,7 +280,7 @@ contract SecureOwnableTest is CommonBase { function test_UpdateBroadcasterRequest_RevokeAtLocation_ZeroAddress() public { // Add a second broadcaster at location 1 first (BROADCASTER_ROLE is protected: cannot revoke the last wallet) vm.prank(owner); - uint256 addTxId = accountBlox.updateBroadcasterRequest(user2, 1); + uint256 addTxId = accountBlox.updateBroadcasterRequest(user2, address(0)); vm.prank(owner); EngineBlox.TxRecord memory addTx = accountBlox.getTransaction(addTxId); advanceTime(DEFAULT_TIMELOCK_PERIOD + 1); @@ -274,7 +292,7 @@ contract SecureOwnableTest is CommonBase { // Request revoke at location 1 (zero address = revoke) vm.prank(owner); - uint256 requestTxId = accountBlox.updateBroadcasterRequest(address(0), 1); + uint256 requestTxId = accountBlox.updateBroadcasterRequest(address(0), user2); vm.prank(owner); EngineBlox.TxRecord memory requestTx = accountBlox.getTransaction(requestTxId); uint256 txId = requestTx.txId; @@ -302,7 +320,7 @@ contract SecureOwnableTest is CommonBase { function testFuzz_UpdateBroadcasterRequest_RevokeAtLocation(uint256 location) public { // Seed broadcaster list to at least two entries (same as test_UpdateBroadcasterRequest_RevokeAtLocation_ZeroAddress) vm.prank(owner); - uint256 addTxId = accountBlox.updateBroadcasterRequest(user2, 1); + uint256 addTxId = accountBlox.updateBroadcasterRequest(user2, address(0)); vm.prank(owner); EngineBlox.TxRecord memory addTx = accountBlox.getTransaction(addTxId); advanceTime(DEFAULT_TIMELOCK_PERIOD + 1); @@ -317,7 +335,7 @@ contract SecureOwnableTest is CommonBase { // Submit revoke-at-location request (address(0) = revoke) vm.prank(owner); - uint256 requestTxId = accountBlox.updateBroadcasterRequest(address(0), loc); + uint256 requestTxId = accountBlox.updateBroadcasterRequest(address(0), before[loc]); vm.prank(owner); EngineBlox.TxRecord memory requestTx = accountBlox.getTransaction(requestTxId); uint256 txId = requestTx.txId; @@ -361,7 +379,7 @@ contract SecureOwnableTest is CommonBase { assertEq(b.length, 1, "exactly one broadcaster initially"); vm.prank(owner); - uint256 requestTxId = accountBlox.updateBroadcasterRequest(address(0), 0); + uint256 requestTxId = accountBlox.updateBroadcasterRequest(address(0), broadcaster); vm.prank(owner); EngineBlox.TxRecord memory requestTx = accountBlox.getTransaction(requestTxId); uint256 txId = requestTx.txId; diff --git a/test/foundry/unit/StateAbstraction.t.sol b/test/foundry/unit/StateAbstraction.t.sol index 740cfd86..bf112ae9 100644 --- a/test/foundry/unit/StateAbstraction.t.sol +++ b/test/foundry/unit/StateAbstraction.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.34; +pragma solidity 0.8.35; import "../CommonBase.sol"; import "../../../contracts/core/lib/EngineBlox.sol"; @@ -37,10 +37,6 @@ contract EngineBloxTest is CommonBase { assertEq(EngineBlox.NATIVE_TRANSFER_SELECTOR, expected); } - function test_MaxResultPreviewBytes_Constant() public { - assertEq(EngineBlox.MAX_RESULT_PREVIEW_BYTES, 32 * 1024); - } - // ============ STATE MANAGEMENT TESTS ============ // Most state management is tested through contract interactions // These tests verify state transitions work correctly diff --git a/truffle-config.cjs b/truffle-config.cjs index 014d8222..60e0d2ae 100644 --- a/truffle-config.cjs +++ b/truffle-config.cjs @@ -154,7 +154,7 @@ module.exports = { // Configure your compilers compilers: { solc: { - version: "0.8.34", + version: "0.8.35", // docker: true, // Use "0.5.1" you've installed locally with docker (default: false) settings: { // See the solidity docs for advice about optimization and evmVersion optimizer: {