{
  "version": "1.0.0",
  "generated": "2026-06-30T07:34:53.822Z",
  "totalContracts": 11,
  "domains": {
    "accounts": {
      "description": "Smart account contracts for ERC-4337 account abstraction",
      "service": "fabric-auth",
      "contracts": {
        "FabricAccount": {
          "name": "FabricAccount",
          "domain": "accounts",
          "service": "fabric-auth",
          "upgradeable": true,
          "ozPatterns": [
            "UUPSUpgradeable",
            "OwnableUpgradeable",
            "ReentrancyGuardUpgradeable",
            "IAccount (ERC-4337)",
            "IERC1271"
          ],
          "functions": [
            {
              "name": "ENTRY_POINT",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "SESSION_KEY_MODULE_ID",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "SOCIAL_RECOVERY_MODULE_ID",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "UPGRADE_INTERFACE_VERSION",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "addDeposit",
              "inputs": [],
              "outputs": [],
              "stateMutability": "payable"
            },
            {
              "name": "addSessionKey",
              "inputs": [
                {
                  "name": "data",
                  "type": "tuple"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "execute",
              "inputs": [
                {
                  "name": "target",
                  "type": "address"
                },
                {
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "executeBatch",
              "inputs": [
                {
                  "name": "targets",
                  "type": "address[]"
                },
                {
                  "name": "values",
                  "type": "uint256[]"
                },
                {
                  "name": "datas",
                  "type": "bytes[]"
                }
              ],
              "outputs": [
                {
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "executeRecoveryOwnershipTransfer",
              "inputs": [
                {
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "getDeposit",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getImplementation",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getModule",
              "inputs": [
                {
                  "name": "moduleId",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getNonce",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getSessionKeyData",
              "inputs": [
                {
                  "name": "sessionKey",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "initialize",
              "inputs": [
                {
                  "name": "initialOwner",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "initializeWithModules",
              "inputs": [
                {
                  "name": "initialOwner",
                  "type": "address"
                },
                {
                  "name": "moduleIds",
                  "type": "bytes32[]"
                },
                {
                  "name": "moduleAddresses",
                  "type": "address[]"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "isInitialized",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isModuleEnabled",
              "inputs": [
                {
                  "name": "module",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isSessionKeyValid",
              "inputs": [
                {
                  "name": "sessionKey",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isValidSignature",
              "inputs": [
                {
                  "name": "hash",
                  "type": "bytes32"
                },
                {
                  "name": "signature",
                  "type": "bytes"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes4"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "owner",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "proxiableUUID",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "removeSessionKey",
              "inputs": [
                {
                  "name": "sessionKey",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "renounceOwnership",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setModule",
              "inputs": [
                {
                  "name": "moduleId",
                  "type": "bytes32"
                },
                {
                  "name": "module",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setSubscriptionContract",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "transferOwnership",
              "inputs": [
                {
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "upgradeToAndCall",
              "inputs": [
                {
                  "name": "newImplementation",
                  "type": "address"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "outputs": [],
              "stateMutability": "payable"
            },
            {
              "name": "validateUserOp",
              "inputs": [
                {
                  "name": "userOp",
                  "type": "tuple"
                },
                {
                  "name": "userOpHash",
                  "type": "bytes32"
                },
                {
                  "name": "missingAccountFunds",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "validationData",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "withdrawDepositTo",
              "inputs": [
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            }
          ],
          "events": [
            {
              "name": "AccountInitialized",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "BatchExecuted",
              "inputs": [
                {
                  "name": "count",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Executed",
              "inputs": [
                {
                  "name": "target",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "value",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "data",
                  "type": "bytes",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Initialized",
              "inputs": [
                {
                  "name": "version",
                  "type": "uint64",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ModuleEnabled",
              "inputs": [
                {
                  "name": "module",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "enabled",
                  "type": "bool",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ModuleSet",
              "inputs": [
                {
                  "name": "moduleId",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "module",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "OwnershipTransferred",
              "inputs": [
                {
                  "name": "previousOwner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newOwner",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "RecoveryOwnershipTransferred",
              "inputs": [
                {
                  "name": "previousOwner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newOwner",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "Upgraded",
              "inputs": [
                {
                  "name": "implementation",
                  "type": "address",
                  "indexed": true
                }
              ]
            }
          ],
          "errors": [
            {
              "name": "AddressEmptyCode",
              "inputs": [
                {
                  "name": "target",
                  "type": "address"
                }
              ]
            },
            {
              "name": "BatchLengthMismatch",
              "inputs": []
            },
            {
              "name": "ERC1967InvalidImplementation",
              "inputs": [
                {
                  "name": "implementation",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC1967NonPayable",
              "inputs": []
            },
            {
              "name": "EmptyBatch",
              "inputs": []
            },
            {
              "name": "ExecutionFailed",
              "inputs": []
            },
            {
              "name": "FailedCall",
              "inputs": []
            },
            {
              "name": "InvalidCallDataSelector",
              "inputs": []
            },
            {
              "name": "InvalidImplementation",
              "inputs": []
            },
            {
              "name": "InvalidInitialization",
              "inputs": []
            },
            {
              "name": "InvalidModule",
              "inputs": []
            },
            {
              "name": "InvalidOwner",
              "inputs": []
            },
            {
              "name": "ModuleNotEnabled",
              "inputs": []
            },
            {
              "name": "NotInitializing",
              "inputs": []
            },
            {
              "name": "OnlyEntryPoint",
              "inputs": []
            },
            {
              "name": "OnlyOwnerOrEntryPoint",
              "inputs": []
            },
            {
              "name": "OnlyOwnerOrSelf",
              "inputs": []
            },
            {
              "name": "OnlyRecoveryModule",
              "inputs": []
            },
            {
              "name": "OwnableInvalidOwner",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ]
            },
            {
              "name": "OwnableUnauthorizedAccount",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ]
            },
            {
              "name": "PrefundFailed",
              "inputs": [
                {
                  "name": "required",
                  "type": "uint256"
                },
                {
                  "name": "available",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ReentrancyGuardReentrantCall",
              "inputs": []
            },
            {
              "name": "UUPSUnauthorizedCallContext",
              "inputs": []
            },
            {
              "name": "UUPSUnsupportedProxiableUUID",
              "inputs": [
                {
                  "name": "slot",
                  "type": "bytes32"
                }
              ]
            }
          ],
          "deployments": [
            {
              "chain": "Anvil Local",
              "chainId": 31337,
              "type": "testnet",
              "address": "0x44ca7705B9898c1fd5fdF66eA17298aa4a65866B",
              "explorerUrl": ""
            },
            {
              "chain": "Ethereum Sepolia",
              "chainId": 11155111,
              "type": "testnet",
              "address": "0xab9F09483d120Bc7b786FF671C5C397847fDD8FB",
              "explorerUrl": "https://sepolia.etherscan.io/address/0xab9F09483d120Bc7b786FF671C5C397847fDD8FB"
            }
          ]
        },
        "FabricAccountFactory": {
          "name": "FabricAccountFactory",
          "domain": "accounts",
          "service": "fabric-auth",
          "upgradeable": true,
          "ozPatterns": [
            "UUPSUpgradeable",
            "OwnableUpgradeable"
          ],
          "functions": [
            {
              "name": "ENTRY_POINT",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "MIN_TIMELOCK_DELAY",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "SESSION_KEY_MODULE_ID",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "SOCIAL_RECOVERY_MODULE_ID",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "TIMELOCK_DELAY",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "VERSION",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "accountAt",
              "inputs": [
                {
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "accountCount",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "accountImplementation",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "addEntryPointStake",
              "inputs": [
                {
                  "name": "unstakeDelaySec",
                  "type": "uint32"
                }
              ],
              "outputs": [],
              "stateMutability": "payable"
            },
            {
              "name": "cancelEnterpriseImplementationChange",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "cancelImplementationChange",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "checkAccountHealth",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "isHealthy",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "createAccount",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "salt",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "createAccountBatch",
              "inputs": [
                {
                  "name": "owners",
                  "type": "address[]"
                },
                {
                  "name": "salts",
                  "type": "bytes32[]"
                }
              ],
              "outputs": [
                {
                  "name": "accounts",
                  "type": "address[]"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "createEnterpriseAccount",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "salt",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "currentVersion",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "defaultRecoveryModule",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "defaultSessionKeyModule",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "deployAccountWithModules",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "userId",
                  "type": "string"
                },
                {
                  "name": "permissions",
                  "type": "uint256"
                },
                {
                  "name": "dailyLimit",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "enterpriseImplementation",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "executeEnterpriseImplementationChange",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "executeImplementationChange",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "getAccountType",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "isEnterprise",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getAccountsByOwner",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "accounts",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getAddress",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "salt",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getCurrentVersion",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getEnterpriseAddress",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "salt",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getImplementation",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getImplementationByVersion",
              "inputs": [
                {
                  "name": "version",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getModularArchitectureInfo",
              "inputs": [],
              "outputs": [
                {
                  "name": "permissionModuleAddr",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getPendingChanges",
              "inputs": [],
              "outputs": [
                {
                  "name": "implPending",
                  "type": "bool"
                },
                {
                  "name": "implAddress",
                  "type": "address"
                },
                {
                  "name": "implVersion",
                  "type": "uint256"
                },
                {
                  "name": "implExecuteAfter",
                  "type": "uint256"
                },
                {
                  "name": "enterprisePending",
                  "type": "bool"
                },
                {
                  "name": "enterpriseAddress",
                  "type": "address"
                },
                {
                  "name": "enterpriseExecuteAfter",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getStats",
              "inputs": [],
              "outputs": [
                {
                  "name": "totalAccounts",
                  "type": "uint256"
                },
                {
                  "name": "totalOwners",
                  "type": "uint256"
                },
                {
                  "name": "subscriptionConnected",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getTimeUntilExecutable",
              "inputs": [
                {
                  "name": "changeType",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "timeRemaining",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "hasPendingChanges",
              "inputs": [],
              "outputs": [
                {
                  "name": "hasPending",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "implementations",
              "inputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isEnterpriseAccount",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isValidAccount",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "owner",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "pauseAccountCreation",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "paused",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "pendingEnterpriseImplementation",
              "inputs": [],
              "outputs": [
                {
                  "name": "newImplementation",
                  "type": "address"
                },
                {
                  "name": "executeAfter",
                  "type": "uint256"
                },
                {
                  "name": "exists",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "pendingImplementation",
              "inputs": [],
              "outputs": [
                {
                  "name": "newImplementation",
                  "type": "address"
                },
                {
                  "name": "newVersion",
                  "type": "uint256"
                },
                {
                  "name": "executeAfter",
                  "type": "uint256"
                },
                {
                  "name": "exists",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "permissionModule",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "proposeEnterpriseImplementation",
              "inputs": [
                {
                  "name": "_enterpriseImplementation",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "proposeImplementation",
              "inputs": [
                {
                  "name": "newImplementation",
                  "type": "address"
                },
                {
                  "name": "newVersion",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "renounceOwnership",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "repairAccountInitialization",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "owner",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setDefaultRecoveryModule",
              "inputs": [
                {
                  "name": "_recoveryModule",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setDefaultSessionKeyModule",
              "inputs": [
                {
                  "name": "_sessionKeyModule",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setEnterpriseImplementation",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "view"
            },
            {
              "name": "setPermissionModule",
              "inputs": [
                {
                  "name": "_permissionModule",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setSubscriptionContract",
              "inputs": [
                {
                  "name": "newSubscriptionContract",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "subscriptionContract",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "transferOwnership",
              "inputs": [
                {
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "unlockEntryPointStake",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "unpauseAccountCreation",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "updateImplementation",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                },
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "view"
            },
            {
              "name": "withdrawEntryPointStake",
              "inputs": [
                {
                  "name": "withdrawAddress",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            }
          ],
          "events": [
            {
              "name": "AccountCreated",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "owner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "salt",
                  "type": "bytes32",
                  "indexed": false
                }
              ]
            },
            {
              "name": "AccountDeployedWithModules",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "owner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "userId",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "permissions",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "dailyLimit",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "AccountRegistered",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "owner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "subscriptionTier",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "AccountRepaired",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "owner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "BatchAccountsCreated",
              "inputs": [
                {
                  "name": "accounts",
                  "type": "address[]",
                  "indexed": false
                },
                {
                  "name": "owners",
                  "type": "address[]",
                  "indexed": false
                },
                {
                  "name": "totalCreated",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "DefaultRecoveryModuleSet",
              "inputs": [
                {
                  "name": "module",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "DefaultSessionKeyModuleSet",
              "inputs": [
                {
                  "name": "module",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "EnterpriseImplementationChangeCancelled",
              "inputs": [
                {
                  "name": "cancelledImplementation",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "EnterpriseImplementationChangeExecuted",
              "inputs": [
                {
                  "name": "oldImplementation",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newImplementation",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "EnterpriseImplementationChangeProposed",
              "inputs": [
                {
                  "name": "newImplementation",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "executeAfter",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "EnterpriseImplementationUpdated",
              "inputs": [
                {
                  "name": "oldImplementation",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newImplementation",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "FabricAccountDeployed",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "owner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "implementation",
                  "type": "address",
                  "indexed": false
                },
                {
                  "name": "salt",
                  "type": "bytes32",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ImplementationChangeCancelled",
              "inputs": [
                {
                  "name": "cancelledImplementation",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "cancelledVersion",
                  "type": "uint256",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ImplementationChangeExecuted",
              "inputs": [
                {
                  "name": "oldImplementation",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newImplementation",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newVersion",
                  "type": "uint256",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ImplementationChangeProposed",
              "inputs": [
                {
                  "name": "newImplementation",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newVersion",
                  "type": "uint256",
                  "indexed": true
                },
                {
                  "name": "executeAfter",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ImplementationSet",
              "inputs": [
                {
                  "name": "version",
                  "type": "uint256",
                  "indexed": true
                },
                {
                  "name": "implementation",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ImplementationUpdated",
              "inputs": [
                {
                  "name": "newImplementation",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "OwnershipTransferred",
              "inputs": [
                {
                  "name": "previousOwner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newOwner",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "Paused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            },
            {
              "name": "PermissionModuleSet",
              "inputs": [
                {
                  "name": "permissionModule",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "SubscriptionContractUpdated",
              "inputs": [
                {
                  "name": "oldContract",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newContract",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Unpaused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            }
          ],
          "errors": [
            {
              "name": "AccountAlreadyExists",
              "inputs": []
            },
            {
              "name": "AccountAlreadyInitialized",
              "inputs": []
            },
            {
              "name": "AccountNotFound",
              "inputs": []
            },
            {
              "name": "BatchSizeExceeded",
              "inputs": []
            },
            {
              "name": "ChangeAlreadyPending",
              "inputs": []
            },
            {
              "name": "DeploymentFailed",
              "inputs": []
            },
            {
              "name": "EnforcedPause",
              "inputs": []
            },
            {
              "name": "ExpectedPause",
              "inputs": []
            },
            {
              "name": "InitializationFailed",
              "inputs": []
            },
            {
              "name": "InsufficientSubscriptionTier",
              "inputs": []
            },
            {
              "name": "InvalidDailyLimit",
              "inputs": []
            },
            {
              "name": "InvalidImplementation",
              "inputs": []
            },
            {
              "name": "InvalidOwner",
              "inputs": []
            },
            {
              "name": "InvalidPermissions",
              "inputs": []
            },
            {
              "name": "InvalidSubscriptionContract",
              "inputs": []
            },
            {
              "name": "LengthMismatch",
              "inputs": []
            },
            {
              "name": "NoPendingChange",
              "inputs": []
            },
            {
              "name": "OwnableInvalidOwner",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ]
            },
            {
              "name": "OwnableUnauthorizedAccount",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ReentrancyGuardReentrantCall",
              "inputs": []
            },
            {
              "name": "TimelockNotExpired",
              "inputs": [
                {
                  "name": "executeAfter",
                  "type": "uint256"
                },
                {
                  "name": "currentTime",
                  "type": "uint256"
                }
              ]
            }
          ],
          "deployments": [
            {
              "chain": "Anvil Local",
              "chainId": 31337,
              "type": "testnet",
              "address": "0x16589D13C995eaa8acBB5172385aB62A4F43B009",
              "explorerUrl": ""
            },
            {
              "chain": "Ethereum Sepolia",
              "chainId": 11155111,
              "type": "testnet",
              "address": "0x57623dcC34251F8ff9Ec8982B793c516EBC22A3a",
              "explorerUrl": "https://sepolia.etherscan.io/address/0x57623dcC34251F8ff9Ec8982B793c516EBC22A3a"
            }
          ]
        }
      }
    },
    "subscriptions": {
      "description": "Subscription and prepaid account management contracts",
      "service": "fabric-subscription",
      "contracts": {
        "FabricPrepaidAccount": {
          "name": "FabricPrepaidAccount",
          "domain": "subscriptions",
          "service": "fabric-subscription",
          "upgradeable": false,
          "ozPatterns": [
            "AccessControl",
            "Pausable",
            "ReentrancyGuard",
            "SafeERC20"
          ],
          "functions": [
            {
              "name": "ADMIN_ROLE",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "DEFAULT_ADMIN_ROLE",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "SPENDER_ROLE",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "TIMELOCK_DURATION",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "USDC_TOKEN",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "authorizeSpender",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string"
                },
                {
                  "name": "spender",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "authorizedSpenders",
              "inputs": [
                {
                  "name": "user",
                  "type": "address"
                },
                {
                  "name": "spender",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "balances",
              "inputs": [
                {
                  "name": "user",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "batchRefund",
              "inputs": [
                {
                  "name": "users",
                  "type": "address[]"
                },
                {
                  "name": "amounts",
                  "type": "uint256[]"
                },
                {
                  "name": "reason",
                  "type": "string"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "cancelPendingChange",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "deposit",
              "inputs": [
                {
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "success",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "depositFor",
              "inputs": [
                {
                  "name": "user",
                  "type": "address"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "success",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "emergencyWithdraw",
              "inputs": [
                {
                  "name": "user",
                  "type": "address"
                },
                {
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "name": "reason",
                  "type": "string"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "executeTreasuryChange",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32"
                },
                {
                  "name": "newTreasury",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "getAvailableBalance",
              "inputs": [
                {
                  "name": "user",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getAvailableRevenue",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure"
            },
            {
              "name": "getDeposited",
              "inputs": [
                {
                  "name": "user",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getPendingChange",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "dataHash",
                  "type": "bytes32"
                },
                {
                  "name": "executeAfter",
                  "type": "uint256"
                },
                {
                  "name": "executed",
                  "type": "bool"
                },
                {
                  "name": "cancelled",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getRoleAdmin",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getSpent",
              "inputs": [
                {
                  "name": "user",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "grantRole",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "hasRole",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isAuthorizedSpender",
              "inputs": [
                {
                  "name": "user",
                  "type": "address"
                },
                {
                  "name": "spender",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "issueRefund",
              "inputs": [
                {
                  "name": "user",
                  "type": "address"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "name": "reason",
                  "type": "string"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "maxPrices",
              "inputs": [
                {
                  "name": "action",
                  "type": "string"
                }
              ],
              "outputs": [
                {
                  "name": "maxPrice",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "pause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "paused",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "pendingChanges",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "dataHash",
                  "type": "bytes32"
                },
                {
                  "name": "executeAfter",
                  "type": "uint256"
                },
                {
                  "name": "executed",
                  "type": "bool"
                },
                {
                  "name": "cancelled",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "proposeTreasuryChange",
              "inputs": [
                {
                  "name": "newTreasury",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "changeId",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "recoverToken",
              "inputs": [
                {
                  "name": "token",
                  "type": "address"
                },
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "renounceRole",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "name": "callerConfirmation",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "revokeRole",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "revokeSpender",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string"
                },
                {
                  "name": "spender",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setMaxPrice",
              "inputs": [
                {
                  "name": "action",
                  "type": "string"
                },
                {
                  "name": "maxPrice",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "spend",
              "inputs": [
                {
                  "name": "user",
                  "type": "address"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "name": "action",
                  "type": "string"
                }
              ],
              "outputs": [
                {
                  "name": "success",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "spendFor",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string"
                },
                {
                  "name": "user",
                  "type": "address"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "name": "action",
                  "type": "string"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "spent",
              "inputs": [
                {
                  "name": "user",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "supportsInterface",
              "inputs": [
                {
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "sweepRevenue",
              "inputs": [
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "totalDeposited",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure"
            },
            {
              "name": "totalSpent",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure"
            },
            {
              "name": "totalSwept",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure"
            },
            {
              "name": "totalUserObligations",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "treasuryAddress",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "unpause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            }
          ],
          "events": [
            {
              "name": "BatchRefundProcessed",
              "inputs": [
                {
                  "name": "userCount",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "totalAmount",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "reason",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "processedBy",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ChangeCancelled",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "changeType",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ChangeExecuted",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "changeType",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ChangeProposed",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "changeType",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "dataHash",
                  "type": "bytes32",
                  "indexed": false
                },
                {
                  "name": "executeAfter",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Deposited",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string",
                  "indexed": true
                },
                {
                  "name": "depositor",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "newBalance",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "EmergencyWithdrawal",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string",
                  "indexed": true
                },
                {
                  "name": "user",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "recipient",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "reason",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "withdrawnBy",
                  "type": "address",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "MaxPriceSet",
              "inputs": [
                {
                  "name": "action",
                  "type": "string",
                  "indexed": true
                },
                {
                  "name": "oldMaxPrice",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "newMaxPrice",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Paused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            },
            {
              "name": "RefundIssued",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string",
                  "indexed": true
                },
                {
                  "name": "user",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "reason",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "issuedBy",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "RevenueSwept",
              "inputs": [
                {
                  "name": "to",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "RoleAdminChanged",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "previousAdminRole",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "newAdminRole",
                  "type": "bytes32",
                  "indexed": true
                }
              ]
            },
            {
              "name": "RoleGranted",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "sender",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "RoleRevoked",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "sender",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "SpenderAuthorized",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string",
                  "indexed": true
                },
                {
                  "name": "user",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "spender",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "SpenderRevoked",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string",
                  "indexed": true
                },
                {
                  "name": "user",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "spender",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Spent",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string",
                  "indexed": true
                },
                {
                  "name": "user",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "action",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "remainingBalance",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "SpentFor",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string",
                  "indexed": true
                },
                {
                  "name": "user",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "spender",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "action",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "remainingBalance",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TierInitialized",
              "inputs": [
                {
                  "name": "tierMicro",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "tierSmall",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "tierMedium",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "tierLarge",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TokenRecovered",
              "inputs": [
                {
                  "name": "token",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "to",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "recoveredBy",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TreasuryUpdated",
              "inputs": [
                {
                  "name": "oldTreasury",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newTreasury",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Unpaused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            }
          ],
          "errors": [
            {
              "name": "AccessControlBadConfirmation",
              "inputs": []
            },
            {
              "name": "AccessControlUnauthorizedAccount",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "neededRole",
                  "type": "bytes32"
                }
              ]
            },
            {
              "name": "AlreadyAuthorized",
              "inputs": []
            },
            {
              "name": "ArrayLengthMismatch",
              "inputs": []
            },
            {
              "name": "BatchSizeExceeded",
              "inputs": [
                {
                  "name": "provided",
                  "type": "uint256"
                },
                {
                  "name": "maximum",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "CannotRecoverUSDC",
              "inputs": []
            },
            {
              "name": "ChangeAlreadyCancelled",
              "inputs": []
            },
            {
              "name": "ChangeAlreadyExecuted",
              "inputs": []
            },
            {
              "name": "ChangeNotFound",
              "inputs": []
            },
            {
              "name": "ContractNotPaused",
              "inputs": []
            },
            {
              "name": "EnforcedPause",
              "inputs": []
            },
            {
              "name": "ExceedsMaxPrice",
              "inputs": [
                {
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "name": "maxPrice",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ExpectedPause",
              "inputs": []
            },
            {
              "name": "InsufficientBalance",
              "inputs": [
                {
                  "name": "required",
                  "type": "uint256"
                },
                {
                  "name": "available",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "InsufficientRevenue",
              "inputs": [
                {
                  "name": "requested",
                  "type": "uint256"
                },
                {
                  "name": "available",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "InvalidAddress",
              "inputs": []
            },
            {
              "name": "InvalidAmount",
              "inputs": []
            },
            {
              "name": "InvalidChangeParameters",
              "inputs": []
            },
            {
              "name": "NoFundsToWithdraw",
              "inputs": []
            },
            {
              "name": "NotAuthorizedSpender",
              "inputs": []
            },
            {
              "name": "NotCurrentlyAuthorized",
              "inputs": []
            },
            {
              "name": "PriceNotSet",
              "inputs": []
            },
            {
              "name": "ReentrancyGuardReentrantCall",
              "inputs": []
            },
            {
              "name": "RefundExceedsSpent",
              "inputs": [
                {
                  "name": "refund",
                  "type": "uint256"
                },
                {
                  "name": "spent",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "SafeERC20FailedOperation",
              "inputs": [
                {
                  "name": "token",
                  "type": "address"
                }
              ]
            },
            {
              "name": "SolvencyBreach",
              "inputs": []
            },
            {
              "name": "TimelockNotExpired",
              "inputs": [
                {
                  "name": "executeAfter",
                  "type": "uint256"
                },
                {
                  "name": "currentTime",
                  "type": "uint256"
                }
              ]
            }
          ],
          "deployments": [
            {
              "chain": "Anvil Local",
              "chainId": 31337,
              "type": "testnet",
              "address": "0x65253cd69d4599EEa8681FF6A8c4bB9d24dF26b7",
              "explorerUrl": ""
            },
            {
              "chain": "Ethereum Sepolia",
              "chainId": 11155111,
              "type": "testnet",
              "address": "0xbfeD88512e908629776A196A95D15bc6d8cCe2a0",
              "explorerUrl": "https://sepolia.etherscan.io/address/0xbfeD88512e908629776A196A95D15bc6d8cCe2a0"
            }
          ]
        },
        "FabricSubscriptionManager": {
          "name": "FabricSubscriptionManager",
          "domain": "subscriptions",
          "service": "fabric-subscription",
          "upgradeable": false,
          "ozPatterns": [
            "AccessControl",
            "Pausable",
            "ReentrancyGuard"
          ],
          "functions": [
            {
              "name": "ADMIN_ROLE",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "DEFAULT_ADMIN_ROLE",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "TIMELOCK_DURATION",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "USDC_TOKEN",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "cancelPendingChange",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "cancelSubscription",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "executeTreasuryChange",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32"
                },
                {
                  "name": "newTreasury",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "getPendingChange",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "dataHash",
                  "type": "bytes32"
                },
                {
                  "name": "executeAfter",
                  "type": "uint256"
                },
                {
                  "name": "executed",
                  "type": "bool"
                },
                {
                  "name": "cancelled",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getRoleAdmin",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "grantRole",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "hasRole",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "issueRefund",
              "inputs": [
                {
                  "name": "user",
                  "type": "address"
                },
                {
                  "name": "userId",
                  "type": "string"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "name": "reason",
                  "type": "string"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "pause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "paused",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "pendingChanges",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "dataHash",
                  "type": "bytes32"
                },
                {
                  "name": "executeAfter",
                  "type": "uint256"
                },
                {
                  "name": "executed",
                  "type": "bool"
                },
                {
                  "name": "cancelled",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "proposeTreasuryChange",
              "inputs": [
                {
                  "name": "newTreasury",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "changeId",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "renounceRole",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "name": "callerConfirmation",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "revokeRole",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "subscribe",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "name": "metadata",
                  "type": "string"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "subscribeFor",
              "inputs": [
                {
                  "name": "payer",
                  "type": "address"
                },
                {
                  "name": "userId",
                  "type": "string"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "name": "metadata",
                  "type": "string"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "subscribeWithPermit",
              "inputs": [
                {
                  "name": "payer",
                  "type": "address"
                },
                {
                  "name": "userId",
                  "type": "string"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "name": "metadata",
                  "type": "string"
                },
                {
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "supportsInterface",
              "inputs": [
                {
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "treasuryAddress",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "unpause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            }
          ],
          "events": [
            {
              "name": "ChangeCancelled",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "changeType",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ChangeExecuted",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "changeType",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ChangeProposed",
              "inputs": [
                {
                  "name": "changeId",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "changeType",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "dataHash",
                  "type": "bytes32",
                  "indexed": false
                },
                {
                  "name": "executeAfter",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Paused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            },
            {
              "name": "RoleAdminChanged",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "previousAdminRole",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "newAdminRole",
                  "type": "bytes32",
                  "indexed": true
                }
              ]
            },
            {
              "name": "RoleGranted",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "sender",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "RoleRevoked",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "sender",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "SubscriptionCancelled",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string",
                  "indexed": true
                },
                {
                  "name": "wallet",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "SubscriptionPayment",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string",
                  "indexed": true
                },
                {
                  "name": "wallet",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "metadata",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "SubscriptionRefunded",
              "inputs": [
                {
                  "name": "userId",
                  "type": "string",
                  "indexed": true
                },
                {
                  "name": "wallet",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "reason",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TreasuryUpdated",
              "inputs": [
                {
                  "name": "oldTreasury",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newTreasury",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "Unpaused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            }
          ],
          "errors": [
            {
              "name": "AccessControlBadConfirmation",
              "inputs": []
            },
            {
              "name": "AccessControlUnauthorizedAccount",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "neededRole",
                  "type": "bytes32"
                }
              ]
            },
            {
              "name": "ChangeAlreadyCancelled",
              "inputs": []
            },
            {
              "name": "ChangeAlreadyExecuted",
              "inputs": []
            },
            {
              "name": "ChangeNotFound",
              "inputs": []
            },
            {
              "name": "EnforcedPause",
              "inputs": []
            },
            {
              "name": "ExpectedPause",
              "inputs": []
            },
            {
              "name": "InvalidAddress",
              "inputs": []
            },
            {
              "name": "InvalidAmount",
              "inputs": []
            },
            {
              "name": "InvalidChangeParameters",
              "inputs": []
            },
            {
              "name": "ReentrancyGuardReentrantCall",
              "inputs": []
            },
            {
              "name": "SafeERC20FailedOperation",
              "inputs": [
                {
                  "name": "token",
                  "type": "address"
                }
              ]
            },
            {
              "name": "TimelockNotExpired",
              "inputs": [
                {
                  "name": "executeAfter",
                  "type": "uint256"
                },
                {
                  "name": "currentTime",
                  "type": "uint256"
                }
              ]
            }
          ],
          "deployments": [
            {
              "chain": "Anvil Local",
              "chainId": 31337,
              "type": "testnet",
              "address": "0xD003aC4EE7Ccf6A981F131f346Df4112d1168818",
              "explorerUrl": ""
            },
            {
              "chain": "Ethereum Sepolia",
              "chainId": 11155111,
              "type": "testnet",
              "address": "0x5A432c0498B5E386660C0F2b33F349711460787B",
              "explorerUrl": "https://sepolia.etherscan.io/address/0x5A432c0498B5E386660C0F2b33F349711460787B"
            }
          ]
        }
      }
    },
    "nfts": {
      "description": "NFT collection deployment and minting contracts",
      "service": "fabric-nft",
      "contracts": {
        "NFTFactory": {
          "name": "NFTFactory",
          "domain": "nfts",
          "service": "fabric-nft",
          "upgradeable": true,
          "ozPatterns": [
            "UUPSUpgradeable",
            "AccessControlUpgradeable",
            "PausableUpgradeable",
            "ReentrancyGuardUpgradeable",
            "EIP-1167 Clones"
          ],
          "functions": [
            {
              "name": "addOperator",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "collections",
              "inputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "collectionAddress",
                  "type": "address"
                },
                {
                  "name": "contractType",
                  "type": "uint8"
                },
                {
                  "name": "name",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "computeCollectionSalt",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "name",
                  "type": "string"
                },
                {
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "name": "nonce",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "pure"
            },
            {
              "name": "createCollection",
              "inputs": [
                {
                  "name": "contractType",
                  "type": "uint8"
                },
                {
                  "name": "name",
                  "type": "string"
                },
                {
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "name": "initialOwner",
                  "type": "address"
                },
                {
                  "name": "publicMintEnabled",
                  "type": "bool"
                },
                {
                  "name": "maxSupply",
                  "type": "uint256"
                },
                {
                  "name": "baseTokenURI",
                  "type": "string"
                },
                {
                  "name": "mintPrice",
                  "type": "uint256"
                },
                {
                  "name": "royaltyReceiver",
                  "type": "address"
                },
                {
                  "name": "royaltyFeeNumerator",
                  "type": "uint96"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "erc1155Implementation",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "erc721Implementation",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getAllCollections",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "tuple[]"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getCollectionBySalt",
              "inputs": [
                {
                  "name": "salt",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getCollectionsByOwner",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getCollectionsPaginated",
              "inputs": [
                {
                  "name": "offset",
                  "type": "uint256"
                },
                {
                  "name": "limit",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "result",
                  "type": "tuple[]"
                },
                {
                  "name": "total",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getNextNonce",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getOperators",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getTotalCollections",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isOperator",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isPermissionless",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "owner",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "ownerCollections",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                },
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "ownerNonce",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "pause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "paused",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "permissionless",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "predictCollectionAddress",
              "inputs": [
                {
                  "name": "contractType",
                  "type": "uint8"
                },
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "name",
                  "type": "string"
                },
                {
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "name": "nonce",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "removeOperator",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "renounceOwnership",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "saltToCollection",
              "inputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "setPermissionless",
              "inputs": [
                {
                  "name": "enabled",
                  "type": "bool"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "transferOwnership",
              "inputs": [
                {
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "unpause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            }
          ],
          "events": [
            {
              "name": "CollectionCreated",
              "inputs": [
                {
                  "name": "collectionAddress",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "owner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "creator",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "name",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "symbol",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "maxSupply",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "mintPrice",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "baseTokenURI",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "publicMintEnabled",
                  "type": "bool",
                  "indexed": false
                },
                {
                  "name": "contractType",
                  "type": "uint8",
                  "indexed": false
                }
              ]
            },
            {
              "name": "OperatorAdded",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "addedBy",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "OperatorRemoved",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "removedBy",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "OwnershipTransferred",
              "inputs": [
                {
                  "name": "previousOwner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newOwner",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "Paused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            },
            {
              "name": "PermissionlessModeChanged",
              "inputs": [
                {
                  "name": "enabled",
                  "type": "bool",
                  "indexed": false
                },
                {
                  "name": "changedBy",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "Unpaused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            }
          ],
          "errors": [
            {
              "name": "EnforcedPause",
              "inputs": []
            },
            {
              "name": "ExpectedPause",
              "inputs": []
            },
            {
              "name": "FailedDeployment",
              "inputs": []
            },
            {
              "name": "InsufficientBalance",
              "inputs": [
                {
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "name": "needed",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "InvalidOperator",
              "inputs": []
            },
            {
              "name": "NotAuthorized",
              "inputs": []
            },
            {
              "name": "OperatorAlreadyExists",
              "inputs": []
            },
            {
              "name": "OperatorNotFound",
              "inputs": []
            },
            {
              "name": "OwnableInvalidOwner",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ]
            },
            {
              "name": "OwnableUnauthorizedAccount",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ReentrancyGuardReentrantCall",
              "inputs": []
            }
          ],
          "deployments": [
            {
              "chain": "Anvil Local",
              "chainId": 31337,
              "type": "testnet",
              "address": "0x025207ce9a748256d7ce3858fd5EAa3f52222d83",
              "explorerUrl": ""
            },
            {
              "chain": "Ethereum Sepolia",
              "chainId": 11155111,
              "type": "testnet",
              "address": "0xdF46a42f336caBEdfe236fE5534df7C2C363edc7",
              "explorerUrl": "https://sepolia.etherscan.io/address/0xdF46a42f336caBEdfe236fE5534df7C2C363edc7"
            }
          ]
        },
        "ERC721Token": {
          "name": "ERC721Token",
          "domain": "nfts",
          "service": "fabric-nft",
          "upgradeable": true,
          "ozPatterns": [
            "ERC721Upgradeable",
            "OwnableUpgradeable",
            "AccessControlUpgradeable",
            "EIP-2981 Royalties"
          ],
          "functions": [
            {
              "name": "approve",
              "inputs": [
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "authorizeMinter",
              "inputs": [
                {
                  "name": "minter",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "authorizedMinters",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "balanceOf",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "baseTokenURI",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "batchMint",
              "inputs": [
                {
                  "name": "recipients",
                  "type": "address[]"
                },
                {
                  "name": "uris",
                  "type": "string[]"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256[]"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "burn",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "deleteDefaultRoyalty",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "exists",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getApproved",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "initialize",
              "inputs": [
                {
                  "name": "initialOwner",
                  "type": "address"
                },
                {
                  "name": "name_",
                  "type": "string"
                },
                {
                  "name": "symbol_",
                  "type": "string"
                },
                {
                  "name": "_maxSupply",
                  "type": "uint256"
                },
                {
                  "name": "_publicMintEnabled",
                  "type": "bool"
                },
                {
                  "name": "_mintPrice",
                  "type": "uint256"
                },
                {
                  "name": "_baseTokenURI",
                  "type": "string"
                },
                {
                  "name": "royaltyReceiver",
                  "type": "address"
                },
                {
                  "name": "royaltyFeeNumerator",
                  "type": "uint96"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "isApprovedForAll",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "operator",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isAuthorizedMinter",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isUnlimitedSupply",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "maxSupply",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "mintNFTWithRoyalty",
              "inputs": [
                {
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "name": "uri",
                  "type": "string"
                },
                {
                  "name": "royaltyReceiver",
                  "type": "address"
                },
                {
                  "name": "feeNumerator",
                  "type": "uint96"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "mintPrice",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "name",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "owner",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "ownerOf",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "pause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "paused",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "publicBatchMint",
              "inputs": [
                {
                  "name": "uris",
                  "type": "string[]"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256[]"
                }
              ],
              "stateMutability": "payable"
            },
            {
              "name": "publicMint",
              "inputs": [
                {
                  "name": "uri",
                  "type": "string"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable"
            },
            {
              "name": "publicMintEnabled",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "remainingSupply",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "renounceOwnership",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "resetTokenRoyalty",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "revokeMinter",
              "inputs": [
                {
                  "name": "minter",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "royaltyInfo",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "name": "salePrice",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "safeMint",
              "inputs": [
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "uri",
                  "type": "string"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "safeTransferFrom",
              "inputs": [
                {
                  "name": "from",
                  "type": "address"
                },
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "safeTransferFrom",
              "inputs": [
                {
                  "name": "from",
                  "type": "address"
                },
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setApprovalForAll",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address"
                },
                {
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setBaseURI",
              "inputs": [
                {
                  "name": "newBaseURI",
                  "type": "string"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setDefaultRoyalty",
              "inputs": [
                {
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "name": "feeNumerator",
                  "type": "uint96"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setMaxSupply",
              "inputs": [
                {
                  "name": "_maxSupply",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setMintPrice",
              "inputs": [
                {
                  "name": "_mintPrice",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setTokenRoyalty",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "name": "feeNumerator",
                  "type": "uint96"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "supportsInterface",
              "inputs": [
                {
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "symbol",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "togglePublicMint",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "tokenURI",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "totalSupply",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "transferFrom",
              "inputs": [
                {
                  "name": "from",
                  "type": "address"
                },
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "transferOwnership",
              "inputs": [
                {
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "unpause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "withdraw",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "withdrawTo",
              "inputs": [
                {
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            }
          ],
          "events": [
            {
              "name": "Approval",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "approved",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "tokenId",
                  "type": "uint256",
                  "indexed": true
                }
              ]
            },
            {
              "name": "ApprovalForAll",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "operator",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "approved",
                  "type": "bool",
                  "indexed": false
                }
              ]
            },
            {
              "name": "BaseURISet",
              "inputs": [
                {
                  "name": "newBaseURI",
                  "type": "string",
                  "indexed": false
                }
              ]
            },
            {
              "name": "BatchMetadataUpdate",
              "inputs": [
                {
                  "name": "_fromTokenId",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "_toTokenId",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "DefaultRoyaltyDeleted",
              "inputs": []
            },
            {
              "name": "DefaultRoyaltySet",
              "inputs": [
                {
                  "name": "receiver",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "feeNumerator",
                  "type": "uint96",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Initialized",
              "inputs": [
                {
                  "name": "version",
                  "type": "uint64",
                  "indexed": false
                }
              ]
            },
            {
              "name": "MaxSupplySet",
              "inputs": [
                {
                  "name": "newMaxSupply",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "MetadataUpdate",
              "inputs": [
                {
                  "name": "_tokenId",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "MintPriceSet",
              "inputs": [
                {
                  "name": "newPrice",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "MinterAuthorized",
              "inputs": [
                {
                  "name": "minter",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "MinterRevoked",
              "inputs": [
                {
                  "name": "minter",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "NFTMinted",
              "inputs": [
                {
                  "name": "to",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "tokenId",
                  "type": "uint256",
                  "indexed": true
                },
                {
                  "name": "uri",
                  "type": "string",
                  "indexed": false
                }
              ]
            },
            {
              "name": "OwnershipTransferred",
              "inputs": [
                {
                  "name": "previousOwner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newOwner",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "Paused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            },
            {
              "name": "PublicMintToggled",
              "inputs": [
                {
                  "name": "enabled",
                  "type": "bool",
                  "indexed": false
                }
              ]
            },
            {
              "name": "RoyaltyInfoUpdated",
              "inputs": [
                {
                  "name": "recipient",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "feeNumerator",
                  "type": "uint96",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TokenRoyaltyReset",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256",
                  "indexed": true
                }
              ]
            },
            {
              "name": "TokenRoyaltySet",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256",
                  "indexed": true
                },
                {
                  "name": "receiver",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "feeNumerator",
                  "type": "uint96",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Transfer",
              "inputs": [
                {
                  "name": "from",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "to",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "tokenId",
                  "type": "uint256",
                  "indexed": true
                }
              ]
            },
            {
              "name": "Unpaused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Withdrawn",
              "inputs": [
                {
                  "name": "to",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            }
          ],
          "errors": [
            {
              "name": "ERC2981InvalidDefaultRoyalty",
              "inputs": [
                {
                  "name": "numerator",
                  "type": "uint256"
                },
                {
                  "name": "denominator",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ERC2981InvalidDefaultRoyaltyReceiver",
              "inputs": [
                {
                  "name": "receiver",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC2981InvalidTokenRoyalty",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "name": "numerator",
                  "type": "uint256"
                },
                {
                  "name": "denominator",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ERC2981InvalidTokenRoyaltyReceiver",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "name": "receiver",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC721IncorrectOwner",
              "inputs": [
                {
                  "name": "sender",
                  "type": "address"
                },
                {
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "name": "owner",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC721InsufficientApproval",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address"
                },
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ERC721InvalidApprover",
              "inputs": [
                {
                  "name": "approver",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC721InvalidOperator",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC721InvalidOwner",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC721InvalidReceiver",
              "inputs": [
                {
                  "name": "receiver",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC721InvalidSender",
              "inputs": [
                {
                  "name": "sender",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC721NonexistentToken",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "EnforcedPause",
              "inputs": []
            },
            {
              "name": "ExpectedPause",
              "inputs": []
            },
            {
              "name": "FailedCall",
              "inputs": []
            },
            {
              "name": "InsufficientBalance",
              "inputs": [
                {
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "name": "needed",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "InvalidInitialization",
              "inputs": []
            },
            {
              "name": "NotInitializing",
              "inputs": []
            },
            {
              "name": "OwnableInvalidOwner",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ]
            },
            {
              "name": "OwnableUnauthorizedAccount",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ReentrancyGuardReentrantCall",
              "inputs": []
            }
          ],
          "deployments": [
            {
              "chain": "Anvil Local",
              "chainId": 31337,
              "type": "testnet",
              "address": "0xF9EdDc7cE89C55a5E937939e7BeaAF529325fCD9",
              "explorerUrl": ""
            },
            {
              "chain": "Ethereum Sepolia",
              "chainId": 11155111,
              "type": "testnet",
              "address": "0xC6A12aA6eF83A9EBe271d144974a5DCd8F2791df",
              "explorerUrl": "https://sepolia.etherscan.io/address/0xC6A12aA6eF83A9EBe271d144974a5DCd8F2791df"
            }
          ]
        },
        "ERC1155Token": {
          "name": "ERC1155Token",
          "domain": "nfts",
          "service": "fabric-nft",
          "upgradeable": true,
          "ozPatterns": [
            "ERC1155Upgradeable",
            "OwnableUpgradeable",
            "AccessControlUpgradeable"
          ],
          "functions": [
            {
              "name": "balanceOf",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "balanceOfBatch",
              "inputs": [
                {
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "name": "ids",
                  "type": "uint256[]"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256[]"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "burn",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "burnBatch",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "name": "values",
                  "type": "uint256[]"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "deleteDefaultRoyalty",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "exists",
              "inputs": [
                {
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "initialize",
              "inputs": [
                {
                  "name": "initialOwner",
                  "type": "address"
                },
                {
                  "name": "_name",
                  "type": "string"
                },
                {
                  "name": "_symbol",
                  "type": "string"
                },
                {
                  "name": "baseURI_",
                  "type": "string"
                },
                {
                  "name": "_publicMintEnabled",
                  "type": "bool"
                },
                {
                  "name": "_mintPrice",
                  "type": "uint256"
                },
                {
                  "name": "royaltyReceiver",
                  "type": "address"
                },
                {
                  "name": "royaltyFeeNumerator",
                  "type": "uint96"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "isApprovedForAll",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "operator",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "mint",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "mintBatch",
              "inputs": [
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "name": "amounts",
                  "type": "uint256[]"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "mintPrice",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "name",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "owner",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "pause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "paused",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "publicMint",
              "inputs": [
                {
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "outputs": [],
              "stateMutability": "payable"
            },
            {
              "name": "publicMintEnabled",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "renounceOwnership",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "resetTokenRoyalty",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "royaltyInfo",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "name": "salePrice",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "safeBatchTransferFrom",
              "inputs": [
                {
                  "name": "from",
                  "type": "address"
                },
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "name": "values",
                  "type": "uint256[]"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "safeTransferFrom",
              "inputs": [
                {
                  "name": "from",
                  "type": "address"
                },
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setApprovalForAll",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address"
                },
                {
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setBaseURI",
              "inputs": [
                {
                  "name": "newuri",
                  "type": "string"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setDefaultRoyalty",
              "inputs": [
                {
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "name": "feeNumerator",
                  "type": "uint96"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setMintPrice",
              "inputs": [
                {
                  "name": "_mintPrice",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setTokenMaxSupply",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "name": "maxSupply",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setTokenRoyalty",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "name": "feeNumerator",
                  "type": "uint96"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "supportsInterface",
              "inputs": [
                {
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "symbol",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "togglePublicMint",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "tokenMaxSupply",
              "inputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "totalSupply",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "totalSupply",
              "inputs": [
                {
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "transferOwnership",
              "inputs": [
                {
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "unpause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "uri",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "withdraw",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "withdrawTo",
              "inputs": [
                {
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            }
          ],
          "events": [
            {
              "name": "ApprovalForAll",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "operator",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "approved",
                  "type": "bool",
                  "indexed": false
                }
              ]
            },
            {
              "name": "BaseURISet",
              "inputs": [
                {
                  "name": "newBaseURI",
                  "type": "string",
                  "indexed": false
                }
              ]
            },
            {
              "name": "DefaultRoyaltyDeleted",
              "inputs": []
            },
            {
              "name": "DefaultRoyaltySet",
              "inputs": [
                {
                  "name": "receiver",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "feeNumerator",
                  "type": "uint96",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Initialized",
              "inputs": [
                {
                  "name": "version",
                  "type": "uint64",
                  "indexed": false
                }
              ]
            },
            {
              "name": "MintPriceSet",
              "inputs": [
                {
                  "name": "newPrice",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "OwnershipTransferred",
              "inputs": [
                {
                  "name": "previousOwner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newOwner",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "Paused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            },
            {
              "name": "PublicMintToggled",
              "inputs": [
                {
                  "name": "enabled",
                  "type": "bool",
                  "indexed": false
                }
              ]
            },
            {
              "name": "RoyaltyInfoUpdated",
              "inputs": [
                {
                  "name": "recipient",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "feeNumerator",
                  "type": "uint96",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TokenBatchMinted",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "ids",
                  "type": "uint256[]",
                  "indexed": false
                },
                {
                  "name": "amounts",
                  "type": "uint256[]",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TokenMaxSupplySet",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256",
                  "indexed": true
                },
                {
                  "name": "maxSupply",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TokenMinted",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "id",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TokenRoyaltyReset",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256",
                  "indexed": true
                }
              ]
            },
            {
              "name": "TokenRoyaltySet",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256",
                  "indexed": true
                },
                {
                  "name": "receiver",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "feeNumerator",
                  "type": "uint96",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TransferBatch",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "from",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "to",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "ids",
                  "type": "uint256[]",
                  "indexed": false
                },
                {
                  "name": "values",
                  "type": "uint256[]",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TransferSingle",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "from",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "to",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "id",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "value",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "URI",
              "inputs": [
                {
                  "name": "value",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "id",
                  "type": "uint256",
                  "indexed": true
                }
              ]
            },
            {
              "name": "Unpaused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            }
          ],
          "errors": [
            {
              "name": "ERC1155InsufficientBalance",
              "inputs": [
                {
                  "name": "sender",
                  "type": "address"
                },
                {
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "name": "needed",
                  "type": "uint256"
                },
                {
                  "name": "tokenId",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ERC1155InvalidApprover",
              "inputs": [
                {
                  "name": "approver",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC1155InvalidArrayLength",
              "inputs": [
                {
                  "name": "idsLength",
                  "type": "uint256"
                },
                {
                  "name": "valuesLength",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ERC1155InvalidOperator",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC1155InvalidReceiver",
              "inputs": [
                {
                  "name": "receiver",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC1155InvalidSender",
              "inputs": [
                {
                  "name": "sender",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC1155MissingApprovalForAll",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address"
                },
                {
                  "name": "owner",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC2981InvalidDefaultRoyalty",
              "inputs": [
                {
                  "name": "numerator",
                  "type": "uint256"
                },
                {
                  "name": "denominator",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ERC2981InvalidDefaultRoyaltyReceiver",
              "inputs": [
                {
                  "name": "receiver",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC2981InvalidTokenRoyalty",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "name": "numerator",
                  "type": "uint256"
                },
                {
                  "name": "denominator",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ERC2981InvalidTokenRoyaltyReceiver",
              "inputs": [
                {
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "name": "receiver",
                  "type": "address"
                }
              ]
            },
            {
              "name": "EnforcedPause",
              "inputs": []
            },
            {
              "name": "ExpectedPause",
              "inputs": []
            },
            {
              "name": "FailedCall",
              "inputs": []
            },
            {
              "name": "InsufficientBalance",
              "inputs": [
                {
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "name": "needed",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "InvalidInitialization",
              "inputs": []
            },
            {
              "name": "NotInitializing",
              "inputs": []
            },
            {
              "name": "OwnableInvalidOwner",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ]
            },
            {
              "name": "OwnableUnauthorizedAccount",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ReentrancyGuardReentrantCall",
              "inputs": []
            }
          ],
          "deployments": [
            {
              "chain": "Anvil Local",
              "chainId": 31337,
              "type": "testnet",
              "address": "0x8D14D7A48bcc0Df4Bf86FfA7FF69d8eF02201d66",
              "explorerUrl": ""
            },
            {
              "chain": "Ethereum Sepolia",
              "chainId": 11155111,
              "type": "testnet",
              "address": "0x3a1edC409c2406f7bd245B4437AA0bb2A8BEe266",
              "explorerUrl": "https://sepolia.etherscan.io/address/0x3a1edC409c2406f7bd245B4437AA0bb2A8BEe266"
            }
          ]
        }
      }
    },
    "tokens": {
      "description": "ERC-20 token deployment and management contracts",
      "service": "fabric-token",
      "contracts": {
        "TokenFactory": {
          "name": "TokenFactory",
          "domain": "tokens",
          "service": "fabric-token",
          "upgradeable": true,
          "ozPatterns": [
            "UUPSUpgradeable",
            "AccessControlUpgradeable",
            "PausableUpgradeable",
            "ReentrancyGuardUpgradeable",
            "EIP-1167 Clones"
          ],
          "functions": [
            {
              "name": "addOperator",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "computeTokenSalt",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "name",
                  "type": "string"
                },
                {
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "name": "nonce",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "pure"
            },
            {
              "name": "deployToken",
              "inputs": [
                {
                  "name": "name",
                  "type": "string"
                },
                {
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "name": "decimals",
                  "type": "uint8"
                },
                {
                  "name": "initialSupply",
                  "type": "uint256"
                },
                {
                  "name": "maxSupply",
                  "type": "uint256"
                },
                {
                  "name": "tokenOwner",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "deployedTokens",
              "inputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getDeployedTokens",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getDeployedTokensPaginated",
              "inputs": [
                {
                  "name": "offset",
                  "type": "uint256"
                },
                {
                  "name": "limit",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "tokens",
                  "type": "address[]"
                },
                {
                  "name": "total",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getNextNonce",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getOperators",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getTokenBySalt",
              "inputs": [
                {
                  "name": "salt",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getTotalDeployedTokens",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isOperator",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isPermissionless",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "owner",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "ownerNonce",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "pause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "paused",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "permissionless",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "predictTokenAddress",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "name",
                  "type": "string"
                },
                {
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "name": "nonce",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "removeOperator",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "renounceOwnership",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "saltToToken",
              "inputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "setPermissionless",
              "inputs": [
                {
                  "name": "enabled",
                  "type": "bool"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "tokenImplementation",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "tokenInfo",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "creator",
                  "type": "address"
                },
                {
                  "name": "name",
                  "type": "string"
                },
                {
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "name": "decimals",
                  "type": "uint8"
                },
                {
                  "name": "initialSupply",
                  "type": "uint256"
                },
                {
                  "name": "maxSupply",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "transferOwnership",
              "inputs": [
                {
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "unpause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            }
          ],
          "events": [
            {
              "name": "OperatorAdded",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "addedBy",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "OperatorRemoved",
              "inputs": [
                {
                  "name": "operator",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "removedBy",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "OwnershipTransferred",
              "inputs": [
                {
                  "name": "previousOwner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newOwner",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "Paused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            },
            {
              "name": "PermissionlessModeChanged",
              "inputs": [
                {
                  "name": "enabled",
                  "type": "bool",
                  "indexed": false
                },
                {
                  "name": "changedBy",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "TokenDeployed",
              "inputs": [
                {
                  "name": "tokenAddress",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "creator",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "deployer",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "name",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "symbol",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Unpaused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            }
          ],
          "errors": [
            {
              "name": "EnforcedPause",
              "inputs": []
            },
            {
              "name": "ExpectedPause",
              "inputs": []
            },
            {
              "name": "FailedDeployment",
              "inputs": []
            },
            {
              "name": "InsufficientBalance",
              "inputs": [
                {
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "name": "needed",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "InvalidOperator",
              "inputs": []
            },
            {
              "name": "NotAuthorized",
              "inputs": []
            },
            {
              "name": "OperatorAlreadyExists",
              "inputs": []
            },
            {
              "name": "OperatorNotFound",
              "inputs": []
            },
            {
              "name": "OwnableInvalidOwner",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ]
            },
            {
              "name": "OwnableUnauthorizedAccount",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ReentrancyGuardReentrantCall",
              "inputs": []
            }
          ],
          "deployments": [
            {
              "chain": "Anvil Local",
              "chainId": 31337,
              "type": "testnet",
              "address": "0xeFF750600739267ac1e87d6b1B3B85CeF096C5E9",
              "explorerUrl": ""
            },
            {
              "chain": "Ethereum Sepolia",
              "chainId": 11155111,
              "type": "testnet",
              "address": "0xa1Ca2F713379809C60330D7B467a1A05Da87E805",
              "explorerUrl": "https://sepolia.etherscan.io/address/0xa1Ca2F713379809C60330D7B467a1A05Da87E805"
            }
          ]
        },
        "ERC20Token": {
          "name": "ERC20Token",
          "domain": "tokens",
          "service": "fabric-token",
          "upgradeable": true,
          "ozPatterns": [
            "ERC20Upgradeable",
            "OwnableUpgradeable",
            "AccessControlUpgradeable",
            "ReentrancyGuardUpgradeable"
          ],
          "functions": [
            {
              "name": "CLOCK_MODE",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "DOMAIN_SEPARATOR",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "allowance",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "spender",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "approve",
              "inputs": [
                {
                  "name": "spender",
                  "type": "address"
                },
                {
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "authorizeMinter",
              "inputs": [
                {
                  "name": "minter",
                  "type": "address"
                },
                {
                  "name": "allowance",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "authorizedMinters",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "balanceOf",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "burn",
              "inputs": [
                {
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "burnFrom",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "checkpoints",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "pos",
                  "type": "uint32"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "clock",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint48"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "decimals",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "delegate",
              "inputs": [
                {
                  "name": "delegatee",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "delegateBySig",
              "inputs": [
                {
                  "name": "delegatee",
                  "type": "address"
                },
                {
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "name": "expiry",
                  "type": "uint256"
                },
                {
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "delegates",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "eip712Domain",
              "inputs": [],
              "outputs": [
                {
                  "name": "fields",
                  "type": "bytes1"
                },
                {
                  "name": "name",
                  "type": "string"
                },
                {
                  "name": "version",
                  "type": "string"
                },
                {
                  "name": "chainId",
                  "type": "uint256"
                },
                {
                  "name": "verifyingContract",
                  "type": "address"
                },
                {
                  "name": "salt",
                  "type": "bytes32"
                },
                {
                  "name": "extensions",
                  "type": "uint256[]"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "exemptFromLimits",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "feeRecipient",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "flashFee",
              "inputs": [
                {
                  "name": "token",
                  "type": "address"
                },
                {
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "flashLoan",
              "inputs": [
                {
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "name": "token",
                  "type": "address"
                },
                {
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "getPastTotalSupply",
              "inputs": [
                {
                  "name": "timepoint",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getPastVotes",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "timepoint",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getRemainingMintAllowance",
              "inputs": [
                {
                  "name": "minter",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getVotes",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "initialize",
              "inputs": [
                {
                  "name": "name_",
                  "type": "string"
                },
                {
                  "name": "symbol_",
                  "type": "string"
                },
                {
                  "name": "decimals_",
                  "type": "uint8"
                },
                {
                  "name": "initialSupply",
                  "type": "uint256"
                },
                {
                  "name": "maxSupply_",
                  "type": "uint256"
                },
                {
                  "name": "owner",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "isAuthorizedMinter",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "maxFlashLoan",
              "inputs": [
                {
                  "name": "token",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "maxSupply",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "maxTransferAmount",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "maxWalletAmount",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "mint",
              "inputs": [
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "mintingAllowance",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "mintingEnabled",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "mintingFeeRate",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "name",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "nonces",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "numCheckpoints",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "owner",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "pause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "paused",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "permit",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                },
                {
                  "name": "spender",
                  "type": "address"
                },
                {
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "recoverERC20",
              "inputs": [
                {
                  "name": "token",
                  "type": "address"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "remainingSupply",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "renounceOwnership",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "revokeMinter",
              "inputs": [
                {
                  "name": "minter",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setExemptFromLimits",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "exempt",
                  "type": "bool"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "symbol",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "totalSupply",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "transfer",
              "inputs": [
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "transferFrom",
              "inputs": [
                {
                  "name": "from",
                  "type": "address"
                },
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "transferLimitsEnabled",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "transferOwnership",
              "inputs": [
                {
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "unpause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "updateMintingConfig",
              "inputs": [
                {
                  "name": "enabled",
                  "type": "bool"
                },
                {
                  "name": "feeRate",
                  "type": "uint256"
                },
                {
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "updateTransferLimits",
              "inputs": [
                {
                  "name": "maxTransfer",
                  "type": "uint256"
                },
                {
                  "name": "maxWallet",
                  "type": "uint256"
                },
                {
                  "name": "enabled",
                  "type": "bool"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "validateTransfer",
              "inputs": [
                {
                  "name": "from",
                  "type": "address"
                },
                {
                  "name": "to",
                  "type": "address"
                },
                {
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "valid",
                  "type": "bool"
                },
                {
                  "name": "reason",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            }
          ],
          "events": [
            {
              "name": "Approval",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "spender",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "value",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "DelegateChanged",
              "inputs": [
                {
                  "name": "delegator",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "fromDelegate",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "toDelegate",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "DelegateVotesChanged",
              "inputs": [
                {
                  "name": "delegate",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "previousVotes",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "newVotes",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "EIP712DomainChanged",
              "inputs": []
            },
            {
              "name": "FeesCollected",
              "inputs": [
                {
                  "name": "recipient",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Initialized",
              "inputs": [
                {
                  "name": "version",
                  "type": "uint64",
                  "indexed": false
                }
              ]
            },
            {
              "name": "MinterAuthorized",
              "inputs": [
                {
                  "name": "minter",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "allowance",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "MinterRevoked",
              "inputs": [
                {
                  "name": "minter",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "MintingConfigUpdated",
              "inputs": [
                {
                  "name": "enabled",
                  "type": "bool",
                  "indexed": false
                },
                {
                  "name": "feeRate",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "feeRecipient",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "OwnershipTransferred",
              "inputs": [
                {
                  "name": "previousOwner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newOwner",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "Paused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TokensMinted",
              "inputs": [
                {
                  "name": "to",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "amount",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "fee",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Transfer",
              "inputs": [
                {
                  "name": "from",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "to",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "value",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "TransferLimitsUpdated",
              "inputs": [
                {
                  "name": "maxTransfer",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "maxWallet",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "enabled",
                  "type": "bool",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Unpaused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            }
          ],
          "errors": [
            {
              "name": "CheckpointUnorderedInsertion",
              "inputs": []
            },
            {
              "name": "ECDSAInvalidSignature",
              "inputs": []
            },
            {
              "name": "ECDSAInvalidSignatureLength",
              "inputs": [
                {
                  "name": "length",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ECDSAInvalidSignatureS",
              "inputs": [
                {
                  "name": "s",
                  "type": "bytes32"
                }
              ]
            },
            {
              "name": "ERC20ExceededSafeSupply",
              "inputs": [
                {
                  "name": "increasedSupply",
                  "type": "uint256"
                },
                {
                  "name": "cap",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ERC20InsufficientAllowance",
              "inputs": [
                {
                  "name": "spender",
                  "type": "address"
                },
                {
                  "name": "allowance",
                  "type": "uint256"
                },
                {
                  "name": "needed",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ERC20InsufficientBalance",
              "inputs": [
                {
                  "name": "sender",
                  "type": "address"
                },
                {
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "name": "needed",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ERC20InvalidApprover",
              "inputs": [
                {
                  "name": "approver",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC20InvalidReceiver",
              "inputs": [
                {
                  "name": "receiver",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC20InvalidSender",
              "inputs": [
                {
                  "name": "sender",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC20InvalidSpender",
              "inputs": [
                {
                  "name": "spender",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC2612ExpiredSignature",
              "inputs": [
                {
                  "name": "deadline",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ERC2612InvalidSigner",
              "inputs": [
                {
                  "name": "signer",
                  "type": "address"
                },
                {
                  "name": "owner",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC3156ExceededMaxLoan",
              "inputs": [
                {
                  "name": "maxLoan",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ERC3156InvalidReceiver",
              "inputs": [
                {
                  "name": "receiver",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC3156UnsupportedToken",
              "inputs": [
                {
                  "name": "token",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC5805FutureLookup",
              "inputs": [
                {
                  "name": "timepoint",
                  "type": "uint256"
                },
                {
                  "name": "clock",
                  "type": "uint48"
                }
              ]
            },
            {
              "name": "ERC6372InconsistentClock",
              "inputs": []
            },
            {
              "name": "EnforcedPause",
              "inputs": []
            },
            {
              "name": "ExceedsMaxSupply",
              "inputs": []
            },
            {
              "name": "ExceedsMaxTransfer",
              "inputs": []
            },
            {
              "name": "ExceedsMaxWallet",
              "inputs": []
            },
            {
              "name": "ExpectedPause",
              "inputs": []
            },
            {
              "name": "InsufficientMintingAllowance",
              "inputs": []
            },
            {
              "name": "InvalidAccountNonce",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "currentNonce",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "InvalidAddress",
              "inputs": []
            },
            {
              "name": "InvalidAmount",
              "inputs": []
            },
            {
              "name": "InvalidFeeRate",
              "inputs": []
            },
            {
              "name": "InvalidInitialization",
              "inputs": []
            },
            {
              "name": "MintingDisabled",
              "inputs": []
            },
            {
              "name": "NotInitializing",
              "inputs": []
            },
            {
              "name": "OwnableInvalidOwner",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ]
            },
            {
              "name": "OwnableUnauthorizedAccount",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ReentrancyGuardReentrantCall",
              "inputs": []
            },
            {
              "name": "SafeCastOverflowedUintDowncast",
              "inputs": [
                {
                  "name": "bits",
                  "type": "uint8"
                },
                {
                  "name": "value",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "SafeERC20FailedOperation",
              "inputs": [
                {
                  "name": "token",
                  "type": "address"
                }
              ]
            },
            {
              "name": "UnauthorizedMinter",
              "inputs": []
            },
            {
              "name": "VotesExpiredSignature",
              "inputs": [
                {
                  "name": "expiry",
                  "type": "uint256"
                }
              ]
            }
          ],
          "deployments": [
            {
              "chain": "Anvil Local",
              "chainId": 31337,
              "type": "testnet",
              "address": "0x381cFaBF829d112A4f091054971851cEbD123dd4",
              "explorerUrl": ""
            },
            {
              "chain": "Ethereum Sepolia",
              "chainId": 11155111,
              "type": "testnet",
              "address": "0x91023d46B903e9F7bF22FDB55dC42D9FD8bCa107",
              "explorerUrl": "https://sepolia.etherscan.io/address/0x91023d46B903e9F7bF22FDB55dC42D9FD8bCa107"
            }
          ]
        }
      }
    },
    "wallets": {
      "description": "Wallet deployment and management contracts",
      "service": "fabric-wallet",
      "contracts": {
        "WalletFactory": {
          "name": "WalletFactory",
          "domain": "wallets",
          "service": "fabric-wallet",
          "upgradeable": true,
          "ozPatterns": [
            "UUPSUpgradeable",
            "AccessControlUpgradeable"
          ],
          "functions": [
            {
              "name": "ADMIN_ROLE",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "DEFAULT_ADMIN_ROLE",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "MAX_WALLET_TYPE",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "OPERATOR_ROLE",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "UPGRADE_INTERFACE_VERSION",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "VERSION",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "WALLET_TYPE_DEFI",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "WALLET_TYPE_GAMING",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "WALLET_TYPE_GENERAL",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "WALLET_TYPE_NFT",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "WALLET_TYPE_SAVINGS",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "WALLET_TYPE_TRADING",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "computeWalletAddress",
              "inputs": [
                {
                  "name": "fabricAccount",
                  "type": "address"
                },
                {
                  "name": "walletId",
                  "type": "string"
                },
                {
                  "name": "label",
                  "type": "string"
                },
                {
                  "name": "walletType",
                  "type": "uint8"
                },
                {
                  "name": "metadataUri",
                  "type": "string"
                },
                {
                  "name": "permissions",
                  "type": "uint256"
                },
                {
                  "name": "dailyLimitWei",
                  "type": "uint256"
                },
                {
                  "name": "salt",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "createWallet",
              "inputs": [
                {
                  "name": "fabricAccount",
                  "type": "address"
                },
                {
                  "name": "walletId",
                  "type": "string"
                },
                {
                  "name": "label",
                  "type": "string"
                },
                {
                  "name": "walletType",
                  "type": "uint8"
                },
                {
                  "name": "metadataUri",
                  "type": "string"
                },
                {
                  "name": "permissions",
                  "type": "uint256"
                },
                {
                  "name": "dailyLimitWei",
                  "type": "uint256"
                },
                {
                  "name": "salt",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "wallet",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable"
            },
            {
              "name": "getMaxWalletsPerUser",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getRoleAdmin",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getTotalWallets",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getWalletCount",
              "inputs": [
                {
                  "name": "fabricAccount",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getWalletOwner",
              "inputs": [
                {
                  "name": "wallet",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getWallets",
              "inputs": [
                {
                  "name": "fabricAccount",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "grantRole",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "hasRole",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "initialize",
              "inputs": [
                {
                  "name": "_implementation",
                  "type": "address"
                },
                {
                  "name": "_admin",
                  "type": "address"
                },
                {
                  "name": "_maxWalletsPerUser",
                  "type": "uint256"
                },
                {
                  "name": "_sessionKeyModule",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "isWalletDeployed",
              "inputs": [
                {
                  "name": "wallet",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "maxWalletsPerUser",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "ownerWallets",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                },
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "pause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "paused",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "proxiableUUID",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "renounceRole",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "name": "callerConfirmation",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "revokeRole",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "name": "account",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "sessionKeyModule",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "setSessionKeyModule",
              "inputs": [
                {
                  "name": "_sessionKeyModule",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "supportsInterface",
              "inputs": [
                {
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "totalWalletsDeployed",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "unpause",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "updateImplementation",
              "inputs": [
                {
                  "name": "newImplementation",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "updateMaxWalletsPerUser",
              "inputs": [
                {
                  "name": "newMax",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "upgradeToAndCall",
              "inputs": [
                {
                  "name": "newImplementation",
                  "type": "address"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "outputs": [],
              "stateMutability": "payable"
            },
            {
              "name": "walletImplementation",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "walletToOwner",
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            }
          ],
          "events": [
            {
              "name": "Initialized",
              "inputs": [
                {
                  "name": "version",
                  "type": "uint64",
                  "indexed": false
                }
              ]
            },
            {
              "name": "MaxWalletsPerUserUpdated",
              "inputs": [
                {
                  "name": "oldMax",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "newMax",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Paused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            },
            {
              "name": "RoleAdminChanged",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "previousAdminRole",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "newAdminRole",
                  "type": "bytes32",
                  "indexed": true
                }
              ]
            },
            {
              "name": "RoleGranted",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "sender",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "RoleRevoked",
              "inputs": [
                {
                  "name": "role",
                  "type": "bytes32",
                  "indexed": true
                },
                {
                  "name": "account",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "sender",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "SessionKeyModuleSet",
              "inputs": [
                {
                  "name": "sessionKeyModule",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Unpaused",
              "inputs": [
                {
                  "name": "account",
                  "type": "address",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Upgraded",
              "inputs": [
                {
                  "name": "implementation",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "WalletDeployed",
              "inputs": [
                {
                  "name": "fabricAccount",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "walletAddress",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "walletId",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "label",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "walletType",
                  "type": "uint8",
                  "indexed": false
                },
                {
                  "name": "salt",
                  "type": "bytes32",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "WalletImplementationUpdated",
              "inputs": [
                {
                  "name": "oldImpl",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newImpl",
                  "type": "address",
                  "indexed": true
                }
              ]
            }
          ],
          "errors": [
            {
              "name": "AccessControlBadConfirmation",
              "inputs": []
            },
            {
              "name": "AccessControlUnauthorizedAccount",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                },
                {
                  "name": "neededRole",
                  "type": "bytes32"
                }
              ]
            },
            {
              "name": "AddressEmptyCode",
              "inputs": [
                {
                  "name": "target",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC1967InvalidImplementation",
              "inputs": [
                {
                  "name": "implementation",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC1967NonPayable",
              "inputs": []
            },
            {
              "name": "EnforcedPause",
              "inputs": []
            },
            {
              "name": "ExpectedPause",
              "inputs": []
            },
            {
              "name": "FailedCall",
              "inputs": []
            },
            {
              "name": "InvalidInitialization",
              "inputs": []
            },
            {
              "name": "InvalidInput",
              "inputs": []
            },
            {
              "name": "InvalidWalletType",
              "inputs": []
            },
            {
              "name": "MaxWalletsReached",
              "inputs": []
            },
            {
              "name": "NotInitializing",
              "inputs": []
            },
            {
              "name": "ReentrancyGuardReentrantCall",
              "inputs": []
            },
            {
              "name": "UUPSUnauthorizedCallContext",
              "inputs": []
            },
            {
              "name": "UUPSUnsupportedProxiableUUID",
              "inputs": [
                {
                  "name": "slot",
                  "type": "bytes32"
                }
              ]
            },
            {
              "name": "WalletAlreadyExists",
              "inputs": []
            },
            {
              "name": "WalletNotFound",
              "inputs": []
            }
          ],
          "deployments": [
            {
              "chain": "Anvil Local",
              "chainId": 31337,
              "type": "testnet",
              "address": "0x3F2303Cc3bde3e71cb2ec1016EB7550631B2F465",
              "explorerUrl": ""
            },
            {
              "chain": "Ethereum Sepolia",
              "chainId": 11155111,
              "type": "testnet",
              "address": "0x0666e0d90400B8BB63e0830923fCCAc30353A34d",
              "explorerUrl": "https://sepolia.etherscan.io/address/0x0666e0d90400B8BB63e0830923fCCAc30353A34d"
            }
          ]
        },
        "Wallet": {
          "name": "Wallet",
          "domain": "wallets",
          "service": "fabric-wallet",
          "upgradeable": true,
          "ozPatterns": [
            "UUPSUpgradeable",
            "OwnableUpgradeable",
            "ReentrancyGuardUpgradeable"
          ],
          "functions": [
            {
              "name": "ENTRY_POINT",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "UPGRADE_INTERFACE_VERSION",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "WALLET_TYPE_DEFI",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "WALLET_TYPE_GAMING",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "WALLET_TYPE_GENERAL",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "WALLET_TYPE_NFT",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "WALLET_TYPE_SAVINGS",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "WALLET_TYPE_TRADING",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "execute",
              "inputs": [
                {
                  "name": "target",
                  "type": "address"
                },
                {
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "executeBatch",
              "inputs": [
                {
                  "name": "targets",
                  "type": "address[]"
                },
                {
                  "name": "values",
                  "type": "uint256[]"
                },
                {
                  "name": "dataArray",
                  "type": "bytes[]"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "executeWithSessionKey",
              "inputs": [
                {
                  "name": "sessionKey",
                  "type": "address"
                },
                {
                  "name": "target",
                  "type": "address"
                },
                {
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "name": "data",
                  "type": "bytes"
                },
                {
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "name": "merkleProof",
                  "type": "bytes32[]"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "freeze",
              "inputs": [
                {
                  "name": "reason",
                  "type": "string"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "getCreatedAt",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint48"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getDailyLimit",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getDailySpent",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getFabricAccount",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getNonce",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint96"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getPermissions",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getRemainingDailyLimit",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getSessionKeyModule",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getWalletId",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getWalletInfo",
              "inputs": [],
              "outputs": [
                {
                  "name": "fabricAccount",
                  "type": "address"
                },
                {
                  "name": "walletId",
                  "type": "string"
                },
                {
                  "name": "walletLabel",
                  "type": "string"
                },
                {
                  "name": "walletType",
                  "type": "uint8"
                },
                {
                  "name": "permissions",
                  "type": "uint256"
                },
                {
                  "name": "dailyLimitWei",
                  "type": "uint256"
                },
                {
                  "name": "dailySpentWei",
                  "type": "uint256"
                },
                {
                  "name": "frozen",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getWalletLabel",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "getWalletType",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "initialize",
              "inputs": [
                {
                  "name": "fabricAccount",
                  "type": "address"
                },
                {
                  "name": "walletId",
                  "type": "string"
                },
                {
                  "name": "label",
                  "type": "string"
                },
                {
                  "name": "walletType",
                  "type": "uint8"
                },
                {
                  "name": "metadataUri",
                  "type": "string"
                },
                {
                  "name": "permissions",
                  "type": "uint256"
                },
                {
                  "name": "dailyLimitWei",
                  "type": "uint256"
                },
                {
                  "name": "sessionKeyModuleAddr",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "isFrozen",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "isSessionKeyValid",
              "inputs": [
                {
                  "name": "sessionKey",
                  "type": "address"
                }
              ],
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "owner",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "proxiableUUID",
              "inputs": [],
              "outputs": [
                {
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view"
            },
            {
              "name": "renounceOwnership",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "setSessionKeyModule",
              "inputs": [
                {
                  "name": "sessionKeyModuleAddr",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "transferOwnership",
              "inputs": [
                {
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "unfreeze",
              "inputs": [],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "updateDailyLimit",
              "inputs": [
                {
                  "name": "newLimitWei",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "updateLabel",
              "inputs": [
                {
                  "name": "newLabel",
                  "type": "string"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "updatePermissions",
              "inputs": [
                {
                  "name": "newPermissions",
                  "type": "uint256"
                }
              ],
              "outputs": [],
              "stateMutability": "nonpayable"
            },
            {
              "name": "upgradeToAndCall",
              "inputs": [
                {
                  "name": "newImplementation",
                  "type": "address"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "outputs": [],
              "stateMutability": "payable"
            },
            {
              "name": "validateUserOp",
              "inputs": [
                {
                  "name": "userOp",
                  "type": "tuple"
                },
                {
                  "name": "userOpHash",
                  "type": "bytes32"
                },
                {
                  "name": "missingAccountFunds",
                  "type": "uint256"
                }
              ],
              "outputs": [
                {
                  "name": "validationData",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable"
            }
          ],
          "events": [
            {
              "name": "DailyLimitUpdated",
              "inputs": [
                {
                  "name": "oldLimit",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "newLimit",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Executed",
              "inputs": [
                {
                  "name": "target",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "value",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "success",
                  "type": "bool",
                  "indexed": false
                }
              ]
            },
            {
              "name": "ExecutedWithSessionKey",
              "inputs": [
                {
                  "name": "sessionKey",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "target",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "value",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "success",
                  "type": "bool",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Initialized",
              "inputs": [
                {
                  "name": "version",
                  "type": "uint64",
                  "indexed": false
                }
              ]
            },
            {
              "name": "OwnershipTransferred",
              "inputs": [
                {
                  "name": "previousOwner",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "newOwner",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "PermissionsUpdated",
              "inputs": [
                {
                  "name": "oldPermissions",
                  "type": "uint256",
                  "indexed": false
                },
                {
                  "name": "newPermissions",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "SessionKeyModuleSet",
              "inputs": [
                {
                  "name": "sessionKeyModule",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "Upgraded",
              "inputs": [
                {
                  "name": "implementation",
                  "type": "address",
                  "indexed": true
                }
              ]
            },
            {
              "name": "WalletFrozenEvent",
              "inputs": [
                {
                  "name": "reason",
                  "type": "string",
                  "indexed": false
                }
              ]
            },
            {
              "name": "WalletInitialized",
              "inputs": [
                {
                  "name": "fabricAccount",
                  "type": "address",
                  "indexed": true
                },
                {
                  "name": "walletId",
                  "type": "string",
                  "indexed": true
                },
                {
                  "name": "walletLabel",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "walletType",
                  "type": "uint8",
                  "indexed": false
                },
                {
                  "name": "timestamp",
                  "type": "uint256",
                  "indexed": false
                }
              ]
            },
            {
              "name": "WalletLabelUpdatedEvent",
              "inputs": [
                {
                  "name": "oldLabel",
                  "type": "string",
                  "indexed": false
                },
                {
                  "name": "newLabel",
                  "type": "string",
                  "indexed": false
                }
              ]
            },
            {
              "name": "WalletUnfrozenEvent",
              "inputs": []
            }
          ],
          "errors": [
            {
              "name": "AddressEmptyCode",
              "inputs": [
                {
                  "name": "target",
                  "type": "address"
                }
              ]
            },
            {
              "name": "DailyLimitExceeded",
              "inputs": []
            },
            {
              "name": "DailyLimitExceededError",
              "inputs": []
            },
            {
              "name": "ECDSAInvalidSignature",
              "inputs": []
            },
            {
              "name": "ECDSAInvalidSignatureLength",
              "inputs": [
                {
                  "name": "length",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ECDSAInvalidSignatureS",
              "inputs": [
                {
                  "name": "s",
                  "type": "bytes32"
                }
              ]
            },
            {
              "name": "ERC1967InvalidImplementation",
              "inputs": [
                {
                  "name": "implementation",
                  "type": "address"
                }
              ]
            },
            {
              "name": "ERC1967NonPayable",
              "inputs": []
            },
            {
              "name": "FailedCall",
              "inputs": []
            },
            {
              "name": "InvalidDailyLimit",
              "inputs": []
            },
            {
              "name": "InvalidInitialization",
              "inputs": []
            },
            {
              "name": "InvalidInput",
              "inputs": []
            },
            {
              "name": "InvalidOperation",
              "inputs": []
            },
            {
              "name": "InvalidSessionKey",
              "inputs": []
            },
            {
              "name": "InvalidSignature",
              "inputs": []
            },
            {
              "name": "NotInitializing",
              "inputs": []
            },
            {
              "name": "OwnableInvalidOwner",
              "inputs": [
                {
                  "name": "owner",
                  "type": "address"
                }
              ]
            },
            {
              "name": "OwnableUnauthorizedAccount",
              "inputs": [
                {
                  "name": "account",
                  "type": "address"
                }
              ]
            },
            {
              "name": "PrefundFailed",
              "inputs": [
                {
                  "name": "amount",
                  "type": "uint256"
                }
              ]
            },
            {
              "name": "ReentrancyGuardReentrantCall",
              "inputs": []
            },
            {
              "name": "SessionKeyModuleNotSet",
              "inputs": []
            },
            {
              "name": "SessionKeyValidationFailed",
              "inputs": []
            },
            {
              "name": "UUPSUnauthorizedCallContext",
              "inputs": []
            },
            {
              "name": "UUPSUnsupportedProxiableUUID",
              "inputs": [
                {
                  "name": "slot",
                  "type": "bytes32"
                }
              ]
            },
            {
              "name": "UnauthorizedCaller",
              "inputs": []
            },
            {
              "name": "WalletFrozenError",
              "inputs": []
            },
            {
              "name": "WalletNotInitialized",
              "inputs": []
            }
          ],
          "deployments": [
            {
              "chain": "Anvil Local",
              "chainId": 31337,
              "type": "testnet",
              "address": "0x543F899ACa1C0De2696f147971ec7c9C007B4218",
              "explorerUrl": ""
            },
            {
              "chain": "Ethereum Sepolia",
              "chainId": 11155111,
              "type": "testnet",
              "address": "0x60F808480e0C0C78340159B2337430f33e45d260",
              "explorerUrl": "https://sepolia.etherscan.io/address/0x60F808480e0C0C78340159B2337430f33e45d260"
            }
          ]
        }
      }
    }
  },
  "chains": {
    "localhost": {
      "chainId": 31337,
      "name": "Anvil Local",
      "type": "local",
      "explorer": ""
    },
    "sepolia": {
      "chainId": 11155111,
      "name": "Ethereum Sepolia",
      "type": "testnet",
      "explorer": "https://sepolia.etherscan.io"
    },
    "base_sepolia": {
      "chainId": 84532,
      "name": "Base Sepolia",
      "type": "testnet",
      "explorer": "https://sepolia.basescan.org"
    },
    "base": {
      "chainId": 8453,
      "name": "Base",
      "type": "mainnet",
      "explorer": "https://basescan.org"
    },
    "ethereum": {
      "chainId": 1,
      "name": "Ethereum",
      "type": "mainnet",
      "explorer": "https://etherscan.io"
    },
    "polygon": {
      "chainId": 137,
      "name": "Polygon",
      "type": "mainnet",
      "explorer": "https://polygonscan.com"
    },
    "arbitrum": {
      "chainId": 42161,
      "name": "Arbitrum One",
      "type": "mainnet",
      "explorer": "https://arbiscan.io"
    },
    "optimism": {
      "chainId": 10,
      "name": "Optimism",
      "type": "mainnet",
      "explorer": "https://optimistic.etherscan.io"
    },
    "avalanche": {
      "chainId": 43114,
      "name": "Avalanche C-Chain",
      "type": "mainnet",
      "explorer": "https://snowtrace.io"
    }
  },
  "byService": {
    "fabric-auth": [
      "FabricAccount",
      "FabricAccountFactory"
    ],
    "fabric-subscription": [
      "FabricPrepaidAccount",
      "FabricSubscriptionManager"
    ],
    "fabric-nft": [
      "NFTFactory",
      "ERC721Token",
      "ERC1155Token"
    ],
    "fabric-token": [
      "TokenFactory",
      "ERC20Token"
    ],
    "fabric-wallet": [
      "WalletFactory",
      "Wallet"
    ]
  }
}