From 08fc359810c18ca64f29ba29f21f24ad83b80405 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Fri, 24 Apr 2026 11:43:38 +0300 Subject: [PATCH 01/16] chore: update @xmldom/xmldom package to version 0.8.13 in package-lock.json This commit upgrades the @xmldom/xmldom package from version 0.8.12 to 0.8.13 in the package-lock.json file. The update aims to enhance functionality and maintain compatibility with the latest tools and libraries. --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 48cd252..c48c383 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": { From 88e50a0ca61657eb1d6d643def39d2aec65f8292 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Mon, 27 Apr 2026 17:50:19 +0300 Subject: [PATCH 02/16] feat: add script for deploying BasicERC20 token and update package.json This commit introduces a new script, `create-erc20-token.js`, for interactively deploying a BasicERC20 token. The script prompts for essential token configuration details such as name, symbol, total supply, and addresses for the minter and owner. Additionally, it updates the `package.json` file to include a new command, `create-erc20`, to facilitate the execution of this script. These changes enhance the deployment process for ERC20 tokens within the project. --- package.json | 1 + scripts/deployment/create-erc20-token.js | 255 +++++++++++++++++++++++ 2 files changed, 256 insertions(+) create mode 100644 scripts/deployment/create-erc20-token.js diff --git a/package.json b/package.json index e2724c8..c9b109d 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 0000000..47ddc0f --- /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); +}); From 1a27971b3a5cd976449283a4fb42f00e6d6fe270 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Mon, 27 Apr 2026 17:55:01 +0300 Subject: [PATCH 03/16] chore: update env.deployment.example with security warnings for private key usage This commit adds cautionary notes to the `env.deployment.example` file regarding the use of plain private keys for deployment. It emphasizes that this approach is primarily for local/testing environments and advises against it for production deployments, recommending secure key management practices instead. These changes aim to enhance security awareness and promote best practices for handling sensitive information. --- env.deployment.example | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/env.deployment.example b/env.deployment.example index 2838383..0bd61d2 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 From 72d67dade686c856b296836a901f4c48809400c7 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Tue, 12 May 2026 19:19:47 +0300 Subject: [PATCH 04/16] refactor: enhance transaction validation and execution flow in EngineBlox This commit improves the transaction handling in the EngineBlox library by enforcing target whitelisting during transaction execution and meta-transaction processing. It updates the `validateTransactionExists` function to ensure that transaction IDs are valid within the context of the current transaction counter. Additionally, it refines the documentation for the `executeTransaction` function to clarify the handling of transaction statuses and results. These changes aim to strengthen the security and reliability of transaction operations within the library. --- contracts/core/lib/EngineBlox.sol | 35 ++++++++----------- contracts/core/lib/utils/SharedValidation.sol | 21 ++++------- 2 files changed, 21 insertions(+), 35 deletions(-) diff --git a/contracts/core/lib/EngineBlox.sol b/contracts/core/lib/EngineBlox.sol index 204a876..850710e 100644 --- a/contracts/core/lib/EngineBlox.sol +++ b/contracts/core/lib/EngineBlox.sol @@ -477,10 +477,11 @@ library EngineBlox { _validateExecutionAndHandlerPermissions(self, msg.sender, self.txRecords[txId].params.executionSelector, handlerSelector, TxAction.EXECUTE_TIME_DELAY_APPROVE); _validateTxStatus(self, txId, TxStatus.PENDING); SharedValidation.validateReleaseTime(self.txRecords[txId].releaseTime); - + _validateTargetWhitelist(self, self.txRecords[txId].params.executionSelector, self.txRecords[txId].params.target); + // 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]); @@ -565,12 +566,14 @@ library EngineBlox { _validateMetaTxMatchRecord(self, txId, metaTx.txRecord); _validateMetaTxPaymentMatchRecord(self, txId, metaTx.txRecord); if (!verifySignature(self, metaTx)) revert SharedValidation.InvalidSignature(metaTx.signature); - + + _validateTargetWhitelist(self, self.txRecords[txId].params.executionSelector, self.txRecords[txId].params.target); + 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]); @@ -673,6 +676,7 @@ library EngineBlox { * 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 `result` are written to storage by `_completeTransaction`. */ 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) @@ -698,16 +702,10 @@ library EngineBlox { ); 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); @@ -850,8 +848,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 +862,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)) { @@ -2058,7 +2055,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 @@ -2266,9 +2263,8 @@ library EngineBlox { bool success, bytes memory result ) private { - // enforce that the requested target is whitelisted for this selector. - _validateTargetWhitelist(self, self.txRecords[txId].params.executionSelector, self.txRecords[txId].params.target); - + // Target whitelist is enforced before `executeTransaction` on approval paths (CEI). + // Update storage with new status and result if (success) { self.txRecords[txId].status = TxStatus.COMPLETED; @@ -2296,9 +2292,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 diff --git a/contracts/core/lib/utils/SharedValidation.sol b/contracts/core/lib/utils/SharedValidation.sol index efb58e8..ec62433 100644 --- a/contracts/core/lib/utils/SharedValidation.sol +++ b/contracts/core/lib/utils/SharedValidation.sol @@ -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); @@ -222,14 +221,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 +240,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 +352,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))); } /** From eee83613556342896f760ca80686aadbc2455c5f Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Tue, 12 May 2026 19:22:00 +0300 Subject: [PATCH 05/16] refactor: remove DeadlineInPast error and enhance validation documentation This commit removes the `DeadlineInPast` error from the EngineBlox library and updates related validation functions to improve clarity. The documentation for the `validateMetaTxDeadline` function is refined to specify that a meta-transaction deadline is valid if `block.timestamp` is equal to the deadline. Additionally, the commit updates various test cases to reflect this change, ensuring that the system accurately handles deadline validations for meta-transactions. These modifications aim to streamline error handling and enhance the overall robustness of transaction validation processes. --- TECHNICAL_OVERVIEW.md | 2 +- abi/EngineBlox.abi.json | 16 -------------- contracts/core/lib/EngineBlox.sol | 10 ++++----- docs/core/lib/utils/SharedValidation.md | 22 ++++--------------- sdk/typescript/abi/EngineBlox.abi.json | 16 -------------- sdk/typescript/docs/meta-transactions.md | 6 ++--- sdk/typescript/docs/state-machine-engine.md | 6 ++--- sdk/typescript/utils/contract-errors.ts | 11 ---------- .../fuzz/AuditDerivedAttackVectorsFuzz.t.sol | 20 +++++------------ .../ComprehensiveMetaTransactionFuzz.t.sol | 2 +- .../fuzz/MetaTransactionSecurityFuzz.t.sol | 4 ++-- test/foundry/helpers/PaymentTestHelper.sol | 2 +- 12 files changed, 25 insertions(+), 92 deletions(-) diff --git a/TECHNICAL_OVERVIEW.md b/TECHNICAL_OVERVIEW.md index e36e3fb..b9370b5 100644 --- a/TECHNICAL_OVERVIEW.md +++ b/TECHNICAL_OVERVIEW.md @@ -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/EngineBlox.abi.json b/abi/EngineBlox.abi.json index 215fd56..0ae936a 100644 --- a/abi/EngineBlox.abi.json +++ b/abi/EngineBlox.abi.json @@ -58,22 +58,6 @@ "name": "ConflictingMetaTxPermissions", "type": "error" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "currentTime", - "type": "uint256" - } - ], - "name": "DeadlineInPast", - "type": "error" - }, { "inputs": [ { diff --git a/contracts/core/lib/EngineBlox.sol b/contracts/core/lib/EngineBlox.sol index 850710e..4140995 100644 --- a/contracts/core/lib/EngineBlox.sol +++ b/contracts/core/lib/EngineBlox.sol @@ -473,11 +473,11 @@ 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); - SharedValidation.validateReleaseTime(self.txRecords[txId].releaseTime); _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; @@ -561,14 +561,14 @@ 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); - _validateTargetWhitelist(self, self.txRecords[txId].params.executionSelector, self.txRecords[txId].params.target); - incrementSignerNonce(self, metaTx.params.signer); // EFFECT: Update status to EXECUTING before external call to prevent reentrancy @@ -2263,8 +2263,6 @@ library EngineBlox { bool success, bytes memory result ) private { - // Target whitelist is enforced before `executeTransaction` on approval paths (CEI). - // Update storage with new status and result if (success) { self.txRecords[txId].status = TxStatus.COMPLETED; diff --git a/docs/core/lib/utils/SharedValidation.md b/docs/core/lib/utils/SharedValidation.md index e608ec2..e5a2992 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/sdk/typescript/abi/EngineBlox.abi.json b/sdk/typescript/abi/EngineBlox.abi.json index 215fd56..0ae936a 100644 --- a/sdk/typescript/abi/EngineBlox.abi.json +++ b/sdk/typescript/abi/EngineBlox.abi.json @@ -58,22 +58,6 @@ "name": "ConflictingMetaTxPermissions", "type": "error" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "currentTime", - "type": "uint256" - } - ], - "name": "DeadlineInPast", - "type": "error" - }, { "inputs": [ { diff --git a/sdk/typescript/docs/meta-transactions.md b/sdk/typescript/docs/meta-transactions.md index 8ebb9a3..16776b0 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/state-machine-engine.md b/sdk/typescript/docs/state-machine-engine.md index 0b939a7..ec8b736 100644 --- a/sdk/typescript/docs/state-machine-engine.md +++ b/sdk/typescript/docs/state-machine-engine.md @@ -146,13 +146,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/result/pending set). ### 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 +160,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. diff --git a/sdk/typescript/utils/contract-errors.ts b/sdk/typescript/utils/contract-errors.ts index 00c8369..7a0c4f8 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/test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol b/test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol index 579ebed..b31b8fd 100644 --- a/test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol +++ b/test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol @@ -27,7 +27,7 @@ import "../helpers/PaymentTestHelper.sol"; * - 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 @@ -594,11 +594,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 +614,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/ComprehensiveMetaTransactionFuzz.t.sol b/test/foundry/fuzz/ComprehensiveMetaTransactionFuzz.t.sol index 8922707..e54b138 100644 --- a/test/foundry/fuzz/ComprehensiveMetaTransactionFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveMetaTransactionFuzz.t.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/MetaTransactionSecurityFuzz.t.sol b/test/foundry/fuzz/MetaTransactionSecurityFuzz.t.sol index 856621c..5d97ed5 100644 --- a/test/foundry/fuzz/MetaTransactionSecurityFuzz.t.sol +++ b/test/foundry/fuzz/MetaTransactionSecurityFuzz.t.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/helpers/PaymentTestHelper.sol b/test/foundry/helpers/PaymentTestHelper.sol index fa9eb60..0a3d2c9 100644 --- a/test/foundry/helpers/PaymentTestHelper.sol +++ b/test/foundry/helpers/PaymentTestHelper.sol @@ -255,7 +255,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); From b1a0e822a3c9643d145cd0a6a04305644155e495 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Tue, 12 May 2026 19:37:34 +0300 Subject: [PATCH 06/16] chore: upgrade Solidity compiler version to 0.8.35 across all configurations This commit updates the Solidity compiler version from 0.8.34 to 0.8.35 in the foundry.toml, hardhat.config.ts, truffle-config.cjs, and various contract files. The change ensures compatibility with the latest features and improvements in the Solidity language, enhancing the overall development experience and security of the project. --- contracts/core/access/RuntimeRBAC.sol | 2 +- contracts/core/access/interface/IRuntimeRBAC.sol | 2 +- .../core/access/lib/definitions/RuntimeRBACDefinitions.sol | 2 +- contracts/core/base/BaseStateMachine.sol | 2 +- contracts/core/base/interface/IBaseStateMachine.sol | 2 +- contracts/core/execution/GuardController.sol | 2 +- contracts/core/execution/interface/IGuardController.sol | 2 +- .../execution/lib/definitions/GuardControllerDefinitions.sol | 2 +- contracts/core/lib/EngineBlox.sol | 2 +- contracts/core/lib/interfaces/IDefinition.sol | 2 +- contracts/core/lib/interfaces/IEventForwarder.sol | 2 +- contracts/core/lib/utils/SharedValidation.sol | 2 +- contracts/core/pattern/Account.sol | 2 +- contracts/core/security/SecureOwnable.sol | 2 +- contracts/core/security/interface/ISecureOwnable.sol | 2 +- .../security/lib/definitions/SecureOwnableDefinitions.sol | 2 +- contracts/examples/applications/CopyBlox/CopyBlox.sol | 2 +- contracts/examples/applications/PayBlox/PayBlox.sol | 2 +- .../examples/applications/PayBlox/PayBloxDefinitions.sol | 2 +- contracts/examples/applications/SimpleRWA20/SimpleRWA20.sol | 2 +- .../applications/SimpleRWA20/SimpleRWA20Definitions.sol | 2 +- contracts/examples/applications/SimpleVault/SimpleVault.sol | 2 +- .../applications/SimpleVault/SimpleVaultDefinitions.sol | 2 +- contracts/examples/extra/BasicERC20.sol | 2 +- .../examples/integrations/Safe/GuardianSafe/GuardianSafe.sol | 2 +- .../Safe/GuardianSafe/GuardianSafeDefinitions.sol | 2 +- contracts/examples/templates/AccountBlox.sol | 2 +- contracts/experimental/hook/HookManager.sol | 2 +- contracts/standards/behavior/ICopyable.sol | 2 +- contracts/standards/hooks/IOnActionHook.sol | 2 +- docgen/hardhat.config.cjs | 2 +- foundry.toml | 2 +- hardhat.config.ts | 4 ++-- test/foundry/CommonBase.sol | 2 +- test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveAccessControlFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveCompositeFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveDefinitionSecurityFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveEIP712AndViewFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveEventForwardingFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveGasExhaustionFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveHookSystemFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveInitializationFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveInputValidationFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveMetaTransactionFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensivePaymentSecurityFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveSecurityEdgeCasesFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveStateMachineFuzz.t.sol | 2 +- test/foundry/fuzz/ComprehensiveWhitelistSchemaFuzz.t.sol | 2 +- test/foundry/fuzz/EdgeCasesFuzz.t.sol | 2 +- test/foundry/fuzz/GuardControllerFuzz.t.sol | 2 +- test/foundry/fuzz/MetaTransactionSecurityFuzz.t.sol | 2 +- test/foundry/fuzz/ProtectedResourceFuzz.t.sol | 2 +- test/foundry/fuzz/RBACPermissionFuzz.t.sol | 2 +- test/foundry/fuzz/RuntimeRBACFuzz.t.sol | 2 +- test/foundry/fuzz/SecureOwnableFuzz.t.sol | 2 +- test/foundry/fuzz/StateMachineWorkflowFuzz.t.sol | 2 +- test/foundry/fuzz/SystemMacroSelectorSecurityFuzz.t.sol | 2 +- test/foundry/fuzz/UnregisterFunctionFuzz.t.sol | 2 +- test/foundry/helpers/AccountPatternTest.sol | 2 +- test/foundry/helpers/DefinitionValidator.sol | 2 +- test/foundry/helpers/HookTestBlox.sol | 2 +- test/foundry/helpers/MaliciousDefinitions.sol | 2 +- test/foundry/helpers/MockContracts.sol | 2 +- test/foundry/helpers/PaymentTestHelper.sol | 2 +- test/foundry/helpers/TestDefinitionContracts.sol | 2 +- test/foundry/helpers/TestHelpers.sol | 2 +- test/foundry/helpers/TestStateMachine.sol | 2 +- test/foundry/integration/MetaTransaction.t.sol | 2 +- test/foundry/integration/WhitelistWorkflow.t.sol | 2 +- test/foundry/invariant/RoleInvariants.t.sol | 2 +- test/foundry/invariant/StateMachineInvariants.t.sol | 2 +- test/foundry/invariant/TransactionInvariants.t.sol | 2 +- test/foundry/security/AccessControl.t.sol | 2 +- test/foundry/security/EdgeCases.t.sol | 2 +- test/foundry/security/Reentrancy.t.sol | 2 +- test/foundry/unit/BaseStateMachine.t.sol | 2 +- test/foundry/unit/GuardController.t.sol | 2 +- test/foundry/unit/PaymentRecipientWhitelist.t.sol | 2 +- test/foundry/unit/RuntimeRBAC.t.sol | 2 +- test/foundry/unit/SecureOwnable.t.sol | 2 +- test/foundry/unit/StateAbstraction.t.sol | 2 +- truffle-config.cjs | 2 +- 83 files changed, 84 insertions(+), 84 deletions(-) diff --git a/contracts/core/access/RuntimeRBAC.sol b/contracts/core/access/RuntimeRBAC.sol index f0c8721..fcecc47 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"; diff --git a/contracts/core/access/interface/IRuntimeRBAC.sol b/contracts/core/access/interface/IRuntimeRBAC.sol index ea5aacc..ac65142 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 de4e70a..e927763 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"; diff --git a/contracts/core/base/BaseStateMachine.sol b/contracts/core/base/BaseStateMachine.sol index d5540ae..d373fc6 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"; diff --git a/contracts/core/base/interface/IBaseStateMachine.sol b/contracts/core/base/interface/IBaseStateMachine.sol index 390600c..85fc6cb 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 5fb4e0b..f55c11b 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"; diff --git a/contracts/core/execution/interface/IGuardController.sol b/contracts/core/execution/interface/IGuardController.sol index 362f8a4..0d5747a 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 9001cb4..b779407 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"; diff --git a/contracts/core/lib/EngineBlox.sol b/contracts/core/lib/EngineBlox.sol index 4140995..b3f2f3c 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"; diff --git a/contracts/core/lib/interfaces/IDefinition.sol b/contracts/core/lib/interfaces/IDefinition.sol index 7fe8a41..2ce92c8 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 c9f4e39..94199fc 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"; diff --git a/contracts/core/lib/utils/SharedValidation.sol b/contracts/core/lib/utils/SharedValidation.sol index ec62433..1884ce8 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 diff --git a/contracts/core/pattern/Account.sol b/contracts/core/pattern/Account.sol index 4e2db43..7bb895c 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 7496ce7..86cd533 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"; diff --git a/contracts/core/security/interface/ISecureOwnable.sol b/contracts/core/security/interface/ISecureOwnable.sol index 840c72c..07319e1 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"; diff --git a/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol b/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol index 7d1d1f5..bc65789 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"; diff --git a/contracts/examples/applications/CopyBlox/CopyBlox.sol b/contracts/examples/applications/CopyBlox/CopyBlox.sol index 4ca8c77..bbb5f95 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"; diff --git a/contracts/examples/applications/PayBlox/PayBlox.sol b/contracts/examples/applications/PayBlox/PayBlox.sol index 2307895..17b2c41 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 b9a9c17..d0be6ee 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"; diff --git a/contracts/examples/applications/SimpleRWA20/SimpleRWA20.sol b/contracts/examples/applications/SimpleRWA20/SimpleRWA20.sol index 773f9f2..0cc4cf8 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 0cb8e2e..1726e1d 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"; diff --git a/contracts/examples/applications/SimpleVault/SimpleVault.sol b/contracts/examples/applications/SimpleVault/SimpleVault.sol index 0854dad..718cdf3 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 e78a03b..6b7917a 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"; diff --git a/contracts/examples/extra/BasicERC20.sol b/contracts/examples/extra/BasicERC20.sol index 821240a..81e4101 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 58c5c2e..0a03f65 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 2559173..55c0054 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"; diff --git a/contracts/examples/templates/AccountBlox.sol b/contracts/examples/templates/AccountBlox.sol index 042feed..6e526f8 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 d2a5e00..5dc4067 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 722b6b8..2c8290a 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 45acd72..a2b5eae 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 c525f07..8baf265 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/foundry.toml b/foundry.toml index 29f5150..7b1c192 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 9f4bf55..66d115a 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/test/foundry/CommonBase.sol b/test/foundry/CommonBase.sol index 9598f69..20c012c 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"; diff --git a/test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol b/test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol index b31b8fd..f2b2186 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"; diff --git a/test/foundry/fuzz/ComprehensiveAccessControlFuzz.t.sol b/test/foundry/fuzz/ComprehensiveAccessControlFuzz.t.sol index 245bf67..585a11d 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"; diff --git a/test/foundry/fuzz/ComprehensiveCompositeFuzz.t.sol b/test/foundry/fuzz/ComprehensiveCompositeFuzz.t.sol index e6e671a..c0bf94b 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 89b6d64..0ddf2ea 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"; diff --git a/test/foundry/fuzz/ComprehensiveEIP712AndViewFuzz.t.sol b/test/foundry/fuzz/ComprehensiveEIP712AndViewFuzz.t.sol index 73d4f95..c7fb95e 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 25b9706..a0c5b55 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"; diff --git a/test/foundry/fuzz/ComprehensiveGasExhaustionFuzz.t.sol b/test/foundry/fuzz/ComprehensiveGasExhaustionFuzz.t.sol index 48ecfaa..57415bd 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"; diff --git a/test/foundry/fuzz/ComprehensiveHookSystemFuzz.t.sol b/test/foundry/fuzz/ComprehensiveHookSystemFuzz.t.sol index 3fa8e76..5abace7 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 3e86b94..03a8ddc 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 aca609c..f16a9cb 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"; diff --git a/test/foundry/fuzz/ComprehensiveMetaTransactionFuzz.t.sol b/test/foundry/fuzz/ComprehensiveMetaTransactionFuzz.t.sol index e54b138..4c80664 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"; diff --git a/test/foundry/fuzz/ComprehensivePaymentSecurityFuzz.t.sol b/test/foundry/fuzz/ComprehensivePaymentSecurityFuzz.t.sol index bbcc1f2..98843a4 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"; diff --git a/test/foundry/fuzz/ComprehensiveSecurityEdgeCasesFuzz.t.sol b/test/foundry/fuzz/ComprehensiveSecurityEdgeCasesFuzz.t.sol index 1e2e382..72fdfc7 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 3999a72..d7fa11d 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"; diff --git a/test/foundry/fuzz/ComprehensiveWhitelistSchemaFuzz.t.sol b/test/foundry/fuzz/ComprehensiveWhitelistSchemaFuzz.t.sol index 46b260c..c7e6996 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 67220c0..d23fed1 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"; diff --git a/test/foundry/fuzz/GuardControllerFuzz.t.sol b/test/foundry/fuzz/GuardControllerFuzz.t.sol index 7ad1ac3..ab9932e 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 5d97ed5..ce63abb 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"; diff --git a/test/foundry/fuzz/ProtectedResourceFuzz.t.sol b/test/foundry/fuzz/ProtectedResourceFuzz.t.sol index 29e46dd..05fe3a3 100644 --- a/test/foundry/fuzz/ProtectedResourceFuzz.t.sol +++ b/test/foundry/fuzz/ProtectedResourceFuzz.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/RBACPermissionFuzz.t.sol b/test/foundry/fuzz/RBACPermissionFuzz.t.sol index 00fcbd8..45e67a7 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"; diff --git a/test/foundry/fuzz/RuntimeRBACFuzz.t.sol b/test/foundry/fuzz/RuntimeRBACFuzz.t.sol index 5d36e66..98d4c11 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 b6ec8ac..7ba7a6c 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"; diff --git a/test/foundry/fuzz/StateMachineWorkflowFuzz.t.sol b/test/foundry/fuzz/StateMachineWorkflowFuzz.t.sol index ccbd026..27fc067 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 ba31a87..dd3dbde 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 84e7b27..af46100 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"; diff --git a/test/foundry/helpers/AccountPatternTest.sol b/test/foundry/helpers/AccountPatternTest.sol index f266baf..c2d4f1a 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 3aca549..cf8a78e 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 a7ec381..bbf6009 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 48aa9aa..e0f3c5a 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"; diff --git a/test/foundry/helpers/MockContracts.sol b/test/foundry/helpers/MockContracts.sol index 5fc688a..9b02ade 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 0a3d2c9..7c44194 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"; diff --git a/test/foundry/helpers/TestDefinitionContracts.sol b/test/foundry/helpers/TestDefinitionContracts.sol index 183147f..cfd56f5 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"; diff --git a/test/foundry/helpers/TestHelpers.sol b/test/foundry/helpers/TestHelpers.sol index 71f19a4..e7c6e31 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"; diff --git a/test/foundry/helpers/TestStateMachine.sol b/test/foundry/helpers/TestStateMachine.sol index d6d0ce6..b2b2854 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 7d0c1f6..33e11dd 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 09cbb79..77a88af 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 ff2382a..f25f8df 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 b7fc1f6..5c8bdeb 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 b71db87..2aec020 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"; diff --git a/test/foundry/security/AccessControl.t.sol b/test/foundry/security/AccessControl.t.sol index ec2cafa..783ec64 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"; diff --git a/test/foundry/security/EdgeCases.t.sol b/test/foundry/security/EdgeCases.t.sol index b5c2a7b..6898760 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"; diff --git a/test/foundry/security/Reentrancy.t.sol b/test/foundry/security/Reentrancy.t.sol index 425a39b..8abf6dc 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 e2cfbf7..f7bf159 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"; diff --git a/test/foundry/unit/GuardController.t.sol b/test/foundry/unit/GuardController.t.sol index f66ea8c..cfeb7d3 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 b4034b1..4c41620 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 6789b5a..b382c94 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 9bf3da1..1644c65 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"; diff --git a/test/foundry/unit/StateAbstraction.t.sol b/test/foundry/unit/StateAbstraction.t.sol index 740cfd8..684788a 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"; diff --git a/truffle-config.cjs b/truffle-config.cjs index 014d822..60e0d2a 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: { From 53018140e8d7a02029b7dfd2ef42804c89f46234 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Thu, 14 May 2026 16:08:41 +0300 Subject: [PATCH 07/16] refactor: enhance function permission management in EngineBlox This commit introduces the `isGrantRevocable` boolean to the function schema in the EngineBlox library, allowing for more flexible management of function permissions. When set to true, grants can be removed from any role, including protected roles, while still enforcing the `isProtected` constraint on unregistering functions. The documentation for `addFunctionToRole` and `removeFunctionFromRole` has been updated to reflect these changes, clarifying the conditions under which function permissions can be modified. Additionally, a new error, `GrantNotRevocable`, has been added to handle cases where non-revocable grants are attempted to be removed. These updates aim to improve the clarity and functionality of role management within the library. --- contracts/core/access/RuntimeRBAC.sol | 14 +++++----- .../definitions/RuntimeRBACDefinitions.sol | 2 ++ contracts/core/base/BaseStateMachine.sol | 8 ++++-- contracts/core/execution/GuardController.sol | 1 + .../GuardControllerDefinitions.sol | 12 +++++++++ contracts/core/lib/EngineBlox.sol | 26 +++++++++++-------- contracts/core/lib/utils/SharedValidation.sol | 1 + .../definitions/SecureOwnableDefinitions.sol | 16 ++++++++++++ 8 files changed, 59 insertions(+), 21 deletions(-) diff --git a/contracts/core/access/RuntimeRBAC.sol b/contracts/core/access/RuntimeRBAC.sol index fcecc47..8f56a03 100644 --- a/contracts/core/access/RuntimeRBAC.sol +++ b/contracts/core/access/RuntimeRBAC.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/lib/definitions/RuntimeRBACDefinitions.sol b/contracts/core/access/lib/definitions/RuntimeRBACDefinitions.sol index e927763..7eb09cf 100644 --- a/contracts/core/access/lib/definitions/RuntimeRBACDefinitions.sol +++ b/contracts/core/access/lib/definitions/RuntimeRBACDefinitions.sol @@ -64,6 +64,7 @@ library RuntimeRBACDefinitions { 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 d373fc6..e9bf063 100644 --- a/contracts/core/base/BaseStateMachine.sol +++ b/contracts/core/base/BaseStateMachine.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/execution/GuardController.sol b/contracts/core/execution/GuardController.sol index f55c11b..2839971 100644 --- a/contracts/core/execution/GuardController.sol +++ b/contracts/core/execution/GuardController.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/lib/definitions/GuardControllerDefinitions.sol b/contracts/core/execution/lib/definitions/GuardControllerDefinitions.sol index b779407..729c40b 100644 --- a/contracts/core/execution/lib/definitions/GuardControllerDefinitions.sol +++ b/contracts/core/execution/lib/definitions/GuardControllerDefinitions.sol @@ -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,6 +189,7 @@ library GuardControllerDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayCancelActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: cancelTimeLockExecutionHandlerForSelectors }); @@ -199,6 +202,7 @@ library GuardControllerDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxApproveActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: approveTimeLockExecutionMetaHandlerForSelectors }); @@ -211,6 +215,7 @@ library GuardControllerDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxCancelActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: cancelTimeLockExecutionMetaHandlerForSelectors }); @@ -223,6 +228,7 @@ library GuardControllerDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxRequestApproveActions), enforceHandlerRelations: false, isProtected: true, + isGrantRevocable: false, handlerForSelectors: requestAndApproveExecutionHandlerForSelectors }); @@ -235,6 +241,7 @@ library GuardControllerDefinitions { 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 b3f2f3c..dce59ad 100644 --- a/contracts/core/lib/EngineBlox.sol +++ b/contracts/core/lib/EngineBlox.sol @@ -164,6 +164,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; } @@ -1105,8 +1108,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, @@ -1139,10 +1142,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, @@ -1152,12 +1155,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); } } @@ -1256,7 +1257,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. @@ -1270,6 +1272,7 @@ library EngineBlox { uint16 supportedActionsBitmap, bool enforceHandlerRelations, bool isProtected, + bool isGrantRevocable, bytes4[] memory handlerForSelectors ) public { // Validate that functionSignature matches functionSelector @@ -1320,6 +1323,7 @@ library EngineBlox { schema.supportedActionsBitmap = supportedActionsBitmap; schema.enforceHandlerRelations = enforceHandlerRelations; schema.isProtected = isProtected; + schema.isGrantRevocable = isGrantRevocable; schema.handlerForSelectors = handlerForSelectors; // Add to supportedFunctionsSet diff --git a/contracts/core/lib/utils/SharedValidation.sol b/contracts/core/lib/utils/SharedValidation.sol index 1884ce8..04090a9 100644 --- a/contracts/core/lib/utils/SharedValidation.sol +++ b/contracts/core/lib/utils/SharedValidation.sol @@ -81,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); diff --git a/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol b/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol index bc65789..65b003b 100644 --- a/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol +++ b/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol @@ -130,6 +130,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: transferOwnershipHandlerForSelectors }); @@ -141,6 +142,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: transferOwnershipHandlerForSelectors }); @@ -152,6 +154,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: broadcasterHandlerForSelectors }); @@ -163,6 +166,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: broadcasterHandlerForSelectors }); @@ -174,6 +178,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: recoveryHandlerForSelectors }); @@ -185,6 +190,7 @@ library SecureOwnableDefinitions { 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,6 +227,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: transferOwnershipHandlerForSelectors }); @@ -230,6 +239,7 @@ library SecureOwnableDefinitions { 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,6 +277,7 @@ library SecureOwnableDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(executionApproveCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: false, handlerForSelectors: transferOwnershipExecutionHandlerForSelectors }); @@ -276,6 +289,7 @@ library SecureOwnableDefinitions { 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 }); From 8071b44c98acacd22ebe90ff74fa38635cf7d04c Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Thu, 14 May 2026 16:09:16 +0300 Subject: [PATCH 08/16] refactor: introduce isGrantRevocable flag for enhanced function permission management This commit adds the `isGrantRevocable` boolean to various function schemas across multiple libraries, including PayBlox, SimpleRWA20, SimpleVault, and GuardianSafe. This enhancement allows for more flexible management of function permissions, enabling grants to be removed from any role, including protected roles, when set to true. The change aims to improve the clarity and functionality of role management within the EngineBlox library, ensuring that permissions can be adjusted as needed while maintaining security constraints. Additionally, relevant tests and documentation have been updated to reflect this new capability. --- .../PayBlox/PayBloxDefinitions.sol | 3 + .../SimpleRWA20/SimpleRWA20Definitions.sol | 4 + .../SimpleVault/SimpleVaultDefinitions.sol | 7 + .../GuardianSafe/GuardianSafeDefinitions.sol | 7 + sdk/typescript/docs/runtime-rbac.md | 2 +- sdk/typescript/docs/state-machine-engine.md | 2 +- .../ComprehensiveDefinitionSecurityFuzz.t.sol | 11 ++ test/foundry/fuzz/ProtectedResourceFuzz.t.sol | 173 +++++++++++++++++- .../foundry/fuzz/UnregisterFunctionFuzz.t.sol | 1 + test/foundry/helpers/MaliciousDefinitions.sol | 9 + test/foundry/helpers/PaymentTestHelper.sol | 7 + .../helpers/TestDefinitionContracts.sol | 5 + 12 files changed, 228 insertions(+), 3 deletions(-) diff --git a/contracts/examples/applications/PayBlox/PayBloxDefinitions.sol b/contracts/examples/applications/PayBlox/PayBloxDefinitions.sol index d0be6ee..c628a2c 100644 --- a/contracts/examples/applications/PayBlox/PayBloxDefinitions.sol +++ b/contracts/examples/applications/PayBlox/PayBloxDefinitions.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/SimpleRWA20Definitions.sol b/contracts/examples/applications/SimpleRWA20/SimpleRWA20Definitions.sol index 1726e1d..ea228f9 100644 --- a/contracts/examples/applications/SimpleRWA20/SimpleRWA20Definitions.sol +++ b/contracts/examples/applications/SimpleRWA20/SimpleRWA20Definitions.sol @@ -54,6 +54,7 @@ library SimpleRWA20Definitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxRequestApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: mintHandlerForSelectors }); @@ -65,6 +66,7 @@ library SimpleRWA20Definitions { 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/SimpleVaultDefinitions.sol b/contracts/examples/applications/SimpleVault/SimpleVaultDefinitions.sol index 6b7917a..d147a47 100644 --- a/contracts/examples/applications/SimpleVault/SimpleVaultDefinitions.sol +++ b/contracts/examples/applications/SimpleVault/SimpleVaultDefinitions.sol @@ -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,6 +117,7 @@ library SimpleVaultDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: cancelWithdrawalHandlerForSelectors }); @@ -126,6 +130,7 @@ library SimpleVaultDefinitions { 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/integrations/Safe/GuardianSafe/GuardianSafeDefinitions.sol b/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafeDefinitions.sol index 55c0054..1fc6f77 100644 --- a/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafeDefinitions.sol +++ b/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafeDefinitions.sol @@ -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,6 +98,7 @@ library GuardianSafeDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(timeDelayCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: execSafeTxHandlerForSelectors }); @@ -108,6 +111,7 @@ library GuardianSafeDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxApproveActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: execSafeTxHandlerForSelectors }); @@ -119,6 +123,7 @@ library GuardianSafeDefinitions { supportedActionsBitmap: EngineBlox.createBitmapFromActions(metaTxCancelActions), enforceHandlerRelations: true, isProtected: true, + isGrantRevocable: true, handlerForSelectors: execSafeTxHandlerForSelectors }); @@ -130,6 +135,7 @@ library GuardianSafeDefinitions { 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/sdk/typescript/docs/runtime-rbac.md b/sdk/typescript/docs/runtime-rbac.md index e879c61..b1e6786 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/state-machine-engine.md b/sdk/typescript/docs/state-machine-engine.md index ec8b736..718d888 100644 --- a/sdk/typescript/docs/state-machine-engine.md +++ b/sdk/typescript/docs/state-machine-engine.md @@ -118,7 +118,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 diff --git a/test/foundry/fuzz/ComprehensiveDefinitionSecurityFuzz.t.sol b/test/foundry/fuzz/ComprehensiveDefinitionSecurityFuzz.t.sol index 0ddf2ea..09fa073 100644 --- a/test/foundry/fuzz/ComprehensiveDefinitionSecurityFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveDefinitionSecurityFuzz.t.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/ProtectedResourceFuzz.t.sol b/test/foundry/fuzz/ProtectedResourceFuzz.t.sol index 05fe3a3..d04597d 100644 --- a/test/foundry/fuzz/ProtectedResourceFuzz.t.sol +++ b/test/foundry/fuzz/ProtectedResourceFuzz.t.sol @@ -4,6 +4,7 @@ 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 *; @@ -144,6 +146,175 @@ contract ProtectedResourceFuzzTest is CommonBase { } } + /** + * @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.result, 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.result, expectedError); + } + /** * @dev Fuzz test: Protected roles remain unchanged after any operation */ diff --git a/test/foundry/fuzz/UnregisterFunctionFuzz.t.sol b/test/foundry/fuzz/UnregisterFunctionFuzz.t.sol index af46100..e322b73 100644 --- a/test/foundry/fuzz/UnregisterFunctionFuzz.t.sol +++ b/test/foundry/fuzz/UnregisterFunctionFuzz.t.sol @@ -44,6 +44,7 @@ contract EngineBloxUnregisterHarness { bitmap, true, // enforceHandlerRelations false, + true, handlers ); diff --git a/test/foundry/helpers/MaliciousDefinitions.sol b/test/foundry/helpers/MaliciousDefinitions.sol index e0f3c5a..4323604 100644 --- a/test/foundry/helpers/MaliciousDefinitions.sol +++ b/test/foundry/helpers/MaliciousDefinitions.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/PaymentTestHelper.sol b/test/foundry/helpers/PaymentTestHelper.sol index 7c44194..98294c8 100644 --- a/test/foundry/helpers/PaymentTestHelper.sol +++ b/test/foundry/helpers/PaymentTestHelper.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 ); } @@ -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 cfd56f5..f0c2d9c 100644 --- a/test/foundry/helpers/TestDefinitionContracts.sol +++ b/test/foundry/helpers/TestDefinitionContracts.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 }); From 969f895636870958d0156b1a7a36ed8073932b95 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Wed, 20 May 2026 21:48:13 +0300 Subject: [PATCH 09/16] refactor: remove MAX_RESULT_PREVIEW_BYTES constant and related functionality This commit removes the `MAX_RESULT_PREVIEW_BYTES` constant from the EngineBlox library and associated functions, streamlining the handling of returndata during transaction execution. The `_callWithBoundedReturndata` function has been eliminated, and the transaction execution process now directly utilizes the low-level `call` method. Additionally, documentation has been updated to clarify the changes in returndata handling, ensuring that the SDK and related components reflect the new approach. These modifications aim to enhance code clarity and reduce unnecessary complexity in the EngineBlox library. --- abi/EngineBlox.abi.json | 13 ----- contracts/core/lib/EngineBlox.sol | 53 +------------------ sdk/typescript/abi/EngineBlox.abi.json | 13 ----- sdk/typescript/docs/state-machine-engine.md | 2 +- sdk/typescript/lib/EngineBlox.tsx | 6 --- test/foundry/docs/ATTACK_VECTORS_CODEX.md | 22 ++++---- .../fuzz/AuditDerivedAttackVectorsFuzz.t.sol | 13 ----- test/foundry/unit/StateAbstraction.t.sol | 4 -- 8 files changed, 12 insertions(+), 114 deletions(-) diff --git a/abi/EngineBlox.abi.json b/abi/EngineBlox.abi.json index 0ae936a..0eb1967 100644 --- a/abi/EngineBlox.abi.json +++ b/abi/EngineBlox.abi.json @@ -661,19 +661,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "MAX_RESULT_PREVIEW_BYTES", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "MAX_ROLES", diff --git a/contracts/core/lib/EngineBlox.sol b/contracts/core/lib/EngineBlox.sol index dce59ad..b4afd82 100644 --- a/contracts/core/lib/EngineBlox.sol +++ b/contracts/core/lib/EngineBlox.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; @@ -618,46 +613,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) @@ -672,9 +627,6 @@ 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 @@ -697,10 +649,7 @@ 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 ); diff --git a/sdk/typescript/abi/EngineBlox.abi.json b/sdk/typescript/abi/EngineBlox.abi.json index 0ae936a..0eb1967 100644 --- a/sdk/typescript/abi/EngineBlox.abi.json +++ b/sdk/typescript/abi/EngineBlox.abi.json @@ -661,19 +661,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "MAX_RESULT_PREVIEW_BYTES", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "MAX_ROLES", diff --git a/sdk/typescript/docs/state-machine-engine.md b/sdk/typescript/docs/state-machine-engine.md index 718d888..985b9e6 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`, `result`, `payment` (`PaymentDetails`). The **`result`** field stores callee returndata from `EngineBlox.executeTransaction` (high-level `call`); size is bounded in practice by callee `gasLimit` and the approver’s transaction gas budget. - **`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`. diff --git a/sdk/typescript/lib/EngineBlox.tsx b/sdk/typescript/lib/EngineBlox.tsx index 4da7d3b..135c998 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 ============ /** diff --git a/test/foundry/docs/ATTACK_VECTORS_CODEX.md b/test/foundry/docs/ATTACK_VECTORS_CODEX.md index e665ae8..972de70 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 f2b2186..0aa5cb8 100644 --- a/test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol +++ b/test/foundry/fuzz/AuditDerivedAttackVectorsFuzz.t.sol @@ -22,7 +22,6 @@ 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 @@ -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) // ========================================================================= diff --git a/test/foundry/unit/StateAbstraction.t.sol b/test/foundry/unit/StateAbstraction.t.sol index 684788a..bf112ae 100644 --- a/test/foundry/unit/StateAbstraction.t.sol +++ b/test/foundry/unit/StateAbstraction.t.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 From 0a59fb0beac878f23293ebb5e06f631e78336320 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Thu, 21 May 2026 02:09:16 +0300 Subject: [PATCH 10/16] refactor: enhance transaction result handling in EngineBlox This commit introduces a new `resultHash` field in the `TxRecord` structure to store a commitment to the execution returndata, improving the clarity and integrity of transaction results. The `TxExecutionResult` event is added to emit the full returndata only on terminal execution (COMPLETED/FAILED), allowing for better verification of execution outcomes. Documentation has been updated to reflect these changes, ensuring that the SDK and related components are aligned with the new transaction result handling approach. These modifications aim to enhance the robustness and transparency of transaction execution within the EngineBlox library. --- .../definitions/RuntimeRBACDefinitions.sol | 4 +- .../GuardControllerDefinitions.sol | 16 ++--- contracts/core/lib/EngineBlox.sol | 70 +++++++++++-------- .../core/lib/interfaces/IEventForwarder.sol | 4 +- .../definitions/SecureOwnableDefinitions.sol | 24 +++---- 5 files changed, 64 insertions(+), 54 deletions(-) diff --git a/contracts/core/access/lib/definitions/RuntimeRBACDefinitions.sol b/contracts/core/access/lib/definitions/RuntimeRBACDefinitions.sol index 7eb09cf..e1e0542 100644 --- a/contracts/core/access/lib/definitions/RuntimeRBACDefinitions.sol +++ b/contracts/core/access/lib/definitions/RuntimeRBACDefinitions.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,7 +57,7 @@ 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", diff --git a/contracts/core/execution/lib/definitions/GuardControllerDefinitions.sol b/contracts/core/execution/lib/definitions/GuardControllerDefinitions.sol index 729c40b..7e55945 100644 --- a/contracts/core/execution/lib/definitions/GuardControllerDefinitions.sol +++ b/contracts/core/execution/lib/definitions/GuardControllerDefinitions.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))" ) ); @@ -195,7 +195,7 @@ library GuardControllerDefinitions { // 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", @@ -208,7 +208,7 @@ library GuardControllerDefinitions { // 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", @@ -221,7 +221,7 @@ library GuardControllerDefinitions { // 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", @@ -234,7 +234,7 @@ library GuardControllerDefinitions { // 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", diff --git a/contracts/core/lib/EngineBlox.sol b/contracts/core/lib/EngineBlox.sol index b4afd82..8169d2f 100644 --- a/contracts/core/lib/EngineBlox.sol +++ b/contracts/core/lib/EngineBlox.sol @@ -113,7 +113,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; } @@ -252,9 +254,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 ============ /** @@ -631,7 +637,8 @@ library EngineBlox { * 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 `result` are written to storage by `_completeTransaction`. + * @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) @@ -789,7 +796,7 @@ library EngineBlox { executionParams: executionParams }), message: 0, - result: "", + resultHash: bytes32(0), payment: payment }); } @@ -2078,6 +2085,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) @@ -2095,21 +2104,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, @@ -2117,12 +2122,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 {} } } @@ -2208,30 +2210,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 { - // 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); } /** @@ -2251,7 +2249,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 @@ -2334,7 +2341,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/IEventForwarder.sol b/contracts/core/lib/interfaces/IEventForwarder.sol index 94199fc..9bb224d 100644 --- a/contracts/core/lib/interfaces/IEventForwarder.sol +++ b/contracts/core/lib/interfaces/IEventForwarder.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/security/lib/definitions/SecureOwnableDefinitions.sol b/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol index 65b003b..1b4a391 100644 --- a/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol +++ b/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol @@ -47,12 +47,12 @@ library SecureOwnableDefinitions { // 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,7 +123,7 @@ 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", @@ -135,7 +135,7 @@ library SecureOwnableDefinitions { }); 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", @@ -147,7 +147,7 @@ library SecureOwnableDefinitions { }); 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", @@ -159,7 +159,7 @@ library SecureOwnableDefinitions { }); 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", @@ -171,7 +171,7 @@ library SecureOwnableDefinitions { }); 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", @@ -183,7 +183,7 @@ library SecureOwnableDefinitions { }); 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", From e1d2f744b7134d34aa4e7651cacc2c62da5b0287 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Thu, 21 May 2026 02:10:57 +0300 Subject: [PATCH 11/16] refactor: enhance transaction event structure and result handling in EngineBlox This commit introduces several improvements to the transaction event structure within the EngineBlox library. A new `resultHash` field has been added to the `TransactionEvent` and `TxExecutionResult` events, allowing for better tracking of execution outcomes. The `result` field in the `SecureOperationState` structure has been replaced with `resultHash`, which stores a keccak256 hash of the execution returndata, enhancing data integrity. Additionally, the documentation has been updated to reflect these changes, ensuring consistency across the SDK and related components. These modifications aim to improve the clarity and robustness of transaction handling in the EngineBlox library. --- abi/EngineBlox.abi.json | 1064 +++++++++-------- .../applications/CopyBlox/CopyBlox.sol | 12 +- .../SimpleRWA20/SimpleRWA20Definitions.sol | 8 +- .../SimpleVault/SimpleVaultDefinitions.sol | 4 +- .../GuardianSafe/GuardianSafeDefinitions.sol | 12 +- .../sanity-sdk/guard-controller/base-test.ts | 67 +- .../erc20-mint-controller-tests.ts | 2 +- scripts/sanity-sdk/runtime-rbac/base-test.ts | 50 +- scripts/sanity/guard-controller/base-test.cjs | 2 +- .../erc20-mint-controller-tests.cjs | 2 +- scripts/sanity/runtime-rbac/base-test.cjs | 4 +- scripts/sanity/runtime-rbac/rbac-tests.cjs | 2 +- sdk/typescript/abi/EngineBlox.abi.json | 1064 +++++++++-------- ...tate-abstraction-vs-account-abstraction.md | 2 +- sdk/typescript/docs/state-abstraction.md | 2 +- sdk/typescript/docs/state-machine-engine.md | 13 +- sdk/typescript/interfaces/lib.index.tsx | 2 +- sdk/typescript/lib/EngineBlox.tsx | 10 + sdk/typescript/utils/validations.ts | 17 +- .../fuzz/ComprehensiveAccessControlFuzz.t.sol | 8 +- .../ComprehensiveEventForwardingFuzz.t.sol | 2 + .../fuzz/ComprehensiveGasExhaustionFuzz.t.sol | 71 +- .../ComprehensiveInputValidationFuzz.t.sol | 4 +- .../ComprehensivePaymentSecurityFuzz.t.sol | 2 +- .../fuzz/ComprehensiveStateMachineFuzz.t.sol | 6 +- test/foundry/fuzz/EdgeCasesFuzz.t.sol | 2 +- test/foundry/fuzz/ProtectedResourceFuzz.t.sol | 10 +- test/foundry/fuzz/RBACPermissionFuzz.t.sol | 4 +- test/foundry/helpers/TestHelpers.sol | 9 +- 29 files changed, 1286 insertions(+), 1171 deletions(-) diff --git a/abi/EngineBlox.abi.json b/abi/EngineBlox.abi.json index 0eb1967..09738df 100644 --- a/abi/EngineBlox.abi.json +++ b/abi/EngineBlox.abi.json @@ -1,826 +1,862 @@ [ { + "type": "function", + "name": "ATTACHED_PAYMENT_RECIPIENT_SELECTOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ERC20_TRANSFER_SELECTOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_BATCH_SIZE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_FUNCTIONS", "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_HOOKS_PER_SELECTOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_ROLES", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "NATIVE_TRANSFER_SELECTOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROTOCOL_NAME_HASH", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createMetaTxParams", + "inputs": [ + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "EngineBlox.TxAction", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "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": "EngineBlox.TxAction", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "recoverSigner", + "inputs": [ + { + "name": "messageHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "pure" + }, + { + "type": "event", + "name": "TransactionEvent", + "inputs": [ + { + "name": "txId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "functionHash", + "type": "bytes4", + "indexed": true, + "internalType": "bytes4" + }, + { + "name": "status", + "type": "uint8", + "indexed": false, + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "requester", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "operationType", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TxExecutionResult", + "inputs": [ + { + "name": "txId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "result", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "error", "name": "AlreadyInitialized", - "type": "error" + "inputs": [] }, { + "type": "error", + "name": "BeforeReleaseTime", "inputs": [ { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "currentTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "BeforeReleaseTime", - "type": "error" + ] }, { + "type": "error", + "name": "CannotModifyProtected", "inputs": [ { - "internalType": "bytes32", "name": "resourceId", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } - ], - "name": "CannotModifyProtected", - "type": "error" + ] }, { + "type": "error", + "name": "ChainIdMismatch", "inputs": [ { - "internalType": "uint256", "name": "providedChainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "expectedChainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "ChainIdMismatch", - "type": "error" + ] }, { + "type": "error", + "name": "ConflictingMetaTxPermissions", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "ConflictingMetaTxPermissions", - "type": "error" + ] }, { + "type": "error", + "name": "ECDSAInvalidSignature", "inputs": [ { - "internalType": "address", "name": "recoveredSigner", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "ECDSAInvalidSignature", - "type": "error" + ] }, { + "type": "error", + "name": "FunctionSelectorMismatch", "inputs": [ { - "internalType": "bytes4", "name": "providedSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes4", "name": "derivedSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "FunctionSelectorMismatch", - "type": "error" + ] }, { + "type": "error", + "name": "GasPriceExceedsMax", "inputs": [ { - "internalType": "uint256", "name": "currentGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "GasPriceExceedsMax", - "type": "error" + ] + }, + { + "type": "error", + "name": "GrantNotRevocable", + "inputs": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] }, { + "type": "error", + "name": "HandlerForSelectorMismatch", "inputs": [ { - "internalType": "bytes4", "name": "schemaHandlerForSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes4", "name": "permissionHandlerForSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "HandlerForSelectorMismatch", - "type": "error" + ] }, { + "type": "error", + "name": "IndexOutOfBounds", "inputs": [ { - "internalType": "uint256", "name": "index", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "arrayLength", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "IndexOutOfBounds", - "type": "error" + ] }, { + "type": "error", + "name": "InsufficientBalance", "inputs": [ { - "internalType": "uint256", "name": "currentBalance", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "requiredAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "InsufficientBalance", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidAddress", "inputs": [ { - "internalType": "address", "name": "provided", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "InvalidAddress", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidHandlerSelector", "inputs": [ { - "internalType": "bytes4", "name": "selector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "InvalidHandlerSelector", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidNonce", "inputs": [ { - "internalType": "uint256", "name": "providedNonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "expectedNonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "InvalidNonce", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidSValue", "inputs": [ { - "internalType": "bytes32", "name": "s", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } - ], - "name": "InvalidSValue", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidSignature", "inputs": [ { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "name": "InvalidSignature", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidSignatureLength", "inputs": [ { - "internalType": "uint256", "name": "providedLength", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "expectedLength", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "InvalidSignatureLength", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidVValue", "inputs": [ { - "internalType": "uint8", "name": "v", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } - ], - "name": "InvalidVValue", - "type": "error" + ] }, { + "type": "error", + "name": "ItemAlreadyExists", "inputs": [ { - "internalType": "address", "name": "item", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "ItemAlreadyExists", - "type": "error" + ] }, { + "type": "error", + "name": "ItemNotFound", "inputs": [ { - "internalType": "address", "name": "item", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "ItemNotFound", - "type": "error" + ] }, { + "type": "error", + "name": "MaxFunctionsExceeded", "inputs": [ { - "internalType": "uint256", "name": "currentCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxFunctions", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MaxFunctionsExceeded", - "type": "error" + ] }, { + "type": "error", + "name": "MaxHooksExceeded", "inputs": [ { - "internalType": "uint256", "name": "currentCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxHooks", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MaxHooksExceeded", - "type": "error" + ] }, { + "type": "error", + "name": "MaxRolesExceeded", "inputs": [ { - "internalType": "uint256", "name": "currentCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxRoles", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MaxRolesExceeded", - "type": "error" + ] }, { + "type": "error", + "name": "MaxWalletsZero", "inputs": [ { - "internalType": "uint256", "name": "provided", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MaxWalletsZero", - "type": "error" + ] }, { + "type": "error", + "name": "MetaTxExpired", "inputs": [ { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "currentTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MetaTxExpired", - "type": "error" + ] }, { + "type": "error", + "name": "MetaTxHandlerContractMismatch", "inputs": [ { - "internalType": "address", "name": "signedContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "entryContract", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "MetaTxHandlerContractMismatch", - "type": "error" + ] }, { + "type": "error", + "name": "MetaTxPaymentMismatchStoredTx", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MetaTxPaymentMismatchStoredTx", - "type": "error" + ] }, { + "type": "error", + "name": "MetaTxRecordMismatchStoredTx", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MetaTxRecordMismatchStoredTx", - "type": "error" + ] }, { + "type": "error", + "name": "NoPermission", "inputs": [ { - "internalType": "address", "name": "caller", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "NoPermission", - "type": "error" + ] }, { + "type": "error", + "name": "NotNewAddress", "inputs": [ { - "internalType": "address", "name": "newAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "currentAddress", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "NotNewAddress", - "type": "error" + ] }, { - "inputs": [], + "type": "error", "name": "NotSupported", - "type": "error" + "inputs": [] }, { - "inputs": [], + "type": "error", "name": "OperationFailed", - "type": "error" + "inputs": [] }, { + "type": "error", + "name": "PaymentFailed", "inputs": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes", "name": "reason", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "name": "PaymentFailed", - "type": "error" + ] }, { + "type": "error", + "name": "ResourceAlreadyExists", "inputs": [ { - "internalType": "bytes32", "name": "resourceId", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } - ], - "name": "ResourceAlreadyExists", - "type": "error" + ] }, { + "type": "error", + "name": "ResourceNotFound", "inputs": [ { - "internalType": "bytes32", "name": "resourceId", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } - ], - "name": "ResourceNotFound", - "type": "error" + ] }, { + "type": "error", + "name": "RoleWalletLimitReached", "inputs": [ { - "internalType": "uint256", "name": "currentCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxWallets", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "RoleWalletLimitReached", - "type": "error" + ] }, { + "type": "error", + "name": "SafeERC20FailedOperation", "inputs": [ { - "internalType": "address", "name": "token", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "SafeERC20FailedOperation", - "type": "error" + ] }, { + "type": "error", + "name": "SignerNotAuthorized", "inputs": [ { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "SignerNotAuthorized", - "type": "error" + ] }, { + "type": "error", + "name": "TargetNotWhitelisted", "inputs": [ { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "TargetNotWhitelisted", - "type": "error" + ] }, { + "type": "error", + "name": "TimeLockPeriodZero", "inputs": [ { - "internalType": "uint256", "name": "provided", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "TimeLockPeriodZero", - "type": "error" + ] }, { + "type": "error", + "name": "TransactionIdMismatch", "inputs": [ { - "internalType": "uint256", "name": "expectedTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "providedTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "TransactionIdMismatch", - "type": "error" + ] }, { + "type": "error", + "name": "TransactionStatusMismatch", "inputs": [ { - "internalType": "uint8", "name": "expectedStatus", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "uint8", "name": "currentStatus", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } - ], - "name": "TransactionStatusMismatch", - "type": "error" + ] }, { - "inputs": [], + "type": "error", "name": "ZeroOperationTypeNotAllowed", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes4", - "name": "functionHash", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "indexed": true, - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - } - ], - "name": "TransactionEvent", - "type": "event" - }, - { - "inputs": [], - "name": "ATTACHED_PAYMENT_RECIPIENT_SELECTOR", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ERC20_TRANSFER_SELECTOR", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_BATCH_SIZE", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_FUNCTIONS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_HOOKS_PER_SELECTOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_ROLES", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "NATIVE_TRANSFER_SELECTOR", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROTOCOL_NAME_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "recoverSigner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "EngineBlox.TxAction" - }, - { - "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": "EngineBlox.TxAction" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" + "inputs": [] } ] \ No newline at end of file diff --git a/contracts/examples/applications/CopyBlox/CopyBlox.sol b/contracts/examples/applications/CopyBlox/CopyBlox.sol index bbb5f95..c984e39 100644 --- a/contracts/examples/applications/CopyBlox/CopyBlox.sol +++ b/contracts/examples/applications/CopyBlox/CopyBlox.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/SimpleRWA20/SimpleRWA20Definitions.sol b/contracts/examples/applications/SimpleRWA20/SimpleRWA20Definitions.sol index ea228f9..170ccc6 100644 --- a/contracts/examples/applications/SimpleRWA20/SimpleRWA20Definitions.sol +++ b/contracts/examples/applications/SimpleRWA20/SimpleRWA20Definitions.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,7 +47,7 @@ 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", @@ -59,7 +59,7 @@ library SimpleRWA20Definitions { }); 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", diff --git a/contracts/examples/applications/SimpleVault/SimpleVaultDefinitions.sol b/contracts/examples/applications/SimpleVault/SimpleVaultDefinitions.sol index d147a47..cf339bf 100644 --- a/contracts/examples/applications/SimpleVault/SimpleVaultDefinitions.sol +++ b/contracts/examples/applications/SimpleVault/SimpleVaultDefinitions.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 @@ -123,7 +123,7 @@ library SimpleVaultDefinitions { // 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", diff --git a/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafeDefinitions.sol b/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafeDefinitions.sol index 1fc6f77..98d729b 100644 --- a/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafeDefinitions.sol +++ b/contracts/examples/integrations/Safe/GuardianSafe/GuardianSafeDefinitions.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 @@ -104,7 +104,7 @@ library GuardianSafeDefinitions { // 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", @@ -116,7 +116,7 @@ library GuardianSafeDefinitions { }); 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", @@ -128,7 +128,7 @@ library GuardianSafeDefinitions { }); 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", diff --git a/scripts/sanity-sdk/guard-controller/base-test.ts b/scripts/sanity-sdk/guard-controller/base-test.ts index b8fc6dc..ec29f51 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 102b689..c9a2742 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 96f1be3..6d57bc2 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/guard-controller/base-test.cjs b/scripts/sanity/guard-controller/base-test.cjs index 49b6221..4fa2a18 100644 --- a/scripts/sanity/guard-controller/base-test.cjs +++ b/scripts/sanity/guard-controller/base-test.cjs @@ -1925,7 +1925,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 ddc60c0..e4f1248 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 eb87ae3..056a9d9 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 e4621ed..e52e93a 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/sdk/typescript/abi/EngineBlox.abi.json b/sdk/typescript/abi/EngineBlox.abi.json index 0eb1967..09738df 100644 --- a/sdk/typescript/abi/EngineBlox.abi.json +++ b/sdk/typescript/abi/EngineBlox.abi.json @@ -1,826 +1,862 @@ [ { + "type": "function", + "name": "ATTACHED_PAYMENT_RECIPIENT_SELECTOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ERC20_TRANSFER_SELECTOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_BATCH_SIZE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_FUNCTIONS", "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_HOOKS_PER_SELECTOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_ROLES", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "NATIVE_TRANSFER_SELECTOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROTOCOL_NAME_HASH", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createMetaTxParams", + "inputs": [ + { + "name": "handlerContract", + "type": "address", + "internalType": "address" + }, + { + "name": "handlerSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "action", + "type": "EngineBlox.TxAction", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "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": "EngineBlox.TxAction", + "internalType": "enum EngineBlox.TxAction" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxGasPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signer", + "type": "address", + "internalType": "address" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "recoverSigner", + "inputs": [ + { + "name": "messageHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "pure" + }, + { + "type": "event", + "name": "TransactionEvent", + "inputs": [ + { + "name": "txId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "functionHash", + "type": "bytes4", + "indexed": true, + "internalType": "bytes4" + }, + { + "name": "status", + "type": "uint8", + "indexed": false, + "internalType": "enum EngineBlox.TxStatus" + }, + { + "name": "requester", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "operationType", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "resultHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TxExecutionResult", + "inputs": [ + { + "name": "txId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "result", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "error", "name": "AlreadyInitialized", - "type": "error" + "inputs": [] }, { + "type": "error", + "name": "BeforeReleaseTime", "inputs": [ { - "internalType": "uint256", "name": "releaseTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "currentTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "BeforeReleaseTime", - "type": "error" + ] }, { + "type": "error", + "name": "CannotModifyProtected", "inputs": [ { - "internalType": "bytes32", "name": "resourceId", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } - ], - "name": "CannotModifyProtected", - "type": "error" + ] }, { + "type": "error", + "name": "ChainIdMismatch", "inputs": [ { - "internalType": "uint256", "name": "providedChainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "expectedChainId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "ChainIdMismatch", - "type": "error" + ] }, { + "type": "error", + "name": "ConflictingMetaTxPermissions", "inputs": [ { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "ConflictingMetaTxPermissions", - "type": "error" + ] }, { + "type": "error", + "name": "ECDSAInvalidSignature", "inputs": [ { - "internalType": "address", "name": "recoveredSigner", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "ECDSAInvalidSignature", - "type": "error" + ] }, { + "type": "error", + "name": "FunctionSelectorMismatch", "inputs": [ { - "internalType": "bytes4", "name": "providedSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes4", "name": "derivedSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "FunctionSelectorMismatch", - "type": "error" + ] }, { + "type": "error", + "name": "GasPriceExceedsMax", "inputs": [ { - "internalType": "uint256", "name": "currentGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "GasPriceExceedsMax", - "type": "error" + ] + }, + { + "type": "error", + "name": "GrantNotRevocable", + "inputs": [ + { + "name": "functionSelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] }, { + "type": "error", + "name": "HandlerForSelectorMismatch", "inputs": [ { - "internalType": "bytes4", "name": "schemaHandlerForSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" }, { - "internalType": "bytes4", "name": "permissionHandlerForSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "HandlerForSelectorMismatch", - "type": "error" + ] }, { + "type": "error", + "name": "IndexOutOfBounds", "inputs": [ { - "internalType": "uint256", "name": "index", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "arrayLength", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "IndexOutOfBounds", - "type": "error" + ] }, { + "type": "error", + "name": "InsufficientBalance", "inputs": [ { - "internalType": "uint256", "name": "currentBalance", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "requiredAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "InsufficientBalance", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidAddress", "inputs": [ { - "internalType": "address", "name": "provided", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "InvalidAddress", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidHandlerSelector", "inputs": [ { - "internalType": "bytes4", "name": "selector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "InvalidHandlerSelector", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidNonce", "inputs": [ { - "internalType": "uint256", "name": "providedNonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "expectedNonce", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "InvalidNonce", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidSValue", "inputs": [ { - "internalType": "bytes32", "name": "s", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } - ], - "name": "InvalidSValue", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidSignature", "inputs": [ { - "internalType": "bytes", "name": "signature", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "name": "InvalidSignature", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidSignatureLength", "inputs": [ { - "internalType": "uint256", "name": "providedLength", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "expectedLength", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "InvalidSignatureLength", - "type": "error" + ] }, { + "type": "error", + "name": "InvalidVValue", "inputs": [ { - "internalType": "uint8", "name": "v", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } - ], - "name": "InvalidVValue", - "type": "error" + ] }, { + "type": "error", + "name": "ItemAlreadyExists", "inputs": [ { - "internalType": "address", "name": "item", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "ItemAlreadyExists", - "type": "error" + ] }, { + "type": "error", + "name": "ItemNotFound", "inputs": [ { - "internalType": "address", "name": "item", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "ItemNotFound", - "type": "error" + ] }, { + "type": "error", + "name": "MaxFunctionsExceeded", "inputs": [ { - "internalType": "uint256", "name": "currentCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxFunctions", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MaxFunctionsExceeded", - "type": "error" + ] }, { + "type": "error", + "name": "MaxHooksExceeded", "inputs": [ { - "internalType": "uint256", "name": "currentCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxHooks", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MaxHooksExceeded", - "type": "error" + ] }, { + "type": "error", + "name": "MaxRolesExceeded", "inputs": [ { - "internalType": "uint256", "name": "currentCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxRoles", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MaxRolesExceeded", - "type": "error" + ] }, { + "type": "error", + "name": "MaxWalletsZero", "inputs": [ { - "internalType": "uint256", "name": "provided", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MaxWalletsZero", - "type": "error" + ] }, { + "type": "error", + "name": "MetaTxExpired", "inputs": [ { - "internalType": "uint256", "name": "deadline", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "currentTime", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MetaTxExpired", - "type": "error" + ] }, { + "type": "error", + "name": "MetaTxHandlerContractMismatch", "inputs": [ { - "internalType": "address", "name": "signedContract", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "entryContract", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "MetaTxHandlerContractMismatch", - "type": "error" + ] }, { + "type": "error", + "name": "MetaTxPaymentMismatchStoredTx", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MetaTxPaymentMismatchStoredTx", - "type": "error" + ] }, { + "type": "error", + "name": "MetaTxRecordMismatchStoredTx", "inputs": [ { - "internalType": "uint256", "name": "txId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "MetaTxRecordMismatchStoredTx", - "type": "error" + ] }, { + "type": "error", + "name": "NoPermission", "inputs": [ { - "internalType": "address", "name": "caller", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "NoPermission", - "type": "error" + ] }, { + "type": "error", + "name": "NotNewAddress", "inputs": [ { - "internalType": "address", "name": "newAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "currentAddress", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "NotNewAddress", - "type": "error" + ] }, { - "inputs": [], + "type": "error", "name": "NotSupported", - "type": "error" + "inputs": [] }, { - "inputs": [], + "type": "error", "name": "OperationFailed", - "type": "error" + "inputs": [] }, { + "type": "error", + "name": "PaymentFailed", "inputs": [ { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes", "name": "reason", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "name": "PaymentFailed", - "type": "error" + ] }, { + "type": "error", + "name": "ResourceAlreadyExists", "inputs": [ { - "internalType": "bytes32", "name": "resourceId", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } - ], - "name": "ResourceAlreadyExists", - "type": "error" + ] }, { + "type": "error", + "name": "ResourceNotFound", "inputs": [ { - "internalType": "bytes32", "name": "resourceId", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } - ], - "name": "ResourceNotFound", - "type": "error" + ] }, { + "type": "error", + "name": "RoleWalletLimitReached", "inputs": [ { - "internalType": "uint256", "name": "currentCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "maxWallets", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "RoleWalletLimitReached", - "type": "error" + ] }, { + "type": "error", + "name": "SafeERC20FailedOperation", "inputs": [ { - "internalType": "address", "name": "token", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "SafeERC20FailedOperation", - "type": "error" + ] }, { + "type": "error", + "name": "SignerNotAuthorized", "inputs": [ { - "internalType": "address", "name": "signer", - "type": "address" + "type": "address", + "internalType": "address" } - ], - "name": "SignerNotAuthorized", - "type": "error" + ] }, { + "type": "error", + "name": "TargetNotWhitelisted", "inputs": [ { - "internalType": "address", "name": "target", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4" + "type": "bytes4", + "internalType": "bytes4" } - ], - "name": "TargetNotWhitelisted", - "type": "error" + ] }, { + "type": "error", + "name": "TimeLockPeriodZero", "inputs": [ { - "internalType": "uint256", "name": "provided", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "TimeLockPeriodZero", - "type": "error" + ] }, { + "type": "error", + "name": "TransactionIdMismatch", "inputs": [ { - "internalType": "uint256", "name": "expectedTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "providedTxId", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } - ], - "name": "TransactionIdMismatch", - "type": "error" + ] }, { + "type": "error", + "name": "TransactionStatusMismatch", "inputs": [ { - "internalType": "uint8", "name": "expectedStatus", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "uint8", "name": "currentStatus", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } - ], - "name": "TransactionStatusMismatch", - "type": "error" + ] }, { - "inputs": [], + "type": "error", "name": "ZeroOperationTypeNotAllowed", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "txId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes4", - "name": "functionHash", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "enum EngineBlox.TxStatus", - "name": "status", - "type": "uint8" - }, - { - "indexed": true, - "internalType": "address", - "name": "requester", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "operationType", - "type": "bytes32" - } - ], - "name": "TransactionEvent", - "type": "event" - }, - { - "inputs": [], - "name": "ATTACHED_PAYMENT_RECIPIENT_SELECTOR", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ERC20_TRANSFER_SELECTOR", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_BATCH_SIZE", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_FUNCTIONS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_HOOKS_PER_SELECTOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_ROLES", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "NATIVE_TRANSFER_SELECTOR", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROTOCOL_NAME_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "recoverSigner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handlerContract", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "handlerSelector", - "type": "bytes4" - }, - { - "internalType": "enum EngineBlox.TxAction", - "name": "action", - "type": "EngineBlox.TxAction" - }, - { - "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": "EngineBlox.TxAction" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "internalType": "struct EngineBlox.MetaTxParams", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" + "inputs": [] } ] \ No newline at end of file diff --git a/sdk/typescript/docs/state-abstraction-vs-account-abstraction.md b/sdk/typescript/docs/state-abstraction-vs-account-abstraction.md index 0d67fe4..8703b3c 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 4a61a6e..c8edab4 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 985b9e6..c20ec36 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 stores callee returndata from `EngineBlox.executeTransaction` (high-level `call`); size is bounded in practice by callee `gasLimit` and the approver’s transaction gas budget. +- **`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`. @@ -146,7 +146,7 @@ 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), **`_validateTargetWhitelist` before any external call**, sets `EXECUTING`, runs `executeTransaction`, finalizes via `_completeTransaction` (status/result/pending set). +`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)** @@ -194,11 +194,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/lib.index.tsx b/sdk/typescript/interfaces/lib.index.tsx index 2af8abe..93d3c0c 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 135c998..9b4fa4f 100644 --- a/sdk/typescript/lib/EngineBlox.tsx +++ b/sdk/typescript/lib/EngineBlox.tsx @@ -194,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/utils/validations.ts b/sdk/typescript/utils/validations.ts index 44e4695..4659f31 100644 --- a/sdk/typescript/utils/validations.ts +++ b/sdk/typescript/utils/validations.ts @@ -76,18 +76,13 @@ 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 && txRecord.resultHash !== zeroHash) { + if (!this.isValidHex(txRecord.resultHash) || txRecord.resultHash.length !== 66) { + throw new Error("Invalid hex format for transaction resultHash"); } + throw new Error("resultHash must be zero for pending transactions"); } // Validate payment details if present diff --git a/test/foundry/fuzz/ComprehensiveAccessControlFuzz.t.sol b/test/foundry/fuzz/ComprehensiveAccessControlFuzz.t.sol index 585a11d..e7d64d3 100644 --- a/test/foundry/fuzz/ComprehensiveAccessControlFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveAccessControlFuzz.t.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/ComprehensiveEventForwardingFuzz.t.sol b/test/foundry/fuzz/ComprehensiveEventForwardingFuzz.t.sol index a0c5b55..e589852 100644 --- a/test/foundry/fuzz/ComprehensiveEventForwardingFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveEventForwardingFuzz.t.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 57415bd..0752b2d 100644 --- a/test/foundry/fuzz/ComprehensiveGasExhaustionFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveGasExhaustionFuzz.t.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/ComprehensiveInputValidationFuzz.t.sol b/test/foundry/fuzz/ComprehensiveInputValidationFuzz.t.sol index f16a9cb..8a99970 100644 --- a/test/foundry/fuzz/ComprehensiveInputValidationFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveInputValidationFuzz.t.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/ComprehensivePaymentSecurityFuzz.t.sol b/test/foundry/fuzz/ComprehensivePaymentSecurityFuzz.t.sol index 98843a4..906fe02 100644 --- a/test/foundry/fuzz/ComprehensivePaymentSecurityFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensivePaymentSecurityFuzz.t.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/ComprehensiveStateMachineFuzz.t.sol b/test/foundry/fuzz/ComprehensiveStateMachineFuzz.t.sol index d7fa11d..de575ec 100644 --- a/test/foundry/fuzz/ComprehensiveStateMachineFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveStateMachineFuzz.t.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(); @@ -1000,7 +1000,7 @@ contract ComprehensiveStateMachineFuzzTest is CommonBase { ); 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"); + assertTrue(result.resultHash != bytes32(0) || true, "Failure recorded"); } vm.stopPrank(); } catch (bytes memory reason) { @@ -1201,7 +1201,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/EdgeCasesFuzz.t.sol b/test/foundry/fuzz/EdgeCasesFuzz.t.sol index d23fed1..cfeddc4 100644 --- a/test/foundry/fuzz/EdgeCasesFuzz.t.sol +++ b/test/foundry/fuzz/EdgeCasesFuzz.t.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/ProtectedResourceFuzz.t.sol b/test/foundry/fuzz/ProtectedResourceFuzz.t.sol index d04597d..1c7b193 100644 --- a/test/foundry/fuzz/ProtectedResourceFuzz.t.sol +++ b/test/foundry/fuzz/ProtectedResourceFuzz.t.sol @@ -71,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"); } } @@ -106,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"); } /** @@ -142,7 +142,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"); } } @@ -289,7 +289,7 @@ contract ProtectedResourceFuzzTest is CommonBase { SharedValidation.GrantNotRevocable.selector, GuardControllerDefinitions.EXECUTE_WITH_TIMELOCK_SELECTOR ); - assertEq(txRecord.result, expectedError); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); } /** @@ -312,7 +312,7 @@ contract ProtectedResourceFuzzTest is CommonBase { SharedValidation.GrantNotRevocable.selector, GuardControllerDefinitions.EXECUTE_WITH_TIMELOCK_SELECTOR ); - assertEq(txRecord.result, expectedError); + assertEq(txRecord.resultHash, TestHelpers.executionResultHash(expectedError)); } /** diff --git a/test/foundry/fuzz/RBACPermissionFuzz.t.sol b/test/foundry/fuzz/RBACPermissionFuzz.t.sol index 45e67a7..fb17a16 100644 --- a/test/foundry/fuzz/RBACPermissionFuzz.t.sol +++ b/test/foundry/fuzz/RBACPermissionFuzz.t.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/helpers/TestHelpers.sol b/test/foundry/helpers/TestHelpers.sol index e7c6e31..e21d4aa 100644 --- a/test/foundry/helpers/TestHelpers.sol +++ b/test/foundry/helpers/TestHelpers.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) )); } From 9aa957da7d9128dc6be35e29fd62ace511b475df Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Thu, 21 May 2026 02:41:32 +0300 Subject: [PATCH 12/16] refactor: streamline TxStatus enumeration by removing REJECTED state This commit refines the TxStatus enumeration in the EngineBlox library by removing the REJECTED state, which is not utilized in the current transaction flow. The changes ensure that the transaction statuses are more concise and relevant, focusing on the states that are actively used: UNDEFINED, PENDING, EXECUTING, PROCESSING_PAYMENT, CANCELLED, COMPLETED, and FAILED. Documentation and related tests have been updated to reflect this adjustment, enhancing clarity and maintaining ABI stability for future extensions. These modifications aim to improve the overall efficiency and readability of transaction status management within the EngineBlox library. --- TECHNICAL_OVERVIEW.md | 2 +- contracts/core/lib/EngineBlox.sol | 3 +-- scripts/sanity-sdk/base/test-helpers.ts | 9 +++++---- scripts/sanity/guard-controller/base-test.cjs | 3 +-- scripts/sanity/secure-ownable/base-test.cjs | 9 +++++---- .../secure-ownable/broadcaster-update-tests.cjs | 12 ++++-------- .../secure-ownable/ownership-transfer-tests.cjs | 12 ++++-------- sdk/typescript/README.md | 3 ++- sdk/typescript/docs/state-machine-engine.md | 4 +--- sdk/typescript/types/lib.index.tsx | 3 +-- test/foundry/invariant/TransactionInvariants.t.sol | 3 ++- 11 files changed, 27 insertions(+), 36 deletions(-) diff --git a/TECHNICAL_OVERVIEW.md b/TECHNICAL_OVERVIEW.md index b9370b5..81ac047 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` diff --git a/contracts/core/lib/EngineBlox.sol b/contracts/core/lib/EngineBlox.sol index 8169d2f..2fcf99b 100644 --- a/contracts/core/lib/EngineBlox.sol +++ b/contracts/core/lib/EngineBlox.sol @@ -70,8 +70,7 @@ library EngineBlox { PROCESSING_PAYMENT, CANCELLED, COMPLETED, - FAILED, - REJECTED + FAILED } enum TxAction { diff --git a/scripts/sanity-sdk/base/test-helpers.ts b/scripts/sanity-sdk/base/test-helpers.ts index de3ee81..2b5bef0 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/guard-controller/base-test.cjs b/scripts/sanity/guard-controller/base-test.cjs index 4fa2a18..273c140 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 diff --git a/scripts/sanity/secure-ownable/base-test.cjs b/scripts/sanity/secure-ownable/base-test.cjs index cfee7e4..aa583ed 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 ce4aa88..e287730 100644 --- a/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs +++ b/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs @@ -117,8 +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 - const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); + // 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'); console.log(' πŸŽ‰ Meta-transaction cancellation test completed'); @@ -189,8 +188,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 - const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); + // 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'); console.log(' πŸŽ‰ Time delay cancellation test completed'); @@ -272,8 +270,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 - const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); + // 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' ? statusVal.toNumber() : Number(statusVal); @@ -352,8 +349,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 - const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId), this.getRoleWalletObject('owner')); + // 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' ? statusVal.toNumber() : Number(statusVal); diff --git a/scripts/sanity/secure-ownable/ownership-transfer-tests.cjs b/scripts/sanity/secure-ownable/ownership-transfer-tests.cjs index 63d59a8..28dd923 100644 --- a/scripts/sanity/secure-ownable/ownership-transfer-tests.cjs +++ b/scripts/sanity/secure-ownable/ownership-transfer-tests.cjs @@ -191,8 +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 - const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); + // 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'); console.log(' πŸŽ‰ Step 2 completed: Meta cancel executed'); @@ -309,8 +308,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 - const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); + // 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'); console.log(' πŸŽ‰ Step 4 completed: Time delay cancel executed'); @@ -438,8 +436,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 - const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId), this.getRoleWalletObject('recovery')); + // 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'); console.log(' πŸŽ‰ Step 6 completed: Meta approve executed'); @@ -656,8 +653,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 - const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId), this.getRoleWalletObject('recovery')); + // 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'); console.log(' πŸŽ‰ Step 10 completed: Time delay approve executed'); diff --git a/sdk/typescript/README.md b/sdk/typescript/README.md index 24faaef..007d754 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/docs/state-machine-engine.md b/sdk/typescript/docs/state-machine-engine.md index c20ec36..6b6e61c 100644 --- a/sdk/typescript/docs/state-machine-engine.md +++ b/sdk/typescript/docs/state-machine-engine.md @@ -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 diff --git a/sdk/typescript/types/lib.index.tsx b/sdk/typescript/types/lib.index.tsx index f3f94d4..e156b80 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/test/foundry/invariant/TransactionInvariants.t.sol b/test/foundry/invariant/TransactionInvariants.t.sol index 2aec020..edc0810 100644 --- a/test/foundry/invariant/TransactionInvariants.t.sol +++ b/test/foundry/invariant/TransactionInvariants.t.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 ); } } From 9993182a4fbc6923d1ae51b9326503981e626e31 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Sat, 23 May 2026 23:19:31 +0300 Subject: [PATCH 13/16] refactor: update broadcaster management functions for address-based role changes This commit refines the broadcaster management functions in the SecureOwnable contract by changing the parameters of `updateBroadcasterRequest` and `executeBroadcasterUpdate` to accept addresses instead of an index. The new approach allows for more direct management of broadcaster roles by specifying the current broadcaster to replace or revoke. Additionally, the internal validation function `_validateBroadcasterUpdatePair` has been introduced to ensure proper role management during updates. Documentation has been updated to reflect these changes, enhancing clarity and usability in broadcaster role management. --- contracts/core/security/SecureOwnable.sol | 85 ++++++++----------- .../security/interface/ISecureOwnable.sol | 8 +- .../definitions/SecureOwnableDefinitions.sol | 8 +- 3 files changed, 45 insertions(+), 56 deletions(-) diff --git a/contracts/core/security/SecureOwnable.sol b/contracts/core/security/SecureOwnable.sol index 86cd533..e778d6b 100644 --- a/contracts/core/security/SecureOwnable.sol +++ b/contracts/core/security/SecureOwnable.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,41 @@ 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); + return; + } + 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 07319e1..504cda3 100644 --- a/contracts/core/security/interface/ISecureOwnable.sol +++ b/contracts/core/security/interface/ISecureOwnable.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 1b4a391..11b8562 100644 --- a/contracts/core/security/lib/definitions/SecureOwnableDefinitions.sol +++ b/contracts/core/security/lib/definitions/SecureOwnableDefinitions.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,7 +40,7 @@ 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)")); @@ -232,7 +232,7 @@ library SecureOwnableDefinitions { }); schemas[9] = EngineBlox.FunctionSchema({ - functionSignature: "updateBroadcasterRequest(address,uint256)", + functionSignature: "updateBroadcasterRequest(address,address)", functionSelector: UPDATE_BROADCASTER_REQUEST_SELECTOR, operationType: BROADCASTER_UPDATE, operationName: "BROADCASTER_UPDATE", @@ -282,7 +282,7 @@ library SecureOwnableDefinitions { }); schemas[13] = EngineBlox.FunctionSchema({ - functionSignature: "executeBroadcasterUpdate(address,uint256)", + functionSignature: "executeBroadcasterUpdate(address,address)", functionSelector: UPDATE_BROADCASTER_SELECTOR, operationType: BROADCASTER_UPDATE, operationName: "BROADCASTER_UPDATE", From e13f9a819f1af3a5f91ff56e638268f045a6f764 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Sat, 23 May 2026 23:20:00 +0300 Subject: [PATCH 14/16] refactor: update ABI definitions and enhance function parameters for improved clarity This commit modifies the ABI definitions across multiple contracts, including AccountBlox, EngineBlox, SecureOwnable, SimpleRWA20, SimpleVault, and others. Key changes include the introduction of new error types, such as `AlreadyInitialized`, `BeforeReleaseTime`, and `ChainIdMismatch`, to enhance error handling. Additionally, the parameters for functions like `updateBroadcasterRequest` have been updated to accept addresses instead of indices, improving clarity in broadcaster management. The `receive` and `fallback` functions have been clearly defined to ensure proper handling of incoming transactions. Documentation has been updated to reflect these changes, ensuring consistency and clarity across the SDK and related components. --- abi/AccountBlox.abi.json | 3723 +++++++------ abi/EngineBlox.abi.json | 1083 ++-- abi/SecureOwnable.abi.json | 2680 ++++----- abi/SimpleRWA20.abi.json | 4946 +++++++++-------- abi/SimpleVault.abi.json | 3802 ++++++------- .../broadcaster-update-tests.ts | 8 +- .../secure-ownable/meta-tx-execution-tests.ts | 2 +- .../broadcaster-update-tests.cjs | 4 +- sdk/typescript/abi/AccountBlox.abi.json | 3723 +++++++------ sdk/typescript/abi/EngineBlox.abi.json | 1083 ++-- sdk/typescript/abi/SecureOwnable.abi.json | 2680 ++++----- sdk/typescript/abi/SimpleRWA20.abi.json | 4946 +++++++++-------- sdk/typescript/abi/SimpleVault.abi.json | 3802 ++++++------- .../contracts/core/SecureOwnable.tsx | 4 +- sdk/typescript/docs/api-reference.md | 9 +- sdk/typescript/docs/examples-basic.md | 6 +- sdk/typescript/docs/secure-ownable.md | 11 +- .../interfaces/core.security.index.tsx | 2 +- sdk/typescript/types/core.security.index.tsx | 4 +- sdk/typescript/utils/interface-ids.tsx | 2 +- test/foundry/CommonBase.sol | 2 +- test/foundry/fuzz/SecureOwnableFuzz.t.sol | 4 +- test/foundry/security/AccessControl.t.sol | 2 +- test/foundry/security/EdgeCases.t.sol | 6 +- test/foundry/unit/BaseStateMachine.t.sol | 2 +- test/foundry/unit/SecureOwnable.t.sol | 18 +- 26 files changed, 16434 insertions(+), 16120 deletions(-) diff --git a/abi/AccountBlox.abi.json b/abi/AccountBlox.abi.json index f18208a..f5bcdae 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/EngineBlox.abi.json b/abi/EngineBlox.abi.json index 09738df..215fd56 100644 --- a/abi/EngineBlox.abi.json +++ b/abi/EngineBlox.abi.json @@ -1,862 +1,855 @@ [ { - "type": "function", - "name": "ATTACHED_PAYMENT_RECIPIENT_SELECTOR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "ERC20_TRANSFER_SELECTOR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_BATCH_SIZE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_FUNCTIONS", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_HOOKS_PER_SELECTOR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_ROLES", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "NATIVE_TRANSFER_SELECTOR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PROTOCOL_NAME_HASH", "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "VERSION", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "view" + "name": "AlreadyInitialized", + "type": "error" }, { - "type": "function", - "name": "createMetaTxParams", "inputs": [ { - "name": "handlerContract", - "type": "address", - "internalType": "address" - }, - { - "name": "handlerSelector", - "type": "bytes4", - "internalType": "bytes4" - }, - { - "name": "action", - "type": "EngineBlox.TxAction", - "internalType": "enum EngineBlox.TxAction" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxGasPrice", - "type": "uint256", - "internalType": "uint256" + "internalType": "uint256", + "name": "releaseTime", + "type": "uint256" }, { - "name": "signer", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "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": "EngineBlox.TxAction", - "internalType": "enum EngineBlox.TxAction" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxGasPrice", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "signer", - "type": "address", - "internalType": "address" - } - ] + "internalType": "uint256", + "name": "currentTime", + "type": "uint256" } ], - "stateMutability": "view" + "name": "BeforeReleaseTime", + "type": "error" }, { - "type": "function", - "name": "recoverSigner", "inputs": [ { - "name": "messageHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "signature", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" + "internalType": "bytes32", + "name": "resourceId", + "type": "bytes32" } ], - "stateMutability": "pure" + "name": "CannotModifyProtected", + "type": "error" }, { - "type": "event", - "name": "TransactionEvent", "inputs": [ { - "name": "txId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "functionHash", - "type": "bytes4", - "indexed": true, - "internalType": "bytes4" - }, - { - "name": "status", - "type": "uint8", - "indexed": false, - "internalType": "enum EngineBlox.TxStatus" - }, - { - "name": "requester", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "target", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "operationType", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" + "internalType": "uint256", + "name": "providedChainId", + "type": "uint256" }, { - "name": "resultHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" + "internalType": "uint256", + "name": "expectedChainId", + "type": "uint256" } ], - "anonymous": false + "name": "ChainIdMismatch", + "type": "error" }, { - "type": "event", - "name": "TxExecutionResult", "inputs": [ { - "name": "txId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "result", - "type": "bytes", - "indexed": false, - "internalType": "bytes" + "internalType": "bytes4", + "name": "functionSelector", + "type": "bytes4" } ], - "anonymous": false - }, - { - "type": "error", - "name": "AlreadyInitialized", - "inputs": [] + "name": "ConflictingMetaTxPermissions", + "type": "error" }, { - "type": "error", - "name": "BeforeReleaseTime", "inputs": [ { - "name": "releaseTime", - "type": "uint256", - "internalType": "uint256" + "internalType": "uint256", + "name": "deadline", + "type": "uint256" }, { + "internalType": "uint256", "name": "currentTime", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "CannotModifyProtected", - "inputs": [ - { - "name": "resourceId", - "type": "bytes32", - "internalType": "bytes32" + "type": "uint256" } - ] - }, - { - "type": "error", - "name": "ChainIdMismatch", - "inputs": [ - { - "name": "providedChainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "expectedChainId", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ConflictingMetaTxPermissions", - "inputs": [ - { - "name": "functionSelector", - "type": "bytes4", - "internalType": "bytes4" - } - ] + ], + "name": "DeadlineInPast", + "type": "error" }, { - "type": "error", - "name": "ECDSAInvalidSignature", "inputs": [ { + "internalType": "address", "name": "recoveredSigner", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "ECDSAInvalidSignature", + "type": "error" }, { - "type": "error", - "name": "FunctionSelectorMismatch", "inputs": [ { + "internalType": "bytes4", "name": "providedSelector", - "type": "bytes4", - "internalType": "bytes4" + "type": "bytes4" }, { + "internalType": "bytes4", "name": "derivedSelector", - "type": "bytes4", - "internalType": "bytes4" + "type": "bytes4" } - ] + ], + "name": "FunctionSelectorMismatch", + "type": "error" }, { - "type": "error", - "name": "GasPriceExceedsMax", "inputs": [ { + "internalType": "uint256", "name": "currentGasPrice", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "GrantNotRevocable", - "inputs": [ - { - "name": "functionSelector", - "type": "bytes4", - "internalType": "bytes4" + "type": "uint256" } - ] + ], + "name": "GasPriceExceedsMax", + "type": "error" }, { - "type": "error", - "name": "HandlerForSelectorMismatch", "inputs": [ { + "internalType": "bytes4", "name": "schemaHandlerForSelector", - "type": "bytes4", - "internalType": "bytes4" + "type": "bytes4" }, { + "internalType": "bytes4", "name": "permissionHandlerForSelector", - "type": "bytes4", - "internalType": "bytes4" + "type": "bytes4" } - ] + ], + "name": "HandlerForSelectorMismatch", + "type": "error" }, { - "type": "error", - "name": "IndexOutOfBounds", "inputs": [ { + "internalType": "uint256", "name": "index", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "arrayLength", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "IndexOutOfBounds", + "type": "error" }, { - "type": "error", - "name": "InsufficientBalance", "inputs": [ { + "internalType": "uint256", "name": "currentBalance", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "requiredAmount", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "InsufficientBalance", + "type": "error" }, { - "type": "error", - "name": "InvalidAddress", "inputs": [ { + "internalType": "address", "name": "provided", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "InvalidAddress", + "type": "error" }, { - "type": "error", - "name": "InvalidHandlerSelector", "inputs": [ { + "internalType": "bytes4", "name": "selector", - "type": "bytes4", - "internalType": "bytes4" + "type": "bytes4" } - ] + ], + "name": "InvalidHandlerSelector", + "type": "error" }, { - "type": "error", - "name": "InvalidNonce", "inputs": [ { + "internalType": "uint256", "name": "providedNonce", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "expectedNonce", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "InvalidNonce", + "type": "error" }, { - "type": "error", - "name": "InvalidSValue", "inputs": [ { + "internalType": "bytes32", "name": "s", - "type": "bytes32", - "internalType": "bytes32" + "type": "bytes32" } - ] + ], + "name": "InvalidSValue", + "type": "error" }, { - "type": "error", - "name": "InvalidSignature", "inputs": [ { + "internalType": "bytes", "name": "signature", - "type": "bytes", - "internalType": "bytes" + "type": "bytes" } - ] + ], + "name": "InvalidSignature", + "type": "error" }, { - "type": "error", - "name": "InvalidSignatureLength", "inputs": [ { + "internalType": "uint256", "name": "providedLength", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "expectedLength", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "InvalidSignatureLength", + "type": "error" }, { - "type": "error", - "name": "InvalidVValue", "inputs": [ { + "internalType": "uint8", "name": "v", - "type": "uint8", - "internalType": "uint8" + "type": "uint8" } - ] + ], + "name": "InvalidVValue", + "type": "error" }, { - "type": "error", - "name": "ItemAlreadyExists", "inputs": [ { + "internalType": "address", "name": "item", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "ItemAlreadyExists", + "type": "error" }, { - "type": "error", - "name": "ItemNotFound", "inputs": [ { + "internalType": "address", "name": "item", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "ItemNotFound", + "type": "error" }, { - "type": "error", - "name": "MaxFunctionsExceeded", "inputs": [ { + "internalType": "uint256", "name": "currentCount", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "maxFunctions", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MaxFunctionsExceeded", + "type": "error" }, { - "type": "error", - "name": "MaxHooksExceeded", "inputs": [ { + "internalType": "uint256", "name": "currentCount", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "maxHooks", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MaxHooksExceeded", + "type": "error" }, { - "type": "error", - "name": "MaxRolesExceeded", "inputs": [ { + "internalType": "uint256", "name": "currentCount", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "maxRoles", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MaxRolesExceeded", + "type": "error" }, { - "type": "error", - "name": "MaxWalletsZero", "inputs": [ { + "internalType": "uint256", "name": "provided", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MaxWalletsZero", + "type": "error" }, { - "type": "error", - "name": "MetaTxExpired", "inputs": [ { + "internalType": "uint256", "name": "deadline", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "currentTime", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MetaTxExpired", + "type": "error" }, { - "type": "error", - "name": "MetaTxHandlerContractMismatch", "inputs": [ { + "internalType": "address", "name": "signedContract", - "type": "address", - "internalType": "address" + "type": "address" }, { + "internalType": "address", "name": "entryContract", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "MetaTxHandlerContractMismatch", + "type": "error" }, { - "type": "error", - "name": "MetaTxPaymentMismatchStoredTx", "inputs": [ { + "internalType": "uint256", "name": "txId", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MetaTxPaymentMismatchStoredTx", + "type": "error" }, { - "type": "error", - "name": "MetaTxRecordMismatchStoredTx", "inputs": [ { + "internalType": "uint256", "name": "txId", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MetaTxRecordMismatchStoredTx", + "type": "error" }, { - "type": "error", - "name": "NoPermission", "inputs": [ { + "internalType": "address", "name": "caller", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "NoPermission", + "type": "error" }, { - "type": "error", - "name": "NotNewAddress", "inputs": [ { + "internalType": "address", "name": "newAddress", - "type": "address", - "internalType": "address" + "type": "address" }, { + "internalType": "address", "name": "currentAddress", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "NotNewAddress", + "type": "error" }, { - "type": "error", + "inputs": [], "name": "NotSupported", - "inputs": [] + "type": "error" }, { - "type": "error", + "inputs": [], "name": "OperationFailed", - "inputs": [] + "type": "error" }, { - "type": "error", - "name": "PaymentFailed", "inputs": [ { + "internalType": "address", "name": "recipient", - "type": "address", - "internalType": "address" + "type": "address" }, { + "internalType": "uint256", "name": "amount", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "bytes", "name": "reason", - "type": "bytes", - "internalType": "bytes" + "type": "bytes" } - ] + ], + "name": "PaymentFailed", + "type": "error" }, { - "type": "error", - "name": "ResourceAlreadyExists", "inputs": [ { + "internalType": "bytes32", "name": "resourceId", - "type": "bytes32", - "internalType": "bytes32" + "type": "bytes32" } - ] + ], + "name": "ResourceAlreadyExists", + "type": "error" }, { - "type": "error", - "name": "ResourceNotFound", "inputs": [ { + "internalType": "bytes32", "name": "resourceId", - "type": "bytes32", - "internalType": "bytes32" + "type": "bytes32" } - ] + ], + "name": "ResourceNotFound", + "type": "error" }, { - "type": "error", - "name": "RoleWalletLimitReached", "inputs": [ { + "internalType": "uint256", "name": "currentCount", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "maxWallets", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "RoleWalletLimitReached", + "type": "error" }, { - "type": "error", - "name": "SafeERC20FailedOperation", "inputs": [ { + "internalType": "address", "name": "token", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "SafeERC20FailedOperation", + "type": "error" }, { - "type": "error", - "name": "SignerNotAuthorized", "inputs": [ { + "internalType": "address", "name": "signer", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "SignerNotAuthorized", + "type": "error" }, { - "type": "error", - "name": "TargetNotWhitelisted", "inputs": [ { + "internalType": "address", "name": "target", - "type": "address", - "internalType": "address" + "type": "address" }, { + "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4", - "internalType": "bytes4" + "type": "bytes4" } - ] + ], + "name": "TargetNotWhitelisted", + "type": "error" }, { - "type": "error", - "name": "TimeLockPeriodZero", "inputs": [ { + "internalType": "uint256", "name": "provided", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "TimeLockPeriodZero", + "type": "error" }, { - "type": "error", - "name": "TransactionIdMismatch", "inputs": [ { + "internalType": "uint256", "name": "expectedTxId", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "providedTxId", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "TransactionIdMismatch", + "type": "error" }, { - "type": "error", - "name": "TransactionStatusMismatch", "inputs": [ { + "internalType": "uint8", "name": "expectedStatus", - "type": "uint8", - "internalType": "uint8" + "type": "uint8" }, { + "internalType": "uint8", "name": "currentStatus", - "type": "uint8", - "internalType": "uint8" + "type": "uint8" } - ] + ], + "name": "TransactionStatusMismatch", + "type": "error" }, { - "type": "error", + "inputs": [], "name": "ZeroOperationTypeNotAllowed", - "inputs": [] + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "txId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "functionHash", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "enum EngineBlox.TxStatus", + "name": "status", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "requester", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "operationType", + "type": "bytes32" + } + ], + "name": "TransactionEvent", + "type": "event" + }, + { + "inputs": [], + "name": "ATTACHED_PAYMENT_RECIPIENT_SELECTOR", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ERC20_TRANSFER_SELECTOR", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_BATCH_SIZE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_FUNCTIONS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_HOOKS_PER_SELECTOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_RESULT_PREVIEW_BYTES", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_ROLES", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "NATIVE_TRANSFER_SELECTOR", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROTOCOL_NAME_HASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "recoverSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "handlerContract", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "handlerSelector", + "type": "bytes4" + }, + { + "internalType": "enum EngineBlox.TxAction", + "name": "action", + "type": "EngineBlox.TxAction" + }, + { + "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": "EngineBlox.TxAction" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxGasPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "internalType": "struct EngineBlox.MetaTxParams", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" } ] \ No newline at end of file diff --git a/abi/SecureOwnable.abi.json b/abi/SecureOwnable.abi.json index 530c027..e5b866f 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 ea8c49b..e763927 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 02e196b..ca46d2d 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/scripts/sanity-sdk/secure-ownable/broadcaster-update-tests.ts b/scripts/sanity-sdk/secure-ownable/broadcaster-update-tests.ts index e8f128e..3ccf779 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 1feb1b7..ce4e959 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/secure-ownable/broadcaster-update-tests.cjs b/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs index e287730..1b30a23 100644 --- a/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs +++ b/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs @@ -386,7 +386,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') ); @@ -465,7 +465,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/sdk/typescript/abi/AccountBlox.abi.json b/sdk/typescript/abi/AccountBlox.abi.json index f18208a..f5bcdae 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/EngineBlox.abi.json b/sdk/typescript/abi/EngineBlox.abi.json index 09738df..215fd56 100644 --- a/sdk/typescript/abi/EngineBlox.abi.json +++ b/sdk/typescript/abi/EngineBlox.abi.json @@ -1,862 +1,855 @@ [ { - "type": "function", - "name": "ATTACHED_PAYMENT_RECIPIENT_SELECTOR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "ERC20_TRANSFER_SELECTOR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_BATCH_SIZE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_FUNCTIONS", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_HOOKS_PER_SELECTOR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_ROLES", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "NATIVE_TRANSFER_SELECTOR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PROTOCOL_NAME_HASH", "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "VERSION", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "view" + "name": "AlreadyInitialized", + "type": "error" }, { - "type": "function", - "name": "createMetaTxParams", "inputs": [ { - "name": "handlerContract", - "type": "address", - "internalType": "address" - }, - { - "name": "handlerSelector", - "type": "bytes4", - "internalType": "bytes4" - }, - { - "name": "action", - "type": "EngineBlox.TxAction", - "internalType": "enum EngineBlox.TxAction" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxGasPrice", - "type": "uint256", - "internalType": "uint256" + "internalType": "uint256", + "name": "releaseTime", + "type": "uint256" }, { - "name": "signer", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "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": "EngineBlox.TxAction", - "internalType": "enum EngineBlox.TxAction" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxGasPrice", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "signer", - "type": "address", - "internalType": "address" - } - ] + "internalType": "uint256", + "name": "currentTime", + "type": "uint256" } ], - "stateMutability": "view" + "name": "BeforeReleaseTime", + "type": "error" }, { - "type": "function", - "name": "recoverSigner", "inputs": [ { - "name": "messageHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "signature", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" + "internalType": "bytes32", + "name": "resourceId", + "type": "bytes32" } ], - "stateMutability": "pure" + "name": "CannotModifyProtected", + "type": "error" }, { - "type": "event", - "name": "TransactionEvent", "inputs": [ { - "name": "txId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "functionHash", - "type": "bytes4", - "indexed": true, - "internalType": "bytes4" - }, - { - "name": "status", - "type": "uint8", - "indexed": false, - "internalType": "enum EngineBlox.TxStatus" - }, - { - "name": "requester", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "target", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "operationType", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" + "internalType": "uint256", + "name": "providedChainId", + "type": "uint256" }, { - "name": "resultHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" + "internalType": "uint256", + "name": "expectedChainId", + "type": "uint256" } ], - "anonymous": false + "name": "ChainIdMismatch", + "type": "error" }, { - "type": "event", - "name": "TxExecutionResult", "inputs": [ { - "name": "txId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "result", - "type": "bytes", - "indexed": false, - "internalType": "bytes" + "internalType": "bytes4", + "name": "functionSelector", + "type": "bytes4" } ], - "anonymous": false - }, - { - "type": "error", - "name": "AlreadyInitialized", - "inputs": [] + "name": "ConflictingMetaTxPermissions", + "type": "error" }, { - "type": "error", - "name": "BeforeReleaseTime", "inputs": [ { - "name": "releaseTime", - "type": "uint256", - "internalType": "uint256" + "internalType": "uint256", + "name": "deadline", + "type": "uint256" }, { + "internalType": "uint256", "name": "currentTime", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "CannotModifyProtected", - "inputs": [ - { - "name": "resourceId", - "type": "bytes32", - "internalType": "bytes32" + "type": "uint256" } - ] - }, - { - "type": "error", - "name": "ChainIdMismatch", - "inputs": [ - { - "name": "providedChainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "expectedChainId", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ConflictingMetaTxPermissions", - "inputs": [ - { - "name": "functionSelector", - "type": "bytes4", - "internalType": "bytes4" - } - ] + ], + "name": "DeadlineInPast", + "type": "error" }, { - "type": "error", - "name": "ECDSAInvalidSignature", "inputs": [ { + "internalType": "address", "name": "recoveredSigner", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "ECDSAInvalidSignature", + "type": "error" }, { - "type": "error", - "name": "FunctionSelectorMismatch", "inputs": [ { + "internalType": "bytes4", "name": "providedSelector", - "type": "bytes4", - "internalType": "bytes4" + "type": "bytes4" }, { + "internalType": "bytes4", "name": "derivedSelector", - "type": "bytes4", - "internalType": "bytes4" + "type": "bytes4" } - ] + ], + "name": "FunctionSelectorMismatch", + "type": "error" }, { - "type": "error", - "name": "GasPriceExceedsMax", "inputs": [ { + "internalType": "uint256", "name": "currentGasPrice", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "maxGasPrice", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "GrantNotRevocable", - "inputs": [ - { - "name": "functionSelector", - "type": "bytes4", - "internalType": "bytes4" + "type": "uint256" } - ] + ], + "name": "GasPriceExceedsMax", + "type": "error" }, { - "type": "error", - "name": "HandlerForSelectorMismatch", "inputs": [ { + "internalType": "bytes4", "name": "schemaHandlerForSelector", - "type": "bytes4", - "internalType": "bytes4" + "type": "bytes4" }, { + "internalType": "bytes4", "name": "permissionHandlerForSelector", - "type": "bytes4", - "internalType": "bytes4" + "type": "bytes4" } - ] + ], + "name": "HandlerForSelectorMismatch", + "type": "error" }, { - "type": "error", - "name": "IndexOutOfBounds", "inputs": [ { + "internalType": "uint256", "name": "index", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "arrayLength", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "IndexOutOfBounds", + "type": "error" }, { - "type": "error", - "name": "InsufficientBalance", "inputs": [ { + "internalType": "uint256", "name": "currentBalance", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "requiredAmount", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "InsufficientBalance", + "type": "error" }, { - "type": "error", - "name": "InvalidAddress", "inputs": [ { + "internalType": "address", "name": "provided", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "InvalidAddress", + "type": "error" }, { - "type": "error", - "name": "InvalidHandlerSelector", "inputs": [ { + "internalType": "bytes4", "name": "selector", - "type": "bytes4", - "internalType": "bytes4" + "type": "bytes4" } - ] + ], + "name": "InvalidHandlerSelector", + "type": "error" }, { - "type": "error", - "name": "InvalidNonce", "inputs": [ { + "internalType": "uint256", "name": "providedNonce", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "expectedNonce", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "InvalidNonce", + "type": "error" }, { - "type": "error", - "name": "InvalidSValue", "inputs": [ { + "internalType": "bytes32", "name": "s", - "type": "bytes32", - "internalType": "bytes32" + "type": "bytes32" } - ] + ], + "name": "InvalidSValue", + "type": "error" }, { - "type": "error", - "name": "InvalidSignature", "inputs": [ { + "internalType": "bytes", "name": "signature", - "type": "bytes", - "internalType": "bytes" + "type": "bytes" } - ] + ], + "name": "InvalidSignature", + "type": "error" }, { - "type": "error", - "name": "InvalidSignatureLength", "inputs": [ { + "internalType": "uint256", "name": "providedLength", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "expectedLength", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "InvalidSignatureLength", + "type": "error" }, { - "type": "error", - "name": "InvalidVValue", "inputs": [ { + "internalType": "uint8", "name": "v", - "type": "uint8", - "internalType": "uint8" + "type": "uint8" } - ] + ], + "name": "InvalidVValue", + "type": "error" }, { - "type": "error", - "name": "ItemAlreadyExists", "inputs": [ { + "internalType": "address", "name": "item", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "ItemAlreadyExists", + "type": "error" }, { - "type": "error", - "name": "ItemNotFound", "inputs": [ { + "internalType": "address", "name": "item", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "ItemNotFound", + "type": "error" }, { - "type": "error", - "name": "MaxFunctionsExceeded", "inputs": [ { + "internalType": "uint256", "name": "currentCount", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "maxFunctions", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MaxFunctionsExceeded", + "type": "error" }, { - "type": "error", - "name": "MaxHooksExceeded", "inputs": [ { + "internalType": "uint256", "name": "currentCount", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "maxHooks", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MaxHooksExceeded", + "type": "error" }, { - "type": "error", - "name": "MaxRolesExceeded", "inputs": [ { + "internalType": "uint256", "name": "currentCount", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "maxRoles", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MaxRolesExceeded", + "type": "error" }, { - "type": "error", - "name": "MaxWalletsZero", "inputs": [ { + "internalType": "uint256", "name": "provided", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MaxWalletsZero", + "type": "error" }, { - "type": "error", - "name": "MetaTxExpired", "inputs": [ { + "internalType": "uint256", "name": "deadline", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "currentTime", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MetaTxExpired", + "type": "error" }, { - "type": "error", - "name": "MetaTxHandlerContractMismatch", "inputs": [ { + "internalType": "address", "name": "signedContract", - "type": "address", - "internalType": "address" + "type": "address" }, { + "internalType": "address", "name": "entryContract", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "MetaTxHandlerContractMismatch", + "type": "error" }, { - "type": "error", - "name": "MetaTxPaymentMismatchStoredTx", "inputs": [ { + "internalType": "uint256", "name": "txId", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MetaTxPaymentMismatchStoredTx", + "type": "error" }, { - "type": "error", - "name": "MetaTxRecordMismatchStoredTx", "inputs": [ { + "internalType": "uint256", "name": "txId", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "MetaTxRecordMismatchStoredTx", + "type": "error" }, { - "type": "error", - "name": "NoPermission", "inputs": [ { + "internalType": "address", "name": "caller", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "NoPermission", + "type": "error" }, { - "type": "error", - "name": "NotNewAddress", "inputs": [ { + "internalType": "address", "name": "newAddress", - "type": "address", - "internalType": "address" + "type": "address" }, { + "internalType": "address", "name": "currentAddress", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "NotNewAddress", + "type": "error" }, { - "type": "error", + "inputs": [], "name": "NotSupported", - "inputs": [] + "type": "error" }, { - "type": "error", + "inputs": [], "name": "OperationFailed", - "inputs": [] + "type": "error" }, { - "type": "error", - "name": "PaymentFailed", "inputs": [ { + "internalType": "address", "name": "recipient", - "type": "address", - "internalType": "address" + "type": "address" }, { + "internalType": "uint256", "name": "amount", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "bytes", "name": "reason", - "type": "bytes", - "internalType": "bytes" + "type": "bytes" } - ] + ], + "name": "PaymentFailed", + "type": "error" }, { - "type": "error", - "name": "ResourceAlreadyExists", "inputs": [ { + "internalType": "bytes32", "name": "resourceId", - "type": "bytes32", - "internalType": "bytes32" + "type": "bytes32" } - ] + ], + "name": "ResourceAlreadyExists", + "type": "error" }, { - "type": "error", - "name": "ResourceNotFound", "inputs": [ { + "internalType": "bytes32", "name": "resourceId", - "type": "bytes32", - "internalType": "bytes32" + "type": "bytes32" } - ] + ], + "name": "ResourceNotFound", + "type": "error" }, { - "type": "error", - "name": "RoleWalletLimitReached", "inputs": [ { + "internalType": "uint256", "name": "currentCount", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "maxWallets", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "RoleWalletLimitReached", + "type": "error" }, { - "type": "error", - "name": "SafeERC20FailedOperation", "inputs": [ { + "internalType": "address", "name": "token", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "SafeERC20FailedOperation", + "type": "error" }, { - "type": "error", - "name": "SignerNotAuthorized", "inputs": [ { + "internalType": "address", "name": "signer", - "type": "address", - "internalType": "address" + "type": "address" } - ] + ], + "name": "SignerNotAuthorized", + "type": "error" }, { - "type": "error", - "name": "TargetNotWhitelisted", "inputs": [ { + "internalType": "address", "name": "target", - "type": "address", - "internalType": "address" + "type": "address" }, { + "internalType": "bytes4", "name": "functionSelector", - "type": "bytes4", - "internalType": "bytes4" + "type": "bytes4" } - ] + ], + "name": "TargetNotWhitelisted", + "type": "error" }, { - "type": "error", - "name": "TimeLockPeriodZero", "inputs": [ { + "internalType": "uint256", "name": "provided", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "TimeLockPeriodZero", + "type": "error" }, { - "type": "error", - "name": "TransactionIdMismatch", "inputs": [ { + "internalType": "uint256", "name": "expectedTxId", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" }, { + "internalType": "uint256", "name": "providedTxId", - "type": "uint256", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "TransactionIdMismatch", + "type": "error" }, { - "type": "error", - "name": "TransactionStatusMismatch", "inputs": [ { + "internalType": "uint8", "name": "expectedStatus", - "type": "uint8", - "internalType": "uint8" + "type": "uint8" }, { + "internalType": "uint8", "name": "currentStatus", - "type": "uint8", - "internalType": "uint8" + "type": "uint8" } - ] + ], + "name": "TransactionStatusMismatch", + "type": "error" }, { - "type": "error", + "inputs": [], "name": "ZeroOperationTypeNotAllowed", - "inputs": [] + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "txId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "functionHash", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "enum EngineBlox.TxStatus", + "name": "status", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "requester", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "operationType", + "type": "bytes32" + } + ], + "name": "TransactionEvent", + "type": "event" + }, + { + "inputs": [], + "name": "ATTACHED_PAYMENT_RECIPIENT_SELECTOR", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ERC20_TRANSFER_SELECTOR", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_BATCH_SIZE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_FUNCTIONS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_HOOKS_PER_SELECTOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_RESULT_PREVIEW_BYTES", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_ROLES", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "NATIVE_TRANSFER_SELECTOR", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROTOCOL_NAME_HASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "recoverSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "handlerContract", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "handlerSelector", + "type": "bytes4" + }, + { + "internalType": "enum EngineBlox.TxAction", + "name": "action", + "type": "EngineBlox.TxAction" + }, + { + "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": "EngineBlox.TxAction" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxGasPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "internalType": "struct EngineBlox.MetaTxParams", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" } ] \ No newline at end of file diff --git a/sdk/typescript/abi/SecureOwnable.abi.json b/sdk/typescript/abi/SecureOwnable.abi.json index 530c027..e5b866f 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 ea8c49b..e763927 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 02e196b..ca46d2d 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 460ee4d..b75833b 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 e94432b..9c961d8 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 7e0bd6c..e52533e 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/secure-ownable.md b/sdk/typescript/docs/secure-ownable.md index 976fa39..ccb388a 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/interfaces/core.security.index.tsx b/sdk/typescript/interfaces/core.security.index.tsx index af36ffe..3dbd904 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/types/core.security.index.tsx b/sdk/typescript/types/core.security.index.tsx index a922d22..f8e6e52 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/utils/interface-ids.tsx b/sdk/typescript/utils/interface-ids.tsx index 6853bfb..70d848f 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/test/foundry/CommonBase.sol b/test/foundry/CommonBase.sol index 20c012c..a53e824 100644 --- a/test/foundry/CommonBase.sol +++ b/test/foundry/CommonBase.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/fuzz/SecureOwnableFuzz.t.sol b/test/foundry/fuzz/SecureOwnableFuzz.t.sol index 7ba7a6c..ed21e1a 100644 --- a/test/foundry/fuzz/SecureOwnableFuzz.t.sol +++ b/test/foundry/fuzz/SecureOwnableFuzz.t.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/security/AccessControl.t.sol b/test/foundry/security/AccessControl.t.sol index 783ec64..eca371b 100644 --- a/test/foundry/security/AccessControl.t.sol +++ b/test/foundry/security/AccessControl.t.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 6898760..1ee4016 100644 --- a/test/foundry/security/EdgeCases.t.sol +++ b/test/foundry/security/EdgeCases.t.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/unit/BaseStateMachine.t.sol b/test/foundry/unit/BaseStateMachine.t.sol index f7bf159..bedcce8 100644 --- a/test/foundry/unit/BaseStateMachine.t.sol +++ b/test/foundry/unit/BaseStateMachine.t.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/SecureOwnable.t.sol b/test/foundry/unit/SecureOwnable.t.sol index 1644c65..c7acd4d 100644 --- a/test/foundry/unit/SecureOwnable.t.sol +++ b/test/foundry/unit/SecureOwnable.t.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,13 @@ 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_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 +246,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 +262,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 +274,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 +302,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 +317,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 +361,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; From 3f19495a617d0a3e688dfd2370da5e78a1a49ec9 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Mon, 25 May 2026 00:29:40 +0300 Subject: [PATCH 15/16] refactor: enhance broadcaster update validation in SecureOwnable contract This commit improves the validation logic in the `updateBroadcasterRequest` function of the SecureOwnable contract. It adds checks to prevent no-op replacements by ensuring that the new broadcaster is not the same as the current one. Additionally, it maintains existing checks to ensure that a new broadcaster cannot be set if they already hold the role. Corresponding unit tests have been added to verify these changes, ensuring robust error handling and clarity in broadcaster management. --- contracts/core/security/SecureOwnable.sol | 6 ++++-- test/foundry/unit/SecureOwnable.t.sol | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/contracts/core/security/SecureOwnable.sol b/contracts/core/security/SecureOwnable.sol index e778d6b..7c75ab5 100644 --- a/contracts/core/security/SecureOwnable.sol +++ b/contracts/core/security/SecureOwnable.sol @@ -398,9 +398,11 @@ abstract contract SecureOwnable is BaseStateMachine, ISecureOwnable { bytes32 role = EngineBlox.BROADCASTER_ROLE; if (currentBroadcaster != address(0)) { if (!hasRole(role, currentBroadcaster)) revert SharedValidation.ItemNotFound(currentBroadcaster); - return; } - if (hasRole(role, newBroadcaster)) revert SharedValidation.ItemAlreadyExists(newBroadcaster); + if (newBroadcaster != address(0)) { + if (newBroadcaster == currentBroadcaster) revert SharedValidation.InvalidOperation(newBroadcaster); + if (hasRole(role, newBroadcaster)) revert SharedValidation.ItemAlreadyExists(newBroadcaster); + } } /** diff --git a/test/foundry/unit/SecureOwnable.t.sol b/test/foundry/unit/SecureOwnable.t.sol index c7acd4d..fff4686 100644 --- a/test/foundry/unit/SecureOwnable.t.sol +++ b/test/foundry/unit/SecureOwnable.t.sol @@ -223,6 +223,24 @@ contract SecureOwnableTest is CommonBase { 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); From 9a0e2eafdf24adf9bf04bb6af43df1f6a7342330 Mon Sep 17 00:00:00 2001 From: JaCoderX Date: Mon, 25 May 2026 00:35:42 +0300 Subject: [PATCH 16/16] refactor: improve transaction retrieval logic in broadcaster and ownership transfer tests This commit enhances the transaction retrieval logic in the `BroadcasterUpdateTests` and `OwnershipTransferTests` by ensuring that the transaction status is fetched correctly after cancellation and completion. The code has been updated to remove commented-out lines and streamline the retrieval process, improving readability and maintainability of the test scripts. Additionally, validation checks for transaction statuses have been reinforced to ensure accurate assertions during testing. --- .../secure-ownable/broadcaster-update-tests.cjs | 12 ++++++++---- .../secure-ownable/ownership-transfer-tests.cjs | 12 ++++++++---- sdk/typescript/utils/validations.ts | 11 +++++++---- .../foundry/fuzz/ComprehensiveStateMachineFuzz.t.sol | 5 +---- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs b/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs index 1b30a23..4483006 100644 --- a/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs +++ b/scripts/sanity/secure-ownable/broadcaster-update-tests.cjs @@ -117,7 +117,8 @@ 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 const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); + // 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'); console.log(' πŸŽ‰ Meta-transaction cancellation test completed'); @@ -188,7 +189,8 @@ 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 const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); + // 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'); console.log(' πŸŽ‰ Time delay cancellation test completed'); @@ -270,7 +272,8 @@ 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 const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); + // 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' ? statusVal.toNumber() : Number(statusVal); @@ -349,7 +352,8 @@ 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 const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId), this.getRoleWalletObject('owner')); + // 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' ? statusVal.toNumber() : Number(statusVal); diff --git a/scripts/sanity/secure-ownable/ownership-transfer-tests.cjs b/scripts/sanity/secure-ownable/ownership-transfer-tests.cjs index 28dd923..b49947e 100644 --- a/scripts/sanity/secure-ownable/ownership-transfer-tests.cjs +++ b/scripts/sanity/secure-ownable/ownership-transfer-tests.cjs @@ -191,7 +191,8 @@ 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 const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); + // 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'); console.log(' πŸŽ‰ Step 2 completed: Meta cancel executed'); @@ -308,7 +309,8 @@ 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 const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId)); + // 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'); console.log(' πŸŽ‰ Step 4 completed: Time delay cancel executed'); @@ -436,7 +438,8 @@ 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 const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId), this.getRoleWalletObject('recovery')); + // 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'); console.log(' πŸŽ‰ Step 6 completed: Meta approve executed'); @@ -653,7 +656,8 @@ 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 const tx = await this.callContractMethod(this.contract.methods.getTransaction(txRecord.txId), this.getRoleWalletObject('recovery')); + // 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'); console.log(' πŸŽ‰ Step 10 completed: Time delay approve executed'); diff --git a/sdk/typescript/utils/validations.ts b/sdk/typescript/utils/validations.ts index 4659f31..8c57259 100644 --- a/sdk/typescript/utils/validations.ts +++ b/sdk/typescript/utils/validations.ts @@ -78,10 +78,13 @@ export class ContractValidations { // Validate resultHash (must be zero for pending transactions) const zeroHash = '0x' + '0'.repeat(64); - if (txRecord.resultHash && txRecord.resultHash !== zeroHash) { - if (!this.isValidHex(txRecord.resultHash) || txRecord.resultHash.length !== 66) { - throw new Error("Invalid hex format for transaction resultHash"); - } + 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"); } diff --git a/test/foundry/fuzz/ComprehensiveStateMachineFuzz.t.sol b/test/foundry/fuzz/ComprehensiveStateMachineFuzz.t.sol index de575ec..0ef2f61 100644 --- a/test/foundry/fuzz/ComprehensiveStateMachineFuzz.t.sol +++ b/test/foundry/fuzz/ComprehensiveStateMachineFuzz.t.sol @@ -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.resultHash != bytes32(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();