{"version":3,"sources":["../src/utils/ipfs.ts","../src/index.node.ts","../src/platform/node.ts","../src/platform/shared/crypto-utils.ts","../src/platform/shared/pgp-utils.ts","../src/platform/shared/error-utils.ts","../src/platform/shared/stream-utils.ts","../src/types/config.ts","../src/types/chains.ts","../src/types/storage.ts","../src/utils/schemaValidation.ts","../src/schemas/dataContract.schema.json","../src/types/external-apis.ts","../src/errors.ts","../src/config/addresses.ts","../src/abi/ComputeEngineImplementation.ts","../src/abi/DataRegistryImplementation.ts","../src/abi/TeePoolImplementation.ts","../src/abi/TeePoolPhalaImplementation.ts","../src/abi/PermissionRegistryImplementation.ts","../src/abi/DataRefinerRegistryImplementation.ts","../src/abi/QueryEngineImplementation.ts","../src/abi/ComputeInstructionRegistryImplementation.ts","../src/abi/TeePoolEphemeralStandardImplementation.ts","../src/abi/TeePoolPersistentStandardImplementation.ts","../src/abi/TeePoolPersistentGpuImplementation.ts","../src/abi/TeePoolDedicatedStandardImplementation.ts","../src/abi/TeePoolDedicatedGpuImplementation.ts","../src/abi/VanaEpochImplementation.ts","../src/abi/DLPRegistryImplementation.ts","../src/abi/DLPTreasuryImplementation.ts","../src/abi/DLPRewardDeployerTreasuryImplementation.ts","../src/abi/DLPPerformanceImplementation.ts","../src/abi/DLPRewardDeployerImplementation.ts","../src/abi/DLPRewardSwapImplementation.ts","../src/abi/SwapHelperImplementation.ts","../src/abi/DLPRootImplementation.ts","../src/abi/DataLiquidityPoolImplementation.ts","../src/abi/DLPRegistryTreasuryImplementation.ts","../src/abi/VanaPoolStakingImplementation.ts","../src/abi/VanaPoolEntityImplementation.ts","../src/abi/VanaPoolTreasuryImplementation.ts","../src/abi/DATImplementation.ts","../src/abi/DATFactoryImplementation.ts","../src/abi/DATPausableImplementation.ts","../src/abi/DATVotesImplementation.ts","../src/abi/index.ts","../src/utils/grantFiles.ts","../src/utils/grantValidation.ts","../src/schemas/grantFile.schema.json","../src/controllers/permissions.ts","../src/controllers/data.ts","../src/controllers/server.ts","../src/utils/encryption.ts","../src/contracts/contractController.ts","../src/core/client.ts","../src/config/chains.ts","../src/controllers/protocol.ts","../src/storage/providers/google-drive.ts","../src/storage/providers/ipfs.ts","../src/storage/providers/pinata.ts","../src/storage/providers/server-proxy.ts","../src/storage/manager.ts","../src/core.ts","../src/chains/definitions.ts","../src/utils/formatters.ts","../src/utils/grants.ts","../src/core/generics.ts","../src/server/handler.ts","../src/core/apiClient.ts"],"sourcesContent":["/**\n * IPFS URL utilities for the Vana SDK\n *\n * Centralized functions for handling IPFS URLs, converting them to gateway URLs,\n * and extracting IPFS hashes from various URL formats.\n */\n\n/**\n * Default IPFS gateway URL\n */\nexport const DEFAULT_IPFS_GATEWAY = \"https://dweb.link/ipfs/\";\n\n/**\n * Alternative IPFS gateways for fallback - ordered by reliability and rate limits\n */\nexport const IPFS_GATEWAYS = [\n  \"https://dweb.link/ipfs/\", // Interplanetary Shipyard - highly reliable\n  \"https://ipfs.io/ipfs/\", // IPFS Foundation - reliable\n  \"https://cloudflare-ipfs.com/ipfs/\", // Cloudflare - good performance\n  \"https://gateway.pinata.cloud/ipfs/\", // Pinata - backup option (has rate limits)\n  \"https://ipfs.filebase.io/ipfs/\", // Filebase - emerging reliable option\n] as const;\n\n/**\n * Check if a URL is an IPFS URL (starts with ipfs://)\n *\n * @param url - The URL to check\n * @returns True if the URL is an IPFS URL\n */\nexport function isIpfsUrl(url: string): boolean {\n  return url.startsWith(\"ipfs://\");\n}\n\n/**\n * Convert an IPFS URL to an HTTP gateway URL\n *\n * @param url - The IPFS URL to convert (e.g., \"ipfs://QmHash...\")\n * @param gateway - Optional gateway URL (defaults to DEFAULT_IPFS_GATEWAY)\n * @returns The HTTP gateway URL or original URL if not an IPFS URL\n * @example\n * ```ts\n * convertIpfsUrl(\"ipfs://QmHash123\")\n * // Returns: \"https://ipfs.io/ipfs/QmHash123\"\n *\n * convertIpfsUrl(\"ipfs://QmHash123\", \"https://gateway.pinata.cloud/ipfs/\")\n * // Returns: \"https://gateway.pinata.cloud/ipfs/QmHash123\"\n * ```\n */\nexport function convertIpfsUrl(\n  url: string,\n  gateway: string = DEFAULT_IPFS_GATEWAY,\n): string {\n  if (isIpfsUrl(url)) {\n    const hash = url.replace(\"ipfs://\", \"\");\n    return `${gateway}${hash}`;\n  }\n  return url;\n}\n\n/**\n * Extract IPFS hash from various URL formats\n *\n * @param url - The URL to extract hash from\n * @returns The IPFS hash or null if not found\n * @example\n * ```ts\n * extractIpfsHash(\"ipfs://QmHash123\") // Returns: \"QmHash123\"\n * extractIpfsHash(\"https://gateway.pinata.cloud/ipfs/QmHash123\") // Returns: \"QmHash123\"\n * extractIpfsHash(\"QmHash123456789012345678901234567890123456\") // Returns: \"QmHash123456789012345678901234567890123456\"\n * ```\n */\nexport function extractIpfsHash(url: string): string | null {\n  // Handle various IPFS URL formats\n  const patterns = [\n    /ipfs\\/([a-zA-Z0-9]+)/, // https://gateway.pinata.cloud/ipfs/HASH\n    /^ipfs:\\/\\/([a-zA-Z0-9]+)$/, // ipfs://HASH\n    /^([a-zA-Z0-9]{46,})$/, // Just the hash (46+ chars for IPFS hashes)\n  ];\n\n  for (const pattern of patterns) {\n    const match = url.match(pattern);\n    if (match) {\n      return match[1];\n    }\n  }\n\n  return null;\n}\n\n/**\n * Get multiple gateway URLs for an IPFS hash (useful for fallback)\n *\n * @param hash - The IPFS hash\n * @returns Array of gateway URLs\n */\nexport function getGatewayUrls(hash: string): string[] {\n  return IPFS_GATEWAYS.map((gateway) => `${gateway}${hash}`);\n}\n\n/**\n * Convert an IPFS URL to multiple gateway URLs for fallback\n *\n * @param url - The IPFS URL\n * @returns Array of gateway URLs or original URL if not IPFS\n */\nexport function convertIpfsUrlWithFallbacks(url: string): string[] {\n  const hash = extractIpfsHash(url);\n  if (hash) {\n    return getGatewayUrls(hash);\n  }\n  return [url];\n}\n\n/**\n * Fetch content from IPFS with automatic gateway fallbacks\n *\n * @param url - The IPFS URL to fetch\n * @param options - Optional fetch options\n * @returns Promise resolving to Response object\n * @throws Error if all gateways fail\n */\nexport async function fetchWithFallbacks(\n  url: string,\n  options?: RequestInit,\n): Promise<Response> {\n  const hash = extractIpfsHash(url);\n  if (!hash) {\n    // Not an IPFS URL, fetch directly\n    return fetch(url, options);\n  }\n\n  const gatewayUrls = getGatewayUrls(hash);\n  let lastError: Error | null = null;\n\n  for (let i = 0; i < gatewayUrls.length; i++) {\n    const gatewayUrl = gatewayUrls[i];\n    try {\n      const response = await fetch(gatewayUrl, {\n        ...options,\n        // Add timeout to avoid hanging on slow gateways\n        signal: AbortSignal.timeout(10000), // 10 second timeout\n      });\n\n      // If response is ok, return it\n      if (response.ok) {\n        return response;\n      }\n\n      // If rate limited (429), try next gateway immediately\n      if (response.status === 429) {\n        lastError = new Error(`Gateway rate limited: ${gatewayUrl}`);\n        continue;\n      }\n\n      // For other HTTP errors, still try next gateway\n      lastError = new Error(`Gateway error ${response.status}: ${gatewayUrl}`);\n    } catch (error) {\n      lastError = error instanceof Error ? error : new Error(String(error));\n\n      // For rate limiting or timeout errors, continue to next gateway\n      if (\n        lastError.message.includes(\"429\") ||\n        lastError.name === \"TimeoutError\"\n      ) {\n        continue;\n      }\n    }\n\n    // Add delay between retries (except for last attempt)\n    if (i < gatewayUrls.length - 1) {\n      await new Promise((resolve) => setTimeout(resolve, 1000 * (i + 1))); // Exponential backoff\n    }\n  }\n\n  throw new Error(\n    `All IPFS gateways failed for hash ${hash}. Last error: ${lastError?.message}`,\n  );\n}\n","import { NodePlatformAdapter } from \"./platform/node\";\nimport { VanaCore } from \"./core\";\nimport type { VanaConfig } from \"./types\";\n\n/**\n * The Vana SDK class pre-configured for Node.js environments.\n * Automatically uses the Node.js platform adapter for crypto operations and file systems.\n *\n * @example\n * ```typescript\n * const vana = new Vana({ walletClient });\n *\n * // Upload and encrypt user data\n * const file = await vana.data.uploadAndStoreFile(dataBlob, schema);\n *\n * // Grant permissions to DLPs\n * await vana.permissions.grantPermission({\n *   account: dlpAddress,\n *   fileId: file.id,\n *   permissions: ['read']\n * });\n * ```\n */\nexport class VanaNode extends VanaCore {\n  /**\n   * Creates a Vana SDK instance configured for Node.js environments.\n   *\n   * @param config - SDK configuration object (wallet client or chain config)\n   * @example\n   * ```typescript\n   * // With wallet client\n   * const vana = new Vana({ walletClient });\n   *\n   * // With chain configuration\n   * const vana = new Vana({ chainId: 14800, account });\n   * ```\n   */\n  constructor(config: VanaConfig) {\n    super(new NodePlatformAdapter(), config);\n  }\n}\n\n// Export the node-specific class as the main 'Vana' for this entry point.\nexport { VanaNode as Vana };\n\n// Re-export everything that was in index.ts (avoiding circular dependency)\n// Core class\nexport { VanaCore } from \"./core\";\n\n// Types - modular exports\nexport type * from \"./types\";\n\n// Type guards and utilities\nexport {\n  isReplicateAPIResponse,\n  isIdentityServerOutput,\n  isPersonalServerOutput,\n  isAPIResponse,\n  safeParseJSON,\n  parseReplicateOutput,\n} from \"./types/external-apis\";\n\n// VanaContract is exported from abi to avoid circular dependencies\nexport type { VanaContract } from \"./abi\";\n\n// Error classes\nexport * from \"./errors\";\n\n// Controllers\nexport { PermissionsController } from \"./controllers/permissions\";\nexport { DataController } from \"./controllers/data\";\nexport { ServerController } from \"./controllers/server\";\nexport { ProtocolController } from \"./controllers/protocol\";\n\n// Contract controller\nexport * from \"./contracts/contractController\";\n\n// Utilities\nexport * from \"./utils/encryption\";\nexport * from \"./utils/formatters\";\nexport * from \"./utils/grantFiles\";\nexport * from \"./utils/grantValidation\";\nexport * from \"./utils/grants\";\nexport * from \"./utils/ipfs\";\nexport * from \"./utils/schemaValidation\";\n\n// Storage API\nexport * from \"./storage\";\n\n// Configuration\nexport { getContractAddress } from \"./config/addresses\";\nexport { chains, mokshaTestnet, vanaMainnet } from \"./config/chains\";\n\n// Chain configurations with subgraph URLs\nexport * from \"./chains\";\n\n// ABIs\nexport { getAbi } from \"./abi\";\nexport type { VanaContract as VanaContractAbi } from \"./abi\";\n\n// Generic utilities for extensibility\nexport {\n  BaseController,\n  RetryUtility,\n  RateLimiter,\n  MemoryCache,\n  EventEmitter,\n  MiddlewarePipeline,\n  AsyncQueue,\n  CircuitBreaker,\n} from \"./core/generics\";\n\n// Server-side utilities\nexport { handleRelayerRequest } from \"./server/handler\";\nexport type { RelayerRequestPayload } from \"./server/handler\";\n\n// Platform adapters\nexport { NodePlatformAdapter } from \"./platform/node\";\nexport type { BrowserPlatformAdapter } from \"./platform/browser\";\n\nexport { ApiClient } from \"./core/apiClient\";\n\nexport type {\n  ApiClientConfig,\n  HttpMethod,\n  RequestOptions,\n} from \"./core/apiClient\";\n\n// Re-export the SDK as both named and default export\nexport default VanaNode;\n","/**\n * Node.js implementation of the Vana Platform Adapter\n *\n * This implementation uses Node.js-specific libraries and configurations\n * to provide crypto, PGP, and HTTP functionality.\n */\n\nimport { randomBytes } from \"crypto\";\nimport * as openpgp from \"openpgp\";\nimport {\n  VanaPlatformAdapter,\n  VanaCryptoAdapter,\n  VanaPGPAdapter,\n  VanaHttpAdapter,\n} from \"./interface\";\nimport {\n  processWalletPublicKey,\n  processWalletPrivateKey,\n  parseEncryptedDataBuffer,\n} from \"./shared/crypto-utils\";\nimport { getPGPKeyGenParams } from \"./shared/pgp-utils\";\nimport { wrapCryptoError } from \"./shared/error-utils\";\nimport { streamToUint8Array } from \"./shared/stream-utils\";\n\n// Eccrypto type definitions removed - using dynamic imports instead\n\n// Dynamically import eccrypto for Node.js\nlet eccrypto: {\n  encrypt: (\n    publicKey: Buffer,\n    message: Buffer,\n  ) => Promise<{\n    iv: Buffer;\n    ephemPublicKey: Buffer;\n    ciphertext: Buffer;\n    mac: Buffer;\n  }>;\n  decrypt: (\n    privateKey: Buffer,\n    encrypted: {\n      iv: Buffer;\n      ephemPublicKey: Buffer;\n      ciphertext: Buffer;\n      mac: Buffer;\n    },\n  ) => Promise<Buffer>;\n  getPublicCompressed: (privateKey: Buffer) => Buffer;\n} | null = null;\n\n// Lazy load eccrypto\n/**\n * Lazy loads the eccrypto library for Node.js crypto operations\n *\n * @returns Promise resolving to the eccrypto library instance\n */\nasync function getEccrypto() {\n  if (!eccrypto) {\n    try {\n      // Import the eccrypto library for Node.js\n      const eccryptoLib = await import(\"eccrypto\");\n\n      eccrypto = {\n        encrypt: eccryptoLib.encrypt,\n        decrypt: eccryptoLib.decrypt,\n        getPublicCompressed: eccryptoLib.getPublicCompressed,\n      };\n    } catch (error) {\n      throw new Error(`Failed to load eccrypto library: ${error}`);\n    }\n  }\n  return eccrypto;\n}\n\n/**\n * Node.js implementation of crypto operations using secp256k1\n */\nclass NodeCryptoAdapter implements VanaCryptoAdapter {\n  async encryptWithPublicKey(\n    data: string,\n    publicKeyHex: string,\n  ): Promise<string> {\n    try {\n      const eccryptoLib = await getEccrypto();\n      const publicKey = Buffer.from(publicKeyHex, \"hex\");\n      const message = Buffer.from(data, \"utf8\");\n\n      const encrypted = await eccryptoLib.encrypt(publicKey, message);\n\n      // Serialize encrypted data as JSON\n      const serialized = {\n        iv: encrypted.iv.toString(\"hex\"),\n        ephemPublicKey: encrypted.ephemPublicKey.toString(\"hex\"),\n        ciphertext: encrypted.ciphertext.toString(\"hex\"),\n        mac: encrypted.mac.toString(\"hex\"),\n      };\n\n      return JSON.stringify(serialized);\n    } catch (error) {\n      throw new Error(`Encryption failed: ${error}`);\n    }\n  }\n\n  async decryptWithPrivateKey(\n    encryptedData: string,\n    privateKeyHex: string,\n  ): Promise<string> {\n    try {\n      const eccryptoLib = await getEccrypto();\n      const privateKey = Buffer.from(privateKeyHex, \"hex\");\n\n      // Deserialize encrypted data\n      const serialized = JSON.parse(encryptedData);\n      const encrypted = {\n        iv: Buffer.from(serialized.iv, \"hex\"),\n        ephemPublicKey: Buffer.from(serialized.ephemPublicKey, \"hex\"),\n        ciphertext: Buffer.from(serialized.ciphertext, \"hex\"),\n        mac: Buffer.from(serialized.mac, \"hex\"),\n      };\n\n      const decrypted = await eccryptoLib.decrypt(privateKey, encrypted);\n      return decrypted.toString(\"utf8\");\n    } catch (error) {\n      throw new Error(`Decryption failed: ${error}`);\n    }\n  }\n\n  async generateKeyPair(): Promise<{ publicKey: string; privateKey: string }> {\n    try {\n      const eccryptoLib = await getEccrypto();\n      const privateKey = randomBytes(32);\n      const publicKey = eccryptoLib.getPublicCompressed(privateKey);\n\n      return {\n        privateKey: privateKey.toString(\"hex\"),\n        publicKey: publicKey.toString(\"hex\"),\n      };\n    } catch (error) {\n      throw wrapCryptoError(\"key generation\", error);\n    }\n  }\n\n  async encryptWithWalletPublicKey(\n    data: string,\n    publicKey: string,\n  ): Promise<string> {\n    try {\n      const eccryptoLib = await getEccrypto();\n\n      // Use shared utility to process public key\n      const uncompressedKey = processWalletPublicKey(publicKey);\n\n      const encrypted = await eccryptoLib.encrypt(\n        uncompressedKey,\n        Buffer.from(data),\n      );\n\n      // Concatenate all components and return as hex (same format as browser)\n      const result = Buffer.concat([\n        encrypted.iv,\n        encrypted.ephemPublicKey,\n        encrypted.ciphertext,\n        encrypted.mac,\n      ]);\n\n      return result.toString(\"hex\");\n    } catch (error) {\n      throw wrapCryptoError(\"encrypt with wallet public key\", error);\n    }\n  }\n\n  async decryptWithWalletPrivateKey(\n    encryptedData: string,\n    privateKey: string,\n  ): Promise<string> {\n    try {\n      const eccryptoLib = await getEccrypto();\n\n      // Use shared utilities to process keys and parse data\n      const privateKeyBuffer = processWalletPrivateKey(privateKey);\n      const encryptedBuffer = Buffer.from(encryptedData, \"hex\");\n      const { iv, ephemPublicKey, ciphertext, mac } =\n        parseEncryptedDataBuffer(encryptedBuffer);\n\n      // Reconstruct the encrypted data structure for eccrypto\n      const encryptedObj = { iv, ephemPublicKey, ciphertext, mac };\n\n      // Decrypt using ECDH\n      const decryptedBuffer = await eccryptoLib.decrypt(\n        privateKeyBuffer,\n        encryptedObj,\n      );\n\n      return decryptedBuffer.toString(\"utf8\");\n    } catch (error) {\n      throw wrapCryptoError(\"decrypt with wallet private key\", error);\n    }\n  }\n\n  async encryptWithPassword(\n    data: Uint8Array,\n    password: string,\n  ): Promise<Uint8Array> {\n    try {\n      const message = await openpgp.createMessage({\n        binary: data,\n      });\n\n      // Use password-based encryption with wallet signature as password\n      // Note: For deterministic encryption, we would need to control the salt\n      // This implementation is secure but not deterministic due to OpenPGP's design\n      const encrypted = await openpgp.encrypt({\n        message,\n        passwords: [password],\n        format: \"binary\",\n      });\n\n      // In Node.js, the encrypted result is already a Uint8Array\n      if (encrypted instanceof Uint8Array) {\n        return encrypted;\n      }\n\n      // If it's a stream (should not happen with format: \"binary\"), read it\n      if (\n        encrypted &&\n        typeof encrypted === \"object\" &&\n        \"getReader\" in encrypted\n      ) {\n        return await streamToUint8Array(\n          encrypted as ReadableStream<Uint8Array>,\n        );\n      }\n\n      throw new Error(\"Unexpected encrypted data format\");\n    } catch (error) {\n      throw wrapCryptoError(\"encrypt with password\", error);\n    }\n  }\n\n  async decryptWithPassword(\n    encryptedData: Uint8Array,\n    password: string,\n  ): Promise<Uint8Array> {\n    try {\n      const message = await openpgp.readMessage({\n        binaryMessage: encryptedData,\n      });\n\n      // Use password-based decryption with wallet signature as password\n      const { data: decrypted } = await openpgp.decrypt({\n        message,\n        passwords: [password],\n        format: \"binary\",\n      });\n\n      // Convert decrypted data back to Uint8Array\n      return new Uint8Array(decrypted as ArrayBuffer);\n    } catch (error) {\n      throw wrapCryptoError(\"decrypt with password\", error);\n    }\n  }\n}\n\n/**\n * Node.js implementation of PGP operations using openpgp with Node-specific configuration\n */\nclass NodePGPAdapter implements VanaPGPAdapter {\n  async encrypt(data: string, publicKeyArmored: string): Promise<string> {\n    try {\n      const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored });\n\n      const encrypted = await openpgp.encrypt({\n        message: await openpgp.createMessage({ text: data }),\n        encryptionKeys: publicKey,\n        config: {\n          preferredCompressionAlgorithm: openpgp.enums.compression.zlib,\n        },\n      });\n\n      return encrypted as string;\n    } catch (error) {\n      throw wrapCryptoError(\"PGP encryption\", error);\n    }\n  }\n\n  async decrypt(\n    encryptedData: string,\n    privateKeyArmored: string,\n  ): Promise<string> {\n    try {\n      const privateKey = await openpgp.readPrivateKey({\n        armoredKey: privateKeyArmored,\n      });\n      const message = await openpgp.readMessage({\n        armoredMessage: encryptedData,\n      });\n\n      const { data: decrypted } = await openpgp.decrypt({\n        message,\n        decryptionKeys: privateKey,\n      });\n\n      return decrypted as string;\n    } catch (error) {\n      throw wrapCryptoError(\"PGP decryption\", error);\n    }\n  }\n\n  async generateKeyPair(options?: {\n    name?: string;\n    email?: string;\n    passphrase?: string;\n  }): Promise<{ publicKey: string; privateKey: string }> {\n    try {\n      // Use shared utility to get standardized parameters\n      const keyGenParams = getPGPKeyGenParams(options);\n\n      const { privateKey, publicKey } = await openpgp.generateKey(keyGenParams);\n\n      return { publicKey, privateKey };\n    } catch (error) {\n      throw wrapCryptoError(\"PGP key generation\", error);\n    }\n  }\n}\n\n/**\n * Node.js implementation of HTTP operations using node-fetch or native fetch\n */\nclass NodeHttpAdapter implements VanaHttpAdapter {\n  async fetch(url: string, options?: RequestInit): Promise<Response> {\n    if (typeof globalThis.fetch !== \"undefined\") {\n      return globalThis.fetch(url, options);\n    }\n\n    throw new Error(\"No fetch implementation available in Node.js environment\");\n  }\n}\n\n/**\n * Complete Node.js platform adapter implementation\n */\nexport class NodePlatformAdapter implements VanaPlatformAdapter {\n  crypto: VanaCryptoAdapter;\n  pgp: VanaPGPAdapter;\n  http: VanaHttpAdapter;\n  platform: \"node\" = \"node\" as const;\n\n  constructor() {\n    this.crypto = new NodeCryptoAdapter();\n    this.pgp = new NodePGPAdapter();\n    this.http = new NodeHttpAdapter();\n  }\n}\n\n/**\n * Default instance export for backwards compatibility\n */\nexport const nodePlatformAdapter: VanaPlatformAdapter =\n  new NodePlatformAdapter();\n","/**\n * Shared crypto utilities for platform adapters\n *\n * IMPORTANT: This module contains NO IMPORTS to avoid affecting bundle loading.\n * All functions are pure utilities that can be safely shared across platforms.\n */\n\n/**\n * Process wallet public key for encryption operations\n * Removes 0x prefix and ensures uncompressed format (65 bytes with 0x04 prefix)\n *\n * @param publicKey The public key (with or without 0x prefix)\n * @returns Buffer containing uncompressed public key\n */\nexport function processWalletPublicKey(publicKey: string): Buffer {\n  const publicKeyHex = publicKey.startsWith(\"0x\")\n    ? publicKey.slice(2)\n    : publicKey;\n  const publicKeyBytes = Buffer.from(publicKeyHex, \"hex\");\n\n  // Ensure public key is in uncompressed format (65 bytes with 0x04 prefix)\n  // If it's 64 bytes, add the 0x04 prefix; if already 65 bytes, use as-is\n  return publicKeyBytes.length === 64\n    ? Buffer.concat([Buffer.from([4]), publicKeyBytes])\n    : publicKeyBytes;\n}\n\n/**\n * Process wallet private key for decryption operations\n * Removes 0x prefix and converts to Buffer\n *\n * @param privateKey The private key (with or without 0x prefix)\n * @returns Buffer containing private key\n */\nexport function processWalletPrivateKey(privateKey: string): Buffer {\n  const privateKeyHex = privateKey.startsWith(\"0x\")\n    ? privateKey.slice(2)\n    : privateKey;\n  return Buffer.from(privateKeyHex, \"hex\");\n}\n\n/**\n * Parse encrypted data buffer into components\n * Extracts IV, ephemeral public key, ciphertext, and MAC from a concatenated buffer\n *\n * @param encryptedBuffer The buffer containing encrypted data\n * @returns Object with parsed components\n */\nexport function parseEncryptedDataBuffer(encryptedBuffer: Buffer) {\n  return {\n    iv: encryptedBuffer.slice(0, 16),\n    ephemPublicKey: encryptedBuffer.slice(16, 81), // 65 bytes for uncompressed public key\n    ciphertext: encryptedBuffer.slice(81, -32),\n    mac: encryptedBuffer.slice(-32),\n  };\n}\n\n/**\n * Convert hex string to Uint8Array\n *\n * @param hex The hex string to convert\n * @returns Uint8Array representation\n */\nexport function hexToUint8Array(hex: string): Uint8Array {\n  const result = new Uint8Array(hex.length / 2);\n  for (let i = 0; i < hex.length; i += 2) {\n    result[i / 2] = parseInt(hex.substr(i, 2), 16);\n  }\n  return result;\n}\n\n/**\n * Convert Uint8Array to hex string\n *\n * @param array The Uint8Array to convert\n * @returns Hex string representation\n */\nexport function uint8ArrayToHex(array: Uint8Array): string {\n  return Array.from(array, (byte) => byte.toString(16).padStart(2, \"0\")).join(\n    \"\",\n  );\n}\n","/**\n * Shared PGP utilities for platform adapters\n *\n * IMPORTANT: This module contains NO IMPORTS to avoid affecting bundle loading.\n * All functions are pure utilities that can be safely shared across platforms.\n */\n\n/**\n * Standard OpenPGP configuration for consistent behavior across platforms\n * Uses enum values instead of importing openpgp to avoid loading issues\n */\nexport const STANDARD_PGP_CONFIG = {\n  preferredCompressionAlgorithm: 2, // zlib (openpgp.enums.compression.zlib)\n  preferredSymmetricAlgorithm: 7, // aes256 (openpgp.enums.symmetric.aes256)\n} as const;\n\n/**\n * Process PGP key generation options with sensible defaults\n *\n * @param options - Optional key generation parameters\n * @param options.name - The name for the PGP key (defaults to \"Vana User\")\n * @param options.email - The email for the PGP key (defaults to \"user@vana.org\")\n * @param options.passphrase - Optional passphrase to protect the private key\n * @returns Processed options with defaults applied\n */\nexport function processPGPKeyOptions(options?: {\n  name?: string;\n  email?: string;\n  passphrase?: string;\n}) {\n  return {\n    name: options?.name || \"Vana User\",\n    email: options?.email || \"user@vana.org\",\n    passphrase: options?.passphrase,\n  };\n}\n\n/**\n * Get standard PGP key generation parameters\n * Combines default values with standard configuration\n *\n * @param options - Optional key generation parameters\n * @param options.name - The name for the PGP key (defaults to \"Vana User\")\n * @param options.email - The email for the PGP key (defaults to \"user@vana.org\")\n * @param options.passphrase - Optional passphrase to protect the private key\n * @returns Complete key generation parameters object\n */\nexport function getPGPKeyGenParams(options?: {\n  name?: string;\n  email?: string;\n  passphrase?: string;\n}) {\n  const { name, email, passphrase } = processPGPKeyOptions(options);\n\n  return {\n    type: \"rsa\" as const,\n    rsaBits: 2048,\n    userIDs: [{ name, email }],\n    passphrase,\n    config: STANDARD_PGP_CONFIG,\n  };\n}\n","/**\n * Shared error utilities for platform adapters\n *\n * IMPORTANT: This module contains NO IMPORTS to avoid affecting bundle loading.\n * All functions are pure utilities that can be safely shared across platforms.\n */\n\n/**\n * Wrap platform-specific errors with consistent messaging\n * Provides consistent error formatting across all crypto operations\n *\n * @param operation The operation that failed (e.g., \"encryption\", \"decryption\")\n * @param error The original error that occurred\n * @returns Wrapped error with consistent format\n */\nexport function wrapCryptoError(operation: string, error: unknown): Error {\n  const message = error instanceof Error ? error.message : \"Unknown error\";\n  return new Error(`${operation} failed: ${message}`);\n}\n\n/**\n * Validate encrypted data structure has required fields\n * Ensures encrypted data objects contain the expected properties\n *\n * @param data The data structure to validate\n * @throws Error if data structure is invalid\n */\nexport function validateEncryptedDataStructure(data: unknown): void {\n  if (!data || typeof data !== \"object\") {\n    throw new Error(\"Invalid encrypted data format\");\n  }\n\n  const obj = data as Record<string, unknown>;\n  if (!obj.encrypted || !obj.iv || !obj.ephemeralPublicKey) {\n    throw new Error(\"Invalid encrypted data format\");\n  }\n}\n","/**\n * Shared stream utilities for platform adapters\n *\n * IMPORTANT: This module contains NO IMPORTS to avoid affecting bundle loading.\n * All functions are pure utilities that can be safely shared across platforms.\n */\n\n/**\n * Convert ReadableStream to Uint8Array\n * Used primarily in Node.js environment where OpenPGP may return streams\n *\n * @param stream The ReadableStream to convert\n * @returns Promise resolving to Uint8Array containing all stream data\n */\nexport async function streamToUint8Array(\n  stream: ReadableStream<Uint8Array>,\n): Promise<Uint8Array> {\n  const reader = stream.getReader();\n  const chunks: Uint8Array[] = [];\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) break;\n      chunks.push(value);\n    }\n  } finally {\n    reader.releaseLock();\n  }\n\n  // Concatenate all chunks\n  const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n  const result = new Uint8Array(totalLength);\n  let offset = 0;\n  for (const chunk of chunks) {\n    result.set(chunk, offset);\n    offset += chunk.length;\n  }\n\n  return result;\n}\n","import type { WalletClient, Account, Hash } from \"viem\";\nimport type { VanaChainId, VanaChain } from \"./chains\";\nimport type { StorageProvider } from \"./storage\";\nimport type {\n  PermissionGrantTypedData,\n  TrustServerTypedData,\n  UntrustServerTypedData,\n  GenericTypedData,\n  GrantFile,\n} from \"./permissions\";\n\n/**\n * Configuration for storage providers used by the SDK.\n *\n * Allows you to configure multiple storage backends (IPFS, Pinata, Google Drive, etc.)\n * and specify which one to use by default for file operations.\n *\n * @category Configuration\n * @example\n * ```typescript\n * const storage: StorageConfig = {\n *   providers: {\n *     ipfs: new IPFSStorage({ gateway: 'https://gateway.pinata.cloud' }),\n *     pinata: new PinataStorage({ apiKey: 'your-key', secretKey: 'your-secret' })\n *   },\n *   defaultProvider: 'ipfs'\n * };\n * ```\n */\nexport interface StorageConfig {\n  /** Map of provider name to storage provider instance */\n  providers: Record<string, StorageProvider>;\n  /** Default provider name to use when none specified */\n  defaultProvider?: string;\n}\n\n/**\n * Relayer callback functions for handling gasless transactions.\n *\n * Instead of hardcoding HTTP/REST API calls, users can provide custom callback\n * functions to handle transaction relay in any way they choose (HTTP, WebSocket,\n * direct blockchain submission, etc.).\n *\n * @category Configuration\n * @example\n * ```typescript\n * const relayerCallbacks: RelayerCallbacks = {\n *   async submitPermissionGrant(typedData, signature) {\n *     // Custom implementation - could be HTTP, WebSocket, etc.\n *     const response = await fetch('https://my-relayer.com/api/grant', {\n *       method: 'POST',\n *       headers: { 'Content-Type': 'application/json' },\n *       body: JSON.stringify({ typedData, signature })\n *     });\n *     const result = await response.json();\n *     return result.transactionHash;\n *   },\n *\n *   async submitFileAddition(url, userAddress) {\n *     // Custom relay implementation\n *     return await myCustomRelayer.addFile(url, userAddress);\n *   }\n * };\n * ```\n */\nexport interface RelayerCallbacks {\n  /**\n   * Submit a signed permission grant transaction for relay\n   *\n   * @param typedData - The EIP-712 typed data that was signed\n   * @param signature - The user's signature\n   * @returns Promise resolving to the transaction hash\n   */\n  submitPermissionGrant?: (\n    typedData: PermissionGrantTypedData,\n    signature: Hash,\n  ) => Promise<Hash>;\n\n  /**\n   * Submit a signed permission revocation transaction for relay\n   *\n   * @param typedData - The EIP-712 typed data that was signed\n   * @param signature - The user's signature\n   * @returns Promise resolving to the transaction hash\n   */\n  submitPermissionRevoke?: (\n    typedData: GenericTypedData,\n    signature: Hash,\n  ) => Promise<Hash>;\n\n  /**\n   * Submit a signed trust server transaction for relay\n   *\n   * @param typedData - The EIP-712 typed data that was signed\n   * @param signature - The user's signature\n   * @returns Promise resolving to the transaction hash\n   */\n  submitTrustServer?: (\n    typedData: TrustServerTypedData,\n    signature: Hash,\n  ) => Promise<Hash>;\n\n  /**\n   * Submit a signed untrust server transaction for relay\n   *\n   * @param typedData - The EIP-712 typed data that was signed\n   * @param signature - The user's signature\n   * @returns Promise resolving to the transaction hash\n   */\n  submitUntrustServer?: (\n    typedData: UntrustServerTypedData,\n    signature: Hash,\n  ) => Promise<Hash>;\n\n  /**\n   * Submit a file addition for relay\n   *\n   * @param url - The file URL to register\n   * @param userAddress - The user's address\n   * @returns Promise resolving to object with fileId and transactionHash\n   */\n  submitFileAddition?: (\n    url: string,\n    userAddress: string,\n  ) => Promise<{ fileId: number; transactionHash: Hash }>;\n\n  /**\n   * Submit a file addition with permissions for relay\n   *\n   * @param url - The file URL to register\n   * @param userAddress - The user's address\n   * @param permissions - Array of encrypted permissions\n   * @returns Promise resolving to object with fileId and transactionHash\n   */\n  submitFileAdditionWithPermissions?: (\n    url: string,\n    userAddress: string,\n    permissions: Array<{ account: string; key: string }>,\n  ) => Promise<{ fileId: number; transactionHash: Hash }>;\n\n  /**\n   * Store a grant file for relay (e.g., upload to IPFS)\n   *\n   * @param grantData - The grant file data\n   * @returns Promise resolving to the storage URL\n   */\n  storeGrantFile?: (grantData: GrantFile) => Promise<string>;\n}\n\n/**\n * Base configuration interface\n *\n * @category Configuration\n */\nexport interface BaseConfig {\n  /**\n   * Optional relayer callback functions for handling gasless transactions.\n   * Provides flexible relay mechanism - can use HTTP, WebSocket, or any custom implementation.\n   */\n  relayerCallbacks?: RelayerCallbacks;\n\n  /** Optional storage providers configuration for file upload/download */\n  storage?: StorageConfig;\n  /**\n   * Optional subgraph URL for querying user files and permissions.\n   * If not provided, defaults to the built-in subgraph URL for the current chain.\n   * Can be overridden per method call if needed.\n   */\n  subgraphUrl?: string;\n}\n\n/**\n * Configuration with wallet client\n *\n * @category Configuration\n */\nexport interface WalletConfig extends BaseConfig {\n  /** The viem WalletClient instance used for signing transactions */\n  walletClient: WalletClient & {\n    chain: VanaChain;\n  };\n}\n\n/**\n * Configuration with chain and account details\n *\n * @category Configuration\n */\nexport interface ChainConfig extends BaseConfig {\n  /** The chain ID for Vana network */\n  chainId: VanaChainId;\n  /** RPC URL for the chain (optional, will use default for the chain if not provided) */\n  rpcUrl?: string;\n  /** Optional account for signing transactions */\n  account?: Account;\n}\n\n/**\n * Main configuration interface for initializing the Vana SDK.\n *\n * You can configure the SDK using either a pre-configured wallet client\n * (WalletConfig) or by providing chain and account details (ChainConfig).\n * Both approaches support optional storage providers and relayer configuration.\n *\n * @category Configuration\n * @example\n * ```typescript\n * // Using WalletConfig with pre-configured client\n * const config: VanaConfig = {\n *   walletClient: createWalletClient({\n *     account: privateKeyToAccount('0x...'),\n *     chain: moksha,\n *     transport: http()\n *   }),\n *   relayerCallbacks: {\n *     submitPermissionGrant: async (typedData, signature) => {\n *       // Custom relay implementation\n *       return await myRelayer.submit(typedData, signature);\n *     }\n *   }\n * };\n *\n * // Using ChainConfig with chain ID and account\n * const config: VanaConfig = {\n *   chainId: 14800,\n *   account: privateKeyToAccount('0x...'),\n *   relayerCallbacks: {\n *     submitPermissionGrant: async (typedData, signature) => {\n *       // Custom relay implementation\n *       return await myRelayer.submit(typedData, signature);\n *     }\n *   }\n * };\n * ```\n */\nexport type VanaConfig = WalletConfig | ChainConfig;\n\n/**\n * Runtime configuration information\n *\n * @category Configuration\n */\nexport interface RuntimeConfig {\n  /** Current chain ID */\n  chainId: VanaChainId;\n  /** Current chain name */\n  chainName: string;\n  /** Available storage providers */\n  storageProviders: string[];\n  /** Default storage provider */\n  defaultStorageProvider?: string;\n  /** Current relayer callbacks configuration */\n  relayerCallbacks?: RelayerCallbacks;\n}\n\n/**\n * Validates whether a configuration object is a WalletConfig.\n *\n * @param config - The configuration object to check\n * @returns True if the config is a WalletConfig (contains walletClient)\n * @example\n * ```typescript\n * if (isWalletConfig(config)) {\n *   console.log('Using wallet client:', config.walletClient.account?.address);\n * } else {\n *   console.log('Using chain config with chain ID:', config.chainId);\n * }\n * ```\n */\nexport function isWalletConfig(config: VanaConfig): config is WalletConfig {\n  return \"walletClient\" in config;\n}\n\n/**\n * Validates whether a configuration object is a ChainConfig.\n *\n * @param config - The configuration object to check\n * @returns True if the config is a ChainConfig (contains chainId but not walletClient)\n * @example\n * ```typescript\n * if (isChainConfig(config)) {\n *   console.log('Chain ID:', config.chainId);\n *   console.log('RPC URL:', config.rpcUrl);\n * } else {\n *   console.log('Using pre-configured wallet client');\n * }\n * ```\n */\nexport function isChainConfig(config: VanaConfig): config is ChainConfig {\n  return \"chainId\" in config && !(\"walletClient\" in config);\n}\n\n/**\n * Configuration validation options\n *\n * @category Configuration\n */\nexport interface ConfigValidationOptions {\n  /** Whether to validate storage providers */\n  validateStorage?: boolean;\n  /** Whether to validate relayer URL */\n  validateRelayer?: boolean;\n  /** Whether to validate chain configuration */\n  validateChain?: boolean;\n}\n\n/**\n * Configuration validation result\n *\n * @category Configuration\n */\nexport interface ConfigValidationResult {\n  /** Whether the configuration is valid */\n  valid: boolean;\n  /** List of validation errors */\n  errors: string[];\n  /** List of validation warnings */\n  warnings: string[];\n}\n","import type { Chain } from \"viem\";\n\n/**\n * Supported Vana chain IDs\n */\nexport type VanaChainId = 14800 | 1480;\n\n/**\n * Supported Vana chains\n */\nexport type VanaChain = Chain & {\n  id: VanaChainId;\n};\n\n/**\n * Chain configuration mapping\n */\nexport type ChainConfig = {\n  [K in VanaChainId]: VanaChain;\n};\n\n/**\n * Type guard to check if a chain ID is supported\n *\n * @param chainId - The chain ID to validate\n * @returns True if the chain ID is a supported Vana chain ID\n */\nexport function isVanaChainId(chainId: number): chainId is VanaChainId {\n  return chainId === 14800 || chainId === 1480;\n}\n\n/**\n * Type guard to check if a chain is a Vana chain\n *\n * @param chain - The chain object to validate\n * @returns True if the chain is a supported Vana chain\n */\nexport function isVanaChain(chain: Chain): chain is VanaChain {\n  return isVanaChainId(chain.id);\n}\n","/**\n * Interface for storage providers that handle file upload, download, and management operations.\n *\n * Storage providers abstract different storage backends (IPFS, Google Drive, Pinata, etc.)\n * behind a common interface. The SDK uses these providers to store encrypted user data\n * and permission grants in a decentralized manner.\n *\n * @category Storage\n * @example\n * ```typescript\n * // Implement a custom storage provider\n * class MyStorageProvider implements StorageProvider {\n *   async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n *     // Custom upload logic\n *     return { url: 'https://my-storage.com/file.dat', size: file.size };\n *   }\n *\n *   async download(url: string): Promise<Blob> {\n *     // Custom download logic\n *     const response = await fetch(url);\n *     return response.blob();\n *   }\n *\n *   async list(options?: StorageListOptions): Promise<StorageFile[]> {\n *     // Return list of files\n *     return [];\n *   }\n *\n *   async delete(url: string): Promise<void> {\n *     // Delete file implementation\n *   }\n * }\n * ```\n */\nexport interface StorageProvider {\n  /**\n   * Upload a file to the storage provider\n   *\n   * @param file - The file to upload\n   * @param filename - Optional custom filename\n   * @returns Promise with storage URL and metadata\n   */\n  upload(file: Blob, filename?: string): Promise<StorageUploadResult>;\n\n  /**\n   * Download a file from the storage provider\n   *\n   * @param url - The storage URL\n   * @returns Promise with file blob\n   */\n  download(url: string): Promise<Blob>;\n\n  /**\n   * List files from the storage provider\n   *\n   * @param options - Optional filtering and pagination\n   * @returns Promise with file list\n   */\n  list(options?: StorageListOptions): Promise<StorageFile[]>;\n\n  /**\n   * Delete a file from the storage provider\n   *\n   * @param url - The storage URL\n   * @returns Promise with success status\n   */\n  delete(url: string): Promise<boolean>;\n\n  /**\n   * Get provider-specific configuration\n   *\n   * @returns Provider configuration object\n   */\n  getConfig(): StorageProviderConfig;\n}\n\nexport interface StorageUploadResult {\n  /** Public URL to access the file */\n  url: string;\n  /** File size in bytes */\n  size: number;\n  /** Content type/MIME type */\n  contentType: string;\n  /** Provider-specific metadata */\n  metadata?: Record<string, unknown>;\n}\n\nexport interface StorageFile {\n  /** File identifier */\n  id: string;\n  /** File name */\n  name: string;\n  /** Public URL to access the file */\n  url: string;\n  /** File size in bytes */\n  size: number;\n  /** Content type/MIME type */\n  contentType: string;\n  /** Upload timestamp */\n  createdAt: Date;\n  /** Provider-specific metadata */\n  metadata?: Record<string, unknown>;\n}\n\nexport interface StorageListOptions {\n  /** Maximum number of files to return */\n  limit?: number;\n  /** Pagination cursor/offset */\n  offset?: string | number;\n  /** Filter by file name pattern */\n  namePattern?: string;\n  /** Filter by content type */\n  contentType?: string;\n}\n\nexport interface StorageProviderConfig {\n  /** Provider name */\n  name: string;\n  /** Provider type */\n  type: string;\n  /** Whether authentication is required */\n  requiresAuth: boolean;\n  /** Supported features */\n  features: {\n    upload: boolean;\n    download: boolean;\n    list: boolean;\n    delete: boolean;\n  };\n}\n\nexport class StorageError extends Error {\n  public readonly code: string;\n  public readonly provider: string;\n  // The 'cause' property is now inherited from the base Error class\n\n  constructor(\n    message: string,\n    code: string,\n    provider: string,\n    options?: { cause?: Error },\n  ) {\n    // Pass the options object with 'cause' to the super constructor\n    super(message, options);\n    this.name = \"StorageError\";\n    this.code = code;\n    this.provider = provider;\n  }\n}\n","import Ajv, { type ValidateFunction } from \"ajv\";\nimport addFormats from \"ajv-formats\";\nimport dataSchemaSchema from \"../schemas/dataContract.schema.json\";\n\n/**\n * Data schema interface following the Vana schema specification\n *\n * @category Configuration\n */\nexport interface DataSchema {\n  /** The name of the data schema */\n  name: string;\n  /** The version of the data schema */\n  version: string;\n  /** Optional description of the data schema */\n  description?: string;\n  /** The dialect type - either SQLite or JSON */\n  dialect: \"sqlite\" | \"json\";\n  /** Optional version of the dialect */\n  dialectVersion?: string;\n  /** The actual schema definition as string or object */\n  schema: string | object;\n}\n\n/**\n * Error thrown when schema validation fails\n */\nexport class SchemaValidationError extends Error {\n  constructor(\n    message: string,\n    public errors: Array<{\n      instancePath: string;\n      schemaPath: string;\n      keyword: string;\n      params: Record<string, unknown>;\n      message?: string;\n    }>,\n  ) {\n    super(message);\n    this.name = \"SchemaValidationError\";\n  }\n}\n\n/**\n * Schema validation utility class\n */\nexport class SchemaValidator {\n  private ajv: Ajv;\n  private dataSchemaValidator: ValidateFunction;\n\n  constructor() {\n    this.ajv = new Ajv({\n      allErrors: true,\n      verbose: true,\n      strict: false,\n    });\n\n    // Add format validation (e.g., date, email, uri)\n    addFormats(this.ajv);\n\n    // Compile the data schema meta-schema validator\n    this.dataSchemaValidator = this.ajv.compile(dataSchemaSchema);\n  }\n\n  /**\n   * Validates a data schema against the Vana meta-schema\n   *\n   * @param schema - The data schema to validate\n   * @throws SchemaValidationError if invalid\n   * @example\n   * ```typescript\n   * const validator = new SchemaValidator();\n   *\n   * const schema = {\n   *   name: \"User Profile\",\n   *   version: \"1.0.0\",\n   *   dialect: \"json\",\n   *   schema: {\n   *     type: \"object\",\n   *     properties: {\n   *       name: { type: \"string\" },\n   *       age: { type: \"number\" }\n   *     }\n   *   }\n   * };\n   *\n   * validator.validateDataSchema(schema); // throws if invalid\n   * ```\n   */\n  validateDataSchema(schema: unknown): asserts schema is DataSchema {\n    const isValid = this.dataSchemaValidator(schema);\n\n    if (!isValid) {\n      const errors = this.dataSchemaValidator.errors || [];\n      const errorMessage = `Data schema validation failed: ${errors.map((e) => `${e.instancePath} ${e.message}`).join(\", \")}`;\n      throw new SchemaValidationError(errorMessage, errors);\n    }\n\n    // Additional validation based on dialect\n    const typedSchema = schema as DataSchema;\n    if (\n      typedSchema.dialect === \"json\" &&\n      typeof typedSchema.schema === \"object\"\n    ) {\n      // Validate that the embedded JSON Schema is actually valid\n      try {\n        this.ajv.compile(typedSchema.schema);\n      } catch (error) {\n        const errorMessage = `Invalid JSON Schema in data schema: ${error instanceof Error ? error.message : \"Unknown schema compilation error\"}`;\n        throw new SchemaValidationError(errorMessage, []);\n      }\n    } else if (\n      typedSchema.dialect === \"sqlite\" &&\n      typeof typedSchema.schema === \"string\"\n    ) {\n      // Validate SQLite DDL syntax\n      this.validateSQLiteDDL(typedSchema.schema, typedSchema.dialectVersion);\n    }\n  }\n\n  /**\n   * Validates data against a JSON Schema from a data schema\n   *\n   * @param data - The data to validate\n   * @param schema - The data schema containing the schema\n   * @throws SchemaValidationError if invalid\n   * @example\n   * ```typescript\n   * const validator = new SchemaValidator();\n   *\n   * const schema = {\n   *   name: \"User Profile\",\n   *   version: \"1.0.0\",\n   *   dialect: \"json\",\n   *   schema: {\n   *     type: \"object\",\n   *     properties: {\n   *       name: { type: \"string\" },\n   *       age: { type: \"number\" }\n   *     },\n   *     required: [\"name\"]\n   *   }\n   * };\n   *\n   * const userData = { name: \"Alice\", age: 30 };\n   * validator.validateDataAgainstSchema(userData, schema);\n   * ```\n   */\n  validateDataAgainstSchema(data: unknown, schema: DataSchema): void {\n    // First validate the schema itself\n    this.validateDataSchema(schema);\n\n    if (schema.dialect !== \"json\") {\n      throw new SchemaValidationError(\n        `Data validation only supported for JSON dialect, got: ${schema.dialect}`,\n        [],\n      );\n    }\n\n    if (typeof schema.schema !== \"object\") {\n      throw new SchemaValidationError(\n        \"JSON dialect schemas must have an object schema\",\n        [],\n      );\n    }\n\n    // Compile and validate against the data schema\n    const dataValidator = this.ajv.compile(schema.schema);\n    const isValid = dataValidator(data);\n\n    if (!isValid) {\n      const errors = dataValidator.errors || [];\n      const errorMessage = `Data validation failed: ${errors.map((e) => `${e.instancePath} ${e.message}`).join(\", \")}`;\n      throw new SchemaValidationError(errorMessage, errors);\n    }\n  }\n\n  /**\n   * Validates a SQLite DDL string for basic syntax\n   * Note: This is a basic validation, full SQL parsing would require a proper SQL parser\n   *\n   * @param ddl - The DDL string to validate\n   * @param dialectVersion - Optional SQLite version (e.g., \"3\" for SQLite v3)\n   * @throws SchemaValidationError if invalid\n   */\n  validateSQLiteDDL(ddl: string, dialectVersion?: string): void {\n    if (typeof ddl !== \"string\" || ddl.trim().length === 0) {\n      throw new SchemaValidationError(\n        \"SQLite DDL must be a non-empty string\",\n        [],\n      );\n    }\n\n    // Validate dialectVersion if provided\n    if (dialectVersion !== undefined) {\n      const supportedVersions = [\"3\"];\n      if (!supportedVersions.includes(dialectVersion)) {\n        throw new SchemaValidationError(\n          `Unsupported SQLite dialect version: ${dialectVersion}. Supported versions: ${supportedVersions.join(\", \")}`,\n          [],\n        );\n      }\n    }\n\n    // Basic validation - check for CREATE TABLE statements\n    const normalizedDDL = ddl.trim().toUpperCase();\n    if (!normalizedDDL.includes(\"CREATE TABLE\")) {\n      throw new SchemaValidationError(\n        \"SQLite DDL must contain at least one CREATE TABLE statement\",\n        [],\n      );\n    }\n\n    // Check for balanced parentheses\n    let parenCount = 0;\n    for (const char of ddl) {\n      if (char === \"(\") parenCount++;\n      if (char === \")\") parenCount--;\n      if (parenCount < 0) {\n        throw new SchemaValidationError(\n          \"SQLite DDL has unbalanced parentheses\",\n          [],\n        );\n      }\n    }\n\n    if (parenCount !== 0) {\n      throw new SchemaValidationError(\n        \"SQLite DDL has unbalanced parentheses\",\n        [],\n      );\n    }\n  }\n\n  /**\n   * Fetches and validates a schema from a URL\n   *\n   * @param url - The URL to fetch the schema from\n   * @returns The validated data schema\n   * @throws SchemaValidationError if invalid or fetch fails\n   * @example\n   * ```typescript\n   * const validator = new SchemaValidator();\n   * const schema = await validator.fetchAndValidateSchema(\"https://example.com/schema.json\");\n   * ```\n   */\n  async fetchAndValidateSchema(url: string): Promise<DataSchema> {\n    try {\n      const response = await fetch(url);\n      if (!response.ok) {\n        throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n      }\n\n      const schema = await response.json();\n      this.validateDataSchema(schema);\n\n      // Additional validation based on dialect\n      if (schema.dialect === \"sqlite\" && typeof schema.schema === \"string\") {\n        this.validateSQLiteDDL(schema.schema, schema.dialectVersion);\n      }\n\n      return schema;\n    } catch (error) {\n      if (error instanceof SchemaValidationError) {\n        throw error;\n      }\n\n      throw new SchemaValidationError(\n        `Failed to fetch and validate schema from ${url}: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        [],\n      );\n    }\n  }\n}\n\n/**\n * Global schema validator instance\n */\nexport const schemaValidator = new SchemaValidator();\n\n/**\n * Convenience function to validate a data schema\n *\n * @param schema - The data schema to validate\n * @returns void - Assertion function that doesn't return a value\n * @throws SchemaValidationError if invalid\n */\nexport function validateDataSchema(\n  schema: unknown,\n): asserts schema is DataSchema {\n  return schemaValidator.validateDataSchema(schema);\n}\n\n/**\n * Convenience function to validate data against a schema\n *\n * @param data - The data to validate\n * @param schema - The data schema containing the schema\n * @returns void - Function doesn't return a value\n * @throws SchemaValidationError if invalid\n */\nexport function validateDataAgainstSchema(\n  data: unknown,\n  schema: DataSchema,\n): void {\n  return schemaValidator.validateDataAgainstSchema(data, schema);\n}\n\n/**\n * Convenience function to fetch and validate a schema from a URL\n *\n * @param url - The URL to fetch the schema from\n * @returns The validated data schema\n * @throws SchemaValidationError if invalid or fetch fails\n */\nexport function fetchAndValidateSchema(url: string): Promise<DataSchema> {\n  return schemaValidator.fetchAndValidateSchema(url);\n}\n","{\n  \"$id\": \"https://vana.org/data-schema.json\",\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Schema\",\n  \"description\": \"Meta‑schema that validates a schema object containing a dataset schema and related metadata.\",\n  \"type\": \"object\",\n  \"required\": [\"name\", \"version\", \"dialect\", \"schema\"],\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Human‑readable name of the contract.\"\n    },\n    \"version\": {\n      \"type\": \"string\",\n      \"description\": \"Semantic version of the contract's business logic (e.g. 1.1.0).\"\n    },\n    \"description\": {\n      \"type\": \"string\",\n      \"description\": \"Long‑form description of the dataset or API.\"\n    },\n    \"dialect\": {\n      \"type\": \"string\",\n      \"description\": \"Primary language/format of the data schema.\",\n      \"enum\": [\"sqlite\", \"json\"]\n    },\n    \"dialectVersion\": {\n      \"type\": \"string\",\n      \"description\": \"Optional: The version of the dialect's engine or specification the schema targets (e.g., '3' for SQLite v3). Omit for self-describing dialects like json.\"\n    },\n    \"schema\": {\n      \"description\": \"The actual schema definition. For 'sqlite', supply a DDL string; for 'json', embed a JSON Schema object.\"\n    }\n  },\n  \"additionalProperties\": false,\n  \"allOf\": [\n    {\n      \"if\": {\n        \"properties\": { \"dialect\": { \"const\": \"sqlite\" } }\n      },\n      \"then\": {\n        \"properties\": { \"schema\": { \"type\": \"string\" } }\n      }\n    },\n    {\n      \"if\": {\n        \"properties\": { \"dialect\": { \"const\": \"json\" } }\n      },\n      \"then\": {\n        \"properties\": { \"schema\": { \"type\": \"object\" } }\n      }\n    }\n  ]\n}\n","/**\n * Types for external API responses used by the Vana SDK\n * These types help ensure type safety when interacting with third-party services\n */\n\n/**\n * Replicate API Response Types\n * Documentation: https://replicate.com/docs/reference/http\n */\n\n/** Status values for Replicate predictions */\nexport type ReplicateStatus =\n  | \"starting\"\n  | \"processing\"\n  | \"succeeded\"\n  | \"failed\"\n  | \"canceled\";\n\n/** Base Replicate API prediction response */\nexport interface ReplicateAPIResponse {\n  /** Unique identifier for the prediction */\n  id: string;\n  /** Model version identifier */\n  version: string;\n  /** Current status of the prediction */\n  status: ReplicateStatus;\n  /** Input parameters sent to the model */\n  input: Record<string, unknown>;\n  /** Output from the model (if completed successfully) */\n  output?: unknown;\n  /** Error message (if failed) */\n  error?: string | null;\n  /** Logs from the prediction run */\n  logs?: string;\n  /** Whether data has been removed due to content policy */\n  data_removed?: boolean;\n  /** Timestamp when prediction was created */\n  created_at: string;\n  /** Timestamp when prediction started processing */\n  started_at?: string;\n  /** Timestamp when prediction completed */\n  completed_at?: string;\n  /** URLs for interacting with the prediction */\n  urls: {\n    /** URL to get prediction status/results */\n    get: string;\n    /** URL to cancel the prediction */\n    cancel: string;\n    /** Web interface URL */\n    web?: string;\n  };\n  /** Performance metrics */\n  metrics?: {\n    /** Time spent in prediction (seconds) */\n    predict_time?: number;\n    /** Total time including setup (seconds) */\n    total_time?: number;\n  };\n}\n\n/**\n * Identity Server Output Types\n * These define the expected structure of output from Vana's identity server\n */\n\n/** Output from the identity server model */\nexport interface IdentityServerOutput {\n  /** User's EVM address */\n  user_address: string;\n  /** Personal server information */\n  personal_server: {\n    /** Derived address for the personal server */\n    address: string;\n    /** Public key for encryption */\n    public_key: string;\n  };\n}\n\n/** Identity server response with typed output */\nexport interface IdentityServerResponse\n  extends Omit<ReplicateAPIResponse, \"output\"> {\n  /** Parsed identity server output */\n  output?: IdentityServerOutput | string; // Can be string (needs parsing) or parsed object\n}\n\n/**\n * Personal Server Output Types\n * These define the expected structure of output from Vana's personal server\n */\n\n/** Output from the personal server model */\nexport interface PersonalServerOutput {\n  /** User's EVM address */\n  user_address: string;\n  /** Identity information */\n  identity: {\n    /** Additional metadata */\n    metadata?: Record<string, unknown>;\n    /** Derived address (alternative location) */\n    derivedAddress?: string;\n  };\n}\n\n/** Personal server response with typed output */\nexport interface PersonalServerResponse\n  extends Omit<ReplicateAPIResponse, \"output\"> {\n  /** Parsed personal server output */\n  output?: PersonalServerOutput | string; // Can be string (needs parsing) or parsed object\n}\n\n/**\n * Storage Provider API Types\n */\n\n/** Pinata IPFS upload response */\nexport interface PinataUploadResponse {\n  /** IPFS hash of the uploaded content */\n  IpfsHash: string;\n  /** Size of the pinned content in bytes */\n  PinSize: number;\n  /** Timestamp of when content was pinned */\n  Timestamp: string;\n  /** Whether this content was already pinned */\n  isDuplicate?: boolean;\n}\n\n/** Pinata pin information */\nexport interface PinataPin {\n  /** IPFS hash */\n  ipfs_pin_hash: string;\n  /** Pin size in bytes */\n  size: number;\n  /** User ID */\n  user_id: string;\n  /** Date pinned */\n  date_pinned: string;\n  /** Date unpinned (if applicable) */\n  date_unpinned?: string;\n  /** Additional metadata */\n  metadata?: {\n    name?: string;\n    keyvalues?: Record<string, string>;\n  };\n}\n\n/** Pinata list response */\nexport interface PinataListResponse {\n  /** Total count of pins */\n  count: number;\n  /** Array of pin information */\n  rows: PinataPin[];\n}\n\n/**\n * Generic API Response Wrapper\n * Used for internal API routes in the demo application\n */\n\n/** Standard API response wrapper */\nexport interface APIResponse<T = unknown> {\n  /** Whether the request was successful */\n  success: boolean;\n  /** Response data (if successful) */\n  data?: T;\n  /** Error message (if unsuccessful) */\n  error?: string;\n}\n\n/**\n * Type Guards for Runtime Validation\n */\n\n/**\n * Validates whether a value is a valid ReplicateAPIResponse.\n *\n * @param value - The value to check\n * @returns True if the value matches the ReplicateAPIResponse structure\n * @example\n * ```typescript\n * const response = await fetch('/api/replicate');\n * const data = await response.json();\n *\n * if (isReplicateAPIResponse(data)) {\n *   console.log('Status:', data.status);\n *   console.log('Output:', data.output);\n * }\n * ```\n */\nexport function isReplicateAPIResponse(\n  value: unknown,\n): value is ReplicateAPIResponse {\n  if (typeof value !== \"object\" || value === null) return false;\n\n  const obj = value as Record<string, unknown>;\n  return (\n    \"id\" in obj &&\n    \"status\" in obj &&\n    \"urls\" in obj &&\n    typeof obj.id === \"string\" &&\n    [\"starting\", \"processing\", \"succeeded\", \"failed\", \"canceled\"].includes(\n      obj.status as string,\n    )\n  );\n}\n\n/**\n * Validates whether a value is a valid IdentityServerOutput.\n *\n * @param value - The value to check\n * @returns True if the value matches the IdentityServerOutput structure\n * @example\n * ```typescript\n * const output = response.output;\n *\n * if (isIdentityServerOutput(output)) {\n *   console.log('User address:', output.user_address);\n *   console.log('Server address:', output.personal_server.address);\n * }\n * ```\n */\nexport function isIdentityServerOutput(\n  value: unknown,\n): value is IdentityServerOutput {\n  console.debug(\"🔍 Type Guard: Checking value:\", value);\n  console.debug(\"🔍 Type Guard: Value type:\", typeof value);\n\n  if (typeof value !== \"object\" || value === null) {\n    console.debug(\"🔍 Type Guard: Failed - not object or null\");\n    return false;\n  }\n\n  const obj = value as Record<string, unknown>;\n  console.debug(\"🔍 Type Guard: Object keys:\", Object.keys(obj));\n  console.debug(\n    \"🔍 Type Guard: user_address:\",\n    obj.user_address,\n    typeof obj.user_address,\n  );\n\n  if (typeof obj.user_address !== \"string\") {\n    console.debug(\"🔍 Type Guard: Failed - user_address not string\");\n    return false;\n  }\n\n  console.debug(\n    \"🔍 Type Guard: personal_server:\",\n    obj.personal_server,\n    typeof obj.personal_server,\n  );\n  if (typeof obj.personal_server !== \"object\" || obj.personal_server === null) {\n    console.debug(\"🔍 Type Guard: Failed - personal_server not object or null\");\n    return false;\n  }\n\n  const personalServer = obj.personal_server as Record<string, unknown>;\n  console.debug(\n    \"🔍 Type Guard: Personal server keys:\",\n    Object.keys(personalServer),\n  );\n  console.debug(\"🔍 Type Guard: address:\", personalServer.address);\n  console.debug(\"🔍 Type Guard: public_key:\", personalServer.public_key);\n\n  const hasAddress = \"address\" in personalServer;\n  const hasPublicKey = \"public_key\" in personalServer;\n  console.debug(\n    \"🔍 Type Guard: Has address:\",\n    hasAddress,\n    \"Has public_key:\",\n    hasPublicKey,\n  );\n\n  return hasAddress && hasPublicKey;\n}\n\n/**\n * Validates whether a value is a valid PersonalServerOutput.\n *\n * @param value - The value to check\n * @returns True if the value matches the PersonalServerOutput structure\n * @example\n * ```typescript\n * const output = response.output;\n *\n * if (isPersonalServerOutput(output)) {\n *   console.log('User address:', output.user_address);\n *   console.log('Identity metadata:', output.identity.metadata);\n * }\n * ```\n */\nexport function isPersonalServerOutput(\n  value: unknown,\n): value is PersonalServerOutput {\n  if (typeof value !== \"object\" || value === null) return false;\n\n  const obj = value as Record<string, unknown>;\n  return (\n    \"user_address\" in obj &&\n    \"identity\" in obj &&\n    typeof obj.user_address === \"string\" &&\n    typeof obj.identity === \"object\"\n  );\n}\n\n/**\n * Validates whether a value is a valid APIResponse.\n *\n * @param value - The value to check\n * @returns True if the value matches the APIResponse structure\n * @example\n * ```typescript\n * const response = await fetch('/api/data');\n * const data = await response.json();\n *\n * if (isAPIResponse(data)) {\n *   if (data.success) {\n *     console.log('Data:', data.data);\n *   } else {\n *     console.error('Error:', data.error);\n *   }\n * }\n * ```\n */\nexport function isAPIResponse<T>(value: unknown): value is APIResponse<T> {\n  if (typeof value !== \"object\" || value === null) return false;\n\n  const obj = value as Record<string, unknown>;\n  return \"success\" in obj && typeof obj.success === \"boolean\";\n}\n\n/**\n * Utility Functions for Safe JSON Parsing\n */\n\n/**\n * Safely parses JSON string with type validation.\n *\n * @param jsonString - The JSON string to parse\n * @param typeGuard - Type guard function to validate the parsed value\n * @returns The parsed and validated value, or null if parsing/validation fails\n * @example\n * ```typescript\n * const jsonStr = '{\"user_address\": \"0x123...\", \"identity\": {}}';\n * const result = safeParseJSON(jsonStr, isPersonalServerOutput);\n *\n * if (result) {\n *   console.log('Parsed server output:', result.user_address);\n * } else {\n *   console.log('Invalid JSON or type mismatch');\n * }\n * ```\n */\nexport function safeParseJSON<T>(\n  jsonString: string,\n  typeGuard: (value: unknown) => value is T,\n): T | null {\n  try {\n    const parsed = JSON.parse(jsonString);\n    return typeGuard(parsed) ? parsed : null;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Parses Replicate API response output with type safety.\n *\n * @param response - The Replicate API response\n * @param typeGuard - Type guard function to validate the output\n * @returns The parsed and validated output, or null if validation fails\n * @example\n * ```typescript\n * const response = await replicateClient.get(predictionId);\n * const output = parseReplicateOutput(response, isIdentityServerOutput);\n *\n * if (output) {\n *   console.log('Identity server result:', output.user_address);\n * } else {\n *   console.log('Output not available or invalid format');\n * }\n * ```\n */\nexport function parseReplicateOutput<T>(\n  response: ReplicateAPIResponse,\n  typeGuard: (value: unknown) => value is T,\n): T | null {\n  if (!response.output) return null;\n\n  if (typeof response.output === \"string\") {\n    return safeParseJSON(response.output, typeGuard);\n  }\n\n  return typeGuard(response.output) ? response.output : null;\n}\n","/**\n * Base error class for all Vana SDK errors with structured error codes.\n *\n * @remarks\n * This abstract base class provides a foundation for all SDK-specific errors with\n * consistent error codes and stack trace handling. All Vana SDK errors extend this\n * class to provide structured error information that applications can handle\n * programmatically. The error code enables differentiation between error types\n * without relying on string matching.\n * @category Error Handling\n */\nexport class VanaError extends Error {\n  constructor(\n    message: string,\n    public readonly code?: string,\n  ) {\n    super(message);\n    this.name = this.constructor.name;\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, this.constructor);\n    }\n  }\n}\n\n/**\n * Thrown when gasless transaction submission via relayer fails.\n *\n * @remarks\n * This error occurs when the relayer service is unavailable, returns an error,\n * or fails to process a gasless transaction. It includes the HTTP status code\n * and response details when available to help with debugging relayer issues.\n * @category Error Handling\n */\nexport class RelayerError extends VanaError {\n  constructor(\n    message: string,\n    public readonly statusCode?: number,\n    public readonly response?: unknown,\n  ) {\n    super(message, \"RELAYER_ERROR\");\n  }\n}\n\n/**\n * Thrown when the user rejects a wallet signature request.\n *\n * @remarks\n * This error occurs when users decline to sign transactions or typed data through\n * their wallet interface. It's a normal part of user interaction and should be\n * handled gracefully by applications without treating it as a system error.\n * @category Error Handling\n */\nexport class UserRejectedRequestError extends VanaError {\n  constructor(message: string = \"User rejected the signature request\") {\n    super(message, \"USER_REJECTED_REQUEST\");\n  }\n}\n\n/**\n * Error thrown when the SDK configuration is invalid.\n */\nexport class InvalidConfigurationError extends VanaError {\n  constructor(message: string) {\n    super(message, \"INVALID_CONFIGURATION\");\n  }\n}\n\n/**\n * Thrown when a required Vana protocol contract is not deployed on the current chain.\n *\n * @remarks\n * This error occurs when attempting to interact with contracts that are not\n * available on the connected blockchain network. It includes the contract name\n * and chain ID to help identify deployment issues or incorrect network configuration.\n * @category Error Handling\n */\nexport class ContractNotFoundError extends VanaError {\n  constructor(contractName: string, chainId: number) {\n    super(\n      `Contract ${contractName} not found on chain ${chainId}`,\n      \"CONTRACT_NOT_FOUND\",\n    );\n  }\n}\n\n/**\n * Error thrown when a blockchain operation fails.\n */\nexport class BlockchainError extends VanaError {\n  constructor(\n    message: string,\n    public readonly originalError?: Error,\n  ) {\n    super(message, \"BLOCKCHAIN_ERROR\");\n  }\n}\n\n/**\n * Error thrown when parameter serialization fails.\n */\nexport class SerializationError extends VanaError {\n  constructor(message: string) {\n    super(message, \"SERIALIZATION_ERROR\");\n  }\n}\n\n/**\n * Error thrown when a signature operation fails.\n */\nexport class SignatureError extends VanaError {\n  constructor(\n    message: string,\n    public readonly originalError?: Error,\n  ) {\n    super(message, \"SIGNATURE_ERROR\");\n  }\n}\n\n/**\n * Error thrown when a network operation fails.\n */\nexport class NetworkError extends VanaError {\n  constructor(\n    message: string,\n    public readonly originalError?: Error,\n  ) {\n    super(message, \"NETWORK_ERROR\");\n  }\n}\n\n/**\n * Error thrown when the nonce retrieval fails.\n */\nexport class NonceError extends VanaError {\n  constructor(message: string) {\n    super(message, \"NONCE_ERROR\");\n  }\n}\n\n/**\n * Error thrown when a personal server operation fails.\n */\nexport class PersonalServerError extends VanaError {\n  constructor(\n    message: string,\n    public readonly originalError?: Error,\n  ) {\n    super(message, \"PERSONAL_SERVER_ERROR\");\n  }\n}\n\n/**\n * Error thrown when trying to register a server with a URL that doesn't match the existing registration.\n */\nexport class ServerUrlMismatchError extends VanaError {\n  constructor(existingUrl: string, providedUrl: string, serverId: string) {\n    super(\n      `Server ${serverId} is already registered with URL \"${existingUrl}\". Cannot change to \"${providedUrl}\".`,\n      \"SERVER_URL_MISMATCH\",\n    );\n    this.existingUrl = existingUrl;\n    this.providedUrl = providedUrl;\n    this.serverId = serverId;\n  }\n\n  public readonly existingUrl: string;\n  public readonly providedUrl: string;\n  public readonly serverId: string;\n}\n\n/**\n * Error thrown when a permission operation fails.\n */\nexport class PermissionError extends VanaError {\n  constructor(\n    message: string,\n    public readonly originalError?: Error,\n  ) {\n    super(message, \"PERMISSION_ERROR\");\n  }\n}\n","// Single source of truth for all contract addresses\n// Contract-centric structure: contracts contain chain addresses\n\nexport const CONTRACTS = {\n  // Core Platform Contracts\n  DataPermissions: {\n    addresses: {\n      14800: \"0x31fb1D48f6B2265A4cAD516BC39E96a18fb7c8de\",\n      1480: \"0x31fb1D48f6B2265A4cAD516BC39E96a18fb7c8de\",\n    },\n  },\n  DataRegistry: {\n    addresses: {\n      14800: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n      1480: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n    },\n  },\n  TeePoolPhala: {\n    addresses: {\n      14800: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n      1480: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n    },\n  },\n  ComputeEngine: {\n    addresses: {\n      14800: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n      1480: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n    },\n  },\n\n  // Data Access Infrastructure\n  DataRefinerRegistry: {\n    addresses: {\n      14800: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n      1480: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n    },\n  },\n  QueryEngine: {\n    addresses: {\n      14800: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n      1480: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n    },\n  },\n  VanaTreasury: {\n    addresses: {\n      14800: \"0x94a1E56e555ac48d092f490fB10CDFaB434915eD\",\n      1480: \"0x94a1E56e555ac48d092f490fB10CDFaB434915eD\",\n    },\n  },\n  ComputeInstructionRegistry: {\n    addresses: {\n      14800: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n      1480: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n    },\n  },\n\n  // TEE Pool Variants\n  TeePoolEphemeralStandard: {\n    addresses: {\n      14800: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n      1480: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n    },\n  },\n  TeePoolPersistentStandard: {\n    addresses: {\n      14800: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n      1480: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n    },\n  },\n  TeePoolPersistentGpu: {\n    addresses: {\n      14800: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n      1480: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n    },\n  },\n  TeePoolDedicatedStandard: {\n    addresses: {\n      14800: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n      1480: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n    },\n  },\n  TeePoolDedicatedGpu: {\n    addresses: {\n      14800: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n      1480: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n    },\n  },\n\n  // DLP Reward System\n  VanaEpoch: {\n    addresses: {\n      14800: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n      1480: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n    },\n  },\n  DLPRegistry: {\n    addresses: {\n      14800: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n      1480: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n    },\n  },\n  DLPRegistryTreasury: {\n    addresses: {\n      14800: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n      1480: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n    },\n  },\n  DLPPerformance: {\n    addresses: {\n      14800: \"0x847715C7DB37cF286611182Be0bD333cbfa29cc1\",\n      1480: \"0x847715C7DB37cF286611182Be0bD333cbfa29cc1\",\n    },\n  },\n  DLPRewardDeployer: {\n    addresses: {\n      14800: \"0xEFD0F9Ba9De70586b7c4189971cF754adC923B04\",\n      1480: \"0xEFD0F9Ba9De70586b7c4189971cF754adC923B04\",\n    },\n  },\n  DLPRewardDeployerTreasury: {\n    addresses: {\n      14800: \"0xb547ca8Fe4990fe330FeAeb1C2EBb42F925Af5b8\",\n      1480: \"0xb547ca8Fe4990fe330FeAeb1C2EBb42F925Af5b8\",\n    },\n  },\n  DLPRewardSwap: {\n    addresses: {\n      14800: \"0x7c6862C46830F0fc3bF3FF509EA1bD0EE7267fB0\",\n      1480: \"0x7c6862C46830F0fc3bF3FF509EA1bD0EE7267fB0\",\n    },\n  },\n  SwapHelper: {\n    addresses: {\n      14800: \"0x55D5e6F73326315bF2E091e97F04f0770e5C54e2\",\n      1480: \"0x55D5e6F73326315bF2E091e97F04f0770e5C54e2\",\n    },\n  },\n\n  // VanaPool (Staking)\n  VanaPoolStaking: {\n    addresses: {\n      14800: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n      1480: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n    },\n  },\n  VanaPoolEntity: {\n    addresses: {\n      14800: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n      1480: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n    },\n  },\n  VanaPoolTreasury: {\n    addresses: {\n      14800: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n      1480: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n    },\n  },\n\n  // DLP Deployment Contracts\n  DAT: {\n    addresses: {\n      14800: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n      1480: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n    },\n  },\n  DATFactory: {\n    addresses: {\n      14800: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n      1480: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n    },\n  },\n  DATPausable: {\n    addresses: {\n      14800: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n      1480: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n    },\n  },\n  DATVotes: {\n    addresses: {\n      14800: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n      1480: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n    },\n  },\n\n  // Utility Contracts (no ABIs in SDK)\n  Multicall3: {\n    addresses: {\n      14800: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n      1480: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n    },\n  },\n  Multisend: {\n    addresses: {\n      14800: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n      1480: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n    },\n  },\n} as const;\n\n// Legacy/Deprecated Contracts (backwards compatibility)\nexport const LEGACY_CONTRACTS = {\n  // DEPRECATED: Original Intel SGX TeePool (PRO-347)\n  TeePool: {\n    addresses: {\n      14800: \"0x3c92fD91639b41f13338CE62f19131e7d19eaa0D\",\n      1480: \"0x3c92fD91639b41f13338CE62f19131e7d19eaa0D\",\n    },\n  },\n\n  // DEPRECATED: DLPRoot system (replaced by VanaPool + DLPRewards)\n  DLPRootEpoch: {\n    addresses: {\n      14800: \"0xc3d176cF6BccFCB9225b53B87a95147218e1537F\",\n      1480: \"0xc3d176cF6BccFCB9225b53B87a95147218e1537F\",\n    },\n  },\n  DLPRootCore: {\n    addresses: {\n      14800: \"0x0aBa5e28228c323A67712101d61a54d4ff5720FD\",\n      1480: \"0x0aBa5e28228c323A67712101d61a54d4ff5720FD\",\n    },\n  },\n  DLPRoot: {\n    addresses: {\n      14800: \"0xff14346dF2B8Fd0c95BF34f1c92e49417b508AD5\",\n      1480: \"0xff14346dF2B8Fd0c95BF34f1c92e49417b508AD5\",\n    },\n  },\n  DLPRootMetrics: {\n    addresses: {\n      14800: \"0xbb532917B6407c060Afd9Cb7d53527eCb91d6662\",\n      1480: \"0xbb532917B6407c060Afd9Cb7d53527eCb91d6662\",\n    },\n  },\n  DLPRootStakesTreasury: {\n    addresses: {\n      14800: \"0x52c3260ED5C235fcA43524CF508e29c897318775\",\n      1480: \"0x52c3260ED5C235fcA43524CF508e29c897318775\",\n    },\n  },\n  DLPRootRewardsTreasury: {\n    addresses: {\n      14800: \"0xDBFb6B8b9E2eCAEbdE64d665cD553dB81e524479\",\n      1480: \"0xDBFb6B8b9E2eCAEbdE64d665cD553dB81e524479\",\n    },\n  },\n} as const;\n\n// Transform for backwards compatibility with existing SDK usage\nexport const CONTRACT_ADDRESSES: Record<number, Record<string, string>> = {\n  14800: Object.fromEntries(\n    Object.entries(CONTRACTS)\n      .map(([name, info]) => [name, info.addresses[14800]])\n      .filter(([, addr]) => addr),\n  ),\n  1480: Object.fromEntries(\n    Object.entries(CONTRACTS)\n      .map(([name, info]) => [name, info.addresses[1480]])\n      .filter(([, addr]) => addr),\n  ),\n};\n\n// Legacy exports for backwards compatibility\nexport const UTILITY_ADDRESSES = {\n  14800: {\n    Multicall3: CONTRACTS.Multicall3.addresses[14800],\n    Multisend: CONTRACTS.Multisend.addresses[14800],\n  },\n  1480: {\n    Multicall3: CONTRACTS.Multicall3.addresses[1480],\n    Multisend: CONTRACTS.Multisend.addresses[1480],\n  },\n} as const;\n\nexport const LEGACY_ADDRESSES = {\n  14800: Object.fromEntries(\n    Object.entries(LEGACY_CONTRACTS)\n      .map(([name, info]) => [name, info.addresses[14800]])\n      .filter(([, addr]) => addr),\n  ),\n  1480: Object.fromEntries(\n    Object.entries(LEGACY_CONTRACTS)\n      .map(([name, info]) => [name, info.addresses[1480]])\n      .filter(([, addr]) => addr),\n  ),\n} as const;\n\nimport type { VanaContract } from \"../abi\";\n\n/**\n * Retrieves the deployed contract address for a specific contract on a given chain.\n *\n * @param chainId - The chain ID to look up the contract on\n * @param contract - The contract name to get the address for\n * @returns The contract address as a hex string\n * @throws {Error} When contract address not found for the specified contract and chain\n * @example\n * ```typescript\n * try {\n *   const dataRegistryAddress = getContractAddress(1480, 'DataRegistry');\n *   console.log('DataRegistry address:', dataRegistryAddress);\n * } catch (error) {\n *   console.error('Contract not deployed on this chain:', error.message);\n * }\n * ```\n */\nexport const getContractAddress = (\n  chainId: keyof typeof CONTRACT_ADDRESSES,\n  contract: VanaContract,\n) => {\n  const contractAddress = CONTRACT_ADDRESSES[chainId]?.[contract] as\n    | `0x${string}`\n    | undefined;\n  if (!contractAddress) {\n    throw new Error(\n      `Contract address not found for ${contract} on chain ${chainId}`,\n    );\n  }\n  return contractAddress;\n};\n\nexport const getUtilityAddress = (\n  chainId: keyof typeof UTILITY_ADDRESSES,\n  contract: keyof (typeof UTILITY_ADDRESSES)[keyof typeof UTILITY_ADDRESSES],\n) => {\n  return UTILITY_ADDRESSES[chainId][contract] as `0x${string}`;\n};\n","// ComputeEngine Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const ComputeEngineABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedToAssignTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"computeInstructionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InstructionNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"enum IComputeEngine.JobStatus\",\n        name: \"currentStatus\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"enum IComputeEngine.JobStatus\",\n        name: \"newStatus\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"InvalidStatusTransition\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVanaAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"JobAlreadyDone\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"JobLifeCycleEnded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobNotSubmitted\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotJobOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotLongRunningJob\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotQueryEngine\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"OnlyRegisteredJobStatus\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"TeeAlreadyAssigned\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeePoolNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UnauthorizedPaymentRequestor\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UnexpectedVanaDeposit\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroTeeAddress\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Deposit\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobCanceled\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"JobRegistered\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngine.JobStatus\",\n        name: \"status\",\n        type: \"uint8\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"statusMessage\",\n        type: \"string\",\n      },\n    ],\n    name: \"JobStatusUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"PaymentExecuted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes\",\n        name: \"reason\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"TeeAssignmentFailed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teePoolAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeAssignmentSucceeded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Withdraw\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEDICATED_TIMEOUT\",\n    outputs: [\n      {\n        internalType: \"uint80\",\n        name: \"\",\n        type: \"uint80\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"balanceOf\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"cancelJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngineTreasury\",\n    outputs: [\n      {\n        internalType: \"contract IDataAccessTreasury\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"deposit\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"metadata\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"executePaymentRequest\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initQueryEngine\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract IComputeEngineTeePoolFactory\",\n        name: \"initTeePoolFactory\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract DataAccessTreasuryProxyFactory\",\n        name: \"initDataAccessTreasuryFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"instructionRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IComputeInstructionRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"jobs\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint80\",\n            name: \"maxTimeout\",\n            type: \"uint80\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"gpuRequired\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"enum IComputeEngine.JobStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint32\",\n            name: \"computeInstructionId\",\n            type: \"uint32\",\n          },\n          {\n            internalType: \"uint48\",\n            name: \"addedTimestamp\",\n            type: \"uint48\",\n          },\n          {\n            internalType: \"string\",\n            name: \"statusMessage\",\n            type: \"string\",\n          },\n          {\n            internalType: \"address\",\n            name: \"teePoolAddress\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct IComputeEngine.Job\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"jobsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"paymentInfo\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"queryEngine\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"resubmitJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"resubmitJobWithTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"maxTimeout\",\n        type: \"uint80\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"gpuRequired\",\n        type: \"bool\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"computeInstructionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"maxTimeout\",\n        type: \"uint80\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"gpuRequired\",\n        type: \"bool\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"computeInstructionId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"submitJobWithTee\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolFactory\",\n    outputs: [\n      {\n        internalType: \"contract IComputeEngineTeePoolFactory\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IDataAccessTreasury\",\n        name: \"newComputeEngineTreasuryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngineTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IComputeInstructionRegistry\",\n        name: \"newInstructionRegistry\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateInstructionRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"enum IComputeEngine.JobStatus\",\n        name: \"status\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"string\",\n        name: \"statusMessage\",\n        type: \"string\",\n      },\n    ],\n    name: \"updateJobStatus\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newQueryEngineAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateQueryEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IComputeEngineTeePoolFactory\",\n        name: \"newTeePoolFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePoolFactory\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"vanaPaymentInfo\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"withdraw\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nexport default ComputeEngineABI;\n","// DataRegistry Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DataRegistryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FileNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FileUrlAlreadyUsed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InvalidSchemaId\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidUrl\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NoPermission\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFileOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"FileAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"PermissionGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"proofIndex\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"score\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"proofUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"ProofAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"RefinementAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"RefinementUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"REFINEMENT_SERVICE_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"addFile\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"key\",\n        type: \"string\",\n      },\n    ],\n    name: \"addFilePermission\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"account\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"key\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.Permission[]\",\n        name: \"permissions\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"addFileWithPermissions\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"account\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"key\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.Permission[]\",\n        name: \"permissions\",\n        type: \"tuple[]\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addFileWithPermissionsAndSchema\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addFileWithSchema\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes\",\n            name: \"signature\",\n            type: \"bytes\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint256\",\n                name: \"score\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"dlpId\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"string\",\n                name: \"metadata\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"proofUrl\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"instruction\",\n                type: \"string\",\n              },\n            ],\n            internalType: \"struct IDataRegistry.ProofData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.Proof\",\n        name: \"proof\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"addProof\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"key\",\n        type: \"string\",\n      },\n    ],\n    name: \"addRefinementWithPermission\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dataRefinerRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDataRefinerRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"fileIdByUrl\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"filePermissions\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"fileProofs\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes\",\n            name: \"signature\",\n            type: \"bytes\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint256\",\n                name: \"score\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"dlpId\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"string\",\n                name: \"metadata\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"proofUrl\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"instruction\",\n                type: \"string\",\n              },\n            ],\n            internalType: \"struct IDataRegistry.ProofData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.Proof\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"fileRefinements\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"files\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"id\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"addedAtBlock\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.FileResponse\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"filesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"forwarder\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTrustedForwarder\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"data\",\n        type: \"bytes[]\",\n      },\n    ],\n    name: \"multicall\",\n    outputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"results\",\n        type: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"adminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"setRoleAdmin\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"trustedForwarder\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IDataRefinerRegistry\",\n        name: \"newDataRefinerRegistry\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDataRefinerRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTrustedForwarder\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DataRegistryABI;\n","// Trusted execution environment pool\n// Contract: TeePool\n// Generated automatically - do not edit manually\n\nexport const TeePoolABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"CancelDelayNotPassed\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientFee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidJobStatus\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidJobTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"JobCompleted\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotJobOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NothingToClaim\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TransferFailed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Claimed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobCanceled\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"bidAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attestator\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ProofAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum ITeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"withdrawnAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct ITeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes\",\n            name: \"signature\",\n            type: \"bytes\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint256\",\n                name: \"score\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"dlpId\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"string\",\n                name: \"metadata\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"proofUrl\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"instruction\",\n                type: \"string\",\n              },\n            ],\n            internalType: \"struct IDataRegistry.ProofData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.Proof\",\n        name: \"proof\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"addProof\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"cancelDelay\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"cancelJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"claim\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dataRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDataRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"fileJobIds\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"dataRegistryAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"initialCancelDelay\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"forwarder\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTrustedForwarder\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"jobs\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"fileId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"bidAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"enum ITeePool.JobStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"addedTimestamp\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct ITeePool.Job\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"jobsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"data\",\n        type: \"bytes[]\",\n      },\n    ],\n    name: \"multicall\",\n    outputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"results\",\n        type: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"requestContributionProof\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeFee\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"limit\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeJobIdsPaginated\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum ITeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"withdrawnAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct ITeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum ITeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"withdrawnAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct ITeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"trustedForwarder\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newCancelDelay\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateCancelDelay\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IDataRegistry\",\n        name: \"newDataRegistry\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDataRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newTeeFee\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateTeeFee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTrustedForwarder\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolABI;\n","// TeePoolPhala Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const TeePoolPhalaABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"CancelDelayNotPassed\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientFee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidJobStatus\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidJobTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"JobCompleted\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotJobOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NothingToClaim\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TransferFailed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Claimed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobCanceled\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"bidAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attestator\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ProofAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum ITeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"withdrawnAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct ITeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes\",\n            name: \"signature\",\n            type: \"bytes\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint256\",\n                name: \"score\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"dlpId\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"string\",\n                name: \"metadata\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"proofUrl\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"instruction\",\n                type: \"string\",\n              },\n            ],\n            internalType: \"struct IDataRegistry.ProofData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.Proof\",\n        name: \"proof\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"addProof\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"cancelDelay\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"cancelJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"claim\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dataRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDataRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"fileJobIds\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"dataRegistryAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"initialCancelDelay\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"forwarder\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTrustedForwarder\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"jobs\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"fileId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"bidAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"enum ITeePool.JobStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"addedTimestamp\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct ITeePool.Job\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"jobsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"data\",\n        type: \"bytes[]\",\n      },\n    ],\n    name: \"multicall\",\n    outputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"results\",\n        type: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"requestContributionProof\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeFee\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"limit\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeJobIdsPaginated\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum ITeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"withdrawnAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct ITeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum ITeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"withdrawnAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct ITeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"trustedForwarder\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newCancelDelay\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateCancelDelay\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IDataRegistry\",\n        name: \"newDataRegistry\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDataRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newTeeFee\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateTeeFee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTrustedForwarder\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolPhalaABI;\n","// DataPermissions Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DataPermissionsABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EmptyGrant\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EmptyUrl\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"GrantAlreadyUsed\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InactivePermission\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"expectedNonce\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"providedNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InvalidNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"fileOwner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"requestor\",\n        type: \"address\",\n      },\n    ],\n    name: \"NotFileOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"permissionOwner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"requestor\",\n        type: \"address\",\n      },\n    ],\n    name: \"NotPermissionGrantor\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ServerAlreadyRegistered\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ServerNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ServerNotTrusted\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"existingUrl\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"providedUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"ServerUrlMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"grant\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256[]\",\n        name: \"fileIds\",\n        type: \"uint256[]\",\n      },\n    ],\n    name: \"PermissionAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"PermissionRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"serverId\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"ServerAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"serverId\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"serverUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"ServerTrusted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"serverId\",\n        type: \"address\",\n      },\n    ],\n    name: \"ServerUntrusted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"nonce\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"grant\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256[]\",\n            name: \"fileIds\",\n            type: \"uint256[]\",\n          },\n        ],\n        internalType: \"struct IDataPermissions.PermissionInput\",\n        name: \"permission\",\n        type: \"tuple\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"signature\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"addPermission\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dataRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDataRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"filePermissionIds\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract IDataRegistry\",\n        name: \"dataRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"isActivePermission\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"forwarder\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTrustedForwarder\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"data\",\n        type: \"bytes[]\",\n      },\n    ],\n    name: \"multicall\",\n    outputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"results\",\n        type: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"permissionFileIds\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"grant\",\n        type: \"string\",\n      },\n    ],\n    name: \"permissionIdByGrant\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"permissions\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"id\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"grantor\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"nonce\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"grant\",\n            type: \"string\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"signature\",\n            type: \"bytes\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"isActive\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"uint256[]\",\n            name: \"fileIds\",\n            type: \"uint256[]\",\n          },\n        ],\n        internalType: \"struct IDataPermissions.PermissionInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"permissionsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"revokePermission\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"nonce\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"permissionId\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataPermissions.RevokePermissionInput\",\n        name: \"revokePermissionInput\",\n        type: \"tuple\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"signature\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"revokePermissionWithSignature\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"serverId\",\n        type: \"address\",\n      },\n    ],\n    name: \"servers\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDataPermissions.Server\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"adminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"setRoleAdmin\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"serverId\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"serverUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"trustServer\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"nonce\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"serverId\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"serverUrl\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDataPermissions.TrustServerInput\",\n        name: \"trustServerInput\",\n        type: \"tuple\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"signature\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"trustServerWithSignature\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"trustedForwarder\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"serverId\",\n        type: \"address\",\n      },\n    ],\n    name: \"untrustServer\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"nonce\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"serverId\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct IDataPermissions.UntrustServerInput\",\n        name: \"untrustServerInput\",\n        type: \"tuple\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"signature\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"untrustServerWithSignature\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IDataRegistry\",\n        name: \"newDataRegistry\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDataRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTrustedForwarder\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n    ],\n    name: \"userNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"permissionIndex\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"userPermissionIdsAt\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n    ],\n    name: \"userPermissionIdsLength\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n    ],\n    name: \"userPermissionIdsValues\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"permissionIndex\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"userRevokedPermissionIdsAt\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n    ],\n    name: \"userRevokedPermissionIdsLength\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n    ],\n    name: \"userRevokedPermissionIdsValues\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"serverIndex\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"userServerIdsAt\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n    ],\n    name: \"userServerIdsLength\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"user\",\n        type: \"address\",\n      },\n    ],\n    name: \"userServerIdsValues\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DataPermissionsABI;\n","// DataRefinerRegistry Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DataRefinerRegistryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InvalidSchemaId\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotDlpOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"refinementInstructionUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"RefinerAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"typ\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"definitionUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"SchemaAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"refinementService\",\n        type: \"address\",\n      },\n    ],\n    name: \"addRefinementService\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"refinementInstructionUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"addRefiner\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"typ\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"definitionUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"addSchema\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"dlpRefinementServices\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"dlpRefiners\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initDlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"refinementService\",\n        type: \"address\",\n      },\n    ],\n    name: \"isRefinementService\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"isValidSchemaId\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"refiners\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"dlpId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"owner\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schemaDefinitionUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"refinementInstructionUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"schemaId\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataRefinerRegistry.RefinerInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"refinersCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"refinementService\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeRefinementService\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"schemas\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"typ\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"definitionUrl\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDataRefinerRegistry.Schema\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"schemasCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDlpRefinersOwner\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newDlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateRefinerOwner\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"newSchemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateSchemaId\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DataRefinerRegistryABI;\n","// QueryEngine Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const QueryEngineABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ColumnNameUnexpected\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DlpNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDlpPaymentPercentage\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDlpTreasuryAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"InvalidPaymentToken\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotDlpOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotRefinerOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"PaymentNotReceived\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"PermissionNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"RefinerNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"TokenAlreadyWhitelisted\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"dlpTreasuryAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DlpPaymentClaimed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"PaymentReceived\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"grantee\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"tableName\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"columnName\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"tokenAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"price\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"PermissionAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"bool\",\n        name: \"approved\",\n        type: \"bool\",\n      },\n    ],\n    name: \"PermissionApprovalUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"ONE_HUNDRED_PERCENT\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"QUERY_ENGINE_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"tableName\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"columnName\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"tokenAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"price\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addGenericPermission\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"addPaymentToken\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"grantee\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"tableName\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"columnName\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"tokenAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"price\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addPermission\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"balanceOf\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"claimDlpPayment\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngine\",\n    outputs: [\n      {\n        internalType: \"contract IComputeEngine\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpPaymentPercentage\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"dlpPubKeys\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"pubKey\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"grantee\",\n        type: \"address\",\n      },\n    ],\n    name: \"getPermissions\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"permissionId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"grantee\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"approved\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"refinerId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"tableName\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"columnName\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"price\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenAddress\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct IQueryEngine.PermissionInfo[]\",\n        name: \"\",\n        type: \"tuple[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initRefinerRegistryAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract DataAccessTreasuryProxyFactory\",\n        name: \"initDataAccessTreasuryFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"permissions\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"grantee\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"approved\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"refinerId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"tableName\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"columnName\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"price\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenAddress\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct IQueryEngine.Permission\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"permissionsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"queryEngineTreasury\",\n    outputs: [\n      {\n        internalType: \"contract IDataAccessTreasury\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"refinerRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDataRefinerRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"removePaymentToken\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"metadata\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"requestPayment\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"requestPaymentInToken\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"requestPaymentInVana\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newComputeEngineAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newDlpPaymentPercentage\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDlpPaymentPercentage\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"pubKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"updateDlpPubKey\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"approved\",\n        type: \"bool\",\n      },\n    ],\n    name: \"updatePermissionApproval\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IDataAccessTreasury\",\n        name: \"newQueryEngineTreasury\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateQueryEngineTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newRefinerRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateRefinerRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newVanaTreasury\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaTreasury\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default QueryEngineABI;\n","// ComputeInstructionRegistry Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const ComputeInstructionRegistryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"instructionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ComputeInstructionNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotDlpOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"computeInstructionId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"computeInstructionUrl\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"computeInstructionHash\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ComputeInstructionAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"computeInstructionId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"bool\",\n        name: \"approved\",\n        type: \"bool\",\n      },\n    ],\n    name: \"ComputeInstructionUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"hash\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"addComputeInstruction\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"computeInstructionId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initDlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"instructionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"instructions\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"hash\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"owner\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n        ],\n        internalType:\n          \"struct IComputeInstructionRegistry.ComputeInstructionInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"instructionsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"instructionId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"isApproved\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"instructionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"isValidInstructionId\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"instructionId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"approved\",\n        type: \"bool\",\n      },\n    ],\n    name: \"updateComputeInstruction\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newDlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default ComputeInstructionRegistryABI;\n","// TeePoolEphemeralStandard Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const TeePoolEphemeralStandardABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"HWRequirementNotMet\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"MaxTimeoutExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teePoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotComputeEngine\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotTeePoolFactory\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"newHardwareType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"HardwareTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"newTeePoolType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"TeePoolTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngine\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"hardwareType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initComputeEngine\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initTeePoolFactory\",\n        type: \"address\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"initTeePoolType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"initHardwareType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint80\",\n        name: \"initMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxTimeout\",\n    outputs: [\n      {\n        internalType: \"uint80\",\n        name: \"\",\n        type: \"uint80\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"removeJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolFactory\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newComputeEngine\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"newMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"updateMaxTimeout\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newTeePoolFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePoolFactory\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolEphemeralStandardABI;\n","// TeePoolPersistentStandard Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const TeePoolPersistentStandardABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"HWRequirementNotMet\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"MaxTimeoutExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teePoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotComputeEngine\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotTeePoolFactory\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"newHardwareType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"HardwareTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"newTeePoolType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"TeePoolTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngine\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"hardwareType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initComputeEngine\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initTeePoolFactory\",\n        type: \"address\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"initTeePoolType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"initHardwareType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint80\",\n        name: \"initMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxTimeout\",\n    outputs: [\n      {\n        internalType: \"uint80\",\n        name: \"\",\n        type: \"uint80\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"removeJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolFactory\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newComputeEngine\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"newMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"updateMaxTimeout\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newTeePoolFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePoolFactory\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolPersistentStandardABI;\n","// TeePoolPersistentGpu Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const TeePoolPersistentGpuABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"HWRequirementNotMet\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"MaxTimeoutExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teePoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotComputeEngine\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotTeePoolFactory\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"newHardwareType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"HardwareTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"newTeePoolType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"TeePoolTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngine\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"hardwareType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initComputeEngine\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initTeePoolFactory\",\n        type: \"address\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"initTeePoolType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"initHardwareType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint80\",\n        name: \"initMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxTimeout\",\n    outputs: [\n      {\n        internalType: \"uint80\",\n        name: \"\",\n        type: \"uint80\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"removeJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolFactory\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newComputeEngine\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"newMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"updateMaxTimeout\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newTeePoolFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePoolFactory\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolPersistentGpuABI;\n","// TeePoolDedicatedStandard Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const TeePoolDedicatedStandardABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"HWRequirementNotMet\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"MaxTimeoutExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teePoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotComputeEngine\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotTeePoolFactory\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"newHardwareType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"HardwareTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"newTeePoolType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"TeePoolTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngine\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"hardwareType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initComputeEngine\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initTeePoolFactory\",\n        type: \"address\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"initTeePoolType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"initHardwareType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint80\",\n        name: \"initMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxTimeout\",\n    outputs: [\n      {\n        internalType: \"uint80\",\n        name: \"\",\n        type: \"uint80\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"removeJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolFactory\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newComputeEngine\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"newMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"updateMaxTimeout\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newTeePoolFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePoolFactory\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolDedicatedStandardABI;\n","// TeePoolDedicatedGpu Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const TeePoolDedicatedGpuABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"HWRequirementNotMet\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"MaxTimeoutExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teePoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotComputeEngine\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotTeePoolFactory\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"newHardwareType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"HardwareTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"newTeePoolType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"TeePoolTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngine\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"hardwareType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initComputeEngine\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initTeePoolFactory\",\n        type: \"address\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"initTeePoolType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"initHardwareType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint80\",\n        name: \"initMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxTimeout\",\n    outputs: [\n      {\n        internalType: \"uint80\",\n        name: \"\",\n        type: \"uint80\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"removeJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolFactory\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newComputeEngine\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"newMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"updateMaxTimeout\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newTeePoolFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePoolFactory\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolDedicatedGpuABI;\n","// VanaEpoch Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const VanaEpochABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EpochAlreadyFinalized\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EpochNotEnded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"totalRewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"epochRewardAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochRewardExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EpochRewardNotDistributed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEpoch\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"startBlock\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"endBlock\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochCreated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newDaySize\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochDayUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"penaltyAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochDlpRewardAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"penaltyAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochDlpRewardOverridden\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochFinalized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newEpochRewardAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochRewardAmountUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newEpochSize\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochSizeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"startBlock\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"endBlock\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DLP_PERFORMANCE_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"createEpochs\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"blockNumber\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"createEpochsUntilBlockNumber\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"daySize\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpPerformance\",\n    outputs: [\n      {\n        internalType: \"contract IDLPPerformance\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRewardDeployer\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRewardDeployer\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"epochDlpIds\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"epochDlps\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bool\",\n            name: \"isTopDlp\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"penaltyAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"distributedAmount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IVanaEpoch.EpochDlpInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"epochRewardAmount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"epochSize\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"epochs\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"startBlock\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"endBlock\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"isFinalized\",\n            type: \"bool\",\n          },\n        ],\n        internalType: \"struct IVanaEpoch.EpochInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"epochsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"forceFinalizedEpoch\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"dlpRegistryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"daySize\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"epochSize\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"epochRewardAmount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct VanaEpochImplementation.InitializeParams\",\n        name: \"params\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"penaltyAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"overrideEpochDlpReward\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"dlpId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"penaltyAmount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IVanaEpoch.Rewards[]\",\n        name: \"dlpRewards\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"saveEpochDlpRewards\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newDaySize\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDaySize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpPerformanceAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpPerformance\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpRewardDeployerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRewardDeployer\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"startBlock\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"endBlock\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"dlpId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"penaltyAmount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IVanaEpoch.Rewards[]\",\n        name: \"dlpRewards\",\n        type: \"tuple[]\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"isFinalized\",\n        type: \"bool\",\n      },\n    ],\n    name: \"updateEpoch\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newEpochRewardAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateEpochRewardAmount\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newEpochSizeInDays\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateEpochSize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newEpochsCount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateEpochsCount\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default VanaEpochABI;\n","// DLPRegistry Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DLPRegistryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DlpAddressCannotBeChanged\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DlpLpTokenIdNotSet\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DlpTokenNotSet\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDepositAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDlpStatus\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDlpVerification\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLpTokenId\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidName\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidTokenAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"LastEpochMustBeFinalized\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotDlpOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TransferFailed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"lpTokenId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DlpLpTokenIdUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"dlpAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"treasuryAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"iconUrl\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"website\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"metadata\",\n        type: \"string\",\n      },\n    ],\n    name: \"DlpRegistered\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newDlpRegistrationDepositAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DlpRegistrationDepositAmountUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"enum IDLPRegistry.DlpStatus\",\n        name: \"newStatus\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"DlpStatusUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"tokenAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"DlpTokenUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"dlpAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"treasuryAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"iconUrl\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"website\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"metadata\",\n        type: \"string\",\n      },\n    ],\n    name: \"DlpUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"verificationBlockNumber\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DlpVerificationBlockUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"bool\",\n        name: \"verified\",\n        type: \"bool\",\n      },\n    ],\n    name: \"DlpVerificationUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"deregisterDlp\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"dlpIds\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"dlpName\",\n        type: \"string\",\n      },\n    ],\n    name: \"dlpNameToId\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRegistrationDepositAmount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"dlps\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"id\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"dlpAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"treasuryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"iconUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"website\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"metadata\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"registrationBlockNumber\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"depositAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"enum IDLPRegistry.DlpStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lpTokenId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"verificationBlockNumber\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPRegistry.DlpInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"dlpsByAddress\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"id\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"dlpAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"treasuryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"iconUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"website\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"metadata\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"registrationBlockNumber\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"depositAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"enum IDLPRegistry.DlpStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lpTokenId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"verificationBlockNumber\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPRegistry.DlpInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"dlpName\",\n        type: \"string\",\n      },\n    ],\n    name: \"dlpsByName\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"id\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"dlpAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"treasuryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"iconUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"website\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"metadata\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"registrationBlockNumber\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"depositAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"enum IDLPRegistry.DlpStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lpTokenId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"verificationBlockNumber\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPRegistry.DlpInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"eligibleDlpsListAt\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eligibleDlpsListCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eligibleDlpsListValues\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"isEligibleDlp\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpRootCoreAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"startDlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"endDlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"migrateDlpData\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"dlpAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address payable\",\n            name: \"treasuryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"iconUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"website\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"metadata\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDLPRegistry.DlpRegistration\",\n        name: \"registrationInfo\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"registerDlp\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"treasury\",\n    outputs: [\n      {\n        internalType: \"contract ITreasury\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"unverifyDlp\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"dlpAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address payable\",\n            name: \"treasuryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"iconUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"website\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"metadata\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDLPRegistry.DlpRegistration\",\n        name: \"dlpUpdateInfo\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"updateDlp\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newDlpRegistrationDepositAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDlpRegistrationDepositAmount\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"tokenAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"lpTokenId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDlpToken\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"tokenAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"lpTokenId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"verificationBlockNumber\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDlpTokenAndVerification\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"verificationBlockNumber\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDlpVerificationBlock\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"treasuryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"vanaEpochAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaEpoch\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaEpoch\",\n    outputs: [\n      {\n        internalType: \"contract IVanaEpoch\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DLPRegistryABI;\n","// Treasury contract for DLP Registry\n// Contract: DLPRegistryTreasury\n// Generated automatically - do not edit manually\n\nexport const DLPRegistryTreasuryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Transfer\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"CUSTODIAN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"custodian\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initCustodian\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transfer\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newCustodian\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateCustodian\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default DLPRegistryTreasuryABI;\n","// DLPRewardDeployerTreasury Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DLPRewardDeployerTreasuryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Transfer\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"CUSTODIAN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"custodian\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initCustodian\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transfer\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newCustodian\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateCustodian\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default DLPRewardDeployerTreasuryABI;\n","// DLPPerformance Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DLPPerformanceABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DlpNotEligible\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EpochAlreadyFinalized\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EpochNotEnded\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EpochNotFinalized\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDataAccessFeesScore\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEpochDlpPerformancesCount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidMetricWeights\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidTradingVolumeScore\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidUniqueContributorsScore\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"tradingVolumeScorePenalty\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"uniqueContributorsScorePenalty\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"dataAccessFeesScorePenalty\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochDlpPenaltyUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"tradingVolume\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"uniqueContributors\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"dataAccessFees\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"tradingVolumeScore\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"uniqueContributorsScore\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"dataAccessFeesScore\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochDlpPerformancesOverridden\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"tradingVolume\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"uniqueContributors\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"dataAccessFees\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"tradingVolumeScore\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"uniqueContributorsScore\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"dataAccessFeesScore\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochDlpPerformancesSaved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"tradingVolume\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"uniqueContributors\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"dataAccessFees\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"MetricWeightsUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MANAGER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"calculateEpochDlpRewards\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"penaltyAmount\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"confirmEpochFinalScores\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"epochDlpPerformances\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"totalScore\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"tradingVolume\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"uniqueContributors\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"dataAccessFees\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"tradingVolumeScore\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"uniqueContributorsScore\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"dataAccessFeesScore\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"tradingVolumeScorePenalty\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"uniqueContributorsScorePenalty\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"dataAccessFeesScorePenalty\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPPerformance.EpochDlpPerformanceInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"epochMetricWeights\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"tradingVolume\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"uniqueContributors\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"dataAccessFees\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPPerformance.MetricWeights\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"dlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"metricWeights\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"tradingVolume\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"uniqueContributors\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"dataAccessFees\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPPerformance.MetricWeights\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"tradingVolumeScorePenalty\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"uniqueContributorsScorePenalty\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dataAccessFeesScorePenalty\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"overrideEpochDlpPenalty\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"overrideEpochDlpReward\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"dlpId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"tradingVolume\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"uniqueContributors\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"dataAccessFees\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"tradingVolumeScore\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"uniqueContributorsScore\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"dataAccessFeesScore\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPPerformance.EpochDlpPerformanceInput[]\",\n        name: \"newEpochDlpPerformances\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"overrideEpochPerformances\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"dlpId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"tradingVolume\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"uniqueContributors\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"dataAccessFees\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"tradingVolumeScore\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"uniqueContributorsScore\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"dataAccessFeesScore\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPPerformance.EpochDlpPerformanceInput[]\",\n        name: \"newEpochDlpPerformances\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"saveEpochPerformances\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"tradingVolume\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"uniqueContributors\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"dataAccessFees\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPPerformance.MetricWeights\",\n        name: \"newMetricWeights\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"updateMetricWeights\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"vanaEpochAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaEpoch\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaEpoch\",\n    outputs: [\n      {\n        internalType: \"contract IVanaEpoch\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DLPPerformanceABI;\n","// DLPRewardDeployer Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DLPRewardDeployerABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EpochNotFinalized\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"NothingToDistribute\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NothingToWithdraw\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"distributedAmount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"totalPenaltyAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochDlpPenaltyDistributed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"trancheId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"trancheAmount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"tokenRewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"spareToken\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"spareVana\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"usedVanaAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochDlpRewardDistributed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"REWARD_DEPLOYER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"dlpIds\",\n        type: \"uint256[]\",\n      },\n    ],\n    name: \"distributeRewards\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRewardSwap\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRewardSwap\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"epochDlpDistributedRewards\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"amount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"blockNumber\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"tokenRewardAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"spareToken\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"spareVana\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"usedVanaAmount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPRewardDeployer.DistributedReward[]\",\n        name: \"\",\n        type: \"tuple[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"epochDlpRewards\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"totalDistributedAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"tranchesCount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPRewardDeployer.EpochDlpRewardInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"dlpRegistryAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"vanaEpochAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"dlpRewardSwapAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"newNumberOfTranches\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"newRewardPercentage\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"newMaximumSlippagePercentage\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maximumSlippagePercentage\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"numberOfTranches\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"rewardPercentage\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"treasury\",\n    outputs: [\n      {\n        internalType: \"contract ITreasury\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpRewardSwapAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRewardSwap\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newMaximumSlippagePercentage\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateMaximumSlippagePercentage\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newRewardPercentage\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateRewardPercentage\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"treasuryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"vanaEpochAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaEpoch\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaEpoch\",\n    outputs: [\n      {\n        internalType: \"contract IVanaEpoch\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipientAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"withdrawEpochDlpPenaltyAmount\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default DLPRewardDeployerABI;\n","// DLPRewardSwap Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DLPRewardSwapABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountIn\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"used\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"spareVana\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"unusedVana\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DLPRewardSwap__AmountMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"expected\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"actual\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DLPRewardSwap__InsufficientAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DLPRewardSwap__InvalidLpTokenId\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DLPRewardSwap__InvalidRange\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DLPRewardSwap__InvalidRewardPercentage\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DLPRewardSwap__InvalidSlippagePercentage\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DLPRewardSwap__LPAmountMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint128\",\n        name: \"expected\",\n        type: \"uint128\",\n      },\n      {\n        internalType: \"uint128\",\n        name: \"actual\",\n        type: \"uint128\",\n      },\n    ],\n    name: \"DLPRewardSwap__LiquidityMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"expected\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"actual\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DLPRewardSwap__SpareAmountMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"expected\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"actual\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DLPRewardSwap__VanaInMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DLPRewardSwap__ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DLPRewardSwap__ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DLPRewardSwap__ZeroAmountSwapIn\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DLPRewardSwap__ZeroLiquidity\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"T\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"usedVanaForReward\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"tokenRewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"usedVanaForLp\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"liquidityDelta\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"spareVana\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"spareToken\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Reward\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"ONE_HUNDRED_PERCENT\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract ISwapHelper\",\n        name: \"initSwapHelper\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract INonfungiblePositionManager\",\n        name: \"initPositionManager\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"positionManager\",\n    outputs: [\n      {\n        internalType: \"contract INonfungiblePositionManager\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"amountIn\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lpTokenId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardPercentage\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"maximumSlippagePercentage\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPRewardSwap.QuoteSplitRewardSwapParams\",\n        name: \"params\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"quoteSplitRewardSwap\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"tokenRewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"spareToken\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"spareVana\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"usedVanaAmount\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"lpTokenId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardPercentage\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"maximumSlippagePercentage\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"rewardRecipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"spareRecipient\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct IDLPRewardSwap.SplitRewardSwapParams\",\n        name: \"params\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"splitRewardSwap\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"tokenRewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"spareToken\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"spareVana\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"usedVanaAmount\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"swapHelper\",\n    outputs: [\n      {\n        internalType: \"contract ISwapHelper\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract INonfungiblePositionManager\",\n        name: \"newPositionManager\",\n        type: \"address\",\n      },\n    ],\n    name: \"updatePositionManager\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract ISwapHelper\",\n        name: \"newSwapHelper\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateSwapHelper\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default DLPRewardSwapABI;\n","// SwapHelper Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const SwapHelperABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"MathOverflowedMulDiv\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"R\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint8\",\n        name: \"bits\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"SafeCastOverflowedUintDowncast\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"SafeCastOverflowedUintToInt\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"SwapHelper__InvalidAmountIn\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"SwapHelper__InvalidSlippagePercentage\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"SwapHelper__ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"T\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Uniswap__AS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Uniswap__SPL\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"tokenIn\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amountIn\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"tokenOut\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amountOut\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Swap\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"ONE_HUNDRED_PERCENT\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"WVANA\",\n    outputs: [\n      {\n        internalType: \"contract IWVANA\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"tokenIn\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenOut\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint24\",\n            name: \"fee\",\n            type: \"uint24\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountIn\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountOutMinimum\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct ISwapHelper.ExactInputSingleParams\",\n        name: \"params\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"exactInputSingle\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountOut\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"tokenA\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"tokenB\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint24\",\n        name: \"fee\",\n        type: \"uint24\",\n      },\n    ],\n    name: \"getPool\",\n    outputs: [\n      {\n        internalType: \"contract IUniswapV3Pool\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initUniswapV3Router\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract IQuoterV2\",\n        name: \"initUniswapV3Quoter\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"tokenIn\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenOut\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint24\",\n            name: \"fee\",\n            type: \"uint24\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountIn\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct ISwapHelper.QuoteExactInputSingleParams\",\n        name: \"params\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"quoteExactInputSingle\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountOut\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"tokenIn\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenOut\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint24\",\n            name: \"fee\",\n            type: \"uint24\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountIn\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint160\",\n            name: \"sqrtPriceX96\",\n            type: \"uint160\",\n          },\n          {\n            internalType: \"uint128\",\n            name: \"liquidity\",\n            type: \"uint128\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"maximumSlippagePercentage\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct ISwapHelper.QuoteSlippageExactInputSingleParams\",\n        name: \"params\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"quoteSlippageExactInputSingle\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"int256\",\n            name: \"amount0Delta\",\n            type: \"int256\",\n          },\n          {\n            internalType: \"int256\",\n            name: \"amount1Delta\",\n            type: \"int256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountToPay\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountReceived\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint160\",\n            name: \"sqrtPriceX96After\",\n            type: \"uint160\",\n          },\n          {\n            internalType: \"uint160\",\n            name: \"sqrtPriceLimitX96\",\n            type: \"uint160\",\n          },\n        ],\n        internalType: \"struct ISwapHelper.Quote\",\n        name: \"quote\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IUniswapV3Pool\",\n        name: \"pool\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"zeroForOne\",\n        type: \"bool\",\n      },\n      {\n        internalType: \"int256\",\n        name: \"amountSpecified\",\n        type: \"int256\",\n      },\n      {\n        internalType: \"uint160\",\n        name: \"sqrtPriceLimitX96\",\n        type: \"uint160\",\n      },\n      {\n        components: [\n          {\n            internalType: \"uint160\",\n            name: \"sqrtPriceX96\",\n            type: \"uint160\",\n          },\n          {\n            internalType: \"int24\",\n            name: \"tick\",\n            type: \"int24\",\n          },\n          {\n            internalType: \"uint128\",\n            name: \"liquidity\",\n            type: \"uint128\",\n          },\n        ],\n        internalType: \"struct SwapHelperImplementation.Slot0\",\n        name: \"slot0Start\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"simulateSwap\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"int256\",\n            name: \"amount0Delta\",\n            type: \"int256\",\n          },\n          {\n            internalType: \"int256\",\n            name: \"amount1Delta\",\n            type: \"int256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountToPay\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountReceived\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint160\",\n            name: \"sqrtPriceX96After\",\n            type: \"uint160\",\n          },\n          {\n            internalType: \"uint160\",\n            name: \"sqrtPriceLimitX96\",\n            type: \"uint160\",\n          },\n        ],\n        internalType: \"struct ISwapHelper.Quote\",\n        name: \"quote\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"tokenIn\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenOut\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint24\",\n            name: \"fee\",\n            type: \"uint24\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountIn\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"maximumSlippagePercentage\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct ISwapHelper.SlippageSwapParams\",\n        name: \"params\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"slippageExactInputSingle\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountInUsed\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amountOut\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"uniswapV3Quoter\",\n    outputs: [\n      {\n        internalType: \"contract IQuoterV2\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"uniswapV3Router\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IQuoterV2\",\n        name: \"newUniswapV3Quoter\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateUniswapV3Quoter\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newUniswapV3Router\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateUniswapV3Router\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default SwapHelperABI;\n","export const DLPRootImplementation2Abi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"CheckpointUnorderedInsertion\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EpochNotEnded\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDlpId\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDlpStatus\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidParam\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidStakeAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidStakersPercentage\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"LastEpochMustBeFinalised\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotStakeOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NothingToClaim\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"StakeActionPaused\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"StakeAlreadyClosed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"StakeAlreadyWithdrawn\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"StakeNotClosed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"StakeWithdrawalTooEarly\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TransferFailed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newMinStakeAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"MinStakeAmountUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newRewardClaimDelay\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"RewardClaimDelayUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"RewardMigratedToVanaPool\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"StakeClosed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"StakeCreated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldStakeId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newStakeId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"newDlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"StakeMigrated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"StakeMigratedToVanaPool\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"bool\",\n        name: \"isFinal\",\n        type: \"bool\",\n      },\n    ],\n    name: \"StakeRewardClaimed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newStakeWithdrawalDelay\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"StakeWithdrawalDelayUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"StakeWithdrawn\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"NEW_MULTIPLIER_EPOCH\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"calculateStakeClaimableAmount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"stakeAmount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"stakeStartBlock\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"blockNumber\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"calculateStakeScore\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"lastEpochToClaim\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"claimStakeRewardUntilEpoch\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"stakeIds\",\n        type: \"uint256[]\",\n      },\n    ],\n    name: \"claimStakesReward\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"stakeIds\",\n        type: \"uint256[]\",\n      },\n    ],\n    name: \"closeStakes\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"createStake\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"stakeOwner\",\n        type: \"address\",\n      },\n    ],\n    name: \"createStakeOnBehalf\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRootCore\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRootCore\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRootEpoch\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRootEpoch\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRootMetrics\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRootMetrics\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRootRewardsTreasury\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRootTreasury\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRootStakesTreasury\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRootTreasury\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"forwarder\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTrustedForwarder\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"migrateRewardToVanaPool\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"newDlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"newAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"migrateStake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"migrateStakeAndRewardToVanaPool\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"migrateStakeToVanaPool\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"minStakeAmount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"rewardClaimDelay\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"stakeClaimedAmounts\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"stakeEpochReward\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"stakeWithdrawalDelay\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"stakerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"stakerDlpStakeAmount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"stakerDlpsListAt\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n    ],\n    name: \"stakerDlpsListCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n    ],\n    name: \"stakerDlpsListValues\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"stakerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"stakerStakesListAt\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"stakerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"stakerStakesListCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"stakerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"stakerStakesListValues\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"stakerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"stakerTotalStakeAmount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"stakersListAt\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"stakersListCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"stakeId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"stakes\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"id\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"stakerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"dlpId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"startBlock\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"endBlock\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"withdrawn\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lastClaimedEpochId\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPRoot.StakeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"stakesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"stakingLastBlockNumber\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"trustedForwarder\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newDlpRootCoreAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRootCore\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newDlpRootEpochAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRootEpoch\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newDlpRootMetricsAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRootMetrics\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newDlpRootRewardsTreasuryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRootRewardsTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newDlpRootStakesTreasuryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRootStakesTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newMinStakeAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateMinStakeAmount\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newRewardClaimDelay\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateRewardClaimDelay\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newStakingLastBlockNumber\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateStakeLastBlockNumber\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newStakeWithdrawalDelay\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateStakeWithdrawalDelay\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTrustedForwarder\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newVanaPoolStakingAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaPoolStaking\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaPoolStaking\",\n    outputs: [\n      {\n        internalType: \"contract IVanaPoolStaking\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"stakeIds\",\n        type: \"uint256[]\",\n      },\n    ],\n    name: \"withdrawStakes\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n","export const DataLiquidityPoolImplementationAbi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FileAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestator\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidProof\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n    ],\n    name: \"OwnableInvalidOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"OwnableUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"FileInvalidated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newFileRewardFactor\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"FileRewardFactorUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"FileValidated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"previousOwner\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"newOwner\",\n        type: \"address\",\n      },\n    ],\n    name: \"OwnershipTransferStarted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"previousOwner\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"newOwner\",\n        type: \"address\",\n      },\n    ],\n    name: \"OwnershipTransferred\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"newProofInstruction\",\n        type: \"string\",\n      },\n    ],\n    name: \"ProofInstructionUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"newPublicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"PublicKeyUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"contributorAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"proofIndex\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"RewardRequested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"newTeePool\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeePoolUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"acceptOwnership\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"contributorsRewardAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addRewardsForContributors\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"contributorAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"contributorFiles\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"fileId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"timestamp\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"proofIndex\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardAmount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataLiquidityPool.FileResponse\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"contributorAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"contributorInfo\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"contributorAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"filesListCount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataLiquidityPool.ContributorInfoResponse\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"contributors\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"contributorAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"filesListCount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataLiquidityPool.ContributorInfoResponse\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"contributorsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dataRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDataRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"fileRewardFactor\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"files\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"fileId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"timestamp\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"proofIndex\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardAmount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataLiquidityPool.FileResponse\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"filesListAt\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"filesListCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"dataRegistryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"teePoolAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"proofInstruction\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"fileRewardFactor\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct DataLiquidityPoolImplementation.InitParams\",\n        name: \"params\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"data\",\n        type: \"bytes[]\",\n      },\n    ],\n    name: \"multicall\",\n    outputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"results\",\n        type: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"name\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"owner\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pendingOwner\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proofInstruction\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"publicKey\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"renounceOwnership\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"proofIndex\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"requestReward\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePool\",\n    outputs: [\n      {\n        internalType: \"contract ITeePool\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"token\",\n    outputs: [\n      {\n        internalType: \"contract IERC20\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"totalContributorsRewardAmount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newOwner\",\n        type: \"address\",\n      },\n    ],\n    name: \"transferOwnership\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newFileRewardFactor\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateFileRewardFactor\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"newProofInstruction\",\n        type: \"string\",\n      },\n    ],\n    name: \"updateProofInstruction\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"newPublicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"updatePublicKey\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newTeePool\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePool\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n","// DLPRegistryTreasury Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DLPRegistryTreasuryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Transfer\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"CUSTODIAN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"custodian\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initCustodian\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transfer\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newCustodian\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateCustodian\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default DLPRegistryTreasuryABI;\n","// VanaPoolStaking Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const VanaPoolStakingABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"CannotRemoveRegistrationStake\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EntityNotActive\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EntityNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientShares\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientStakeAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEntity\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRecipient\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSlippage\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotAuthorized\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotEntityOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TransferFailed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"EntityStakeRegistered\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newMinStake\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"MinStakeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"sharesIssued\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Staked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"sharesBurned\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Unstaked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA_POOL_ENTITY\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"initialMinStake\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"forwarder\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTrustedForwarder\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"minStakeAmount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"data\",\n        type: \"bytes[]\",\n      },\n    ],\n    name: \"multicall\",\n    outputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"results\",\n        type: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"registrationStake\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"registerEntityStake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"shareAmountMin\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"stake\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"stakerEntities\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"shares\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IVanaPoolStaking.StakerEntity\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"trustedForwarder\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"shareAmount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"vanaAmountMin\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"unstake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newMinStake\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateMinStakeAmount\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTrustedForwarder\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newVanaPoolEntityAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaPoolEntity\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newVanaPoolTreasuryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaPoolTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaPoolEntity\",\n    outputs: [\n      {\n        internalType: \"contract IVanaPoolEntity\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaPoolTreasury\",\n    outputs: [\n      {\n        internalType: \"contract IVanaPoolTreasury\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default VanaPoolStakingABI;\n","// VanaPoolEntity Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const VanaPoolEntityABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EntityNameAlreadyExists\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEntityId\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEntityStatus\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidName\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidParam\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistrationStake\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NameTooShort\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotAuthorized\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotEntityOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"StakersStillPresent\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TransferFailed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"maxAPY\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EntityCreated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newMaxAPY\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EntityMaxAPYUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"enum IVanaPoolEntity.EntityStatus\",\n        name: \"newStatus\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"EntityStatusUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    name: \"EntityUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"RewardsAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"distributedAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"RewardsProcessed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA_POOL_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"exponent\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"_calculateExponential\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"r\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeEntitiesValues\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addRewards\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"calculateContinuousAPYByEntity\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"apy\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"principal\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"time\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"calculateContinuousCompoundingYield\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IVanaPoolEntity.EntityRegistrationInfo\",\n        name: \"entityRegistrationInfo\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"createEntity\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"entities\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"entityId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"enum IVanaPoolEntity.EntityStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"maxAPY\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lockedRewardPool\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"activeRewardPool\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"totalShares\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lastUpdateTimestamp\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IVanaPoolEntity.EntityInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"entitiesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"entityName\",\n        type: \"string\",\n      },\n    ],\n    name: \"entityByName\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"entityId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"enum IVanaPoolEntity.EntityStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"maxAPY\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lockedRewardPool\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"activeRewardPool\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"totalShares\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lastUpdateTimestamp\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IVanaPoolEntity.EntityInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"entityName\",\n        type: \"string\",\n      },\n    ],\n    name: \"entityNameToId\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"entityShareToVana\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"vanaPoolStakingAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"initialMinRegistrationStake\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"initialMaxAPYDefault\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxAPYDefault\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"minRegistrationStake\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"maxAPY\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"lockedRewardPool\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"activeRewardPool\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"totalShares\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"lastUpdateTimestamp\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"overrideEntity\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"processRewards\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IVanaPoolEntity.EntityRegistrationInfo\",\n        name: \"entityRegistrationInfo\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"updateEntity\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"newMaxAPY\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateEntityMaxAPY\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"shares\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"isStake\",\n        type: \"bool\",\n      },\n    ],\n    name: \"updateEntityPool\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newMinRegistrationStake\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateMinRegistrationStake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newVanaPoolStakingAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaPool\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaPoolStaking\",\n    outputs: [\n      {\n        internalType: \"contract IVanaPoolStaking\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"vanaToEntityShare\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default VanaPoolEntityABI;\n","// VanaPoolTreasury Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const VanaPoolTreasuryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"vanaPoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address payable\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transferVana\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"vanaPoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaPool\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaPool\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default VanaPoolTreasuryABI;\n","// DAT Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DATABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AccountBlocked\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length1\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length2\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ArrayLengthMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"BlockListDoesNotContain\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"reason\",\n        type: \"string\",\n      },\n    ],\n    name: \"BlockingRejected\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"increasedSupply\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20ExceededCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"allowance\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"needed\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InsufficientAllowance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"balance\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"needed\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"approver\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidApprover\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InvalidCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"receiver\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidReceiver\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidSender\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidSpender\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"paramName\",\n        type: \"string\",\n      },\n    ],\n    name: \"EmptyString\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"IndexOutOfBounds\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressBlocked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressUnblocked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Approval\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"from\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Transfer\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MINTER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n    ],\n    name: \"allowance\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"approve\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"balanceOf\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"blockAddress\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"i\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"blockListAt\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"blockListLength\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"burn\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"burnFrom\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"cap\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"decimals\",\n    outputs: [\n      {\n        internalType: \"uint8\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"name_\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"symbol_\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"owner_\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap_\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address[]\",\n        name: \"receivers\",\n        type: \"address[]\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"amounts\",\n        type: \"uint256[]\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"isBlocked\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"mint\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"name\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"id\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"symbol\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"templateName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"totalSupply\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transfer\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"from\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transferFrom\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"unblockAddress\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DATABI;\n","// DATFactory Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DATFactoryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"CapTooLow\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint64\",\n        name: \"duration\",\n        type: \"uint64\",\n      },\n      {\n        internalType: \"uint64\",\n        name: \"cliff\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"DurationTooShort\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1167FailedCreateClone\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"total\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ExceedsCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExcessiveCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"enum IDATFactory.DATType\",\n        name: \"datType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"InvalidDATType\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDefaultCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint64\",\n        name: \"start\",\n        type: \"uint64\",\n      },\n      {\n        internalType: \"uint64\",\n        name: \"cliff\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"StartTimeOverflow\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroDuration\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroSalt\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroStartTime\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"symbol\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DATCreated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"wallet\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"beneficiary\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"start\",\n        type: \"uint64\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"cliff\",\n        type: \"uint64\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"duration\",\n        type: \"uint64\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"VestingWalletCreated\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"enum IDATFactory.DATType\",\n            name: \"datType\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"symbol\",\n            type: \"string\",\n          },\n          {\n            internalType: \"address\",\n            name: \"owner\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"cap\",\n            type: \"uint256\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"beneficiary\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"start\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"cliff\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"duration\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct IDATFactory.VestingParams[]\",\n            name: \"schedules\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"salt\",\n            type: \"bytes32\",\n          },\n        ],\n        internalType: \"struct IDATFactory.CreateTokenParams\",\n        name: \"params\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"createToken\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"tokenAddr\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"datListAt\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"datListCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"datListValues\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"enum IDATFactory.DATType\",\n        name: \"datType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"datTemplates\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"templateAddress\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"minCap\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"maxCap\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"datImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"datVotesImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"datPausableImplementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxCapDefault\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"minCapDefault\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"enum IDATFactory.DATType\",\n        name: \"datType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"predictAddress\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DATFactoryABI;\n","// DATPausable Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DATPausableABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AccountBlocked\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length1\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length2\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ArrayLengthMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"BlockListDoesNotContain\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"reason\",\n        type: \"string\",\n      },\n    ],\n    name: \"BlockingRejected\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"CheckpointUnorderedInsertion\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"increasedSupply\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20ExceededCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"increasedSupply\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20ExceededSafeSupply\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"allowance\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"needed\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InsufficientAllowance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"balance\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"needed\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"approver\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidApprover\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InvalidCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"receiver\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidReceiver\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidSender\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidSpender\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"deadline\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC2612ExpiredSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"signer\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC2612InvalidSigner\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"timepoint\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint48\",\n        name: \"clock\",\n        type: \"uint48\",\n      },\n    ],\n    name: \"ERC5805FutureLookup\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC6372InconsistentClock\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"paramName\",\n        type: \"string\",\n      },\n    ],\n    name: \"EmptyString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"IndexOutOfBounds\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"currentNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InvalidAccountNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint8\",\n        name: \"bits\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"SafeCastOverflowedUintDowncast\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"expiry\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"VotesExpiredSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressBlocked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressUnblocked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Approval\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"delegator\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"fromDelegate\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"toDelegate\",\n        type: \"address\",\n      },\n    ],\n    name: \"DelegateChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"delegate\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"previousVotes\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newVotes\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DelegateVotesChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"from\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Transfer\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"CLOCK_MODE\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DOMAIN_SEPARATOR\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MINTER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n    ],\n    name: \"allowance\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"approve\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"balanceOf\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"blockAddress\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"i\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"blockListAt\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"blockListLength\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"burn\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"burnFrom\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"cap\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint32\",\n        name: \"pos\",\n        type: \"uint32\",\n      },\n    ],\n    name: \"checkpoints\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint48\",\n            name: \"_key\",\n            type: \"uint48\",\n          },\n          {\n            internalType: \"uint208\",\n            name: \"_value\",\n            type: \"uint208\",\n          },\n        ],\n        internalType: \"struct Checkpoints.Checkpoint208\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"clock\",\n    outputs: [\n      {\n        internalType: \"uint48\",\n        name: \"\",\n        type: \"uint48\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"decimals\",\n    outputs: [\n      {\n        internalType: \"uint8\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"delegatee\",\n        type: \"address\",\n      },\n    ],\n    name: \"delegate\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"delegatee\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"nonce\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"expiry\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint8\",\n        name: \"v\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"r\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"delegateBySig\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"delegates\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"timepoint\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"getPastTotalSupply\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"timepoint\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"getPastVotes\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getVotes\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"name_\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"symbol_\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"owner_\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap_\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address[]\",\n        name: \"receivers\",\n        type: \"address[]\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"amounts\",\n        type: \"uint256[]\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"isBlocked\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"mint\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"name\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n    ],\n    name: \"nonces\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"numCheckpoints\",\n    outputs: [\n      {\n        internalType: \"uint32\",\n        name: \"\",\n        type: \"uint32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"deadline\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint8\",\n        name: \"v\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"r\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"permit\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"id\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"symbol\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"templateName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"totalSupply\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transfer\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"from\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transferFrom\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"unblockAddress\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DATPausableABI;\n","// DATVotes Implementation Contract\n// Generated automatically - do not edit manually\n\nexport const DATVotesABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AccountBlocked\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length1\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length2\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ArrayLengthMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"BlockListDoesNotContain\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"reason\",\n        type: \"string\",\n      },\n    ],\n    name: \"BlockingRejected\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"CheckpointUnorderedInsertion\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"increasedSupply\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20ExceededCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"increasedSupply\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20ExceededSafeSupply\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"allowance\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"needed\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InsufficientAllowance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"balance\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"needed\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"approver\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidApprover\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InvalidCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"receiver\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidReceiver\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidSender\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidSpender\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"deadline\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC2612ExpiredSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"signer\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC2612InvalidSigner\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"timepoint\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint48\",\n        name: \"clock\",\n        type: \"uint48\",\n      },\n    ],\n    name: \"ERC5805FutureLookup\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC6372InconsistentClock\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"paramName\",\n        type: \"string\",\n      },\n    ],\n    name: \"EmptyString\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"IndexOutOfBounds\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"currentNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InvalidAccountNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint8\",\n        name: \"bits\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"SafeCastOverflowedUintDowncast\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"expiry\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"VotesExpiredSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressBlocked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressUnblocked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Approval\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"delegator\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"fromDelegate\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"toDelegate\",\n        type: \"address\",\n      },\n    ],\n    name: \"DelegateChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"delegate\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"previousVotes\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newVotes\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DelegateVotesChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"from\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Transfer\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"CLOCK_MODE\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DOMAIN_SEPARATOR\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MINTER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n    ],\n    name: \"allowance\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"approve\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"balanceOf\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"blockAddress\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"i\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"blockListAt\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"blockListLength\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"burn\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"burnFrom\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"cap\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint32\",\n        name: \"pos\",\n        type: \"uint32\",\n      },\n    ],\n    name: \"checkpoints\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint48\",\n            name: \"_key\",\n            type: \"uint48\",\n          },\n          {\n            internalType: \"uint208\",\n            name: \"_value\",\n            type: \"uint208\",\n          },\n        ],\n        internalType: \"struct Checkpoints.Checkpoint208\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"clock\",\n    outputs: [\n      {\n        internalType: \"uint48\",\n        name: \"\",\n        type: \"uint48\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"decimals\",\n    outputs: [\n      {\n        internalType: \"uint8\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"delegatee\",\n        type: \"address\",\n      },\n    ],\n    name: \"delegate\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"delegatee\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"nonce\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"expiry\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint8\",\n        name: \"v\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"r\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"delegateBySig\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"delegates\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"timepoint\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"getPastTotalSupply\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"timepoint\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"getPastVotes\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getVotes\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"name_\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"symbol_\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"owner_\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap_\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address[]\",\n        name: \"receivers\",\n        type: \"address[]\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"amounts\",\n        type: \"uint256[]\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"isBlocked\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"mint\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"name\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n    ],\n    name: \"nonces\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"numCheckpoints\",\n    outputs: [\n      {\n        internalType: \"uint32\",\n        name: \"\",\n        type: \"uint32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"deadline\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint8\",\n        name: \"v\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"r\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"permit\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"id\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"symbol\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"templateName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"totalSupply\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transfer\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"from\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transferFrom\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"unblockAddress\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DATVotesABI;\n","import { ComputeEngineABI } from \"./ComputeEngineImplementation\";\nimport { DataRegistryABI } from \"./DataRegistryImplementation\";\nimport { TeePoolABI } from \"./TeePoolImplementation\";\nimport { TeePoolPhalaABI } from \"./TeePoolPhalaImplementation\";\nimport { DataPermissionsABI } from \"./PermissionRegistryImplementation\";\n\n// Data Access Infrastructure\nimport { DataRefinerRegistryABI } from \"./DataRefinerRegistryImplementation\";\nimport { QueryEngineABI } from \"./QueryEngineImplementation\";\nimport { ComputeInstructionRegistryABI } from \"./ComputeInstructionRegistryImplementation\";\n\n// TEE Pool Variants\nimport { TeePoolEphemeralStandardABI } from \"./TeePoolEphemeralStandardImplementation\";\nimport { TeePoolPersistentStandardABI } from \"./TeePoolPersistentStandardImplementation\";\nimport { TeePoolPersistentGpuABI } from \"./TeePoolPersistentGpuImplementation\";\nimport { TeePoolDedicatedStandardABI } from \"./TeePoolDedicatedStandardImplementation\";\nimport { TeePoolDedicatedGpuABI } from \"./TeePoolDedicatedGpuImplementation\";\n\n// DLP Reward Contracts\nimport { VanaEpochABI } from \"./VanaEpochImplementation\";\nimport { DLPRegistryABI } from \"./DLPRegistryImplementation\";\nimport { DLPRegistryTreasuryABI } from \"./DLPTreasuryImplementation\";\nimport { DLPRewardDeployerTreasuryABI } from \"./DLPRewardDeployerTreasuryImplementation\";\nimport { DLPPerformanceABI } from \"./DLPPerformanceImplementation\";\nimport { DLPRewardDeployerABI } from \"./DLPRewardDeployerImplementation\";\nimport { DLPRewardSwapABI } from \"./DLPRewardSwapImplementation\";\nimport { SwapHelperABI } from \"./SwapHelperImplementation\";\nimport { DLPRootImplementation2Abi } from \"./DLPRootImplementation\";\nimport { DataLiquidityPoolImplementationAbi } from \"./DataLiquidityPoolImplementation\";\nimport { DLPRegistryTreasuryABI as DLPRegistryTreasuryImplementationABI } from \"./DLPRegistryTreasuryImplementation\";\n\n// VanaPool (Staking)\nimport { VanaPoolStakingABI } from \"./VanaPoolStakingImplementation\";\nimport { VanaPoolEntityABI } from \"./VanaPoolEntityImplementation\";\nimport { VanaPoolTreasuryABI } from \"./VanaPoolTreasuryImplementation\";\n\n// DLP Deployment Contracts\nimport { DATABI } from \"./DATImplementation\";\nimport { DATFactoryABI } from \"./DATFactoryImplementation\";\nimport { DATPausableABI } from \"./DATPausableImplementation\";\nimport { DATVotesABI } from \"./DATVotesImplementation\";\n\nconst contractAbis = {\n  DataPermissions: DataPermissionsABI,\n  DataRegistry: DataRegistryABI,\n  TeePoolPhala: TeePoolPhalaABI, // Main TeePool (Intel TDX)\n  ComputeEngine: ComputeEngineABI,\n\n  // Data Access Infrastructure\n  DataRefinerRegistry: DataRefinerRegistryABI,\n  QueryEngine: QueryEngineABI,\n  ComputeInstructionRegistry: ComputeInstructionRegistryABI,\n\n  // TEE Pool Variants\n  TeePoolEphemeralStandard: TeePoolEphemeralStandardABI,\n  TeePoolPersistentStandard: TeePoolPersistentStandardABI,\n  TeePoolPersistentGpu: TeePoolPersistentGpuABI,\n  TeePoolDedicatedStandard: TeePoolDedicatedStandardABI,\n  TeePoolDedicatedGpu: TeePoolDedicatedGpuABI,\n\n  // DLP Reward Contracts\n  VanaEpoch: VanaEpochABI,\n  DLPRegistry: DLPRegistryABI,\n  DLPRegistryTreasury: DLPRegistryTreasuryABI,\n  DLPRewardDeployerTreasury: DLPRewardDeployerTreasuryABI,\n  DLPRegistryTreasuryImplementation: DLPRegistryTreasuryImplementationABI,\n  DLPPerformance: DLPPerformanceABI,\n  DLPRewardDeployer: DLPRewardDeployerABI,\n  DLPRewardSwap: DLPRewardSwapABI,\n  SwapHelper: SwapHelperABI,\n  DataLiquidityPool: DataLiquidityPoolImplementationAbi,\n\n  // VanaPool (Staking)\n  VanaPoolStaking: VanaPoolStakingABI,\n  VanaPoolEntity: VanaPoolEntityABI,\n  VanaPoolTreasury: VanaPoolTreasuryABI,\n\n  // DLP Deployment Contracts\n  DAT: DATABI,\n  DATFactory: DATFactoryABI,\n  DATPausable: DATPausableABI,\n  DATVotes: DATVotesABI,\n\n  // Legacy/Deprecated (backward compatibility)\n  DLPRoot: DLPRootImplementation2Abi,\n  TeePool: TeePoolABI, // DEPRECATED: Intel SGX version (use TeePoolPhala instead)\n} as const;\n\nexport type ContractAbis = typeof contractAbis;\n\nexport type VanaContract = keyof ContractAbis;\n\n/**\n * Retrieves the ABI for a specific Vana contract\n *\n * @param contract - The name of the contract to get the ABI for\n * @returns The ABI array for the specified contract\n */\nexport function getAbi<T extends VanaContract>(contract: T): ContractAbis[T] {\n  const abi = contractAbis[contract];\n  if (!abi) {\n    throw new Error(`Unsupported contract: ${contract}`);\n  }\n  return abi;\n}\n\n// Export individual ABIs\nexport {\n  VanaEpochABI,\n  DLPRegistryABI,\n  DLPRegistryTreasuryABI,\n  DLPPerformanceABI,\n  DLPRewardDeployerABI,\n  DLPRewardDeployerTreasuryABI,\n  DLPRegistryTreasuryImplementationABI,\n  DLPRootImplementation2Abi,\n  DataLiquidityPoolImplementationAbi,\n};\n","import { keccak256, toHex } from \"viem\";\nimport type { GrantFile, GrantPermissionParams } from \"../types/permissions\";\nimport { SerializationError, NetworkError } from \"../errors\";\n\ninterface GrantFileStorageResponse {\n  success: boolean;\n  error?: string;\n  url?: string;\n}\n\n/**\n * Creates a grant file structure from permission parameters.\n *\n * @param params - The permission parameters to create the grant file from\n * @returns The constructed grant file object\n */\nexport function createGrantFile(params: GrantPermissionParams): GrantFile {\n  const grantFile: GrantFile = {\n    grantee: params.to,\n    operation: params.operation,\n    parameters: params.parameters,\n  };\n\n  // Add expiration if provided\n  if (params.expiresAt) {\n    grantFile.expires = params.expiresAt;\n  }\n\n  return grantFile;\n}\n\n/**\n * Stores a grant file in IPFS via the relayer service.\n *\n * @param grantFile - The grant file to store\n * @param relayerUrl - URL of the relayer service\n * @returns Promise resolving to the IPFS URL\n */\nexport async function storeGrantFile(\n  grantFile: GrantFile,\n  relayerUrl: string,\n): Promise<string> {\n  try {\n    // Convert grant file to blob and use IPFS upload endpoint\n    const grantFileBlob = new Blob([JSON.stringify(grantFile, null, 2)], {\n      type: \"application/json\",\n    });\n\n    const formData = new FormData();\n    formData.append(\"file\", grantFileBlob, \"grant-file.json\");\n\n    const response = await fetch(`${relayerUrl}/api/ipfs/upload`, {\n      method: \"POST\",\n      body: formData,\n    });\n\n    if (!response.ok) {\n      throw new NetworkError(\n        `Failed to store grant file: ${response.statusText}`,\n        new Error(`HTTP ${response.status}`),\n      );\n    }\n\n    const responseData: unknown = await response.json();\n    const data = responseData as GrantFileStorageResponse;\n\n    if (!data.success) {\n      throw new NetworkError(data.error || \"Failed to store grant file\");\n    }\n\n    return data.url || \"\"; // The IPFS URL from the upload response\n  } catch (error) {\n    if (error instanceof NetworkError) {\n      throw error;\n    }\n    throw new NetworkError(\n      `Network error while storing grant file: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      error as Error,\n    );\n  }\n}\n\n/**\n * Retrieves a grant file from any URL.\n *\n * @param grantUrl - The grant file URL (supports HTTP/HTTPS, ipfs:// protocol, or IPFS gateway URLs)\n * @param _relayerUrl - URL of the relayer service (optional)\n * @returns Promise resolving to the grant file\n */\nexport async function retrieveGrantFile(\n  grantUrl: string,\n  _relayerUrl?: string,\n): Promise<GrantFile> {\n  try {\n    // Check if the URL is a gateway URL instead of ipfs:// protocol\n    if (grantUrl.startsWith(\"http\") && grantUrl.includes(\"/ipfs/\")) {\n      console.warn(\n        `⚠️  Grant URL uses HTTP gateway format instead of ipfs:// protocol. ` +\n          `Found: ${grantUrl}. ` +\n          `Consider using ipfs:// format for better protocol-agnostic storage.`,\n      );\n    }\n\n    // Try direct fetch first (works for any HTTP/HTTPS URL)\n    if (grantUrl.startsWith(\"http\")) {\n      try {\n        const timeoutPromise = new Promise<never>((_, reject) => {\n          setTimeout(() => reject(new Error(\"Request timeout\")), 10000);\n        });\n\n        const response = await Promise.race([fetch(grantUrl), timeoutPromise]);\n\n        if (response.ok) {\n          const text = await response.text();\n          const grantFile = JSON.parse(text);\n\n          if (validateGrantFile(grantFile)) {\n            return grantFile;\n          }\n        }\n      } catch (directFetchError) {\n        console.warn(`Direct fetch failed for ${grantUrl}:`, directFetchError);\n        // Continue to IPFS fallback if this might be an IPFS URL\n      }\n    }\n\n    // Try IPFS gateways as fallback (for ipfs:// URLs or failed gateway URLs)\n    const { extractIpfsHash } = await import(\"./ipfs\");\n    const ipfsHash = extractIpfsHash(grantUrl);\n\n    if (ipfsHash) {\n      // Try multiple IPFS gateways\n      const gateways = [\n        `https://gateway.pinata.cloud/ipfs/${ipfsHash}`,\n        `https://ipfs.io/ipfs/${ipfsHash}`,\n        `https://dweb.link/ipfs/${ipfsHash}`,\n      ];\n\n      for (const gatewayUrl of gateways) {\n        try {\n          const timeoutPromise = new Promise<never>((_, reject) => {\n            setTimeout(() => reject(new Error(\"Request timeout\")), 10000);\n          });\n\n          const response = await Promise.race([\n            fetch(gatewayUrl),\n            timeoutPromise,\n          ]);\n\n          if (response.ok) {\n            const text = await response.text();\n            const grantFile = JSON.parse(text);\n\n            if (validateGrantFile(grantFile)) {\n              return grantFile;\n            }\n          }\n        } catch (gatewayError) {\n          console.warn(`Gateway ${gatewayUrl} failed:`, gatewayError);\n          continue; // Try next gateway\n        }\n      }\n    }\n\n    throw new NetworkError(\n      `Failed to retrieve grant file from ${grantUrl}. Tried direct fetch${ipfsHash ? \" and IPFS gateways\" : \"\"}.`,\n    );\n  } catch (error) {\n    if (error instanceof NetworkError) {\n      throw error;\n    }\n    throw new NetworkError(\n      `Error retrieving grant file: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      error as Error,\n    );\n  }\n}\n\n/**\n * Generates a content hash for a grant file.\n * This can be used for integrity verification.\n *\n * @param grantFile - The grant file to generate a hash for\n * @returns The keccak256 hash of the grant file as a hex string\n */\nexport function getGrantFileHash(grantFile: GrantFile): string {\n  try {\n    // Create a stable JSON representation\n    const sortedFile: GrantFile = {\n      grantee: grantFile.grantee,\n      operation: grantFile.operation,\n      parameters: sortObjectKeys(grantFile.parameters) as Record<\n        string,\n        unknown\n      >,\n    };\n\n    // Add expires if present\n    if (grantFile.expires !== undefined) {\n      sortedFile.expires = grantFile.expires;\n    }\n\n    const jsonString = JSON.stringify(sortedFile);\n    console.info(`Hash: ${keccak256(toHex(jsonString))}`);\n    return keccak256(toHex(jsonString));\n  } catch (error) {\n    throw new SerializationError(\n      `Failed to generate grant file hash: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n    );\n  }\n}\n\n/**\n * Recursively sorts object keys for stable serialization.\n *\n * @param obj - The object to sort keys recursively\n * @returns The object with all keys sorted recursively\n */\nfunction sortObjectKeys(obj: unknown): unknown {\n  if (obj === null || typeof obj !== \"object\") {\n    return obj;\n  }\n\n  if (Array.isArray(obj)) {\n    return obj.map((item) => sortObjectKeys(item));\n  }\n\n  const sortedObj: Record<string, unknown> = {};\n  Object.keys(obj as Record<string, unknown>)\n    .sort()\n    .forEach((key) => {\n      sortedObj[key] = sortObjectKeys((obj as Record<string, unknown>)[key]);\n    });\n\n  return sortedObj;\n}\n\n/**\n * Validates that a grant file has the required structure.\n *\n * @param data - The data to validate as a grant file\n * @returns True if the data is a valid grant file, false otherwise\n */\nexport function validateGrantFile(data: unknown): data is GrantFile {\n  if (!data || typeof data !== \"object\") {\n    return false;\n  }\n\n  const obj = data as Record<string, unknown>;\n\n  // Validate required fields\n  // Validate grantee address\n  if (\n    typeof obj.grantee !== \"string\" ||\n    !obj.grantee.match(/^0x[a-fA-F0-9]{40}$/)\n  ) {\n    return false;\n  }\n\n  if (typeof obj.operation !== \"string\" || obj.operation.length === 0) {\n    return false;\n  }\n\n  // Files are no longer stored in grant files - they're tracked in the contract\n\n  if (!obj.parameters || typeof obj.parameters !== \"object\") {\n    return false;\n  }\n\n  // Validate optional expires field\n  if (obj.expires !== undefined) {\n    if (\n      typeof obj.expires !== \"number\" ||\n      obj.expires < 0 ||\n      !Number.isInteger(obj.expires)\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n","import { Address } from \"viem\";\nimport Ajv, { type ValidateFunction } from \"ajv\";\nimport addFormats from \"ajv-formats\";\nimport type { GrantFile } from \"../types/permissions\";\nimport grantFileSchema from \"../schemas/grantFile.schema.json\";\n\n/**\n * Base error class for grant validation failures\n *\n * @category Permissions\n */\nexport class GrantValidationError extends Error {\n  constructor(\n    message: string,\n    public details?: Record<string, unknown>,\n  ) {\n    super(message);\n    this.name = \"GrantValidationError\";\n  }\n}\n\n/**\n * Error thrown when a grant has expired\n *\n * @category Permissions\n */\nexport class GrantExpiredError extends GrantValidationError {\n  constructor(\n    message: string,\n    public expires: number,\n    public currentTime: number,\n  ) {\n    super(message, { expires, currentTime });\n    this.name = \"GrantExpiredError\";\n  }\n}\n\n/**\n * Error thrown when grantee doesn't match requesting address\n *\n * @category Permissions\n */\nexport class GranteeMismatchError extends GrantValidationError {\n  constructor(\n    message: string,\n    public grantee: Address,\n    public requestingAddress: Address,\n  ) {\n    super(message, { grantee, requestingAddress });\n    this.name = \"GranteeMismatchError\";\n  }\n}\n\n/**\n * Error thrown when operation is not allowed by grant\n *\n * @category Permissions\n */\nexport class OperationNotAllowedError extends GrantValidationError {\n  constructor(\n    message: string,\n    public grantedOperation: string,\n    public requestedOperation: string,\n  ) {\n    super(message, { grantedOperation, requestedOperation });\n    this.name = \"OperationNotAllowedError\";\n  }\n}\n\n/**\n * Error thrown when grant file structure is invalid\n *\n * @category Permissions\n */\nexport class GrantSchemaError extends GrantValidationError {\n  constructor(\n    message: string,\n    public schemaErrors: unknown[],\n    public invalidData: unknown,\n  ) {\n    super(message, { errors: schemaErrors, data: invalidData });\n    this.name = \"GrantSchemaError\";\n  }\n}\n\n/**\n * Ajv instance for grant file validation with draft 2020-12 support\n */\nconst ajv = new Ajv({\n  strict: true,\n  removeAdditional: false,\n  useDefaults: false,\n  coerceTypes: false,\n});\n\n// Add format validators (email, date, etc.)\naddFormats(ajv);\n\n/**\n * Compiled grant file schema validator\n */\nconst validateGrantFileSchema: ValidateFunction = ajv.compile(grantFileSchema);\n\n/**\n * Options for grant validation\n *\n * @category Permissions\n */\nexport interface GrantValidationOptions {\n  /** Enable JSON schema validation (default: true) */\n  schema?: boolean;\n  /** Grantee address to validate access for */\n  grantee?: Address;\n  /** Operation to validate permission for */\n  operation?: string;\n  /** Override current time for expiry checking (Unix timestamp) */\n  currentTime?: number;\n  /** Return detailed results instead of throwing (default: false) */\n  throwOnError?: boolean;\n}\n\n/**\n * Detailed validation result\n *\n * @category Permissions\n */\nexport interface GrantValidationResult {\n  /** Whether validation passed */\n  valid: boolean;\n  /** Validation errors encountered */\n  errors: Array<{\n    type: \"schema\" | \"business\";\n    field?: string;\n    message: string;\n    error?: Error;\n  }>;\n  /** The validated grant file (if validation passed) */\n  grant?: GrantFile;\n}\n\n/**\n * Validates a grant file with comprehensive schema and business rule checking.\n *\n * This function provides flexible validation with TypeScript overloads:\n * - When `throwOnError` is false (or `{ throwOnError: false }`), returns a detailed validation result\n * - When `throwOnError` is true (default), throws specific errors or returns the validated grant\n *\n * @param data - The grant file data to validate (unknown type for safety)\n * @param options - Validation options including grantee, operation, files, etc.\n * @returns Either a GrantFile (when throwing) or GrantValidationResult (when not throwing)\n * @throws {GrantSchemaError} When the grant file structure is invalid\n * @throws {GrantExpiredError} When the grant has expired\n * @throws {GranteeMismatchError} When the grantee doesn't match the requesting address\n * @throws {OperationNotAllowedError} When the requested operation is not allowed\n * @example\n * ```typescript\n * // Throwing mode (default) - returns GrantFile or throws\n * const grant = validateGrant(data, {\n *   grantee: '0x123...',\n *   operation: 'llm_inference',\n * });\n *\n * // Non-throwing mode - returns validation result\n * const result = validateGrant(data, {\n *   grantee: '0x123...',\n *   throwOnError: false\n * });\n * if (result.valid) {\n *   console.log('Grant is valid:', result.grant);\n * } else {\n *   console.log('Validation errors:', result.errors);\n * }\n * ```\n */\n/* eslint-disable no-redeclare */\nexport function validateGrant(\n  data: unknown,\n  options: GrantValidationOptions & { throwOnError: false },\n): GrantValidationResult;\n\nexport function validateGrant(\n  data: unknown,\n  options?:\n    | Omit<GrantValidationOptions, \"throwOnError\">\n    | (GrantValidationOptions & { throwOnError?: true }),\n): GrantFile;\n\n/**\n * Implementation function for grant validation with flexible return types\n *\n * @param data - The grant file data to validate\n * @param options - Validation configuration options\n * @returns Either a GrantFile or GrantValidationResult depending on throwOnError setting\n */\nexport function validateGrant(\n  data: unknown,\n  options: GrantValidationOptions = {},\n): GrantFile | GrantValidationResult {\n  /* eslint-enable no-redeclare */\n  const {\n    schema = true,\n    grantee,\n    operation,\n    currentTime,\n    throwOnError = true,\n  } = options;\n\n  const errors: GrantValidationResult[\"errors\"] = [];\n  let grant: GrantFile | undefined;\n\n  // 1. Schema Validation\n  if (schema) {\n    try {\n      if (validateGrantFileSchema(data)) {\n        grant = data as GrantFile;\n      } else {\n        throw new GrantValidationError(\"Invalid grant file schema\");\n      }\n    } catch (error) {\n      if (error instanceof GrantValidationError) {\n        const schemaError = new GrantSchemaError(\n          error.message,\n          Array.isArray(error.details?.errors) ? error.details.errors : [],\n          data,\n        );\n        errors.push({\n          type: \"schema\",\n          message: error.message,\n          error: schemaError,\n        });\n      } else {\n        errors.push({\n          type: \"schema\",\n          message: `Schema validation failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n          error: error instanceof Error ? error : new Error(\"Unknown error\"),\n        });\n      }\n    }\n  } else {\n    // Minimal type assertion if schema validation is skipped\n    grant = data as GrantFile;\n  }\n\n  // 2. Business Logic Validation (only if we have a valid grant)\n  if (grant) {\n    // Check grantee access\n    if (grantee) {\n      try {\n        validateGranteeAccess(grant, grantee);\n      } catch (error) {\n        const field = extractFieldFromBusinessError(error);\n        errors.push({\n          type: \"business\",\n          field,\n          message:\n            error instanceof Error\n              ? error.message\n              : \"Unknown business rule error\",\n          error: error instanceof Error ? error : new Error(\"Unknown error\"),\n        });\n      }\n    }\n\n    // Check expiration\n    try {\n      validateGrantExpiry(grant, currentTime);\n    } catch (error) {\n      const field = extractFieldFromBusinessError(error);\n      errors.push({\n        type: \"business\",\n        field,\n        message:\n          error instanceof Error\n            ? error.message\n            : \"Unknown business rule error\",\n        error: error instanceof Error ? error : new Error(\"Unknown error\"),\n      });\n    }\n\n    // Check operation access\n    if (operation) {\n      try {\n        validateOperationAccess(grant, operation);\n      } catch (error) {\n        const field = extractFieldFromBusinessError(error);\n        errors.push({\n          type: \"business\",\n          field,\n          message:\n            error instanceof Error\n              ? error.message\n              : \"Unknown business rule error\",\n          error: error instanceof Error ? error : new Error(\"Unknown error\"),\n        });\n      }\n    }\n  }\n\n  // 3. Return Results\n  if (errors.length > 0) {\n    if (throwOnError) {\n      // Throw the most specific error we have\n      const firstError = errors[0];\n      if (firstError.error) {\n        throw firstError.error;\n      } else {\n        const combinedMessage = errors.map((e) => e.message).join(\"; \");\n        throw new GrantValidationError(\n          `Grant validation failed: ${combinedMessage}`,\n          { errors, data },\n        );\n      }\n    }\n\n    return { valid: false, errors, grant };\n  }\n\n  if (throwOnError) {\n    return grant as GrantFile;\n  } else {\n    return { valid: true, errors: [], grant: grant as GrantFile };\n  }\n}\n\n/**\n * Helper function to extract field name from business validation errors\n *\n * @param error - The validation error to extract field information from\n * @returns The field name associated with the error, or undefined if not applicable\n */\nfunction extractFieldFromBusinessError(error: unknown): string | undefined {\n  if (error instanceof GrantExpiredError) return \"expires\";\n  if (error instanceof GranteeMismatchError) return \"grantee\";\n  if (error instanceof OperationNotAllowedError) return \"operation\";\n  return undefined;\n}\n\n/**\n * Validates that a grant file allows access for a specific grantee\n *\n * @param grantFile - The grant file to validate access for\n * @param requestingAddress - The address requesting access to check against the grantee\n */\nexport function validateGranteeAccess(\n  grantFile: GrantFile,\n  requestingAddress: Address,\n): void {\n  if (grantFile.grantee.toLowerCase() !== requestingAddress.toLowerCase()) {\n    throw new GranteeMismatchError(\n      \"Permission denied: requesting address does not match grantee\",\n      grantFile.grantee,\n      requestingAddress,\n    );\n  }\n}\n\n/**\n * Validates that a grant has not expired (if expiry is set)\n *\n * @param grantFile - The grant file to check expiration for\n * @param currentTime - Optional override for current time (Unix timestamp)\n */\nexport function validateGrantExpiry(\n  grantFile: GrantFile,\n  currentTime?: number,\n): void {\n  if (grantFile.expires) {\n    const now = currentTime || Math.floor(Date.now() / 1000); // Current Unix timestamp\n\n    if (now > grantFile.expires) {\n      throw new GrantExpiredError(\n        \"Permission denied: grant has expired\",\n        grantFile.expires,\n        now,\n      );\n    }\n  }\n}\n\n/**\n * Validates that a grant allows a specific operation\n *\n * @param grantFile - The grant file to validate operation access for\n * @param requestedOperation - The operation being requested to validate against the grant\n */\nexport function validateOperationAccess(\n  grantFile: GrantFile,\n  requestedOperation: string,\n): void {\n  if (grantFile.operation !== requestedOperation) {\n    throw new OperationNotAllowedError(\n      \"Permission denied: operation not allowed by grant\",\n      grantFile.operation,\n      requestedOperation,\n    );\n  }\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Vana Data Permission Grant\",\n  \"description\": \"User-signed permission that authorizes a specific application to perform operations via a personal server\",\n  \"type\": \"object\",\n  \"required\": [\"grantee\", \"operation\", \"parameters\"],\n  \"properties\": {\n    \"grantee\": {\n      \"type\": \"string\",\n      \"pattern\": \"^0x[0-9a-fA-F]{40}$\",\n      \"description\": \"EVM address of the application authorized to use this grant\"\n    },\n    \"operation\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"description\": \"Operation the grantee is authorized to perform\"\n    },\n    \"parameters\": {\n      \"type\": \"object\",\n      \"description\": \"Operation-specific parameters\",\n      \"additionalProperties\": true\n    },\n    \"expires\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"Optional Unix timestamp when grant expires (seconds since epoch per POSIX.1-2008)\"\n    }\n  },\n  \"additionalProperties\": false,\n  \"examples\": [\n    {\n      \"grantee\": \"0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6\",\n      \"operation\": \"llm_inference\",\n      \"parameters\": {\n        \"prompt\": \"Analyze this data: {{data}}\",\n        \"model\": \"gpt-4\",\n        \"maxTokens\": 2000,\n        \"temperature\": 0.7\n      },\n      \"expires\": 1736467579\n    }\n  ]\n}\n","import { Address, Hash } from \"viem\";\nimport type { WalletClient, PublicClient } from \"viem\";\nimport {\n  GrantPermissionParams,\n  RevokePermissionParams,\n  PermissionGrantTypedData,\n  GenericTypedData,\n  GrantedPermission,\n  TrustServerParams,\n  UntrustServerParams,\n  TrustServerInput,\n  UntrustServerInput,\n  TrustServerTypedData,\n  UntrustServerTypedData,\n  Server,\n  TrustedServerInfo,\n  PaginatedTrustedServers,\n  TrustedServerQueryOptions,\n  BatchServerInfoResult,\n  ServerTrustStatus,\n  GrantFile,\n} from \"../types/index\";\nimport { PermissionInfo } from \"../types/permissions\";\nimport type { RelayerCallbacks } from \"../types/config\";\nimport {\n  RelayerError,\n  UserRejectedRequestError,\n  SerializationError,\n  SignatureError,\n  NetworkError,\n  NonceError,\n  BlockchainError,\n  ServerUrlMismatchError,\n  PermissionError,\n} from \"../errors\";\nimport { getContractAddress } from \"../config/addresses\";\nimport { getAbi } from \"../abi\";\nimport {\n  createGrantFile,\n  getGrantFileHash,\n  retrieveGrantFile,\n} from \"../utils/grantFiles\";\nimport { validateGrant } from \"../utils/grantValidation\";\nimport { StorageManager } from \"../storage\";\nimport type { VanaPlatformAdapter } from \"../platform/interface\";\n\ninterface SubgraphPermissionsResponse {\n  data?: {\n    user?: {\n      permissions?: Array<{\n        id: string;\n        account: string;\n        publicKey: string;\n        encryptedKey: string;\n        grantSignature: string;\n        grantHash: string;\n        grant: string;\n        user: { id: string };\n        addedAtBlock: string;\n        nonce: string;\n      }>;\n    };\n  };\n  errors?: Array<{ message: string }>;\n}\n\n/**\n * Provides shared configuration and services for all SDK controllers.\n *\n * @remarks\n * This interface defines the foundational blockchain and storage services that all\n * controllers require for operation. The main Vana SDK class automatically creates\n * this context during initialization and passes it to each controller. It includes\n * wallet clients for transaction signing, storage managers for file operations,\n * and platform adapters for environment-specific functionality.\n * @category Configuration\n */\nexport interface ControllerContext {\n  /** Signs transactions and messages using the user's private key. */\n  walletClient: WalletClient;\n  /** Queries blockchain state and smart contracts without signing. */\n  publicClient: PublicClient;\n  /** Signs application-specific operations when different from primary wallet. */\n  applicationClient?: WalletClient;\n  /** Handles gasless transaction submission through relayer services. */\n  relayerCallbacks?: RelayerCallbacks;\n  /** Manages file upload and download operations across storage providers. */\n  storageManager?: StorageManager;\n  /** Provides subgraph endpoint for querying indexed blockchain data. */\n  subgraphUrl?: string;\n  /** Adapts SDK functionality to the current runtime environment. */\n  platform: VanaPlatformAdapter;\n}\n\n/**\n * Manages gasless data access permissions and trusted server registry operations.\n *\n * @remarks\n * This controller enables users to grant applications access to their data without\n * paying gas fees. It handles the complete EIP-712 permission flow including signature\n * creation, IPFS storage of permission details, and gasless transaction submission.\n * The controller also manages trusted servers that can process user data and provides\n * methods for revoking permissions when access is no longer needed.\n *\n * All permission operations support both gasless transactions via relayers and direct\n * blockchain transactions. Grant files containing detailed permission parameters are\n * stored on IPFS while permission references are recorded on the blockchain.\n * @example\n * ```typescript\n * // Grant permission for an app to access your data\n * const txHash = await vana.permissions.grant({\n *   to: \"0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36\",\n *   operation: \"llm_inference\",\n *   parameters: { model: \"gpt-4\", maxTokens: 1000 },\n * });\n *\n * // Trust a server for data processing\n * await vana.permissions.trustServer({\n *   serverId: \"0x123...\",\n *   serverUrl: \"https://trusted-server.example.com\",\n * });\n *\n * // Query current permissions\n * const permissions = await vana.permissions.getUserPermissions();\n * ```\n * @category Permissions\n * @see {@link [URL_PLACEHOLDER] | Vana Permissions System} for conceptual overview\n */\nexport class PermissionsController {\n  constructor(private readonly context: ControllerContext) {}\n\n  /**\n   * Grants permission for an application to access user data with gasless transactions.\n   *\n   * @remarks\n   * This method combines signature creation and gasless submission for a complete\n   * end-to-end permission grant flow. It creates the grant file, stores it on IPFS,\n   * generates an EIP-712 signature, and submits via relayer. The grant file contains\n   * detailed parameters while the blockchain stores only a reference to enable\n   * efficient permission queries.\n   * @param params - The permission grant configuration object\n   * @returns A Promise that resolves to the transaction hash when successfully submitted\n   * @throws {RelayerError} When gasless transaction submission fails\n   * @throws {SignatureError} When user rejects the signature request\n   * @throws {SerializationError} When grant data cannot be serialized\n   * @throws {BlockchainError} When permission grant preparation fails\n   * @example\n   * ```typescript\n   * const txHash = await vana.permissions.grant({\n   *   to: \"0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36\",\n   *   operation: \"llm_inference\",\n   *   parameters: {\n   *     model: \"gpt-4\",\n   *     maxTokens: 1000,\n   *     temperature: 0.7,\n   *   },\n   * });\n   *\n   * console.log(`Permission granted: ${txHash}`);\n   * ```\n   */\n  async grant(params: GrantPermissionParams): Promise<Hash> {\n    const { typedData, signature } = await this.createAndSign(params);\n    return await this.submitSignedGrant(typedData, signature);\n  }\n\n  /**\n   * Prepares a permission grant with preview before signing.\n   *\n   * @remarks\n   * This method implements a two-phase commit workflow that allows applications\n   * to show users a preview of what they're authorizing before requesting a signature.\n   * Unlike `createAndSign()`, this method does NOT upload to IPFS or prompt for signatures\n   * until the returned `confirm()` function is called.\n   * @param params - The permission grant parameters\n   * @returns A promise resolving to a preview object and confirm function\n   * @example\n   * ```typescript\n   * const { preview, confirm } = await vana.permissions.prepareGrant({\n   *   to: \"0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36\",\n   *   operation: \"llm_inference\",\n   *   files: [1, 2, 3],\n   *   parameters: { model: \"gpt-4\", prompt: \"Analyze my social media data\" }\n   * });\n   *\n   * console.log(`Granting ${preview.operation} access to ${preview.files?.length} files`);\n   * const transactionHash = await confirm();\n   * ```\n   */\n  async prepareGrant(params: GrantPermissionParams): Promise<{\n    preview: GrantFile;\n    confirm: () => Promise<Hash>;\n  }> {\n    try {\n      // Step 1: Create grant file in memory (no IPFS upload yet)\n      const grantFile = createGrantFile(params);\n\n      // Step 2: Validate the grant file against our JSON schema\n      validateGrant(grantFile);\n\n      // Step 3: Return preview and confirm function\n      return {\n        preview: grantFile,\n        confirm: async (): Promise<Hash> => {\n          // Phase 2: Now we upload, sign, and submit\n          return await this.confirmGrantInternal(params, grantFile);\n        },\n      };\n    } catch (error) {\n      if (error instanceof Error) {\n        // Re-throw known Vana errors directly\n        if (\n          error instanceof RelayerError ||\n          error instanceof UserRejectedRequestError ||\n          error instanceof SerializationError ||\n          error instanceof SignatureError ||\n          error instanceof NetworkError ||\n          error instanceof NonceError\n        ) {\n          throw error;\n        }\n        // Wrap unknown errors\n        throw new BlockchainError(\n          `Permission grant preparation failed: ${error.message}`,\n          error,\n        );\n      }\n      throw new BlockchainError(\n        \"Permission grant preparation failed with unknown error\",\n      );\n    }\n  }\n\n  /**\n   * Internal method to complete the grant process after user confirmation.\n   * This is called by the confirm() function returned from prepareGrant().\n   *\n   * @param params - The permission grant parameters containing user and operation details\n   * @param grantFile - The prepared grant file with permissions and metadata\n   * @returns Promise resolving to the transaction hash\n   */\n  private async confirmGrantInternal(\n    params: GrantPermissionParams,\n    grantFile: GrantFile,\n  ): Promise<Hash> {\n    try {\n      // Step 1: Use provided grantUrl or store grant file in IPFS\n      let grantUrl = params.grantUrl;\n      console.debug(\"🔍 Debug - Grant URL from params:\", grantUrl);\n      if (!grantUrl) {\n        if (\n          !this.context.relayerCallbacks?.storeGrantFile &&\n          !this.context.storageManager\n        ) {\n          throw new Error(\n            \"No storage available. Provide a grantUrl, configure relayerCallbacks.storeGrantFile, or storageManager.\",\n          );\n        }\n        if (this.context.relayerCallbacks?.storeGrantFile) {\n          grantUrl =\n            await this.context.relayerCallbacks.storeGrantFile(grantFile);\n        } else if (this.context.storageManager) {\n          // Store using local storage manager if available\n          const blob = new Blob([JSON.stringify(grantFile)], {\n            type: \"application/json\",\n          });\n          const result = await this.context.storageManager.upload(\n            blob,\n            `grant-${Date.now()}.json`,\n          );\n          grantUrl = result.url;\n        }\n\n        if (!grantUrl) {\n          throw new Error(\"Failed to store grant file - no URL returned\");\n        }\n      }\n\n      // Step 2: Get user nonce\n      const nonce = await this.getUserNonce();\n\n      // Step 3: Create EIP-712 message with compatibility placeholders\n      console.debug(\n        \"🔍 Debug - Final grant URL being passed to compose:\",\n        grantUrl,\n      );\n      const typedData = await this.composePermissionGrantMessage({\n        to: params.to,\n        operation: params.operation, // Placeholder - real data is in IPFS\n        files: params.files, // Placeholder - real data is in IPFS\n        grantUrl,\n        serializedParameters: getGrantFileHash(grantFile), // Hash as placeholder\n        nonce,\n      });\n\n      // Step 4: User signature\n      const signature = await this.signTypedData(typedData);\n\n      // Step 5: Submit the signed grant\n      return await this.submitSignedGrant(typedData, signature);\n    } catch (error) {\n      if (error instanceof Error) {\n        // Re-throw known Vana errors directly\n        if (\n          error instanceof RelayerError ||\n          error instanceof UserRejectedRequestError ||\n          error instanceof SerializationError ||\n          error instanceof SignatureError ||\n          error instanceof NetworkError ||\n          error instanceof NonceError\n        ) {\n          throw error;\n        }\n        // Wrap unknown errors\n        throw new BlockchainError(\n          `Permission grant confirmation failed: ${error.message}`,\n          error,\n        );\n      }\n      throw new BlockchainError(\n        \"Permission grant confirmation failed with unknown error\",\n      );\n    }\n  }\n\n  /**\n   * Creates typed data and signature for a permission grant without submitting.\n   *\n   * @remarks\n   * This method handles the first phase of permission granting: creating the grant file,\n   * storing it on IPFS, and generating the user's EIP-712 signature. Use this when you\n   * want to handle submission separately or batch multiple operations. The method validates\n   * the grant file against the JSON schema before creating the signature.\n   *\n   * For interactive user flows, consider using `prepareGrant()` instead,\n   * which allows showing a preview before signing.\n   * @param params - The permission grant configuration object\n   * @returns A promise resolving to the typed data structure and signature for gasless submission\n   * @throws {SignatureError} When the user rejects the signature request\n   * @throws {SerializationError} When grant data cannot be properly formatted\n   * @throws {BlockchainError} When permission grant preparation fails\n   * @throws {NetworkError} When storage operations fail\n   * @example\n   * ```typescript\n   * const { typedData, signature } = await vana.permissions.createAndSign({\n   *   to: \"0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36\",\n   *   operation: \"data_analysis\",\n   *   parameters: { analysisType: \"sentiment\" },\n   * });\n   *\n   * const transactionHash = await vana.permissions.submitSignedGrant(typedData, signature);\n   * ```\n   */\n  async createAndSign(params: GrantPermissionParams): Promise<{\n    typedData: PermissionGrantTypedData;\n    signature: Hash;\n  }> {\n    try {\n      // Step 1: Create grant file with all the real data\n      const grantFile = createGrantFile(params);\n\n      // Step 1.5: Validate the grant file against our JSON schema\n      validateGrant(grantFile);\n\n      // Step 2: Use provided grantUrl or store grant file in IPFS\n      let grantUrl = params.grantUrl;\n      console.debug(\"🔍 Debug - Grant URL from params:\", grantUrl);\n      if (!grantUrl) {\n        if (\n          !this.context.relayerCallbacks?.storeGrantFile &&\n          !this.context.storageManager\n        ) {\n          throw new Error(\n            \"No storage available. Provide a grantUrl, configure relayerCallbacks.storeGrantFile, or storageManager.\",\n          );\n        }\n        if (this.context.relayerCallbacks?.storeGrantFile) {\n          grantUrl =\n            await this.context.relayerCallbacks.storeGrantFile(grantFile);\n        } else if (this.context.storageManager) {\n          // Store using local storage manager if available\n          const blob = new Blob([JSON.stringify(grantFile)], {\n            type: \"application/json\",\n          });\n          const result = await this.context.storageManager.upload(\n            blob,\n            `grant-${Date.now()}.json`,\n          );\n          grantUrl = result.url;\n        }\n\n        if (!grantUrl) {\n          throw new Error(\"Failed to store grant file - no URL returned\");\n        }\n      }\n\n      // Step 3: Get user nonce\n      const nonce = await this.getUserNonce();\n\n      // Step 4: Create EIP-712 message with compatibility placeholders\n      console.debug(\n        \"🔍 Debug - Final grant URL being passed to compose:\",\n        grantUrl,\n      );\n      const typedData = await this.composePermissionGrantMessage({\n        to: params.to,\n        operation: params.operation, // Placeholder - real data is in IPFS\n        files: params.files, // Placeholder - real data is in IPFS\n        grantUrl,\n        serializedParameters: getGrantFileHash(grantFile), // Hash as placeholder\n        nonce,\n      });\n\n      // Step 5: User signature\n      const signature = await this.signTypedData(typedData);\n\n      return { typedData, signature };\n    } catch (error) {\n      if (error instanceof Error) {\n        // Re-throw known Vana errors directly\n        if (\n          error instanceof RelayerError ||\n          error instanceof UserRejectedRequestError ||\n          error instanceof SerializationError ||\n          error instanceof SignatureError ||\n          error instanceof NetworkError ||\n          error instanceof NonceError\n        ) {\n          throw error;\n        }\n        // Wrap unknown errors\n        throw new BlockchainError(\n          `Permission grant preparation failed: ${error.message}`,\n          error,\n        );\n      }\n      throw new BlockchainError(\n        \"Permission grant preparation failed with unknown error\",\n      );\n    }\n  }\n\n  /**\n   * Submits an already-signed permission grant to the blockchain.\n   *\n   * @remarks\n   * This method supports both relayer-based gasless transactions and direct transactions.\n   * It automatically converts `bigint` values to JSON-safe strings when using relayer\n   * callbacks and handles transaction submission with proper error handling and retry logic.\n   * @param typedData - The EIP-712 typed data structure for the permission grant\n   * @param signature - The user's signature as a hex string\n   * @returns A Promise that resolves to the transaction hash\n   * @throws {RelayerError} When gasless transaction submission fails\n   * @throws {BlockchainError} When permission submission fails\n   * @throws {NetworkError} When network communication fails\n   * @example\n   * ```typescript\n   * const txHash = await vana.permissions.submitSignedGrant(\n   *   typedData,\n   *   \"0x1234...\"\n   * );\n   * ```\n   */\n  async submitSignedGrant(\n    typedData: PermissionGrantTypedData,\n    signature: Hash,\n  ): Promise<Hash> {\n    try {\n      console.debug(\n        \"🔍 Debug - submitSignedGrant called with typed data:\",\n        JSON.stringify(\n          typedData,\n          (key, value) =>\n            typeof value === \"bigint\" ? value.toString() : value,\n          2,\n        ),\n      );\n\n      // Use relayer callbacks or direct transaction\n      if (this.context.relayerCallbacks?.submitPermissionGrant) {\n        // Create a JSON-safe version for relayer\n        const jsonSafeTypedData = JSON.parse(\n          JSON.stringify(typedData, (_key, value) =>\n            typeof value === \"bigint\" ? value.toString() : value,\n          ),\n        );\n        return await this.context.relayerCallbacks.submitPermissionGrant(\n          jsonSafeTypedData,\n          signature,\n        );\n      } else {\n        return await this.submitDirectTransaction(typedData, signature);\n      }\n    } catch (error) {\n      // Re-throw known Vana errors directly to preserve error types\n      if (\n        error instanceof RelayerError ||\n        error instanceof NetworkError ||\n        error instanceof UserRejectedRequestError ||\n        error instanceof SignatureError ||\n        error instanceof NonceError\n      ) {\n        throw error;\n      }\n      throw new BlockchainError(\n        `Permission submission failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Submits an already-signed trust server transaction to the blockchain.\n   * This method extracts the trust server input from typed data and submits it directly.\n   *\n   * @param typedData - The EIP-712 typed data for TrustServer\n   * @param signature - The user's signature\n   * @returns Promise resolving to the transaction hash\n   */\n  async submitSignedTrustServer(\n    typedData: TrustServerTypedData,\n    signature: Hash,\n  ): Promise<Hash> {\n    try {\n      const trustServerInput: TrustServerInput = {\n        nonce: BigInt(typedData.message.nonce),\n        serverId: typedData.message.serverId,\n        serverUrl: typedData.message.serverUrl,\n      };\n\n      return await this.submitTrustServerTransaction(\n        trustServerInput,\n        signature,\n      );\n    } catch (error) {\n      // Re-throw known Vana errors directly to preserve error types\n      if (\n        error instanceof RelayerError ||\n        error instanceof NetworkError ||\n        error instanceof UserRejectedRequestError ||\n        error instanceof SignatureError ||\n        error instanceof NonceError\n      ) {\n        throw error;\n      }\n\n      // Check for specific contract errors\n      if (\n        error instanceof Error &&\n        error.message.includes(\"ServerUrlMismatch\")\n      ) {\n        const match = error.message.match(\n          /ServerUrlMismatch\\(string existingUrl, string providedUrl\\)\\s+\\(([^,]+),\\s*([^)]+)\\)/,\n        );\n        if (match) {\n          const existingUrl = match[1].trim();\n          const providedUrl = match[2].trim();\n          throw new ServerUrlMismatchError(\n            existingUrl,\n            providedUrl,\n            typedData.message.serverId,\n          );\n        }\n      }\n\n      throw new BlockchainError(\n        `Trust server submission failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Submits an already-signed permission revoke transaction to the blockchain.\n   * This method handles the revocation of previously granted permissions.\n   *\n   * @param typedData - The EIP-712 typed data for PermissionRevoke\n   * @param signature - The user's signature\n   * @returns Promise resolving to the transaction hash\n   */\n  async submitSignedRevoke(\n    typedData: GenericTypedData,\n    signature: Hash,\n  ): Promise<Hash> {\n    try {\n      // Use relayer callbacks or direct transaction\n      if (this.context.relayerCallbacks?.submitPermissionRevoke) {\n        // Create a JSON-safe version for relayer\n        const jsonSafeTypedData = JSON.parse(\n          JSON.stringify(typedData, (_key, value) =>\n            typeof value === \"bigint\" ? value.toString() : value,\n          ),\n        );\n        return await this.context.relayerCallbacks.submitPermissionRevoke(\n          jsonSafeTypedData,\n          signature,\n        );\n      } else {\n        return await this.submitDirectRevokeTransaction(typedData, signature);\n      }\n    } catch (error) {\n      if (\n        error instanceof RelayerError ||\n        error instanceof NetworkError ||\n        error instanceof UserRejectedRequestError ||\n        error instanceof SignatureError ||\n        error instanceof NonceError\n      ) {\n        throw error;\n      }\n      throw new BlockchainError(\n        `Permission revoke submission failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Submits an already-signed untrust server transaction to the blockchain.\n   * This method handles the removal of trusted servers.\n   *\n   * @param typedData - The EIP-712 typed data for UntrustServer\n   * @param signature - The user's signature\n   * @returns Promise resolving to the transaction hash\n   */\n  async submitSignedUntrustServer(\n    typedData: GenericTypedData,\n    signature: Hash,\n  ): Promise<Hash> {\n    try {\n      // Use relayer callbacks or direct transaction\n      if (this.context.relayerCallbacks?.submitUntrustServer) {\n        return await this.context.relayerCallbacks.submitUntrustServer(\n          typedData as unknown as UntrustServerTypedData,\n          signature,\n        );\n      } else {\n        return await this.submitSignedUntrustTransaction(typedData, signature);\n      }\n    } catch (error) {\n      if (\n        error instanceof RelayerError ||\n        error instanceof NetworkError ||\n        error instanceof UserRejectedRequestError ||\n        error instanceof SignatureError ||\n        error instanceof NonceError\n      ) {\n        throw error;\n      }\n      throw new BlockchainError(\n        `Untrust server submission failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Submits a signed transaction directly to the blockchain.\n   *\n   * @param typedData - The typed data structure for the permission grant\n   * @param signature - The cryptographic signature authorizing the transaction\n   * @returns Promise resolving to the transaction hash\n   */\n  private async submitDirectTransaction(\n    typedData: PermissionGrantTypedData,\n    signature: Hash,\n  ): Promise<Hash> {\n    const chainId = await this.context.walletClient.getChainId();\n    const DataPermissionsAddress = getContractAddress(\n      chainId,\n      \"DataPermissions\",\n    );\n    const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n    // Prepare the PermissionInput struct\n    const permissionInput = {\n      nonce: typedData.message.nonce,\n      grant: typedData.message.grant,\n      fileIds: typedData.message.fileIds,\n    };\n\n    console.debug(\"🔍 Debug - Permission input being sent to contract:\", {\n      nonce: permissionInput.nonce.toString(),\n      grant: permissionInput.grant,\n      fileIds: permissionInput.fileIds.map((id) => id.toString()),\n    });\n    console.debug(\"🔍 Debug - Grant field value:\", typedData.message.grant);\n    console.debug(\n      \"🔍 Debug - Grant field length:\",\n      typedData.message.grant?.length || 0,\n    );\n\n    // Submit directly to the contract using the provided wallet client\n    const txHash = await this.context.walletClient.writeContract({\n      address: DataPermissionsAddress,\n      abi: DataPermissionsAbi,\n      functionName: \"addPermission\",\n      args: [permissionInput, signature],\n      account:\n        this.context.walletClient.account || (await this.getUserAddress()),\n      chain: this.context.walletClient.chain || null,\n    });\n\n    return txHash;\n  }\n\n  /**\n   * Revokes a previously granted permission.\n   *\n   * @param params - Parameters for revoking the permission\n   * @returns Promise resolving to transaction hash\n   * @example\n   * ```typescript\n   * // Revoke a permission by its ID\n   * const txHash = await vana.permissions.revoke({\n   *   permissionId: 123n\n   * });\n   * console.log('Permission revoked in transaction:', txHash);\n   *\n   * // Wait for confirmation if needed\n   * const receipt = await vana.core.waitForTransaction(txHash);\n   * console.log('Revocation confirmed in block:', receipt.blockNumber);\n   * ```\n   */\n  async revoke(params: RevokePermissionParams): Promise<Hash> {\n    try {\n      // Check chain ID availability early\n      if (!this.context.walletClient.chain?.id) {\n        throw new BlockchainError(\"Chain ID not available\");\n      }\n\n      const chainId = await this.context.walletClient.getChainId();\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      // Direct contract call for revocation\n      const txHash = await this.context.walletClient.writeContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"revokePermission\",\n        args: [params.permissionId],\n        account:\n          this.context.walletClient.account || (await this.getUserAddress()),\n        chain: this.context.walletClient.chain || null,\n      });\n\n      return txHash;\n    } catch (error) {\n      if (error instanceof Error) {\n        // Re-throw known Vana errors directly\n        if (\n          error instanceof RelayerError ||\n          error instanceof UserRejectedRequestError ||\n          error instanceof SerializationError ||\n          error instanceof SignatureError ||\n          error instanceof NetworkError ||\n          error instanceof NonceError\n        ) {\n          throw error;\n        }\n        throw new BlockchainError(\n          `Permission revoke failed: ${error.message}`,\n          error,\n        );\n      }\n      throw new BlockchainError(\"Permission revoke failed with unknown error\");\n    }\n  }\n\n  /**\n   * Revokes a permission with a signature (gasless transaction).\n   *\n   * @param params - Parameters for revoking the permission\n   * @returns Promise resolving to transaction hash\n   */\n  async revokeWithSignature(params: RevokePermissionParams): Promise<Hash> {\n    try {\n      // Check chain ID availability early\n      if (!this.context.walletClient.chain?.id) {\n        throw new BlockchainError(\"Chain ID not available\");\n      }\n\n      const nonce = await this.getUserNonce();\n\n      // Create revoke permission input\n      const revokePermissionInput = {\n        nonce,\n        permissionId: params.permissionId,\n      };\n\n      // Create typed data for revoke\n      const typedData = {\n        domain: await this.getPermissionDomain(),\n        types: {\n          RevokePermission: [\n            { name: \"nonce\", type: \"uint256\" },\n            { name: \"permissionId\", type: \"uint256\" },\n          ],\n        },\n        primaryType: \"RevokePermission\" as const,\n        message: revokePermissionInput,\n      };\n\n      const signature = await this.signTypedData(typedData);\n\n      // Submit via relayer callbacks or directly\n      if (this.context.relayerCallbacks?.submitPermissionRevoke) {\n        return await this.context.relayerCallbacks.submitPermissionRevoke(\n          typedData,\n          signature,\n        );\n      } else {\n        return await this.submitDirectRevokeTransaction(typedData, signature);\n      }\n    } catch (error) {\n      throw new PermissionError(\n        `Failed to revoke permission with signature: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Retrieves the user's current nonce from the DataPermissions contract.\n   *\n   * @returns Promise resolving to the user's current nonce value\n   */\n  private async getUserNonce(): Promise<bigint> {\n    try {\n      const userAddress = await this.getUserAddress();\n      const chainId = await this.context.walletClient.getChainId();\n\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      const nonce = (await this.context.publicClient.readContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"userNonce\",\n        args: [userAddress],\n      })) as bigint;\n\n      return nonce;\n    } catch (error) {\n      throw new NonceError(\n        `Failed to retrieve user nonce: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Composes the EIP-712 typed data for PermissionGrant (new simplified format).\n   *\n   * @param params - The parameters for composing the permission grant message\n   * @param params.to - The recipient address for the permission grant\n   * @param params.operation - The type of operation being granted permission for\n   * @param params.files - Array of file IDs that the permission applies to\n   * @param params.grantUrl - URL where the grant details are stored\n   * @param params.serializedParameters - Serialized parameters for the operation\n   * @param params.nonce - Unique number to prevent replay attacks\n   * @returns Promise resolving to the typed data structure\n   */\n  private async composePermissionGrantMessage(params: {\n    to: Address;\n    operation: string;\n    files: number[];\n    grantUrl: string;\n    serializedParameters: string;\n    nonce: bigint;\n  }): Promise<PermissionGrantTypedData> {\n    const domain = await this.getPermissionDomain();\n\n    console.debug(\n      \"🔍 Debug - Composing permission message with grantUrl:\",\n      params.grantUrl,\n    );\n\n    // Warn if using HTTP gateway URL instead of ipfs:// protocol for on-chain storage\n    if (\n      !params.grantUrl.startsWith(\"ipfs://\") &&\n      params.grantUrl.includes(\"/ipfs/\")\n    ) {\n      const { extractIpfsHash } = await import(\"../utils/ipfs\");\n      const hash = extractIpfsHash(params.grantUrl);\n      if (hash) {\n        console.warn(\n          `⚠️  Storing HTTP gateway URL on-chain instead of ipfs:// protocol. ` +\n            `Found: ${params.grantUrl}. ` +\n            `Consider using ipfs://${hash} for better protocol-agnostic on-chain storage.`,\n        );\n      }\n    }\n\n    return {\n      domain,\n      types: {\n        Permission: [\n          { name: \"nonce\", type: \"uint256\" },\n          { name: \"grant\", type: \"string\" },\n          { name: \"fileIds\", type: \"uint256[]\" },\n        ],\n      },\n      primaryType: \"Permission\",\n      message: {\n        nonce: params.nonce,\n        grant: params.grantUrl,\n        fileIds: params.files.map((fileId) => BigInt(fileId)),\n      },\n    };\n  }\n\n  /**\n   * Gets the EIP-712 domain for PermissionGrant signatures.\n   *\n   * @returns Promise resolving to the EIP-712 domain configuration\n   */\n  private async getPermissionDomain() {\n    const chainId = await this.context.walletClient.getChainId();\n    const DataPermissionsAddress = getContractAddress(\n      chainId,\n      \"DataPermissions\",\n    );\n\n    return {\n      name: \"VanaDataPermissions\",\n      version: \"1\",\n      chainId,\n      verifyingContract: DataPermissionsAddress,\n    };\n  }\n\n  /**\n   * Signs typed data using the wallet client.\n   *\n   * @param typedData - The EIP-712 typed data structure to sign\n   * @returns Promise resolving to the cryptographic signature\n   */\n  private async signTypedData(\n    typedData: PermissionGrantTypedData | GenericTypedData,\n  ): Promise<Hash> {\n    try {\n      const signature = await this.context.walletClient.signTypedData(\n        typedData as Parameters<\n          typeof this.context.walletClient.signTypedData\n        >[0],\n      );\n      return signature;\n    } catch (error) {\n      if (error instanceof Error && error.message.includes(\"rejected\")) {\n        throw new UserRejectedRequestError();\n      }\n      throw new SignatureError(\n        `Failed to sign typed data: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Gets the user's address from the wallet client.\n   *\n   * @returns Promise resolving to the user's wallet address\n   */\n  private async getUserAddress(): Promise<Address> {\n    const addresses = await this.context.walletClient.getAddresses();\n    if (addresses.length === 0) {\n      throw new BlockchainError(\"No addresses available in wallet client\");\n    }\n    return addresses[0];\n  }\n\n  /**\n   * Retrieves all permissions granted by the current user using subgraph queries.\n   *\n   * @remarks\n   * This method queries the Vana subgraph to find permissions directly granted by the user\n   * using the Permission entity. It efficiently handles millions of permissions by leveraging\n   * indexed subgraph data instead of scanning contract logs. The method fetches complete\n   * grant files from IPFS to provide detailed permission information including operation\n   * parameters and grantee details.\n   * @param params - Optional query parameters\n   * @param params.limit - Maximum number of permissions to return (default: 50)\n   * @param params.subgraphUrl - Optional subgraph URL to override the default endpoint\n   * @returns A Promise that resolves to an array of `GrantedPermission` objects\n   * @throws {BlockchainError} When subgraph is unavailable or returns invalid data\n   * @example\n   * ```typescript\n   * // Get all permissions granted by current user\n   * const permissions = await vana.permissions.getUserPermissions();\n   *\n   * permissions.forEach(permission => {\n   *   console.log(`Granted ${permission.operation} to ${permission.grantee}`);\n   * });\n   *\n   * // Limit results\n   * const recent = await vana.permissions.getUserPermissions({ limit: 10 });\n   * ```\n   */\n  async getUserPermissions(params?: {\n    limit?: number;\n    subgraphUrl?: string;\n  }): Promise<GrantedPermission[]> {\n    try {\n      const userAddress = await this.getUserAddress();\n\n      // Use provided subgraph URL or default from context\n      const graphqlEndpoint = params?.subgraphUrl || this.context.subgraphUrl;\n\n      if (!graphqlEndpoint) {\n        throw new BlockchainError(\n          \"subgraphUrl is required. Please provide a valid subgraph endpoint or configure it in Vana constructor.\",\n        );\n      }\n\n      // Query the subgraph for user's permissions using the new Permission entity\n      const query = `\n        query GetUserPermissions($userId: ID!) {\n          user(id: $userId) {\n            id\n            permissions {\n              id\n              grant\n              nonce\n              signature\n              addedAtBlock\n              addedAtTimestamp\n              transactionHash\n            }\n          }\n        }\n      `;\n\n      console.info(\"Query:\", query);\n      console.info(\n        \"Body:\",\n        JSON.stringify({\n          query,\n          variables: {\n            userId: userAddress.toLowerCase(),\n          },\n        }),\n      );\n\n      const response = await fetch(graphqlEndpoint, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          query,\n          variables: {\n            userId: userAddress.toLowerCase(),\n          },\n        }),\n      });\n\n      if (!response.ok) {\n        throw new BlockchainError(\n          `Subgraph request failed: ${response.status} ${response.statusText}`,\n        );\n      }\n\n      const result = (await response.json()) as SubgraphPermissionsResponse;\n\n      console.info(\"Result:\", result);\n\n      if (result.errors) {\n        throw new BlockchainError(\n          `Subgraph errors: ${result.errors.map((e: { message: string }) => e.message).join(\", \")}`,\n        );\n      }\n\n      const userData = result.data?.user;\n      if (!userData || !userData.permissions?.length) {\n        console.warn(\"No permissions found for user:\", userAddress);\n        return [];\n      }\n\n      const userPermissions: GrantedPermission[] = [];\n      const limit = params?.limit || 50; // Default limit\n      const permissionsToProcess = userData.permissions.slice(0, limit);\n\n      // Process each permission and fetch grant file data\n      for (const permission of permissionsToProcess) {\n        try {\n          // Fetch and parse the grant file from IPFS to get complete permission data\n          let operation: string | undefined;\n          let files: number[] = [];\n          let parameters: unknown | undefined;\n          let granteeAddress: string | undefined;\n\n          try {\n            const grantFile = await retrieveGrantFile(permission.grant);\n            operation = grantFile.operation;\n            parameters = grantFile.parameters;\n            granteeAddress = grantFile.grantee;\n          } catch {\n            // Failed to retrieve grant file - using basic permission data\n            // Continue with basic permission data even if grant file can't be retrieved\n          }\n\n          // Get file IDs from the contract\n          try {\n            const fileIds = await this.getPermissionFileIds(\n              BigInt(permission.id),\n            );\n            files = fileIds.map((id) => Number(id));\n          } catch {\n            // Failed to retrieve file IDs - using empty array\n            // Continue with empty files array\n          }\n\n          userPermissions.push({\n            id: BigInt(permission.id),\n            files: files,\n            operation: operation || \"\",\n            parameters: (parameters as Record<string, unknown>) || {},\n            grant: permission.grant,\n            grantor: userAddress.toLowerCase() as Address, // Current user is the grantor\n            grantee: (granteeAddress as Address) || userAddress, // Application that received permission\n            active: true, // Default to active if not specified\n            grantedAt: Number(permission.addedAtBlock),\n            nonce: Number(permission.nonce),\n          });\n        } catch (error) {\n          console.error(\n            \"SDK Error: Failed to process permission:\",\n            permission.id,\n            error,\n          );\n          // Failed to process permission - skipping\n        }\n      }\n\n      return userPermissions.sort((a, b) => {\n        // Sort bigints - most recent first\n        if (a.id < b.id) return 1;\n        if (a.id > b.id) return -1;\n        return 0;\n      });\n    } catch (error) {\n      console.error(\"Failed to fetch user permissions:\", error);\n      throw new BlockchainError(\n        `Failed to fetch user permissions: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Gets all permission IDs for a specific file.\n   *\n   * @param fileId - The file ID to query permissions for\n   * @returns Promise resolving to array of permission IDs\n   */\n  async getFilePermissionIds(fileId: bigint): Promise<bigint[]> {\n    try {\n      const chainId = await this.context.walletClient.getChainId();\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      const permissionIds = (await this.context.publicClient.readContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"filePermissionIds\",\n        args: [fileId],\n      })) as bigint[];\n\n      return permissionIds;\n    } catch (error) {\n      throw new BlockchainError(\n        `Failed to get file permission IDs: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Gets all file IDs associated with a permission.\n   *\n   * @param permissionId - The permission ID to query files for\n   * @returns Promise resolving to array of file IDs\n   */\n  async getPermissionFileIds(permissionId: bigint): Promise<bigint[]> {\n    try {\n      const chainId = await this.context.walletClient.getChainId();\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      const fileIds = (await this.context.publicClient.readContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"permissionFileIds\",\n        args: [permissionId],\n      })) as bigint[];\n\n      return fileIds;\n    } catch (error) {\n      throw new BlockchainError(\n        `Failed to get permission file IDs: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Checks if a permission is active.\n   *\n   * @param permissionId - The permission ID to check\n   * @returns Promise resolving to boolean indicating if permission is active\n   */\n  async isActivePermission(permissionId: bigint): Promise<boolean> {\n    try {\n      const chainId = await this.context.walletClient.getChainId();\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      const isActive = (await this.context.publicClient.readContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"isActivePermission\",\n        args: [permissionId],\n      })) as boolean;\n\n      return isActive;\n    } catch (error) {\n      throw new BlockchainError(\n        `Failed to check permission status: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Gets permission details from the contract.\n   *\n   * @param permissionId - The permission ID to query\n   * @returns Promise resolving to permission info\n   */\n  async getPermissionInfo(permissionId: bigint): Promise<PermissionInfo> {\n    try {\n      const chainId = await this.context.walletClient.getChainId();\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      const permissionInfo = (await this.context.publicClient.readContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"permissions\",\n        args: [permissionId],\n      })) as PermissionInfo;\n\n      return permissionInfo;\n    } catch (error) {\n      throw new BlockchainError(\n        `Failed to get permission info: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Normalizes grant ID to hex format.\n   * Handles conversion from permission ID (bigint/number/string) to proper hex hash format.\n   *\n   * @param grantId - Permission ID or grant hash in various formats\n   * @returns Normalized hex hash\n   */\n  private normalizeGrantId(grantId: Hash | bigint | number | string): Hash {\n    // If it's already a hex string (Hash), return as-is\n    if (\n      typeof grantId === \"string\" &&\n      grantId.startsWith(\"0x\") &&\n      grantId.length === 66\n    ) {\n      return grantId as Hash;\n    }\n\n    // Convert permission ID to hex format (same logic as demo was using)\n    try {\n      const bigIntId = BigInt(grantId);\n      return `0x${bigIntId.toString(16).padStart(64, \"0\")}` as Hash;\n    } catch {\n      throw new Error(\n        `Invalid grant ID format: ${grantId}. Must be a permission ID (number/bigint/string) or a 32-byte hex hash.`,\n      );\n    }\n  }\n\n  /**\n   * Trusts a server for data processing.\n   *\n   * @param params - Parameters for trusting the server\n   * @returns Promise resolving to transaction hash\n   * @example\n   * ```typescript\n   * // Trust a server by providing its ID and URL\n   * const txHash = await vana.permissions.trustServer({\n   *   serverId: '0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6',\n   *   serverUrl: 'https://myserver.example.com'\n   * });\n   * console.log('Server trusted in transaction:', txHash);\n   *\n   * // Verify the server was added to trusted list\n   * const trustedServers = await vana.permissions.getTrustedServers();\n   * console.log('Trusted servers:', trustedServers.length);\n   * ```\n   */\n  async trustServer(params: TrustServerParams): Promise<Hash> {\n    try {\n      const chainId = await this.context.walletClient.getChainId();\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      // Submit directly to the contract\n      const txHash = await this.context.walletClient.writeContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"trustServer\",\n        args: [params.serverId, params.serverUrl],\n        account:\n          this.context.walletClient.account || (await this.getUserAddress()),\n        chain: this.context.walletClient.chain || null,\n      });\n\n      return txHash;\n    } catch (error) {\n      if (error instanceof Error && error.message.includes(\"rejected\")) {\n        throw new UserRejectedRequestError();\n      }\n      throw new BlockchainError(\n        `Failed to trust server: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Trusts a server using a signature (gasless transaction).\n   *\n   * @param params - Parameters for trusting the server\n   * @returns Promise resolving to transaction hash\n   */\n  async trustServerWithSignature(params: TrustServerParams): Promise<Hash> {\n    try {\n      const nonce = await this.getUserNonce();\n\n      // Create trust server message\n      const trustServerInput: TrustServerInput = {\n        nonce,\n        serverId: params.serverId,\n        serverUrl: params.serverUrl,\n      };\n\n      // Create typed data\n      const typedData = await this.composeTrustServerMessage(trustServerInput);\n\n      // Sign the typed data\n      const signature = await this.signTypedData(\n        typedData as unknown as GenericTypedData,\n      );\n\n      // Submit via relayer callbacks or direct transaction\n      if (this.context.relayerCallbacks?.submitTrustServer) {\n        return await this.context.relayerCallbacks.submitTrustServer(\n          typedData,\n          signature,\n        );\n      } else {\n        return await this.submitTrustServerTransaction(\n          trustServerInput,\n          signature,\n        );\n      }\n    } catch (error) {\n      if (error instanceof Error) {\n        // Re-throw known Vana errors directly\n        if (\n          error instanceof RelayerError ||\n          error instanceof UserRejectedRequestError ||\n          error instanceof SerializationError ||\n          error instanceof SignatureError ||\n          error instanceof NetworkError ||\n          error instanceof NonceError\n        ) {\n          throw error;\n        }\n        throw new BlockchainError(\n          `Trust server failed: ${error.message}`,\n          error,\n        );\n      }\n      throw new BlockchainError(\"Trust server failed with unknown error\");\n    }\n  }\n\n  /**\n   * Submits a direct untrust server transaction (without signature).\n   *\n   * @param params - The untrust server parameters containing server details\n   * @returns Promise resolving to the transaction hash\n   */\n  private async submitDirectUntrustTransaction(\n    params: UntrustServerInput,\n  ): Promise<Hash> {\n    try {\n      const chainId = await this.context.walletClient.getChainId();\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      // Submit directly to the contract\n      const txHash = await this.context.walletClient.writeContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"untrustServer\",\n        args: [params.serverId],\n        account:\n          this.context.walletClient.account || (await this.getUserAddress()),\n        chain: this.context.walletClient.chain || null,\n      });\n\n      return txHash;\n    } catch (error) {\n      if (error instanceof Error && error.message.includes(\"rejected\")) {\n        throw new UserRejectedRequestError();\n      }\n      throw new BlockchainError(\n        `Failed to untrust server: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Untrusts a server.\n   *\n   * @param params - Parameters for untrusting the server\n   * @returns Promise resolving to transaction hash\n   */\n  async untrustServer(params: UntrustServerParams): Promise<Hash> {\n    // Convert UntrustServerParams to UntrustServerInput by adding nonce\n    const nonce = await this.getUserNonce();\n    const untrustServerInput: UntrustServerInput = {\n      nonce,\n      serverId: params.serverId,\n    };\n\n    return await this.submitDirectUntrustTransaction(untrustServerInput);\n  }\n\n  /**\n   * Untrusts a server using a signature (gasless transaction).\n   *\n   * @param params - Parameters for untrusting the server\n   * @returns Promise resolving to transaction hash\n   */\n  async untrustServerWithSignature(params: UntrustServerParams): Promise<Hash> {\n    try {\n      const nonce = await this.getUserNonce();\n\n      // Create untrust server message\n      const untrustServerInput: UntrustServerInput = {\n        nonce,\n        serverId: params.serverId,\n      };\n\n      // Create typed data\n      const typedData =\n        await this.composeUntrustServerMessage(untrustServerInput);\n\n      // Sign the typed data\n      const signature = await this.signTypedData(\n        typedData as unknown as GenericTypedData,\n      );\n\n      // Submit via relayer callbacks or direct transaction\n      if (this.context.relayerCallbacks?.submitUntrustServer) {\n        return await this.context.relayerCallbacks.submitUntrustServer(\n          typedData,\n          signature,\n        );\n      } else {\n        return await this.submitSignedUntrustTransaction(\n          typedData as unknown as GenericTypedData,\n          signature,\n        );\n      }\n    } catch (error) {\n      if (error instanceof Error) {\n        // Re-throw known Vana errors directly\n        if (\n          error instanceof RelayerError ||\n          error instanceof UserRejectedRequestError ||\n          error instanceof SerializationError ||\n          error instanceof SignatureError ||\n          error instanceof NetworkError ||\n          error instanceof NonceError\n        ) {\n          throw error;\n        }\n        throw new BlockchainError(\n          `Untrust server failed: ${error.message}`,\n          error,\n        );\n      }\n      throw new BlockchainError(\"Untrust server failed with unknown error\");\n    }\n  }\n\n  /**\n   * Gets all servers trusted by a user.\n   *\n   * @param userAddress - Optional user address (defaults to current user)\n   * @returns Promise resolving to array of trusted server addresses\n   */\n  async getTrustedServers(userAddress?: Address): Promise<Address[]> {\n    try {\n      const user = userAddress || (await this.getUserAddress());\n      const chainId = await this.context.walletClient.getChainId();\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      const serverIds = (await this.context.publicClient.readContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"userServerIdsValues\",\n        args: [user],\n      })) as Address[];\n\n      return serverIds;\n    } catch (error) {\n      throw new BlockchainError(\n        `Failed to get trusted servers: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Gets server information by server ID.\n   *\n   * @param serverId - Server address\n   * @returns Promise resolving to server information\n   */\n  async getServerInfo(serverId: Address): Promise<Server> {\n    try {\n      const chainId = await this.context.walletClient.getChainId();\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      const server = (await this.context.publicClient.readContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"servers\",\n        args: [serverId],\n      })) as Server;\n\n      return server;\n    } catch (error) {\n      throw new BlockchainError(\n        `Failed to get server info: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Gets the total count of trusted servers for a user.\n   *\n   * @param userAddress - Optional user address (defaults to current user)\n   * @returns Promise resolving to the number of trusted servers\n   */\n  async getTrustedServersCount(userAddress?: Address): Promise<number> {\n    try {\n      const user = userAddress || (await this.getUserAddress());\n      const chainId = await this.context.walletClient.getChainId();\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      const count = (await this.context.publicClient.readContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"userServerIdsLength\",\n        args: [user],\n      })) as bigint;\n\n      return Number(count);\n    } catch (error) {\n      throw new BlockchainError(\n        `Failed to get trusted servers count: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Gets trusted servers with pagination support.\n   *\n   * @param options - Query options including pagination parameters\n   * @returns Promise resolving to paginated trusted servers\n   */\n  async getTrustedServersPaginated(\n    options: TrustedServerQueryOptions = {},\n  ): Promise<PaginatedTrustedServers> {\n    try {\n      const user = options.userAddress || (await this.getUserAddress());\n      const limit = options.limit || 50;\n      const offset = options.offset || 0;\n\n      const chainId = await this.context.walletClient.getChainId();\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      // Get total count first\n      const totalCount = (await this.context.publicClient.readContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"userServerIdsLength\",\n        args: [user],\n      })) as bigint;\n\n      const total = Number(totalCount);\n\n      // If offset is beyond available servers, return empty result\n      if (offset >= total) {\n        return {\n          servers: [],\n          total,\n          offset,\n          limit,\n          hasMore: false,\n        };\n      }\n\n      // Calculate how many servers to fetch\n      const endIndex = Math.min(offset + limit, total);\n\n      // Fetch servers using userServerIdsAt for each index\n      const serverPromises: Promise<Address>[] = [];\n      for (let i = offset; i < endIndex; i++) {\n        const promise = this.context.publicClient.readContract({\n          address: DataPermissionsAddress,\n          abi: DataPermissionsAbi,\n          functionName: \"userServerIdsAt\",\n          args: [user, BigInt(i)],\n        }) as Promise<Address>;\n        serverPromises.push(promise);\n      }\n\n      const servers = await Promise.all(serverPromises);\n\n      return {\n        servers,\n        total,\n        offset,\n        limit,\n        hasMore: offset + limit < total,\n      };\n    } catch (error) {\n      throw new BlockchainError(\n        `Failed to get paginated trusted servers: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Gets trusted servers with their complete information.\n   *\n   * @param options - Query options\n   * @returns Promise resolving to array of trusted server info\n   */\n  async getTrustedServersWithInfo(\n    options: TrustedServerQueryOptions = {},\n  ): Promise<TrustedServerInfo[]> {\n    try {\n      // Get paginated server IDs\n      const paginatedResult = await this.getTrustedServersPaginated(options);\n\n      // Fetch server info for each server ID\n      const serverInfoPromises = paginatedResult.servers.map(\n        async (serverId, index) => {\n          try {\n            const serverInfo = await this.getServerInfo(serverId);\n            return {\n              serverId,\n              url: serverInfo.url,\n              isTrusted: true,\n              trustIndex: options.offset ? options.offset + index : index,\n            };\n          } catch {\n            // If we can't get server info, return basic info\n            return {\n              serverId,\n              url: \"\",\n              isTrusted: true,\n              trustIndex: options.offset ? options.offset + index : index,\n            };\n          }\n        },\n      );\n\n      return await Promise.all(serverInfoPromises);\n    } catch (error) {\n      throw new BlockchainError(\n        `Failed to get trusted servers with info: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Gets server information for multiple servers efficiently.\n   *\n   * @param serverIds - Array of server IDs to query\n   * @returns Promise resolving to batch result with successes and failures\n   */\n  async getServerInfoBatch(\n    serverIds: Address[],\n  ): Promise<BatchServerInfoResult> {\n    if (serverIds.length === 0) {\n      return {\n        servers: new Map(),\n        failed: [],\n      };\n    }\n\n    try {\n      const chainId = await this.context.walletClient.getChainId();\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      // Create promises for all server info requests\n      const serverInfoPromises = serverIds.map(async (serverId) => {\n        try {\n          const server = (await this.context.publicClient.readContract({\n            address: DataPermissionsAddress,\n            abi: DataPermissionsAbi,\n            functionName: \"servers\",\n            args: [serverId],\n          })) as Server;\n          return { serverId, server, success: true };\n        } catch {\n          return { serverId, server: null, success: false };\n        }\n      });\n\n      const results = await Promise.all(serverInfoPromises);\n\n      // Separate successful and failed requests\n      const servers = new Map<Address, { url: string }>();\n      const failed: Address[] = [];\n\n      for (const result of results) {\n        if (result.success && result.server) {\n          servers.set(result.serverId, result.server);\n        } else {\n          failed.push(result.serverId);\n        }\n      }\n\n      return { servers, failed };\n    } catch (error) {\n      throw new BlockchainError(\n        `Failed to batch get server info: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Checks whether a specific server is trusted by a user.\n   *\n   * @param serverId - Server ID to check\n   * @param userAddress - Optional user address (defaults to current user)\n   * @returns Promise resolving to server trust status\n   */\n  async checkServerTrustStatus(\n    serverId: Address,\n    userAddress?: Address,\n  ): Promise<ServerTrustStatus> {\n    try {\n      const user = userAddress || (await this.getUserAddress());\n      const trustedServers = await this.getTrustedServers(user);\n\n      const trustIndex = trustedServers.findIndex(\n        (server) => server.toLowerCase() === serverId.toLowerCase(),\n      );\n\n      return {\n        serverId,\n        isTrusted: trustIndex !== -1,\n        trustIndex: trustIndex !== -1 ? trustIndex : undefined,\n      };\n    } catch (error) {\n      throw new BlockchainError(\n        `Failed to check server trust status: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        error as Error,\n      );\n    }\n  }\n\n  /**\n   * Composes EIP-712 typed data for TrustServer.\n   *\n   * @param input - The trust server input data containing server details\n   * @returns Promise resolving to the typed data structure for server trust\n   */\n  private async composeTrustServerMessage(\n    input: TrustServerInput,\n  ): Promise<TrustServerTypedData> {\n    const domain = await this.getPermissionDomain();\n\n    return {\n      domain,\n      types: {\n        TrustServer: [\n          { name: \"nonce\", type: \"uint256\" },\n          { name: \"serverId\", type: \"address\" },\n          { name: \"serverUrl\", type: \"string\" },\n        ],\n      },\n      primaryType: \"TrustServer\",\n      message: input,\n    };\n  }\n\n  /**\n   * Composes EIP-712 typed data for UntrustServer.\n   *\n   * @param input - The untrust server input data containing server details\n   * @returns Promise resolving to the typed data structure for server untrust\n   */\n  private async composeUntrustServerMessage(\n    input: UntrustServerInput,\n  ): Promise<UntrustServerTypedData> {\n    const domain = await this.getPermissionDomain();\n\n    return {\n      domain,\n      types: {\n        UntrustServer: [\n          { name: \"nonce\", type: \"uint256\" },\n          { name: \"serverId\", type: \"address\" },\n        ],\n      },\n      primaryType: \"UntrustServer\",\n      message: input,\n    };\n  }\n\n  /**\n   * Submits a trust server transaction directly to the blockchain.\n   *\n   * @param trustServerInput - The trust server input data containing server details\n   * @param signature - The cryptographic signature for the transaction\n   * @returns Promise resolving to the transaction hash\n   */\n  private async submitTrustServerTransaction(\n    trustServerInput: TrustServerInput,\n    signature: Hash,\n  ): Promise<Hash> {\n    const chainId = await this.context.walletClient.getChainId();\n    const DataPermissionsAddress = getContractAddress(\n      chainId,\n      \"DataPermissions\",\n    );\n    const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n    const txHash = await this.context.walletClient.writeContract({\n      address: DataPermissionsAddress,\n      abi: DataPermissionsAbi,\n      functionName: \"trustServerWithSignature\",\n      args: [\n        {\n          nonce: trustServerInput.nonce,\n          serverId: trustServerInput.serverId,\n          serverUrl: trustServerInput.serverUrl,\n        },\n        signature,\n      ],\n      account:\n        this.context.walletClient.account || (await this.getUserAddress()),\n      chain: this.context.walletClient.chain || null,\n    });\n\n    return txHash;\n  }\n\n  /**\n   * Submits a revoke transaction directly to the blockchain with signature.\n   *\n   * @param typedData - The EIP-712 typed data structure for the revoke operation\n   * @param signature - The cryptographic signature authorizing the revoke\n   * @returns Promise resolving to the transaction hash\n   */\n  private async submitDirectRevokeTransaction(\n    typedData: GenericTypedData,\n    signature: Hash,\n  ): Promise<Hash> {\n    const chainId = await this.context.walletClient.getChainId();\n    const DataPermissionsAddress = getContractAddress(\n      chainId,\n      \"DataPermissions\",\n    );\n    const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n    const txHash = await this.context.walletClient.writeContract({\n      address: DataPermissionsAddress,\n      abi: DataPermissionsAbi,\n      functionName: \"revokePermissionWithSignature\",\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      args: [typedData.message as any, signature] as any,\n      account:\n        this.context.walletClient.account || (await this.getUserAddress()),\n      chain: this.context.walletClient.chain || null,\n    });\n\n    return txHash;\n  }\n\n  /**\n   * Submits an untrust server transaction with signature.\n   *\n   * @param typedData - The EIP-712 typed data structure for the untrust operation\n   * @param signature - The cryptographic signature authorizing the untrust\n   * @returns Promise resolving to the transaction hash\n   */\n  private async submitSignedUntrustTransaction(\n    typedData: GenericTypedData,\n    signature: Hash,\n  ): Promise<Hash> {\n    const chainId = await this.context.walletClient.getChainId();\n    const DataPermissionsAddress = getContractAddress(\n      chainId,\n      \"DataPermissions\",\n    );\n    const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n    // Submit with signature to verify user authorization\n    const txHash = await this.context.walletClient.writeContract({\n      address: DataPermissionsAddress,\n      abi: DataPermissionsAbi,\n      functionName: \"untrustServerWithSignature\",\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      args: [typedData.message as any, signature],\n      account:\n        this.context.walletClient.account || (await this.getUserAddress()),\n      chain: this.context.walletClient.chain || null,\n    });\n\n    return txHash;\n  }\n}\n","import { Address, getContract, decodeEventLog } from \"viem\";\n\nimport {\n  UserFile,\n  UploadEncryptedFileResult,\n  Schema,\n  Refiner,\n  AddSchemaParams,\n  AddSchemaResult,\n  AddRefinerParams,\n  AddRefinerResult,\n  UpdateSchemaIdParams,\n  UpdateSchemaIdResult,\n  TrustedServer,\n  GetUserTrustedServersParams,\n  GetUserTrustedServersResult,\n} from \"../types/index\";\nimport { ControllerContext } from \"./permissions\";\nimport { ServerController } from \"./server\";\nimport { getContractAddress } from \"../config/addresses\";\nimport { getAbi } from \"../abi\";\nimport {\n  generateEncryptionKey,\n  decryptUserData,\n  DEFAULT_ENCRYPTION_SEED,\n  encryptUserData,\n  encryptWithWalletPublicKey,\n  decryptWithWalletPrivateKey,\n} from \"../utils/encryption\";\nimport {\n  validateDataSchema,\n  validateDataAgainstSchema,\n  fetchAndValidateSchema,\n  SchemaValidationError,\n  type DataSchema,\n} from \"../utils/schemaValidation\";\n\n/**\n * GraphQL query response types for the new subgraph entities\n */\ninterface SubgraphFile {\n  id: string;\n  url: string;\n  schemaId: string;\n  addedAtBlock: string;\n  addedAtTimestamp: string;\n  transactionHash: string;\n  owner: {\n    id: string;\n  };\n}\n\ninterface SubgraphPermission {\n  id: string;\n  grant: string;\n  nonce: string;\n  signature: string;\n  addedAtBlock: string;\n  addedAtTimestamp: string;\n  transactionHash: string;\n  user: {\n    id: string;\n  };\n}\n\ninterface SubgraphTrustedServer {\n  id: string;\n  serverAddress: string;\n  serverUrl: string;\n  trustedAt: string;\n  user: {\n    id: string;\n  };\n}\n\ninterface SubgraphUser {\n  id: string;\n  files: SubgraphFile[];\n  permissions: SubgraphPermission[];\n  trustedServers: SubgraphTrustedServer[];\n}\n\ninterface SubgraphResponse {\n  data?: {\n    user?: SubgraphUser;\n  };\n  errors?: Array<{ message: string }>;\n}\n\n/**\n * Manages encrypted user data files and their blockchain registration on the Vana network.\n *\n * @remarks\n * This controller handles the complete file lifecycle from encrypted upload to\n * blockchain registration and decryption. It provides methods for querying user files,\n * uploading new encrypted content, managing file schemas, and handling permissions for\n * secure data sharing. All operations respect the user's privacy through client-side\n * encryption before any data leaves the user's device.\n *\n * The controller integrates with multiple storage providers (IPFS, Pinata, Google Drive)\n * and supports both gasless transactions via relayers and direct blockchain interaction.\n * File metadata and access permissions are stored on the Vana blockchain while encrypted\n * file content is stored on decentralized storage networks.\n * @example\n * ```typescript\n * // Upload an encrypted file with automatic schema validation\n * const result = await vana.data.uploadEncryptedFile(\n *   encryptedBlob,\n *   \"personal-data.json\"\n * );\n *\n * // Query files owned by a user\n * const files = await vana.data.getUserFiles({\n *   owner: \"0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36\",\n * });\n *\n * // Decrypt accessible file content\n * const decryptedData = await vana.data.decryptFile(files[0]);\n * ```\n * @category Data Management\n * @see {@link [URL_PLACEHOLDER] | Vana Data Registry Documentation} for conceptual overview\n */\nexport class DataController {\n  private readonly serverController: ServerController;\n\n  constructor(private readonly context: ControllerContext) {\n    this.serverController = new ServerController(context);\n  }\n\n  /**\n   * Retrieves all data files owned by a specific user address.\n   *\n   * @remarks\n   * This method queries the Vana subgraph to find files directly owned by the user.\n   * It efficiently handles large datasets by using the File entity's owner field\n   * and returns complete file metadata without additional contract calls.\n   * @param params - The query parameters object\n   * @param params.owner - The wallet address of the file owner to query\n   * @param params.subgraphUrl - Optional subgraph URL to override the default endpoint\n   * @returns A Promise that resolves to an array of UserFile objects with metadata\n   * @throws {Error} When the subgraph is unavailable or returns invalid data\n   * @example\n   * ```typescript\n   * // Query files for a specific user\n   * const files = await vana.data.getUserFiles({\n   *   owner: \"0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36\",\n   * });\n   *\n   * files.forEach(file => {\n   *   console.log(`File ${file.id}: ${file.url} (Schema: ${file.schemaId})`);\n   * });\n   * ```\n   */\n  async getUserFiles(params: {\n    owner: Address;\n    subgraphUrl?: string;\n  }): Promise<UserFile[]> {\n    const { owner, subgraphUrl } = params;\n\n    // Use provided subgraph URL or default from context\n    const graphqlEndpoint = subgraphUrl || this.context.subgraphUrl;\n\n    if (!graphqlEndpoint) {\n      throw new Error(\n        \"subgraphUrl is required. Please provide a valid subgraph endpoint or configure it in Vana constructor.\",\n      );\n    }\n\n    try {\n      // Query the subgraph for user's files using the new File entity\n      const query = `\n        query GetUserFiles($userId: ID!) {\n          user(id: $userId) {\n            id\n            files {\n              id\n              url\n              schemaId\n              addedAtBlock\n              addedAtTimestamp\n              transactionHash\n              owner {\n                id\n              }\n            }\n          }\n        }\n      `;\n\n      const response = await fetch(graphqlEndpoint, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          query,\n          variables: {\n            userId: owner.toLowerCase(), // Subgraph stores addresses in lowercase\n          },\n        }),\n      });\n\n      if (!response.ok) {\n        throw new Error(\n          `Subgraph request failed: ${response.status} ${response.statusText}`,\n        );\n      }\n\n      const result = (await response.json()) as SubgraphResponse;\n\n      if (result.errors) {\n        throw new Error(\n          `Subgraph errors: ${result.errors.map((e) => e.message).join(\", \")}`,\n        );\n      }\n\n      const user = result.data?.user;\n      if (!user || !user.files?.length) {\n        console.warn(\"No files found for user:\", owner);\n        return [];\n      }\n\n      // TODO: Investigate why this is necessary.\n      // Convert subgraph data to UserFile format and deduplicate by file ID\n      // Keep the latest entry for each unique file ID (highest timestamp)\n      const fileMap = new Map<number, UserFile>();\n\n      user.files.forEach((file) => {\n        const fileId = parseInt(file.id);\n        const userFile: UserFile = {\n          id: fileId,\n          url: file.url,\n          ownerAddress: file.owner.id as Address,\n          addedAtBlock: BigInt(file.addedAtBlock),\n          schemaId: parseInt(file.schemaId),\n          addedAtTimestamp: BigInt(file.addedAtTimestamp),\n          transactionHash: file.transactionHash as Address,\n        };\n\n        // Keep the file with the latest timestamp for each ID\n        const existing = fileMap.get(fileId);\n        if (\n          !existing ||\n          (userFile.addedAtTimestamp &&\n            existing.addedAtTimestamp &&\n            userFile.addedAtTimestamp > existing.addedAtTimestamp)\n        ) {\n          fileMap.set(fileId, userFile);\n        }\n      });\n\n      // Convert to array and sort by latest timestamp first\n      const userFiles: UserFile[] = Array.from(fileMap.values()).sort((a, b) =>\n        Number((b.addedAtTimestamp || 0n) - (a.addedAtTimestamp || 0n)),\n      );\n\n      // Successfully retrieved user files\n      return userFiles;\n    } catch (error) {\n      console.error(\"Failed to fetch user files from subgraph:\", error);\n      throw new Error(\n        `Failed to fetch user files from subgraph: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Retrieves a list of permissions granted by a user using the new subgraph entities.\n   *\n   * This method queries the Vana subgraph to find permissions directly granted by the user\n   * using the new Permission entity. It efficiently handles millions of permissions by:\n   * 1. Querying the subgraph for user's directly granted permissions\n   * 2. Returning complete permission information from subgraph\n   * 3. No need for additional contract calls as all data comes from subgraph\n   *\n   * @param params - Object containing the user address and optional subgraph URL\n   * @param params.user - The wallet address of the user to query permissions for\n   * @param params.subgraphUrl - Optional subgraph URL to override the default\n   * @returns Promise resolving to an array of permission objects\n   * @throws Error if subgraph is unavailable or returns invalid data\n   */\n  async getUserPermissions(params: {\n    user: Address;\n    subgraphUrl?: string;\n  }): Promise<\n    Array<{\n      id: string;\n      grant: string;\n      nonce: bigint;\n      signature: string;\n      addedAtBlock: bigint;\n      addedAtTimestamp: bigint;\n      transactionHash: Address;\n      user: Address;\n    }>\n  > {\n    const { user, subgraphUrl } = params;\n\n    // Use provided subgraph URL or default from context\n    const graphqlEndpoint = subgraphUrl || this.context.subgraphUrl;\n\n    if (!graphqlEndpoint) {\n      throw new Error(\n        \"subgraphUrl is required. Please provide a valid subgraph endpoint or configure it in Vana constructor.\",\n      );\n    }\n\n    try {\n      // Query the subgraph for user's permissions using the new Permission entity\n      const query = `\n        query GetUserPermissions($userId: ID!) {\n          user(id: $userId) {\n            id\n            permissions {\n              id\n              grant\n              nonce\n              signature\n              addedAtBlock\n              addedAtTimestamp\n              transactionHash\n              user {\n                id\n              }\n            }\n          }\n        }\n      `;\n\n      const response = await fetch(graphqlEndpoint, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          query,\n          variables: {\n            userId: user.toLowerCase(),\n          },\n        }),\n      });\n\n      if (!response.ok) {\n        throw new Error(\n          `Subgraph request failed: ${response.status} ${response.statusText}`,\n        );\n      }\n\n      const result = (await response.json()) as SubgraphResponse;\n\n      if (result.errors) {\n        throw new Error(\n          `Subgraph errors: ${result.errors.map((e) => e.message).join(\", \")}`,\n        );\n      }\n\n      const userData = result.data?.user;\n      if (!userData || !userData.permissions?.length) {\n        console.warn(\"No permissions found for user:\", user);\n        return [];\n      }\n\n      // Convert subgraph data directly to permission format\n      const permissions = userData.permissions\n        .map((permission) => ({\n          id: permission.id,\n          grant: permission.grant,\n          nonce: BigInt(permission.nonce),\n          signature: permission.signature,\n          addedAtBlock: BigInt(permission.addedAtBlock),\n          addedAtTimestamp: BigInt(permission.addedAtTimestamp),\n          transactionHash: permission.transactionHash as Address,\n          user: permission.user.id as Address,\n        }))\n        .sort((a, b) => Number(b.addedAtTimestamp - a.addedAtTimestamp)); // Latest first\n\n      // Successfully retrieved user permissions\n      return permissions;\n    } catch (error) {\n      console.error(\"Failed to fetch user permissions from subgraph:\", error);\n      throw new Error(\n        `Failed to fetch user permissions from subgraph: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Retrieves a list of trusted servers for a user using the new subgraph entities.\n   *\n   * This method queries the Vana subgraph to find trusted servers directly associated with the user\n   * with support for both subgraph and direct RPC queries.\n   *\n   * This method supports multiple query modes:\n   * - 'subgraph': Fast query via subgraph (requires subgraphUrl)\n   * - 'rpc': Direct contract queries (slower but no external dependencies)\n   * - 'auto': Try subgraph first, fallback to RPC if unavailable\n   *\n   * @param params - Query parameters including user address and mode selection\n   * @returns Promise resolving to trusted servers with metadata about the query\n   * @throws Error if query fails in both modes (when using 'auto')\n   * @example\n   * ```typescript\n   * // Use subgraph for fast queries\n   * const result = await vana.data.getUserTrustedServers({\n   *   user: '0x...',\n   *   mode: 'subgraph',\n   *   subgraphUrl: 'https://...'\n   * });\n   *\n   * // Use direct RPC (no external dependencies)\n   * const result = await vana.data.getUserTrustedServers({\n   *   user: '0x...',\n   *   mode: 'rpc',\n   *   limit: 10\n   * });\n   *\n   * // Auto-fallback mode\n   * const result = await vana.data.getUserTrustedServers({\n   *   user: '0x...',\n   *   mode: 'auto' // tries subgraph first, falls back to RPC\n   * });\n   * ```\n   */\n  async getUserTrustedServers(\n    params: GetUserTrustedServersParams,\n  ): Promise<GetUserTrustedServersResult> {\n    const { user, mode = \"auto\", limit = 50, offset = 0 } = params;\n    const warnings: string[] = [];\n\n    // Determine which query method to try first\n    let trySubgraph = false;\n    let tryRpc = false;\n\n    switch (mode) {\n      case \"subgraph\":\n        trySubgraph = true;\n        break;\n      case \"rpc\":\n        tryRpc = true;\n        break;\n      case \"auto\":\n        trySubgraph = true;\n        tryRpc = true; // fallback\n        break;\n    }\n\n    // Try subgraph query first (if enabled)\n    if (trySubgraph) {\n      const subgraphUrl = params.subgraphUrl || this.context.subgraphUrl;\n\n      // Check if subgraph URL is available\n      if (!subgraphUrl) {\n        if (mode === \"subgraph\") {\n          // If specifically requested subgraph mode, throw error\n          throw new Error(\n            \"subgraphUrl is required for subgraph mode. Please provide a valid subgraph endpoint or configure it in Vana constructor.\",\n          );\n        }\n\n        // In auto mode, add warning and skip to RPC\n        warnings.push(\n          \"Subgraph mode not available for trusted servers - using direct contract calls\",\n        );\n      } else {\n        try {\n          // Query trusted servers via subgraph\n          const servers = await this._getUserTrustedServersViaSubgraph({\n            user,\n            subgraphUrl,\n          });\n\n          // Apply pagination if provided\n          const paginatedServers = limit\n            ? servers.slice(offset, offset + limit)\n            : servers;\n\n          return {\n            servers: paginatedServers,\n            usedMode: \"subgraph\",\n            total: servers.length,\n            hasMore: limit ? offset + limit < servers.length : false,\n            warnings: warnings.length > 0 ? warnings : undefined,\n          };\n        } catch (error) {\n          if (mode === \"subgraph\") {\n            // If specifically requested subgraph mode, throw the error\n            throw error;\n          }\n\n          // In auto mode, log the warning and try RPC fallback\n          warnings.push(\n            `Subgraph query failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n          );\n          console.warn(\n            \"Subgraph query failed, falling back to RPC mode:\",\n            error,\n          );\n        }\n      }\n    }\n\n    // Try RPC query (if enabled or as fallback)\n    if (tryRpc) {\n      try {\n        const rpcResult = await this._getUserTrustedServersViaRpc({\n          user,\n          limit,\n          offset,\n        });\n\n        return {\n          servers: rpcResult.servers,\n          usedMode: \"rpc\",\n          total: rpcResult.total,\n          hasMore: rpcResult.hasMore,\n          warnings: warnings.length > 0 ? warnings : undefined,\n        };\n      } catch (error) {\n        if (mode === \"rpc\") {\n          // If specifically requested RPC mode, throw the error\n          throw error;\n        }\n\n        // In auto mode with subgraph already failed, throw combined error\n        throw new Error(\n          `Both query methods failed. Subgraph: ${warnings[0] || \"Unknown error\"}. RPC: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        );\n      }\n    }\n\n    throw new Error(\"Invalid query mode specified\");\n  }\n\n  /**\n   * Internal method: Query trusted servers via subgraph\n   *\n   * @param params - Query parameters object\n   * @param params.user - The user address to query trusted servers for\n   * @param params.subgraphUrl - The subgraph URL endpoint to query\n   * @returns Promise resolving to an array of trusted server objects\n   */\n  private async _getUserTrustedServersViaSubgraph(params: {\n    user: Address;\n    subgraphUrl?: string;\n  }): Promise<TrustedServer[]> {\n    const { user, subgraphUrl } = params;\n\n    const graphqlEndpoint = subgraphUrl;\n    if (!graphqlEndpoint) {\n      throw new Error(\n        \"subgraphUrl is required for subgraph mode. Please provide a valid subgraph endpoint or configure it in Vana constructor.\",\n      );\n    }\n\n    try {\n      // Query the subgraph for user's trusted servers\n      const query = `\n        query GetUserTrustedServers($userId: ID!) {\n          user(id: $userId) {\n            id\n            trustedServers {\n              id\n              serverAddress\n              serverUrl\n              trustedAt\n            }\n          }\n        }\n      `;\n\n      const response = await fetch(graphqlEndpoint, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          query,\n          variables: {\n            userId: user.toLowerCase(), // Subgraph stores addresses in lowercase\n          },\n        }),\n      });\n\n      if (!response.ok) {\n        throw new Error(\n          `Subgraph request failed: ${response.status} ${response.statusText}`,\n        );\n      }\n\n      const result = (await response.json()) as SubgraphResponse;\n\n      if (result.errors) {\n        throw new Error(\n          `Subgraph query errors: ${result.errors.map((e) => e.message).join(\", \")}`,\n        );\n      }\n\n      if (!result.data?.user) {\n        // User not found in subgraph, return empty array\n        return [];\n      }\n\n      // Map subgraph results to TrustedServer format\n      return (result.data.user.trustedServers || []).map((server) => ({\n        id: server.id,\n        serverAddress: server.serverAddress as Address,\n        serverUrl: server.serverUrl,\n        trustedAt: BigInt(server.trustedAt),\n        user,\n      }));\n    } catch (error) {\n      console.error(\"Failed to query trusted servers from subgraph:\", error);\n      throw error;\n    }\n  }\n\n  /**\n   * Internal method: Query trusted servers via direct RPC\n   *\n   * @param params - Query parameters object\n   * @param params.user - The user address to query trusted servers for\n   * @param params.limit - Maximum number of results to return\n   * @param params.offset - Number of results to skip for pagination\n   * @returns Promise resolving to pagination result with servers, total count, and hasMore flag\n   */\n  private async _getUserTrustedServersViaRpc(params: {\n    user: Address;\n    limit: number;\n    offset: number;\n  }): Promise<{\n    servers: TrustedServer[];\n    total: number;\n    hasMore: boolean;\n  }> {\n    const { user, limit, offset } = params;\n\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const DataPermissionsAddress = getContractAddress(\n        chainId,\n        \"DataPermissions\",\n      );\n      const DataPermissionsAbi = getAbi(\"DataPermissions\");\n\n      // Get total count first\n      const totalCount = (await this.context.publicClient.readContract({\n        address: DataPermissionsAddress,\n        abi: DataPermissionsAbi,\n        functionName: \"userServerIdsLength\",\n        args: [user],\n      })) as bigint;\n\n      const total = Number(totalCount);\n\n      if (total === 0 || offset >= total) {\n        return {\n          servers: [],\n          total,\n          hasMore: false,\n        };\n      }\n\n      // Calculate pagination\n      const endIndex = Math.min(offset + limit, total);\n\n      // Fetch server IDs using pagination\n      const serverIdPromises: Promise<Address>[] = [];\n      for (let i = offset; i < endIndex; i++) {\n        const promise = this.context.publicClient.readContract({\n          address: DataPermissionsAddress,\n          abi: DataPermissionsAbi,\n          functionName: \"userServerIdsAt\",\n          args: [user, BigInt(i)],\n        }) as Promise<Address>;\n        serverIdPromises.push(promise);\n      }\n\n      const serverIds = await Promise.all(serverIdPromises);\n\n      // Fetch server info for each ID\n      const serverInfoPromises = serverIds.map(async (serverId, index) => {\n        try {\n          const serverInfo = (await this.context.publicClient.readContract({\n            address: DataPermissionsAddress,\n            abi: DataPermissionsAbi,\n            functionName: \"servers\",\n            args: [serverId],\n          })) as { url: string };\n\n          return {\n            id: `${user.toLowerCase()}-${serverId.toLowerCase()}`,\n            serverAddress: serverId,\n            serverUrl: serverInfo.url,\n            trustedAt: BigInt(Date.now()), // RPC mode doesn't have timestamp, use current time\n            user,\n            trustIndex: offset + index,\n          };\n        } catch {\n          // If server info fails, return basic info\n          return {\n            id: `${user.toLowerCase()}-${serverId.toLowerCase()}`,\n            serverAddress: serverId,\n            serverUrl: \"\",\n            trustedAt: BigInt(Date.now()),\n            user,\n            trustIndex: offset + index,\n          };\n        }\n      });\n\n      const servers = await Promise.all(serverInfoPromises);\n\n      return {\n        servers,\n        total,\n        hasMore: offset + limit < total,\n      };\n    } catch (error) {\n      throw new Error(\n        `RPC query failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Gets the total number of files in the registry from the contract.\n   *\n   * @returns Promise resolving to the total file count\n   * @example\n   * ```typescript\n   * const totalFiles = await vana.data.getTotalFilesCount();\n   * console.log(`Total files in registry: ${totalFiles}`);\n   *\n   * // Use for pagination calculations\n   * const filesPerPage = 20;\n   * const totalPages = Math.ceil(totalFiles / filesPerPage);\n   * console.log(`Total pages: ${totalPages}`);\n   * ```\n   */\n  async getTotalFilesCount(): Promise<number> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRegistryAddress = getContractAddress(chainId, \"DataRegistry\");\n      const dataRegistryAbi = getAbi(\"DataRegistry\");\n\n      const dataRegistry = getContract({\n        address: dataRegistryAddress,\n        abi: dataRegistryAbi,\n        client: this.context.walletClient,\n      });\n\n      const count = await dataRegistry.read.filesCount();\n      return Number(count);\n    } catch (error) {\n      // Re-throw validation errors (like missing chain ID)\n      if (\n        error instanceof Error &&\n        error.message === \"Chain ID not available\"\n      ) {\n        throw error;\n      }\n\n      // Return 0 for contract errors\n      console.error(\"Failed to fetch total files count:\", error);\n      return 0;\n    }\n  }\n\n  /**\n   * Retrieves details for a specific file by its ID.\n   *\n   * @param fileId - The file ID to look up\n   * @returns Promise resolving to UserFile object\n   * @example\n   * ```typescript\n   * try {\n   *   const file = await vana.data.getFileById(123);\n   *   console.log('File details:', {\n   *     id: file.id,\n   *     url: file.url,\n   *     owner: file.ownerAddress,\n   *     addedAt: file.addedAtBlock\n   *   });\n   * } catch (error) {\n   *   console.error('File not found or error retrieving file:', error);\n   * }\n   * ```\n   *\n   * This method queries the DataRegistry contract directly\n   * to get file details for any file ID, regardless of user ownership.\n   * This is useful for file lookup functionality where users can search\n   * for specific files by ID.\n   */\n  async getFileById(fileId: number): Promise<UserFile> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRegistryAddress = getContractAddress(chainId, \"DataRegistry\");\n      const dataRegistryAbi = getAbi(\"DataRegistry\");\n\n      const dataRegistry = getContract({\n        address: dataRegistryAddress,\n        abi: dataRegistryAbi,\n        client: this.context.walletClient,\n      });\n\n      const fileDetails = await dataRegistry.read.files([BigInt(fileId)]);\n\n      if (!fileDetails) {\n        throw new Error(\"File not found\");\n      }\n\n      // Handle both array format (from contracts) and object format\n      if (Array.isArray(fileDetails)) {\n        const [id, url, ownerAddress, addedAtBlock] =\n          fileDetails as unknown as [bigint, string, Address, bigint];\n        if (id === BigInt(0)) {\n          throw new Error(\"File not found\");\n        }\n        return {\n          id: Number(id),\n          url: url,\n          ownerAddress: ownerAddress,\n          addedAtBlock: BigInt(addedAtBlock),\n        };\n      } else {\n        // Object format\n        if (!fileDetails.id || fileDetails.id === BigInt(0)) {\n          throw new Error(\"File not found\");\n        }\n        return {\n          id: Number(fileDetails.id),\n          ownerAddress: fileDetails.ownerAddress,\n          url: fileDetails.url,\n          addedAtBlock: BigInt(fileDetails.addedAtBlock),\n        };\n      }\n    } catch (error) {\n      console.error(\"Failed to fetch file by ID:\", error);\n      throw new Error(\n        `Failed to fetch file ${fileId}: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Uploads an encrypted file to storage and registers it on the blockchain.\n   *\n   * @param encryptedFile - The encrypted file blob to upload\n   * @param filename - Optional filename for the upload\n   * @param providerName - Optional storage provider to use\n   * @returns Promise resolving to upload result with file ID and storage URL\n   *\n   * This method handles the complete flow of:\n   * 1. Uploading the encrypted file to the specified storage provider\n   * 2. Registering the file URL on the DataRegistry contract via relayer\n   * 3. Returning the assigned file ID and storage URL\n   */\n  async uploadEncryptedFile(\n    encryptedFile: Blob,\n    filename?: string,\n    providerName?: string,\n  ): Promise<UploadEncryptedFileResult> {\n    try {\n      // Check if storage manager is available\n      if (!this.context.storageManager) {\n        throw new Error(\n          \"Storage manager not configured. Please provide storage providers in VanaConfig.\",\n        );\n      }\n\n      // Step 1: Upload encrypted file to storage\n      const uploadResult = await this.context.storageManager.upload(\n        encryptedFile,\n        filename,\n        providerName,\n      );\n\n      // Step 2: Register file on blockchain (either via relayer or direct)\n      const userAddress = await this.getUserAddress();\n\n      if (this.context.relayerCallbacks?.submitFileAddition) {\n        // Use callback for file addition\n        const result = await this.context.relayerCallbacks.submitFileAddition(\n          uploadResult.url,\n          userAddress,\n        );\n\n        return {\n          fileId: result.fileId,\n          url: uploadResult.url,\n          size: uploadResult.size,\n          transactionHash: result.transactionHash,\n        };\n      } else {\n        // Direct transaction (user pays gas)\n        const chainId = this.context.walletClient.chain?.id;\n        if (!chainId) {\n          throw new Error(\"Chain ID not available\");\n        }\n\n        const dataRegistryAddress = getContractAddress(chainId, \"DataRegistry\");\n        const dataRegistryAbi = getAbi(\"DataRegistry\");\n\n        const txHash = await this.context.walletClient.writeContract({\n          address: dataRegistryAddress,\n          abi: dataRegistryAbi,\n          functionName: \"addFile\",\n          args: [uploadResult.url],\n          account: this.context.walletClient.account || userAddress,\n          chain: this.context.walletClient.chain || null,\n        });\n\n        // Wait for transaction receipt to parse the FileAdded event\n        const receipt =\n          await this.context.publicClient.waitForTransactionReceipt({\n            hash: txHash,\n            timeout: 30_000, // 30 seconds timeout\n          });\n\n        // Parse the FileAdded event to get the actual fileId\n        let fileId = 0;\n        for (const log of receipt.logs) {\n          try {\n            const decoded = decodeEventLog({\n              abi: dataRegistryAbi,\n              data: log.data,\n              topics: log.topics,\n            });\n\n            if (decoded.eventName === \"FileAdded\") {\n              fileId = Number(decoded.args.fileId);\n              break;\n            }\n          } catch {\n            // Ignore logs that don't match our ABI\n            continue;\n          }\n        }\n\n        return {\n          fileId: fileId,\n          url: uploadResult.url,\n          size: uploadResult.size,\n          transactionHash: txHash,\n        };\n      }\n    } catch (error) {\n      console.error(\"Failed to upload encrypted file:\", error);\n      throw new Error(\n        `Upload failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Uploads an encrypted file to storage and registers it on the blockchain with a schema.\n   *\n   * @param encryptedFile - The encrypted file blob to upload\n   * @param schemaId - The schema ID to associate with the file\n   * @param filename - Optional filename for the upload\n   * @param providerName - Optional storage provider to use\n   * @returns Promise resolving to upload result with file ID and storage URL\n   *\n   * This method handles the complete flow of:\n   * 1. Uploading the encrypted file to the specified storage provider\n   * 2. Registering the file URL on the DataRegistry contract with a schema ID\n   * 3. Returning the assigned file ID and storage URL\n   */\n  async uploadEncryptedFileWithSchema(\n    encryptedFile: Blob,\n    schemaId: number,\n    filename?: string,\n    providerName?: string,\n  ): Promise<UploadEncryptedFileResult> {\n    try {\n      // Check if storage manager is available\n      if (!this.context.storageManager) {\n        throw new Error(\n          \"Storage manager not configured. Please provide storage providers in VanaConfig.\",\n        );\n      }\n\n      // Step 1: Upload encrypted file to storage\n      const uploadResult = await this.context.storageManager.upload(\n        encryptedFile,\n        filename,\n        providerName,\n      );\n\n      // Step 2: Register file on blockchain with schema\n      const userAddress = await this.getUserAddress();\n\n      if (this.context.relayerCallbacks?.submitFileAddition) {\n        // Gasless registration via relayer - need to update relayer to support schema\n        throw new Error(\n          \"Relayer does not yet support uploading files with schema. Please use direct transaction mode.\",\n        );\n      } else {\n        // Direct transaction (user pays gas)\n        const chainId = this.context.walletClient.chain?.id;\n        if (!chainId) {\n          throw new Error(\"Chain ID not available\");\n        }\n\n        const dataRegistryAddress = getContractAddress(chainId, \"DataRegistry\");\n        const dataRegistryAbi = getAbi(\"DataRegistry\");\n\n        const txHash = await this.context.walletClient.writeContract({\n          address: dataRegistryAddress,\n          abi: dataRegistryAbi,\n          functionName: \"addFileWithSchema\",\n          args: [uploadResult.url, BigInt(schemaId)],\n          account: this.context.walletClient.account || userAddress,\n          chain: this.context.walletClient.chain || null,\n        });\n\n        // Wait for transaction receipt to parse the FileAdded event\n        const receipt =\n          await this.context.publicClient.waitForTransactionReceipt({\n            hash: txHash,\n            timeout: 30_000, // 30 seconds timeout\n          });\n\n        // Parse the FileAdded event to get the actual fileId\n        let fileId = 0;\n        for (const log of receipt.logs) {\n          try {\n            const decoded = decodeEventLog({\n              abi: dataRegistryAbi,\n              data: log.data,\n              topics: log.topics,\n            });\n\n            if (decoded.eventName === \"FileAdded\") {\n              fileId = Number(decoded.args.fileId);\n              break;\n            }\n          } catch {\n            // Ignore logs that don't match our ABI\n            continue;\n          }\n        }\n\n        return {\n          fileId: fileId,\n          url: uploadResult.url,\n          size: uploadResult.size,\n          transactionHash: txHash,\n        };\n      }\n    } catch (error) {\n      console.error(\"Failed to upload encrypted file with schema:\", error);\n      throw new Error(\n        `Upload failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Decrypts a file that was encrypted using the Vana protocol.\n   *\n   * @param file - The UserFile object containing the file URL and metadata\n   * @param encryptionSeed - Optional custom encryption seed (defaults to Vana standard)\n   * @returns Promise resolving to the decrypted file as a Blob\n   *\n   * This method handles the complete flow of:\n   * 1. Generating the encryption key from the user's wallet signature\n   * 2. Fetching the encrypted file from the stored URL\n   * 3. Decrypting the file using the canonical Vana decryption method\n   */\n  async decryptFile(\n    file: UserFile,\n    encryptionSeed: string = DEFAULT_ENCRYPTION_SEED,\n  ): Promise<Blob> {\n    try {\n      // Step 1: Generate encryption key using the same method used for encryption\n      const encryptionKey = await generateEncryptionKey(\n        this.context.walletClient,\n        encryptionSeed,\n      );\n\n      // Step 2: Fetch the encrypted file from the URL\n      const fetchUrl = this.convertToDownloadUrl(file.url);\n      console.debug(\n        `Fetching encrypted file from URL: ${fetchUrl} (original: ${file.url})`,\n      );\n\n      const response = await fetch(fetchUrl);\n      if (!response.ok) {\n        if (response.status === 404) {\n          throw new Error(\n            \"File not found. The encrypted file may have been moved or deleted.\",\n          );\n        } else if (response.status === 403) {\n          throw new Error(\n            \"Access denied. You may not have permission to access this file.\",\n          );\n        } else {\n          throw new Error(\n            `Network error: ${response.status} ${response.statusText}`,\n          );\n        }\n      }\n\n      const encryptedBlob = await response.blob();\n      console.debug(\n        `Retrieved blob of size: ${encryptedBlob.size} bytes, type: ${encryptedBlob.type}`,\n      );\n\n      // Check if we got actual content\n      if (encryptedBlob.size === 0) {\n        throw new Error(\"File is empty or could not be retrieved.\");\n      }\n\n      // Step 3: Decrypt the file using the canonical Vana decryption method\n      const decryptedBlob = await decryptUserData(\n        encryptedBlob,\n        encryptionKey,\n        this.context.platform,\n      );\n\n      return decryptedBlob;\n    } catch (error) {\n      console.error(\"Failed to decrypt file:\", error);\n\n      // Provide user-friendly error messages\n      if (error instanceof Error) {\n        if (\n          error.message.includes(\"Session key decryption failed\") ||\n          error.message.includes(\"Error decrypting message\")\n        ) {\n          throw new Error(\n            \"Wrong encryption key. This file may have been encrypted with a different wallet or encryption seed. Try using the same wallet that originally encrypted this file.\",\n          );\n        } else if (\n          error.message.includes(\"Failed to fetch\") ||\n          error.message.includes(\"Network error\")\n        ) {\n          throw new Error(\n            \"Network error: Cannot access the file URL. The file may be stored on a server that's not accessible or has CORS restrictions.\",\n          );\n        } else if (error.message.includes(\"File not found\")) {\n          throw new Error(\n            \"File not found: The encrypted file is no longer available at the stored URL.\",\n          );\n        } else if (\n          error.message.includes(\"not a valid OpenPGP message\") ||\n          error.message.includes(\"does not conform to a valid OpenPGP format\")\n        ) {\n          throw new Error(\n            \"Invalid file format: This file doesn't appear to be encrypted with the Vana protocol.\",\n          );\n        }\n      }\n\n      throw error;\n    }\n  }\n\n  /**\n   * Registers a file URL directly on the blockchain with a schema ID.\n   *\n   * @param url - The URL of the file to register\n   * @param schemaId - The schema ID to associate with the file\n   * @returns Promise resolving to the file ID and transaction hash\n   *\n   * This method registers an existing file URL on the DataRegistry\n   * contract with a schema ID, without uploading any data.\n   */\n  async registerFileWithSchema(\n    url: string,\n    schemaId: number,\n  ): Promise<{ fileId: number; transactionHash: Address }> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRegistryAddress = getContractAddress(chainId, \"DataRegistry\");\n      const dataRegistryAbi = getAbi(\"DataRegistry\");\n      const userAddress = await this.getUserAddress();\n\n      const txHash = await this.context.walletClient.writeContract({\n        address: dataRegistryAddress,\n        abi: dataRegistryAbi,\n        functionName: \"addFileWithSchema\",\n        args: [url, BigInt(schemaId)],\n        account: this.context.walletClient.account || userAddress,\n        chain: this.context.walletClient.chain || null,\n      });\n\n      // Wait for transaction receipt to parse the FileAdded event\n      const receipt = await this.context.publicClient.waitForTransactionReceipt(\n        {\n          hash: txHash,\n          timeout: 30_000,\n        },\n      );\n\n      // Parse the FileAdded event to get the actual fileId\n      let fileId = 0;\n      for (const log of receipt.logs) {\n        try {\n          const decoded = decodeEventLog({\n            abi: dataRegistryAbi,\n            data: log.data,\n            topics: log.topics,\n          });\n\n          if (decoded.eventName === \"FileAdded\") {\n            fileId = Number(decoded.args.fileId);\n            break;\n          }\n        } catch {\n          continue;\n        }\n      }\n\n      return {\n        fileId,\n        transactionHash: txHash,\n      };\n    } catch (error) {\n      console.error(\"Failed to register file with schema:\", error);\n      throw new Error(\n        `Registration failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Converts IPFS and Google Drive URLs to direct download URLs for fetching.\n   *\n   * @param url - The URL to convert to a direct download URL\n   * @returns The converted direct download URL or the original URL if not a special URL\n   */\n  private convertToDownloadUrl(url: string): string {\n    // Handle IPFS URLs\n    if (url.startsWith(\"ipfs://\")) {\n      const hash = url.replace(\"ipfs://\", \"\");\n      return `https://ipfs.io/ipfs/${hash}`;\n    }\n\n    // Handle Google Drive URLs\n    if (url.includes(\"drive.google.com/file/d/\")) {\n      const fileIdMatch = url.match(/\\/file\\/d\\/([a-zA-Z0-9-_]+)/);\n      if (fileIdMatch) {\n        const fileId = fileIdMatch[1];\n        return `https://drive.google.com/uc?id=${fileId}&export=download`;\n      }\n    }\n\n    return url;\n  }\n\n  /**\n   * Gets the user's address from the wallet client.\n   *\n   * @returns Promise resolving to the user's wallet address\n   */\n  private async getUserAddress(): Promise<Address> {\n    const addresses = await this.context.walletClient.getAddresses();\n    if (addresses.length === 0) {\n      throw new Error(\"No addresses available in wallet client\");\n    }\n    return addresses[0];\n  }\n\n  /**\n   * Adds a file with permissions to the DataRegistry contract.\n   *\n   * @param url - The file URL to register\n   * @param ownerAddress - The address of the file owner\n   * @param permissions - Array of permissions to set for the file\n   * @returns Promise resolving to file ID and transaction hash\n   *\n   * This method handles the core logic of registering a file\n   * with specific permissions on the DataRegistry contract. It can be used\n   * by both direct transactions and relayer services.\n   */\n  async addFileWithPermissions(\n    url: string,\n    ownerAddress: Address,\n    permissions: Array<{ account: Address; key: string }> = [],\n  ): Promise<{\n    fileId: number;\n    transactionHash: string;\n  }> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRegistryAddress = getContractAddress(chainId, \"DataRegistry\");\n      const dataRegistryAbi = getAbi(\"DataRegistry\");\n\n      // Execute the transaction using the wallet client\n      const txHash = await this.context.walletClient.writeContract({\n        address: dataRegistryAddress,\n        abi: dataRegistryAbi,\n        functionName: \"addFileWithPermissions\",\n        args: [url, ownerAddress, permissions],\n        account: this.context.walletClient.account || ownerAddress,\n        chain: this.context.walletClient.chain || null,\n      });\n\n      // Wait for transaction receipt to parse the FileAdded event\n      const receipt = await this.context.publicClient.waitForTransactionReceipt(\n        {\n          hash: txHash,\n          timeout: 30_000, // 30 seconds timeout\n        },\n      );\n\n      // Parse the FileAdded event to get the actual fileId\n      let fileId = 0;\n      for (const log of receipt.logs) {\n        try {\n          const decoded = decodeEventLog({\n            abi: dataRegistryAbi,\n            data: log.data,\n            topics: log.topics,\n          });\n\n          if (decoded.eventName === \"FileAdded\") {\n            fileId = Number(decoded.args.fileId);\n            break;\n          }\n        } catch {\n          // Ignore logs that don't match our ABI\n          continue;\n        }\n      }\n\n      return {\n        fileId: fileId,\n        transactionHash: txHash,\n      };\n    } catch (error) {\n      console.error(\"Failed to add file with permissions:\", error);\n      throw new Error(\n        `Failed to add file with permissions: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Adds a new schema to the DataRefinerRegistry.\n   *\n   * @param params - Schema parameters including name, type, and definition URL\n   * @returns Promise resolving to the new schema ID and transaction hash\n   */\n  async addSchema(params: AddSchemaParams): Promise<AddSchemaResult> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRefinerRegistryAddress = getContractAddress(\n        chainId,\n        \"DataRefinerRegistry\",\n      );\n      const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n      const txHash = await this.context.walletClient.writeContract({\n        address: dataRefinerRegistryAddress,\n        abi: dataRefinerRegistryAbi,\n        functionName: \"addSchema\",\n        args: [params.name, params.type, params.definitionUrl],\n        account:\n          this.context.walletClient.account || (await this.getUserAddress()),\n        chain: this.context.walletClient.chain || null,\n      });\n\n      const receipt = await this.context.publicClient.waitForTransactionReceipt(\n        {\n          hash: txHash,\n          timeout: 30_000,\n        },\n      );\n\n      let schemaId = 0;\n      for (const log of receipt.logs) {\n        try {\n          const decoded = decodeEventLog({\n            abi: dataRefinerRegistryAbi,\n            data: log.data,\n            topics: log.topics,\n          });\n\n          if (decoded.eventName === \"SchemaAdded\") {\n            schemaId = Number(decoded.args.schemaId);\n            break;\n          }\n        } catch {\n          continue;\n        }\n      }\n\n      return {\n        schemaId,\n        transactionHash: txHash,\n      };\n    } catch (error) {\n      console.error(\"Failed to add schema:\", error);\n      throw new Error(\n        `Failed to add schema: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Retrieves a schema by its ID.\n   *\n   * @param schemaId - The schema ID to retrieve\n   * @returns Promise resolving to the schema information\n   */\n  async getSchema(schemaId: number): Promise<Schema> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRefinerRegistryAddress = getContractAddress(\n        chainId,\n        \"DataRefinerRegistry\",\n      );\n      const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n      const dataRefinerRegistry = getContract({\n        address: dataRefinerRegistryAddress,\n        abi: dataRefinerRegistryAbi,\n        client: this.context.walletClient,\n      });\n\n      const schemaData = await dataRefinerRegistry.read.schemas([\n        BigInt(schemaId),\n      ]);\n\n      if (!schemaData) {\n        throw new Error(\"Schema not found\");\n      }\n\n      return {\n        id: schemaId,\n        name: schemaData.name,\n        type: schemaData.typ,\n        definitionUrl: schemaData.definitionUrl,\n      };\n    } catch (error) {\n      console.error(\"Failed to get schema:\", error);\n      throw new Error(\n        `Failed to get schema ${schemaId}: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Gets the total number of schemas in the registry.\n   *\n   * @returns Promise resolving to the total schema count\n   */\n  async getSchemasCount(): Promise<number> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRefinerRegistryAddress = getContractAddress(\n        chainId,\n        \"DataRefinerRegistry\",\n      );\n      const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n      const dataRefinerRegistry = getContract({\n        address: dataRefinerRegistryAddress,\n        abi: dataRefinerRegistryAbi,\n        client: this.context.walletClient,\n      });\n\n      const count = await dataRefinerRegistry.read.schemasCount();\n      return Number(count);\n    } catch (error) {\n      console.error(\"Failed to get schemas count:\", error);\n      return 0;\n    }\n  }\n\n  /**\n   * Adds a new refiner to the DataRefinerRegistry.\n   *\n   * @param params - Refiner parameters including DLP ID, name, schema ID, and instruction URL\n   * @returns Promise resolving to the new refiner ID and transaction hash\n   */\n  async addRefiner(params: AddRefinerParams): Promise<AddRefinerResult> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRefinerRegistryAddress = getContractAddress(\n        chainId,\n        \"DataRefinerRegistry\",\n      );\n      const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n      const txHash = await this.context.walletClient.writeContract({\n        address: dataRefinerRegistryAddress,\n        abi: dataRefinerRegistryAbi,\n        functionName: \"addRefiner\",\n        args: [\n          BigInt(params.dlpId),\n          params.name,\n          BigInt(params.schemaId),\n          params.refinementInstructionUrl,\n        ],\n        account:\n          this.context.walletClient.account || (await this.getUserAddress()),\n        chain: this.context.walletClient.chain || null,\n      });\n\n      const receipt = await this.context.publicClient.waitForTransactionReceipt(\n        {\n          hash: txHash,\n          timeout: 30_000,\n        },\n      );\n\n      let refinerId = 0;\n      for (const log of receipt.logs) {\n        try {\n          const decoded = decodeEventLog({\n            abi: dataRefinerRegistryAbi,\n            data: log.data,\n            topics: log.topics,\n          });\n\n          if (decoded.eventName === \"RefinerAdded\") {\n            refinerId = Number(decoded.args.refinerId);\n            break;\n          }\n        } catch {\n          continue;\n        }\n      }\n\n      return {\n        refinerId,\n        transactionHash: txHash,\n      };\n    } catch (error) {\n      console.error(\"Failed to add refiner:\", error);\n      throw new Error(\n        `Failed to add refiner: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Retrieves a refiner by its ID.\n   *\n   * @param refinerId - The refiner ID to retrieve\n   * @returns Promise resolving to the refiner information\n   */\n  async getRefiner(refinerId: number): Promise<Refiner> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRefinerRegistryAddress = getContractAddress(\n        chainId,\n        \"DataRefinerRegistry\",\n      );\n      const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n      const dataRefinerRegistry = getContract({\n        address: dataRefinerRegistryAddress,\n        abi: dataRefinerRegistryAbi,\n        client: this.context.walletClient,\n      });\n\n      const refinerData = await dataRefinerRegistry.read.refiners([\n        BigInt(refinerId),\n      ]);\n\n      if (!refinerData) {\n        throw new Error(\"Refiner not found\");\n      }\n\n      return {\n        id: refinerId,\n        dlpId: Number(refinerData.dlpId),\n        owner: refinerData.owner,\n        name: refinerData.name,\n        schemaId: Number(refinerData.schemaId),\n        refinementInstructionUrl: refinerData.refinementInstructionUrl,\n      };\n    } catch (error) {\n      console.error(\"Failed to get refiner:\", error);\n      throw new Error(\n        `Failed to get refiner ${refinerId}: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Validates if a schema ID exists in the registry.\n   *\n   * @param schemaId - The schema ID to validate\n   * @returns Promise resolving to boolean indicating if the schema ID is valid\n   */\n  async isValidSchemaId(schemaId: number): Promise<boolean> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRefinerRegistryAddress = getContractAddress(\n        chainId,\n        \"DataRefinerRegistry\",\n      );\n      const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n      const dataRefinerRegistry = getContract({\n        address: dataRefinerRegistryAddress,\n        abi: dataRefinerRegistryAbi,\n        client: this.context.walletClient,\n      });\n\n      const isValid = await dataRefinerRegistry.read.isValidSchemaId([\n        BigInt(schemaId),\n      ]);\n      return isValid;\n    } catch (error) {\n      console.error(\"Failed to validate schema ID:\", error);\n      return false;\n    }\n  }\n\n  /**\n   * Gets the total number of refiners in the registry.\n   *\n   * @returns Promise resolving to the total refiner count\n   */\n  async getRefinersCount(): Promise<number> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRefinerRegistryAddress = getContractAddress(\n        chainId,\n        \"DataRefinerRegistry\",\n      );\n      const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n      const dataRefinerRegistry = getContract({\n        address: dataRefinerRegistryAddress,\n        abi: dataRefinerRegistryAbi,\n        client: this.context.walletClient,\n      });\n\n      const count = await dataRefinerRegistry.read.refinersCount();\n      return Number(count);\n    } catch (error) {\n      console.error(\"Failed to get refiners count:\", error);\n      return 0;\n    }\n  }\n\n  /**\n   * Updates the schema ID for an existing refiner.\n   *\n   * @param params - Parameters including refiner ID and new schema ID\n   * @returns Promise resolving to the transaction hash\n   */\n  async updateSchemaId(\n    params: UpdateSchemaIdParams,\n  ): Promise<UpdateSchemaIdResult> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRefinerRegistryAddress = getContractAddress(\n        chainId,\n        \"DataRefinerRegistry\",\n      );\n      const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n      const txHash = await this.context.walletClient.writeContract({\n        address: dataRefinerRegistryAddress,\n        abi: dataRefinerRegistryAbi,\n        functionName: \"updateSchemaId\",\n        args: [BigInt(params.refinerId), BigInt(params.newSchemaId)],\n        account:\n          this.context.walletClient.account || (await this.getUserAddress()),\n        chain: this.context.walletClient.chain || null,\n      });\n\n      await this.context.publicClient.waitForTransactionReceipt({\n        hash: txHash,\n        timeout: 30_000,\n      });\n\n      return {\n        transactionHash: txHash,\n      };\n    } catch (error) {\n      console.error(\"Failed to update schema ID:\", error);\n      throw new Error(\n        `Failed to update schema ID: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Uploads an encrypted file and grants permission to a party with a public key.\n   *\n   * This method handles the complete workflow:\n   * 1. Encrypts the file with the user's encryption key\n   * 2. Uploads the encrypted file to storage\n   * 3. Encrypts the user's encryption key with the provided public key\n   * 4. Registers the file with permissions\n   *\n   * @param data - The file data to encrypt and upload\n   * @param permissions - Array of permissions to grant, each with account address and public key\n   * @param filename - Optional filename for the upload\n   * @param providerName - Optional storage provider to use\n   * @returns Promise resolving to upload result with file ID and storage URL\n   */\n  async uploadFileWithPermissions(\n    data: Blob,\n    permissions: Array<{ account: Address; publicKey: string }>,\n    filename?: string,\n    providerName?: string,\n  ): Promise<UploadEncryptedFileResult> {\n    try {\n      // 1. Generate user's encryption key\n      const userEncryptionKey = await generateEncryptionKey(\n        this.context.walletClient,\n        DEFAULT_ENCRYPTION_SEED,\n      );\n\n      // 2. Encrypt data with user's key\n      const encryptedData = await encryptUserData(\n        data,\n        userEncryptionKey,\n        this.context.platform,\n      );\n\n      // 3. Upload the encrypted file\n      if (!this.context.storageManager) {\n        throw new Error(\n          \"Storage manager not configured. Please provide storage providers in VanaConfig.\",\n        );\n      }\n\n      const uploadResult = await this.context.storageManager.upload(\n        encryptedData,\n        filename,\n        providerName,\n      );\n\n      // 4. Get user address\n      const userAddress = await this.getUserAddress();\n\n      // 5. Encrypt user's encryption key for each permission\n      const encryptedPermissions = await Promise.all(\n        permissions.map(async (permission) => {\n          const encryptedKey = await encryptWithWalletPublicKey(\n            userEncryptionKey,\n            permission.publicKey,\n            this.context.platform,\n          );\n          return {\n            account: permission.account,\n            key: encryptedKey,\n          };\n        }),\n      );\n\n      // 6. Register file with permissions (either via relayer or direct)\n      let result;\n      if (this.context.relayerCallbacks?.submitFileAdditionWithPermissions) {\n        // Use callback for file addition with permissions\n        result =\n          await this.context.relayerCallbacks.submitFileAdditionWithPermissions(\n            uploadResult.url,\n            userAddress,\n            encryptedPermissions,\n          );\n      } else {\n        // Direct transaction\n        result = await this.addFileWithPermissions(\n          uploadResult.url,\n          userAddress,\n          encryptedPermissions,\n        );\n      }\n\n      return {\n        fileId: result.fileId,\n        url: uploadResult.url,\n        size: uploadResult.size,\n        transactionHash: result.transactionHash as `0x${string}`,\n      };\n    } catch (error) {\n      console.error(\"Failed to upload file with permissions:\", error);\n      throw new Error(\n        `Failed to upload file with permissions: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Adds a permission for a party to access an existing file.\n   *\n   * This method handles the complete workflow:\n   * 1. Gets the user's encryption key\n   * 2. Encrypts the user's encryption key with the provided public key\n   * 3. Adds the permission to the file\n   *\n   * @param fileId - The ID of the file to add permissions for\n   * @param account - The address of the account to grant permission to\n   * @param publicKey - The public key to encrypt the user's encryption key with\n   * @returns Promise resolving to the transaction hash\n   */\n  async addPermissionToFile(\n    fileId: number,\n    account: Address,\n    publicKey: string,\n  ): Promise<string> {\n    try {\n      // 1. Generate user's encryption key\n      const userEncryptionKey = await generateEncryptionKey(\n        this.context.walletClient,\n        DEFAULT_ENCRYPTION_SEED,\n      );\n\n      // 2. Encrypt user's encryption key with provided public key\n      const encryptedKey = await encryptWithWalletPublicKey(\n        userEncryptionKey,\n        publicKey,\n        this.context.platform,\n      );\n\n      // 3. Add permission to the file\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRegistryAddress = getContractAddress(chainId, \"DataRegistry\");\n      const dataRegistryAbi = getAbi(\"DataRegistry\");\n\n      const txHash = await this.context.walletClient.writeContract({\n        address: dataRegistryAddress,\n        abi: dataRegistryAbi,\n        functionName: \"addFilePermission\",\n        args: [BigInt(fileId), account, encryptedKey],\n        account:\n          this.context.walletClient.account || (await this.getUserAddress()),\n        chain: this.context.walletClient.chain || null,\n      });\n\n      return txHash;\n    } catch (error) {\n      console.error(\"Failed to add permission to file:\", error);\n      throw new Error(\n        `Failed to add permission to file: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Gets the encrypted key for a specific account's permission to access a file.\n   *\n   * @param fileId - The ID of the file\n   * @param account - The account address to get the permission for\n   * @returns Promise resolving to the encrypted key for that account\n   */\n  async getFilePermission(fileId: number, account: Address): Promise<string> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n      if (!chainId) {\n        throw new Error(\"Chain ID not available\");\n      }\n\n      const dataRegistryAddress = getContractAddress(chainId, \"DataRegistry\");\n      const dataRegistryAbi = getAbi(\"DataRegistry\");\n\n      const dataRegistry = getContract({\n        address: dataRegistryAddress,\n        abi: dataRegistryAbi,\n        client: this.context.walletClient,\n      });\n\n      const encryptedKey = await dataRegistry.read.filePermissions([\n        BigInt(fileId),\n        account,\n      ]);\n\n      return encryptedKey as string;\n    } catch (error) {\n      console.error(\"Failed to get file permission:\", error);\n      throw new Error(\n        `Failed to get file permission: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Gets the trusted server public key for a given server address.\n   * This method reads from the permissions contract to find servers and their public keys.\n   *\n   * @param serverAddress - The address of the trusted server\n   * @returns Promise resolving to the server's public key\n   */\n  async getTrustedServerPublicKey(serverAddress: Address): Promise<string> {\n    try {\n      // Use the ServerController to get the trusted server's public key\n      // via the Identity Server. The serverAddress represents the user's address\n      // whose personal server we want to encrypt data for.\n      return await this.serverController.getTrustedServerPublicKey(\n        serverAddress,\n      );\n    } catch (error) {\n      console.error(\"Failed to get trusted server public key:\", error);\n      throw new Error(\n        `Failed to get trusted server public key: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Decrypts a file that the user has permission to access using their private key.\n   *\n   * This method handles the complete workflow for servers or other permitted parties:\n   * 1. Gets the encrypted encryption key from file permissions\n   * 2. Decrypts the encryption key using the provided private key\n   * 3. Downloads and decrypts the file data\n   *\n   * @param file - The file to decrypt\n   * @param privateKey - The private key to decrypt the user's encryption key\n   * @param account - The account address that has permission (defaults to current wallet account)\n   * @returns Promise resolving to the decrypted file data\n   */\n  async decryptFileWithPermission(\n    file: UserFile,\n    privateKey: string,\n    account?: Address,\n  ): Promise<Blob> {\n    try {\n      // Use provided account or get current wallet account\n      const permissionAccount = account || (await this.getUserAddress());\n\n      // 1. Get the encrypted encryption key from file permissions\n      const encryptedKey = await this.getFilePermission(\n        file.id,\n        permissionAccount,\n      );\n\n      if (!encryptedKey) {\n        throw new Error(\n          `No permission found for account ${permissionAccount} to access file ${file.id}`,\n        );\n      }\n\n      // 2. Decrypt the encryption key using the private key\n      const userEncryptionKey = await decryptWithWalletPrivateKey(\n        encryptedKey,\n        privateKey,\n        this.context.platform,\n      );\n\n      // 3. Download the encrypted file\n      const response = await fetch(this.convertToDownloadUrl(file.url));\n      if (!response.ok) {\n        throw new Error(`Failed to download file: ${response.statusText}`);\n      }\n      const encryptedData = await response.blob();\n\n      // 4. Decrypt the file data using the user's encryption key\n      const decryptedData = await decryptUserData(\n        encryptedData,\n        userEncryptionKey,\n        this.context.platform,\n      );\n\n      return decryptedData;\n    } catch (error) {\n      console.error(\"Failed to decrypt file with permission:\", error);\n      throw new Error(\n        `Failed to decrypt file with permission: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Validates a data schema against the Vana meta-schema.\n   *\n   * @param schema - The data schema to validate\n   * @returns Assertion that schema is valid (throws if invalid)\n   * @throws SchemaValidationError if invalid\n   * @example\n   * ```typescript\n   * const schema = {\n   *   name: \"User Profile\",\n   *   version: \"1.0.0\",\n   *   dialect: \"json\",\n   *   schema: {\n   *     type: \"object\",\n   *     properties: {\n   *       name: { type: \"string\" },\n   *       age: { type: \"number\" }\n   *     }\n   *   }\n   * };\n   *\n   * vana.data.validateDataSchema(schema);\n   * ```\n   */\n  validateDataSchema(schema: unknown): asserts schema is DataSchema {\n    return validateDataSchema(schema);\n  }\n\n  /**\n   * Validates data against a JSON Schema from a data schema.\n   *\n   * @param data - The data to validate\n   * @param schema - The data schema containing the schema\n   * @returns Void (throws if validation fails)\n   * @throws SchemaValidationError if invalid\n   * @example\n   * ```typescript\n   * const schema = {\n   *   name: \"User Profile\",\n   *   version: \"1.0.0\",\n   *   dialect: \"json\",\n   *   schema: {\n   *     type: \"object\",\n   *     properties: {\n   *       name: { type: \"string\" },\n   *       age: { type: \"number\" }\n   *     },\n   *     required: [\"name\"]\n   *   }\n   * };\n   *\n   * const userData = { name: \"Alice\", age: 30 };\n   * vana.data.validateDataAgainstSchema(userData, schema);\n   * ```\n   */\n  validateDataAgainstSchema(data: unknown, schema: DataSchema): void {\n    return validateDataAgainstSchema(data, schema);\n  }\n\n  /**\n   * Fetches and validates a schema from a URL, then returns the parsed data schema.\n   *\n   * @param url - The URL to fetch the schema from\n   * @returns The validated data schema\n   * @throws SchemaValidationError if invalid or fetch fails\n   * @example\n   * ```typescript\n   * // Fetch and validate a schema from IPFS or HTTP\n   * const schema = await vana.data.fetchAndValidateSchema(\"https://example.com/schema.json\");\n   * console.log(schema.name, schema.dialect);\n   *\n   * // Use the schema to validate user data\n   * if (schema.dialect === \"json\") {\n   *   vana.data.validateDataAgainstSchema(userData, schema);\n   * }\n   * ```\n   */\n  async fetchAndValidateSchema(url: string): Promise<DataSchema> {\n    return fetchAndValidateSchema(url);\n  }\n\n  /**\n   * Retrieves a schema by ID and fetches its definition URL to get the full data schema.\n   *\n   * @param schemaId - The schema ID to retrieve and validate\n   * @returns The validated data schema\n   * @throws SchemaValidationError if schema is invalid\n   * @example\n   * ```typescript\n   * // Get schema from registry and validate its schema\n   * const schema = await vana.data.getValidatedSchema(123);\n   *\n   * // Use it to validate user data\n   * if (schema.dialect === \"json\") {\n   *   vana.data.validateDataAgainstSchema(userData, schema);\n   * }\n   * ```\n   */\n  async getValidatedSchema(schemaId: number): Promise<DataSchema> {\n    try {\n      // First get the schema metadata from the registry\n      const schema = await this.getSchema(schemaId);\n\n      // Then fetch and validate the full data schema from the definition URL\n      const dataSchema = await this.fetchAndValidateSchema(\n        schema.definitionUrl,\n      );\n\n      // Verify that the fetched schema name matches the on-chain name\n      if (dataSchema.name !== schema.name) {\n        throw new SchemaValidationError(\n          `Schema name mismatch: on-chain name \"${schema.name}\" does not match schema name \"${dataSchema.name}\"`,\n          [],\n        );\n      }\n\n      return dataSchema;\n    } catch (error) {\n      if (error instanceof SchemaValidationError) {\n        throw error;\n      }\n\n      console.error(\"Failed to get validated schema:\", error);\n      throw new SchemaValidationError(\n        `Failed to get validated schema ${schemaId}: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        [],\n      );\n    }\n  }\n}\n","import { Address } from \"viem\";\nimport {\n  PostRequestParams,\n  ReplicatePredictionResponse,\n  InitPersonalServerParams,\n  PersonalServerResponse,\n} from \"../types\";\nimport {\n  NetworkError,\n  SerializationError,\n  SignatureError,\n  PersonalServerError,\n} from \"../errors\";\nimport { ControllerContext } from \"./permissions\";\n\n/**\n * Manages interactions with Vana personal servers and identity infrastructure.\n *\n * @remarks\n * This controller handles communication with personal servers for data processing\n * and identity servers for public key derivation. It provides methods for posting\n * computation requests to personal servers, polling for results, and retrieving\n * cryptographic keys for secure data sharing. All server interactions use the\n * Replicate API infrastructure with proper authentication and error handling.\n *\n * Personal servers enable privacy-preserving computation on user data, while identity\n * servers provide deterministic key derivation for secure communication without\n * requiring servers to be online during key retrieval.\n * @example\n * ```typescript\n * // Post a request to a personal server\n * const response = await vana.server.postRequest({\n *   permissionId: 123,\n * });\n *\n * // Get a server's public key for encryption\n * const publicKey = await vana.server.getTrustedServerPublicKey(\n *   \"0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36\"\n * );\n *\n * // Poll for computation results\n * const result = await vana.server.pollStatus(response.urls.get);\n * ```\n * @category Server Management\n * @see {@link [URL_PLACEHOLDER] | Vana Personal Servers} for conceptual overview\n */\nexport class ServerController {\n  private readonly REPLICATE_API_URL =\n    \"https://api.replicate.com/v1/predictions\";\n  private readonly PERSONAL_SERVER_VERSION =\n    \"vana-com/personal-server:6dae0fead4017557a2e6bd020643359ac1769228a9cfe3bd2365eeeb9711610e\";\n  private readonly IDENTITY_SERVER_VERSION =\n    \"vana-com/identity-server:8e357fbeb87c0558b545809cabd0ef2f311082d8ce1f12b93cb8ad2f38cfbfd2\";\n\n  constructor(private readonly context: ControllerContext) {}\n\n  /**\n   * Posts a computation request to a user's personal server.\n   *\n   * @remarks\n   * This method submits a computation request to the specified user's personal server\n   * via the Replicate API. It creates a signed request with the user address and\n   * permission ID, then submits it for processing. The response includes URLs for\n   * polling results and canceling the computation if needed.\n   *\n   * The method requires a valid Replicate API token and uses the application's\n   * wallet client for request signing to ensure authenticity.\n   * @param params - The request parameters object\n   * @param params.permissionId - The permission ID authorizing this computation\n   * @returns A Promise that resolves to a prediction response with status and control URLs\n   * @throws {PersonalServerError} When server request fails or parameters are invalid\n   * @throws {SignatureError} When request signing fails\n   * @throws {NetworkError} When Replicate API communication fails\n   * @example\n   * ```typescript\n   * const response = await vana.server.postRequest({\n   *   permissionId: 123,\n   * });\n   *\n   * console.log(`Request submitted: ${response.id}`);\n   * console.log(`Poll for results: ${response.urls.get}`);\n   * ```\n   */\n  async postRequest(\n    params: PostRequestParams,\n  ): Promise<ReplicatePredictionResponse> {\n    try {\n      // Step 1: Validate parameters\n      this.validatePostRequestParams(params);\n\n      // Step 2: Create request JSON using the userAddress from params\n      const requestJson = this.createRequestJson(params);\n\n      // Step 4: Create signature locally\n      const signature = await this.createSignature(requestJson);\n\n      // Step 5: Prepare input for Replicate API\n      const replicateInput = {\n        replicate_api_token: this.getReplicateApiToken(),\n        signature,\n        request_json: requestJson,\n      };\n\n      // Step 6: Make request to Replicate API\n      console.debug(\"🔍 Debug - replicateInput\", replicateInput);\n      const response = await this.makeReplicateRequest(replicateInput);\n\n      return response;\n    } catch (error) {\n      if (error instanceof Error) {\n        // Re-throw known Vana errors directly\n        if (\n          error instanceof NetworkError ||\n          error instanceof SerializationError ||\n          error instanceof SignatureError ||\n          error instanceof PersonalServerError\n        ) {\n          throw error;\n        }\n        // Wrap unknown errors\n        throw new PersonalServerError(\n          `Personal server request failed: ${error.message}`,\n          error,\n        );\n      }\n      throw new PersonalServerError(\n        \"Personal server request failed with unknown error\",\n      );\n    }\n  }\n\n  /**\n   * Initializes the personal server and fetches user identity.\n   *\n   * @param params - The request parameters containing user address\n   * @returns Promise resolving to the user's identity information\n   */\n  async initPersonalServer(\n    params: InitPersonalServerParams,\n  ): Promise<PersonalServerResponse> {\n    try {\n      // Step 1: Validate parameters\n      this.validateInitPersonalServerParams(params);\n\n      // Step 2: Make request to personal server\n      const response = await this.makePersonalServerRequest(params);\n\n      // Step 3: Poll for results until completion\n      const result = await this.pollPersonalServerResult(response);\n\n      return result;\n    } catch (error) {\n      if (error instanceof Error) {\n        // Re-throw known Vana errors directly\n        if (\n          error instanceof NetworkError ||\n          error instanceof SerializationError ||\n          error instanceof PersonalServerError\n        ) {\n          throw error;\n        }\n        // Wrap unknown errors\n        throw new PersonalServerError(\n          `Personal server initialization failed: ${error.message}`,\n          error,\n        );\n      }\n      throw new PersonalServerError(\n        \"Personal server initialization failed with unknown error\",\n      );\n    }\n  }\n\n  /**\n   * Retrieves the public key for a user's personal server via the Identity Server.\n   *\n   * @remarks\n   * This method uses the Identity Server to deterministically derive the personal server's\n   * public key from the user's EVM address. This enables anyone to encrypt data for a\n   * specific user's server without requiring that server to be online. The Identity Server\n   * provides a reliable way to obtain encryption keys for secure data sharing across the\n   * Vana network.\n   *\n   * The derived public key is deterministic and consistent, allowing for predictable\n   * encryption workflows in decentralized applications.\n   * @param userAddress - The user's EVM address to derive the server public key for\n   * @returns A Promise that resolves to the server's public key as a hex string\n   * @throws {PersonalServerError} When user address is invalid or server lookup fails\n   * @throws {NetworkError} When Identity Server API request fails\n   * @example\n   * ```typescript\n   * // Get public key for encrypting data to a user's server\n   * const publicKey = await vana.server.getTrustedServerPublicKey(\n   *   \"0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36\"\n   * );\n   *\n   * // Use the public key for encryption\n   * const encryptedData = await encryptForServer(data, publicKey);\n   * ```\n   */\n  async getTrustedServerPublicKey(userAddress: Address): Promise<string> {\n    try {\n      // Step 1: Validate the user address\n      if (!userAddress || typeof userAddress !== \"string\") {\n        throw new PersonalServerError(\n          \"User address is required and must be a valid string\",\n        );\n      }\n\n      // Basic address validation\n      if (!userAddress.startsWith(\"0x\") || userAddress.length !== 42) {\n        throw new PersonalServerError(\n          \"User address must be a valid EVM address\",\n        );\n      }\n\n      // Step 2: Make request to Identity Server to get public key\n      const requestBody = {\n        version: this.IDENTITY_SERVER_VERSION,\n        input: {\n          user_address: userAddress,\n        },\n      };\n\n      console.debug(\"Identity Server Request for Public Key:\", {\n        url: this.REPLICATE_API_URL,\n        method: \"POST\",\n        body: requestBody,\n      });\n\n      const response = await fetch(this.REPLICATE_API_URL, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Token ${this.getReplicateApiToken()}`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify(requestBody),\n      });\n\n      if (!response.ok) {\n        const errorText = await response.text();\n        console.debug(\"Identity Server Error Response:\", {\n          status: response.status,\n          statusText: response.statusText,\n          error: errorText,\n        });\n        throw new NetworkError(\n          `Identity Server API request failed: ${response.status} ${response.statusText} - ${errorText}`,\n        );\n      }\n\n      const data = (await response.json()) as ReplicatePredictionResponse;\n      console.debug(\"Identity Server Success Response:\", data);\n\n      // Step 3: Poll for results until completion\n      const result = await this.pollIdentityServerResult({\n        id: data.id,\n        status: data.status,\n        urls: {\n          get: data.urls?.get || \"\",\n          cancel: data.urls?.cancel || \"\",\n        },\n        input: data.input,\n        output: data.output,\n        error: data.error,\n      });\n\n      return result;\n    } catch (error) {\n      if (error instanceof Error) {\n        // Re-throw known Vana errors directly\n        if (\n          error instanceof NetworkError ||\n          error instanceof PersonalServerError\n        ) {\n          throw error;\n        }\n        // Wrap unknown errors\n        throw new PersonalServerError(\n          `Failed to get trusted server public key: ${error.message}`,\n          error,\n        );\n      }\n      throw new PersonalServerError(\n        \"Failed to get trusted server public key with unknown error\",\n      );\n    }\n  }\n\n  /**\n   * Polls the status of a computation request for updates and results.\n   *\n   * @remarks\n   * This method checks the current status of a computation request by querying\n   * the Replicate API using the provided polling URL. It returns the current\n   * status, any available output, and error information. The method should be\n   * called periodically until the computation completes or fails.\n   *\n   * Common status values include: `starting`, `processing`, `succeeded`, `failed`, `canceled`.\n   * @param getUrl - The polling URL returned from the initial request submission\n   * @returns A Promise that resolves to the current prediction response with status and results\n   * @throws {NetworkError} When the polling request fails or returns invalid data\n   * @example\n   * ```typescript\n   * // Poll until completion\n   * let result = await vana.server.pollStatus(response.urls.get);\n   *\n   * while (result.status === \"processing\") {\n   *   await new Promise(resolve => setTimeout(resolve, 1000));\n   *   result = await vana.server.pollStatus(response.urls.get);\n   * }\n   *\n   * if (result.status === \"succeeded\") {\n   *   console.log(\"Computation completed:\", result.output);\n   * }\n   * ```\n   */\n  async pollStatus(getUrl: string): Promise<ReplicatePredictionResponse> {\n    try {\n      console.debug(\"Polling Replicate Status:\", getUrl);\n\n      const response = await fetch(getUrl, {\n        method: \"GET\",\n        headers: {\n          Authorization: `Token ${this.getReplicateApiToken()}`,\n          \"Content-Type\": \"application/json\",\n        },\n      });\n\n      if (!response.ok) {\n        const errorText = await response.text();\n        console.debug(\"Polling Error Response:\", {\n          status: response.status,\n          statusText: response.statusText,\n          error: errorText,\n        });\n        throw new NetworkError(\n          `Status polling failed: ${response.status} ${response.statusText} - ${errorText}`,\n        );\n      }\n\n      const data = (await response.json()) as ReplicatePredictionResponse;\n\n      console.debug(\"Polling Success Response:\", data);\n\n      // Transform Replicate response to our expected format\n      return {\n        id: data.id,\n        status: data.status,\n        urls: {\n          get: data.urls?.get || getUrl,\n          cancel: data.urls?.cancel || \"\",\n        },\n        input: data.input,\n        output: data.output,\n        error: data.error,\n      };\n    } catch (error) {\n      if (error instanceof NetworkError) {\n        throw error;\n      }\n      throw new NetworkError(\n        `Failed to poll status: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Validates the post request parameters.\n   *\n   * @param params - The post request parameters to validate\n   */\n  private validatePostRequestParams(params: PostRequestParams): void {\n    // Basic address validation\n    if (typeof params.permissionId !== \"number\" || params.permissionId <= 0) {\n      throw new PersonalServerError(\n        \"Permission ID is required and must be a valid positive number\",\n      );\n    }\n  }\n\n  /**\n   * Validates the init personal server parameters.\n   *\n   * @param params - The initialization parameters to validate\n   */\n  private validateInitPersonalServerParams(\n    params: InitPersonalServerParams,\n  ): void {\n    if (!params.userAddress || typeof params.userAddress !== \"string\") {\n      throw new PersonalServerError(\n        \"User address is required and must be a valid string\",\n      );\n    }\n\n    // Basic address validation\n    if (\n      !params.userAddress.startsWith(\"0x\") ||\n      params.userAddress.length !== 42\n    ) {\n      throw new PersonalServerError(\n        \"User address must be a valid Vana address\",\n      );\n    }\n  }\n\n  /**\n   * Creates the request JSON string for the personal server.\n   *\n   * @param params - The post request parameters to serialize\n   * @returns JSON string representation of the request data\n   */\n  private createRequestJson(params: PostRequestParams): string {\n    try {\n      const requestData = {\n        permission_id: params.permissionId,\n      };\n\n      return JSON.stringify(requestData);\n    } catch (error) {\n      throw new SerializationError(\n        `Failed to create request JSON: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Creates a signature for the request JSON.\n   *\n   * @param requestJson - The JSON string to sign\n   * @returns Promise resolving to the cryptographic signature\n   */\n  private async createSignature(requestJson: string): Promise<string> {\n    try {\n      console.debug(\"🔍 Debug - createSignature\", requestJson);\n\n      // Use applicationClient if available, fallback to walletClient\n      const client =\n        this.context.applicationClient || this.context.walletClient;\n\n      // Get the account from the wallet client\n      const account = client.account;\n      if (!account) {\n        throw new SignatureError(\"No account available for signing\");\n      }\n\n      // Only allow local accounts for signing\n      if (account.type !== \"local\") {\n        throw new SignatureError(\n          \"Only local accounts are supported for signing\",\n        );\n      }\n\n      // Sign locally using the account's signMessage method\n      const signature = await account.signMessage({\n        message: requestJson,\n      });\n\n      return signature;\n    } catch (error) {\n      if (error instanceof Error && error.message.includes(\"User rejected\")) {\n        throw new SignatureError(\"User rejected the signature request\");\n      }\n      throw new SignatureError(\n        `Failed to create signature: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Gets the Replicate API token from environment.\n   *\n   * @returns The Replicate API token from environment variables\n   */\n  private getReplicateApiToken(): string {\n    // Try server-side env var first, fallback to public for backwards compatibility\n    const token =\n      process.env.REPLICATE_API_TOKEN ||\n      process.env.NEXT_PUBLIC_REPLICATE_API_TOKEN;\n    if (!token) {\n      throw new PersonalServerError(\n        \"REPLICATE_API_TOKEN environment variable is required\",\n      );\n    }\n    return token;\n  }\n\n  /**\n   * Makes the request to the Replicate API.\n   *\n   * @param input - The input parameters for the Replicate API request\n   * @returns Promise resolving to the Replicate prediction response\n   */\n  private async makeReplicateRequest(\n    input: Record<string, unknown>,\n  ): Promise<ReplicatePredictionResponse> {\n    try {\n      const requestBody = {\n        version: this.PERSONAL_SERVER_VERSION,\n        input,\n      };\n\n      console.debug(\"Replicate Request:\", {\n        url: this.REPLICATE_API_URL,\n        method: \"POST\",\n        headers: {\n          Authorization: `Token ${this.getReplicateApiToken().substring(0, 10)}...`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: requestBody,\n      });\n\n      const response = await fetch(this.REPLICATE_API_URL, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Token ${this.getReplicateApiToken()}`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify(requestBody),\n      });\n\n      if (!response.ok) {\n        const errorText = await response.text();\n        console.debug(\"Replicate Error Response:\", {\n          status: response.status,\n          statusText: response.statusText,\n          error: errorText,\n        });\n        throw new NetworkError(\n          `Replicate API request failed: ${response.status} ${response.statusText} - ${errorText}`,\n        );\n      }\n\n      const data = (await response.json()) as ReplicatePredictionResponse;\n\n      console.debug(\"Replicate Success Response:\", data);\n\n      // Transform Replicate response to our expected format\n      return {\n        id: data.id,\n        status: data.status,\n        urls: {\n          get: data.urls?.get || \"\",\n          cancel: data.urls?.cancel || \"\",\n        },\n        input: data.input,\n        output: data.output,\n        error: data.error,\n      };\n    } catch (error) {\n      if (error instanceof NetworkError) {\n        throw error;\n      }\n      throw new NetworkError(\n        `Failed to make Replicate API request: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Makes the request to the personal server.\n   *\n   * @param params - The initialization parameters for the personal server\n   * @returns Promise resolving to the Replicate prediction response\n   */\n  private async makePersonalServerRequest(\n    params: InitPersonalServerParams,\n  ): Promise<ReplicatePredictionResponse> {\n    try {\n      const requestBody = {\n        version: this.IDENTITY_SERVER_VERSION,\n        input: {\n          user_address: params.userAddress,\n        },\n      };\n\n      console.debug(\"Personal Server Request:\", {\n        url: this.REPLICATE_API_URL,\n        method: \"POST\",\n        headers: {\n          Authorization: `Token ${this.getReplicateApiToken().substring(0, 10)}...`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: requestBody,\n      });\n\n      const response = await fetch(this.REPLICATE_API_URL, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Token ${this.getReplicateApiToken()}`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify(requestBody),\n      });\n\n      if (!response.ok) {\n        const errorText = await response.text();\n        console.debug(\"Personal Server Error Response:\", {\n          status: response.status,\n          statusText: response.statusText,\n          error: errorText,\n        });\n        throw new NetworkError(\n          `Personal Server API request failed: ${response.status} ${response.statusText} - ${errorText}`,\n        );\n      }\n\n      const data = (await response.json()) as ReplicatePredictionResponse;\n\n      console.debug(\"Personal Server Success Response:\", data);\n\n      // Transform Replicate response to our expected format\n      return {\n        id: data.id,\n        status: data.status,\n        urls: {\n          get: data.urls?.get || \"\",\n          cancel: data.urls?.cancel || \"\",\n        },\n        input: data.input,\n        output: data.output,\n        error: data.error,\n      };\n    } catch (error) {\n      if (error instanceof NetworkError) {\n        throw error;\n      }\n      throw new NetworkError(\n        `Failed to make Personal Server API request: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  /**\n   * Polls the identity server result until completion and extracts the public key.\n   *\n   * @param initialResponse - The initial response from the identity server\n   * @returns Promise resolving to the extracted public key\n   */\n  private async pollIdentityServerResult(\n    initialResponse: ReplicatePredictionResponse,\n  ): Promise<string> {\n    const maxAttempts = 60; // 60 seconds max\n    let attempts = 0;\n    let currentResponse = initialResponse;\n\n    while (attempts < maxAttempts) {\n      if (currentResponse.status === \"succeeded\") {\n        // Parse the output to extract public key information\n        const output = currentResponse.output;\n\n        // Parse the output string if it's a JSON string\n        let parsedOutput: Record<string, unknown>;\n        if (typeof output === \"string\") {\n          try {\n            parsedOutput = JSON.parse(output);\n          } catch {\n            throw new PersonalServerError(\n              \"Failed to parse Identity Server response as JSON\",\n            );\n          }\n        } else {\n          parsedOutput = output as Record<string, unknown>;\n        }\n\n        // Extract the personal server's public key\n        const personalServer = parsedOutput.personal_server as Record<\n          string,\n          unknown\n        >;\n        if (!personalServer || !personalServer.public_key) {\n          throw new PersonalServerError(\n            \"Identity Server response missing personal_server.public_key\",\n          );\n        }\n\n        return personalServer.public_key as string;\n      } else if (currentResponse.status === \"failed\") {\n        throw new PersonalServerError(\n          `Identity Server request failed: ${currentResponse.error || \"Unknown error\"}`,\n        );\n      } else if (currentResponse.status === \"canceled\") {\n        throw new PersonalServerError(\"Identity Server request was canceled\");\n      }\n\n      // Wait 1 second before next poll\n      await new Promise((resolve) => setTimeout(resolve, 1000));\n      attempts++;\n\n      // Poll for updated status\n      if (currentResponse.urls.get) {\n        currentResponse = await this.pollStatus(currentResponse.urls.get);\n      }\n    }\n\n    throw new PersonalServerError(\n      \"Identity Server request timed out after 60 seconds\",\n    );\n  }\n\n  /**\n   * Polls the personal server result until completion.\n   *\n   * @param initialResponse - The initial response from the personal server\n   * @returns Promise resolving to the personal server response data\n   */\n  private async pollPersonalServerResult(\n    initialResponse: ReplicatePredictionResponse,\n  ): Promise<PersonalServerResponse> {\n    const maxAttempts = 60; // 60 seconds max\n    let attempts = 0;\n    let currentResponse = initialResponse;\n\n    while (attempts < maxAttempts) {\n      if (currentResponse.status === \"succeeded\") {\n        // Parse the output to extract identity information\n        const output = currentResponse.output as Record<string, unknown>;\n\n        // Parse the output string if it's a JSON string\n        let parsedOutput: Record<string, unknown>;\n        if (typeof output === \"string\") {\n          try {\n            parsedOutput = JSON.parse(output);\n          } catch {\n            parsedOutput = output as Record<string, unknown>;\n          }\n        } else {\n          parsedOutput = output;\n        }\n\n        // Extract personal server information from the response\n        const personalServer = parsedOutput.personal_server as Record<\n          string,\n          unknown\n        >;\n        const derivedAddress = personalServer?.address as string;\n        const publicKey = personalServer?.public_key as string;\n\n        return {\n          userAddress: parsedOutput.user_address as string,\n          identity: {\n            metadata: {\n              derivedAddress: derivedAddress,\n              publicKey: publicKey,\n            },\n          },\n          timestamp: new Date().toISOString(),\n        };\n      } else if (currentResponse.status === \"failed\") {\n        throw new PersonalServerError(\n          `Personal server initialization failed: ${currentResponse.error || \"Unknown error\"}`,\n        );\n      } else if (currentResponse.status === \"canceled\") {\n        throw new PersonalServerError(\n          \"Personal server initialization was canceled\",\n        );\n      }\n\n      // Wait 1 second before next poll\n      await new Promise((resolve) => setTimeout(resolve, 1000));\n      attempts++;\n\n      // Poll for updated status\n      if (currentResponse.urls.get) {\n        currentResponse = await this.pollStatus(currentResponse.urls.get);\n      }\n    }\n\n    throw new PersonalServerError(\n      \"Personal server initialization timed out after 60 seconds\",\n    );\n  }\n}\n","/**\n * Canonical Vana Protocol Encryption Functions\n *\n * These functions define the standard way user data is encrypted/decrypted in Vana.\n * All applications should use these canonical functions to ensure compatibility\n * with existing encrypted data on the Vana network.\n *\n * This module uses the platform adapter pattern to provide consistent\n * encryption functionality across Node.js and browser environments.\n */\n\nimport type { WalletClient } from \"viem\";\nimport type { VanaPlatformAdapter } from \"../platform/interface\";\n\n/**\n * Default encryption seed message used throughout Vana protocol\n */\nexport const DEFAULT_ENCRYPTION_SEED =\n  \"Please sign to retrieve your encryption key\";\n\n/**\n * Generate an encryption key by signing the canonical Vana encryption seed\n *\n * This is the standard protocol function for creating encryption keys in Vana.\n * The signature serves as a symmetric encryption key for user data.\n *\n * @param wallet The user's wallet client for signing\n * @param seed Optional custom encryption seed (defaults to Vana standard)\n * @returns The signature that serves as the encryption key\n * @throws {Error} When wallet account is required but not provided\n * @example\n * ```typescript\n * const encryptionKey = await generateEncryptionKey(walletClient);\n * console.log('Generated encryption key:', encryptionKey);\n *\n * // Use with custom seed\n * const customKey = await generateEncryptionKey(walletClient, 'my-custom-seed');\n * ```\n */\nexport async function generateEncryptionKey(\n  wallet: WalletClient,\n  seed: string = DEFAULT_ENCRYPTION_SEED,\n): Promise<string> {\n  if (!wallet.account) {\n    throw new Error(\"Wallet account is required for encryption key generation\");\n  }\n\n  // Sign the encryption seed to generate a deterministic encryption key\n  const signature = await wallet.signMessage({\n    account: wallet.account,\n    message: seed,\n  });\n\n  return signature;\n}\n\n/**\n * Encrypt data with a wallet's public key using platform-appropriate cryptography\n *\n * @param data The data to encrypt (as string or Blob)\n * @param publicKey The public key for encryption\n * @param platformAdapter - The platform adapter for crypto operations\n * @returns The encrypted data\n */\nexport async function encryptWithWalletPublicKey(\n  data: string | Blob,\n  publicKey: string,\n  platformAdapter: VanaPlatformAdapter,\n): Promise<string> {\n  try {\n    const dataString = data instanceof Blob ? await data.text() : data;\n    return await platformAdapter.crypto.encryptWithWalletPublicKey(\n      dataString,\n      publicKey,\n    );\n  } catch (error) {\n    throw new Error(`Failed to encrypt with wallet public key: ${error}`);\n  }\n}\n\n/**\n * Decrypt data with a wallet's private key using platform-appropriate cryptography\n *\n * @param encryptedData The encrypted data\n * @param privateKey The private key for decryption\n * @param platformAdapter - The platform adapter for crypto operations\n * @returns The decrypted data as string\n */\nexport async function decryptWithWalletPrivateKey(\n  encryptedData: string,\n  privateKey: string,\n  platformAdapter: VanaPlatformAdapter,\n): Promise<string> {\n  try {\n    return await platformAdapter.crypto.decryptWithWalletPrivateKey(\n      encryptedData,\n      privateKey,\n    );\n  } catch (error) {\n    throw new Error(`Failed to decrypt with wallet private key: ${error}`);\n  }\n}\n\n/**\n * Encrypt a file key with a DLP's public key using platform-appropriate cryptography\n *\n * @param fileKey The symmetric key used to encrypt the file\n * @param publicKey The DLP's public key\n * @param platformAdapter - The platform adapter for crypto operations\n * @returns The encrypted key that can be stored on-chain\n */\nexport async function encryptFileKey(\n  fileKey: string,\n  publicKey: string,\n  platformAdapter: VanaPlatformAdapter,\n): Promise<string> {\n  try {\n    return await platformAdapter.crypto.encryptWithPublicKey(\n      fileKey,\n      publicKey,\n    );\n  } catch (error) {\n    throw new Error(`Failed to encrypt file key: ${error}`);\n  }\n}\n\n/**\n * Generate encryption parameters for secure file storage\n *\n * @param platformAdapter - The platform adapter for crypto operations\n * @returns An object containing the initialization vector and encryption key\n */\nexport async function getEncryptionParameters(\n  platformAdapter: VanaPlatformAdapter,\n): Promise<{\n  iv: string;\n  key: string;\n}> {\n  try {\n    // Generate a new key pair for encryption parameters\n    const keyPair = await platformAdapter.crypto.generateKeyPair();\n\n    // Use parts of the generated keys as IV and key\n    // In production, this would use proper key derivation\n    return {\n      iv: keyPair.publicKey.substring(0, 16),\n      key: keyPair.privateKey.substring(0, 32),\n    };\n  } catch (error) {\n    throw new Error(`Failed to generate encryption parameters: ${error}`);\n  }\n}\n\n/**\n * Decrypt data that was encrypted with the DLP's public key using platform-appropriate cryptography\n *\n * @param encryptedData The encrypted data\n * @param privateKey The private key corresponding to the public key used for encryption\n * @param platformAdapter - The platform adapter for crypto operations\n * @returns The decrypted data\n */\nexport async function decryptWithPrivateKey(\n  encryptedData: string,\n  privateKey: string,\n  platformAdapter: VanaPlatformAdapter,\n): Promise<string> {\n  try {\n    return await platformAdapter.crypto.decryptWithPrivateKey(\n      encryptedData,\n      privateKey,\n    );\n  } catch (error) {\n    throw new Error(`Failed to decrypt with private key: ${error}`);\n  }\n}\n\n/**\n * Encrypt user data using PGP with platform-appropriate configuration\n *\n * @param data The data to encrypt (string or Blob)\n * @param walletSignature The wallet signature to use as password\n * @param platformAdapter - The platform adapter for crypto operations\n * @returns The encrypted data as Blob\n */\nexport async function encryptUserData(\n  data: string | Blob,\n  walletSignature: string,\n  platformAdapter: VanaPlatformAdapter,\n): Promise<Blob> {\n  try {\n    // Convert data to binary for encryption\n    const dataBuffer =\n      data instanceof Blob\n        ? await data.arrayBuffer()\n        : new TextEncoder().encode(data);\n    const dataArray = new Uint8Array(dataBuffer);\n\n    // Use platform adapter's password-based encryption\n    const encrypted = await platformAdapter.crypto.encryptWithPassword(\n      dataArray,\n      walletSignature,\n    );\n\n    return new Blob([encrypted], {\n      type: \"application/octet-stream\",\n    });\n  } catch (error) {\n    throw new Error(`Failed to encrypt user data: ${error}`);\n  }\n}\n\n/**\n * Decrypt user data using PGP with platform-appropriate configuration\n *\n * @param encryptedData The encrypted data (string or Blob)\n * @param walletSignature The wallet signature to use as password\n * @param platformAdapter - The platform adapter for crypto operations\n * @returns The decrypted data as Blob\n */\nexport async function decryptUserData(\n  encryptedData: string | Blob,\n  walletSignature: string,\n  platformAdapter: VanaPlatformAdapter,\n): Promise<Blob> {\n  try {\n    // Convert encrypted data to proper format\n    const encryptedBuffer =\n      encryptedData instanceof Blob\n        ? await encryptedData.arrayBuffer()\n        : new TextEncoder().encode(encryptedData);\n    const encryptedArray = new Uint8Array(encryptedBuffer);\n\n    // Use platform adapter's password-based decryption\n    const decrypted = await platformAdapter.crypto.decryptWithPassword(\n      encryptedArray,\n      walletSignature,\n    );\n\n    // Convert decrypted data back to Blob\n    return new Blob([decrypted], { type: \"text/plain\" });\n  } catch (error) {\n    throw new Error(`Failed to decrypt user data: ${error}`);\n  }\n}\n\n/**\n * Generate a new key pair for asymmetric encryption\n *\n * @param platformAdapter - The platform adapter for crypto operations\n * @returns Promise resolving to public and private key pair\n */\nexport async function generateEncryptionKeyPair(\n  platformAdapter: VanaPlatformAdapter,\n): Promise<{\n  publicKey: string;\n  privateKey: string;\n}> {\n  try {\n    return await platformAdapter.crypto.generateKeyPair();\n  } catch (error) {\n    throw new Error(`Failed to generate encryption key pair: ${error}`);\n  }\n}\n\n/**\n * Generate a new PGP key pair with platform-appropriate configuration\n *\n * @param platformAdapter - The platform adapter for crypto operations\n * @param options - Key generation options\n * @param options.name - The name for the PGP key\n * @param options.email - The email for the PGP key\n * @param options.passphrase - Optional passphrase to protect the private key\n * @returns Promise resolving to public and private key pair\n */\nexport async function generatePGPKeyPair(\n  platformAdapter: VanaPlatformAdapter,\n  options?: {\n    name?: string;\n    email?: string;\n    passphrase?: string;\n  },\n): Promise<{ publicKey: string; privateKey: string }> {\n  try {\n    return await platformAdapter.pgp.generateKeyPair(options);\n  } catch (error) {\n    throw new Error(`Failed to generate PGP key pair: ${error}`);\n  }\n}\n","import type { Abi } from \"abitype\";\nimport {\n  getContract,\n  type GetContractReturnType,\n  type PublicClient,\n  type WalletClient,\n} from \"viem\";\nimport { type ContractAbis, getAbi, type VanaContract } from \"../abi\";\nimport type { VanaChainId, ContractInfo } from \"../types/index\";\nimport { getContractAddress, CONTRACT_ADDRESSES } from \"../config/addresses\";\nimport { createClient } from \"../core/client\";\nimport { vanaMainnet } from \"../config/chains\";\n\n// Cache for contract instances - keyed by contract name and chain ID\nconst contractCache = new Map<string, GetContractReturnType<Abi>>();\n\n// Export cache for testing\nexport const __contractCache = contractCache;\n\n/**\n * Creates a cache key for contract instances\n *\n * @param contract - The contract name to create a cache key for\n * @param chainId - The chain ID to include in the cache key\n * @returns A string cache key combining contract name and chain ID\n */\nfunction createCacheKey(contract: VanaContract, chainId: number): string {\n  return `${contract}:${chainId}`;\n}\n\n/**\n * Gets a typed contract instance for the specified contract name with full type inference.\n * This function provides complete type safety following viem's patterns.\n *\n * @param contract - Name of the contract to instantiate (must be a const assertion for full typing)\n * @param client - Optional viem client instance\n * @returns A fully typed contract instance with methods corresponding to the contract's ABI\n * @example\n * ```typescript\n * // Full type inference with const assertion\n * const dataRegistry = getContractController(\"DataRegistry\" as const, client);\n *\n * // Now dataRegistry has full type inference for all methods\n * const result = await dataRegistry.read.getFileCount(); // Type: bigint\n * await dataRegistry.write.addFile([url, proof]); // Typed parameters\n * ```\n */\nexport function getContractController<T extends VanaContract>(\n  contract: T,\n  client:\n    | PublicClient\n    | WalletClient\n    | ReturnType<typeof createClient> = createClient(),\n): GetContractReturnType<ContractAbis[T]> {\n  const chainId = client.chain?.id ?? vanaMainnet.id;\n  const cacheKey = createCacheKey(contract, chainId);\n\n  let controller = contractCache.get(cacheKey);\n\n  if (!controller) {\n    controller = getContract({\n      address: getContractAddress(chainId, contract),\n      abi: getAbi(contract),\n      client,\n    }) as GetContractReturnType<ContractAbis[T]>;\n\n    contractCache.set(cacheKey, controller);\n  }\n\n  return controller as GetContractReturnType<ContractAbis[T]>;\n}\n\n/**\n * Gets contract information (address and ABI) without creating a contract instance.\n * Useful for cases where you need contract details but don't want to create a client connection.\n *\n * @param contract - Name of the contract\n * @param chainId - Chain ID (defaults to Vana mainnet)\n * @returns Contract information with typed ABI\n * @example\n * ```typescript\n * const info = getContractInfo(\"DataRegistry\" as const, 14800);\n * console.log(info.address); // Typed as Address\n * console.log(info.abi); // Fully typed ABI\n * ```\n */\nexport function getContractInfo<T extends VanaContract>(\n  contract: T,\n  chainId: VanaChainId = vanaMainnet.id as VanaChainId,\n): ContractInfo<ContractAbis[T]> {\n  return {\n    address: getContractAddress(chainId, contract),\n    abi: getAbi(contract),\n  };\n}\n\n/**\n * Type-safe contract factory that creates contract instances with full type inference.\n * This provides an alternative API that's more explicit about typing.\n */\nexport class ContractFactory {\n  private readonly client:\n    | PublicClient\n    | WalletClient\n    | ReturnType<typeof createClient>;\n  private readonly chainId: number;\n\n  constructor(\n    client: PublicClient | WalletClient | ReturnType<typeof createClient>,\n  ) {\n    this.client = client;\n    try {\n      this.chainId = client.chain?.id ?? vanaMainnet.id;\n    } catch {\n      this.chainId = vanaMainnet.id;\n    }\n  }\n\n  /**\n   * Creates a typed contract instance\n   *\n   * @param contract - Contract name (use const assertion for full typing)\n   * @returns Fully typed contract instance\n   */\n  create<T extends VanaContract>(\n    contract: T,\n  ): GetContractReturnType<ContractAbis[T]> {\n    return getContractController(contract, this.client);\n  }\n\n  /**\n   * Gets contract information without creating an instance\n   *\n   * @param contract - Contract name\n   * @returns Contract information with typed ABI\n   */\n  getInfo<T extends VanaContract>(contract: T): ContractInfo<ContractAbis[T]> {\n    return getContractInfo(contract, this.chainId as VanaChainId);\n  }\n\n  /**\n   * Lists all available contracts for the current chain\n   *\n   * @returns Array of contract names available on this chain\n   */\n  getAvailableContracts(): VanaContract[] {\n    // Return all contract names that have addresses on this chain\n    const chainAddresses = CONTRACT_ADDRESSES[this.chainId];\n    if (!chainAddresses) return [];\n\n    return Object.keys(chainAddresses) as VanaContract[];\n  }\n}\n\n/**\n * Clears the contract cache. Useful for testing or when chain configurations change.\n *\n * @param contract - Optional specific contract to clear, or clear all if not provided\n * @param chainId - Optional specific chain to clear, or clear all if not provided\n */\nexport function clearContractCache(\n  contract?: VanaContract,\n  chainId?: number,\n): void {\n  if (contract && chainId) {\n    const cacheKey = createCacheKey(contract, chainId);\n    contractCache.delete(cacheKey);\n  } else if (contract) {\n    // Clear all instances of this contract across all chains\n    for (const key of contractCache.keys()) {\n      if (key.startsWith(`${contract}:`)) {\n        contractCache.delete(key);\n      }\n    }\n  } else if (chainId) {\n    // Clear all contracts for this chain\n    for (const key of contractCache.keys()) {\n      if (key.endsWith(`:${chainId}`)) {\n        contractCache.delete(key);\n      }\n    }\n  } else {\n    // Clear entire cache\n    contractCache.clear();\n  }\n}\n\n// Function is already exported above, no need for redundant export\n\n// Type-only exports for enhanced type safety\nexport type { GetContractReturnType } from \"viem\";\n","import {\n  Chain,\n  createPublicClient,\n  http,\n  Account,\n  createWalletClient as viemCreateWalletClient,\n  PublicClient,\n  WalletClient,\n} from \"viem\";\nimport { chains, mokshaTestnet } from \"../config/chains\";\n\nexport const defaultFromBlock = BigInt(292220); // No need to query earlier than this\n\n// Cache for clients\nlet _client: PublicClient & { chain: Chain };\n\nexport const createClient = (\n  chainId: keyof typeof chains = mokshaTestnet.id,\n): PublicClient & { chain: Chain } => {\n  if (!_client || _client.chain?.id !== chainId) {\n    const chain = chains[chainId];\n    if (!chain) {\n      throw new Error(`Chain ${chainId} not found`);\n    }\n\n    _client = createPublicClient({\n      chain,\n      transport: http(),\n    });\n  }\n\n  return _client;\n};\n\nexport const createWalletClient = (\n  chainId: keyof typeof chains = mokshaTestnet.id,\n  account?: Account,\n): WalletClient => {\n  const chain = chains[chainId];\n  if (!chain) {\n    throw new Error(`Chain ${chainId} not found`);\n  }\n\n  return viemCreateWalletClient({\n    chain,\n    transport: http(),\n    account,\n  });\n};\n","import type { Abi, Chain } from \"viem\";\nimport { defineChain } from \"viem\";\n\nexport const mokshaTestnet = defineChain({\n  id: 14800,\n  caipNetworkId: \"eip155:14800\",\n  chainNamespace: \"eip155\",\n  name: \"Moksha Testnet\",\n  nativeCurrency: {\n    name: \"VANA\",\n    symbol: \"VANA\",\n    decimals: 18,\n  },\n  rpcUrls: {\n    default: {\n      http: [\"https://rpc.moksha.vana.org\"],\n    },\n  },\n  blockExplorers: {\n    default: {\n      url: \"https://moksha.vanascan.io\",\n      name: \"Vanascan - Moksha\",\n    },\n    blockscout: {\n      url: \"https://moksha.vanascan.io\",\n      name: \"Vanascan - Moksha\",\n    },\n  },\n  contracts: {},\n  abis: {},\n});\n\nexport const vanaMainnet = defineChain({\n  id: 1480,\n  caipNetworkId: \"eip155:1480\",\n  chainNamespace: \"eip155\",\n  name: \"Vana\",\n  nativeCurrency: {\n    name: \"VANA\",\n    symbol: \"VANA\",\n    decimals: 18,\n  },\n  rpcUrls: {\n    default: {\n      http: [\"https://rpc.vana.org\"],\n    },\n  },\n  blockExplorers: {\n    default: {\n      url: \"https://vanascan.io\",\n      name: \"Vanascan\",\n    },\n    blockscout: {\n      url: \"https://vanascan.io\",\n      name: \"Vanascan\",\n    },\n  },\n  contracts: {},\n  abis: {},\n});\n\nexport interface Chains {\n  [key: number]: Chain & { abis?: Record<string, Abi> };\n}\n\nexport const chains: Chains = {\n  [mokshaTestnet.id]: mokshaTestnet,\n  [vanaMainnet.id]: vanaMainnet,\n};\n","import type { ContractInfo, VanaChainId } from \"../types/index\";\nimport type { VanaContract } from \"../abi\";\nimport { ContractNotFoundError } from \"../errors\";\nimport {\n  getContractController,\n  getContractInfo,\n  ContractFactory,\n} from \"../contracts/contractController\";\nimport { ContractAbis } from \"../abi\";\nimport { ControllerContext } from \"./permissions\";\nimport type { GetContractReturnType } from \"viem\";\n\n/**\n * Provides direct, low-level access to all Vana protocol smart contracts.\n *\n * @remarks\n * This controller serves as the designated \"escape hatch\" for advanced developers who need\n * to interact directly with the underlying blockchain contracts. It provides access to\n * contract addresses, ABIs, and factory methods for creating typed contract instances.\n * Most developers should use the higher-level DataController and PermissionsController\n * instead of this advanced API.\n *\n * The controller automatically handles chain detection and provides only contracts that\n * are deployed on the current network. All contract instances are fully typed for\n * enhanced developer experience and type safety.\n *\n * **Use this controller when:**\n * - High-level controllers don't provide needed functionality\n * - You need direct contract method calls or event access\n * - You're building custom integrations or tooling\n * - You need advanced querying capabilities\n *\n * **Most developers should use instead:**\n * - `vana.data.*` for file management operations\n * - `vana.permissions.*` for access control workflows\n * @example\n * ```typescript\n * // Get contract info for direct interaction\n * const registry = vana.protocol.getContract(\"DataRegistry\" as const);\n *\n * // Access contract address and ABI with full typing\n * console.log(registry.address); // Contract address on current chain\n * console.log(registry.abi);     // Fully typed contract ABI\n *\n * // Create a typed contract instance\n * const contract = vana.protocol.createContract(\"DataRegistry\" as const);\n * const fileCount = await contract.read.filesCount();\n * ```\n * @category Advanced\n * @see {@link [URL_PLACEHOLDER] | Vana Protocol Contracts} for contract specifications\n */\nexport class ProtocolController {\n  private readonly contractFactory: ContractFactory;\n\n  constructor(private readonly context: ControllerContext) {\n    this.contractFactory = new ContractFactory(context.walletClient);\n  }\n\n  /**\n   * Retrieves the address and ABI for a specific Vana protocol contract.\n   *\n   * @remarks\n   * This method provides direct access to contract addresses and ABIs for the current\n   * chain. It includes full TypeScript type inference when using const assertions,\n   * enabling type-safe contract interactions. The method only returns contracts that\n   * are actually deployed on the current network.\n   * @param contractName - The name of the Vana contract to retrieve (use const assertion for full typing)\n   * @returns An object containing the contract's address and fully typed ABI\n   * @throws {ContractNotFoundError} When the contract is not deployed on the current chain\n   * @example\n   * ```typescript\n   * // Get contract info with full type inference\n   * const dataRegistry = vana.protocol.getContract(\"DataRegistry\" as const);\n   *\n   * // Now dataRegistry.abi is fully typed for the DataRegistry contract\n   * console.log(dataRegistry.address); // \"0x123...\"\n   * console.log(dataRegistry.abi.length); // Full ABI array\n   * ```\n   */\n  getContract<T extends VanaContract>(\n    contractName: T,\n  ): ContractInfo<ContractAbis[T]> {\n    try {\n      const chainId = this.context.walletClient.chain?.id;\n\n      if (!chainId) {\n        throw new ContractNotFoundError(contractName, 0);\n      }\n\n      return getContractInfo(contractName, chainId as VanaChainId);\n    } catch (error) {\n      if (error instanceof ContractNotFoundError) {\n        throw error;\n      }\n      if (error instanceof Error) {\n        if (error.message.includes(\"Contract address not found\")) {\n          let chainId = 0;\n          try {\n            chainId = this.context.walletClient.chain?.id || 0;\n          } catch {\n            // Use 0 as fallback if chain ID access fails\n            chainId = 0;\n          }\n          throw new ContractNotFoundError(contractName, chainId);\n        }\n        throw error;\n      }\n      throw new Error(`Failed to get contract ${contractName}: Unknown error`);\n    }\n  }\n\n  /**\n   * Creates a fully typed contract instance ready for blockchain interaction.\n   *\n   * @remarks\n   * This method creates a contract instance with complete type safety for all contract\n   * methods including read operations, write operations, and event handling. The instance\n   * is pre-configured with the correct address, ABI, and wallet client for immediate use.\n   * All method parameters and return types are fully typed based on the contract ABI.\n   * @param contractName - The name of the Vana contract (use const assertion for full typing)\n   * @returns A fully typed contract instance with read/write methods and event handling\n   * @throws {ContractNotFoundError} When the contract is not deployed on the current chain\n   * @example\n   * ```typescript\n   * // Create typed contract instance\n   * const dataRegistry = vana.protocol.createContract(\"DataRegistry\" as const);\n   *\n   * // Full type safety for all operations\n   * const fileCount = await dataRegistry.read.filesCount(); // Type: bigint\n   * const txHash = await dataRegistry.write.addFile([\"ipfs://...\"]); // Typed parameters\n   *\n   * // Listen to events with full typing\n   * const logs = await dataRegistry.getEvents.FileAdded();\n   * ```\n   */\n  createContract<T extends VanaContract>(\n    contractName: T,\n  ): GetContractReturnType<ContractAbis[T]> {\n    try {\n      return getContractController(contractName, this.context.walletClient);\n    } catch (error) {\n      if (error instanceof Error) {\n        if (error.message.includes(\"Contract address not found\")) {\n          const chainId = this.context.walletClient.chain?.id || 0;\n          throw new ContractNotFoundError(contractName, chainId);\n        }\n        throw error;\n      }\n      throw new Error(\n        `Failed to create contract ${contractName}: Unknown error`,\n      );\n    }\n  }\n\n  /**\n   * Gets all available contract names that can be used with getContract().\n   * Returns only contracts that are actually deployed on the current chain.\n   *\n   * @returns Array of all available contract names for the current chain\n   */\n  getAvailableContracts(): VanaContract[] {\n    return this.contractFactory.getAvailableContracts();\n  }\n\n  /**\n   * Checks if a specific contract is available on the current chain.\n   *\n   * @param contractName - The contract name to check\n   * @returns Whether the contract is deployed on the current chain\n   */\n  isContractAvailable(contractName: VanaContract): boolean {\n    const availableContracts = this.getAvailableContracts();\n    return availableContracts.includes(contractName);\n  }\n\n  /**\n   * Gets the contract factory instance for advanced usage.\n   * This provides access to additional contract management methods.\n   *\n   * @returns The contract factory instance\n   */\n  getContractFactory(): ContractFactory {\n    return this.contractFactory;\n  }\n\n  /**\n   * Gets the current chain ID from the wallet client.\n   *\n   * @returns The chain ID\n   */\n  getChainId(): number {\n    const chainId = this.context.walletClient.chain?.id;\n    if (!chainId) {\n      throw new Error(\"Chain ID not available from wallet client\");\n    }\n    return chainId;\n  }\n\n  /**\n   * Gets the current chain name from the wallet client.\n   *\n   * @returns The chain name\n   */\n  getChainName(): string {\n    const chainName = this.context.walletClient.chain?.name;\n    if (!chainName) {\n      throw new Error(\"Chain name not available from wallet client\");\n    }\n    return chainName;\n  }\n}\n","/**\n * Google Drive Storage Provider for Vana SDK\n *\n * Implements storage interface for Google Drive using OAuth2 authentication.\n * Based on patterns from dlp-ui-template with NextAuth integration.\n */\n\nimport {\n  StorageProvider,\n  StorageUploadResult,\n  StorageFile,\n  StorageListOptions,\n  StorageProviderConfig,\n  StorageError,\n} from \"../index\";\n\nexport interface GoogleDriveConfig {\n  /** OAuth2 access token */\n  accessToken: string;\n  /** Optional refresh token for token renewal */\n  refreshToken?: string;\n  /** OAuth2 client ID */\n  clientId?: string;\n  /** OAuth2 client secret */\n  clientSecret?: string;\n  /** Parent folder ID to upload files to */\n  folderId?: string;\n}\n\ninterface GoogleDriveFile {\n  id: string;\n  name: string;\n  webViewLink: string;\n  size: string;\n  mimeType: string;\n  createdTime: string;\n}\n\ninterface GoogleDriveUploadResponse {\n  id: string;\n  name: string;\n}\n\ninterface GoogleDriveListResponse {\n  files: GoogleDriveFile[];\n}\n\ninterface GoogleDriveTokenResponse {\n  access_token: string;\n}\n\n/**\n * Google Drive Storage Provider with folder management capabilities\n *\n * @remarks\n * Implements storage interface for Google Drive using OAuth2 authentication.\n * Provides file upload/download operations and advanced folder management\n * including search, creation, and nested folder structures. Requires the\n * `https://www.googleapis.com/auth/drive.file` OAuth scope for full functionality.\n *\n * @category Storage\n *\n * @example\n * ```typescript\n * const googleDriveStorage = new GoogleDriveStorage({\n *   accessToken: \"your-oauth-access-token\",\n *   refreshToken: \"your-oauth-refresh-token\",\n *   clientId: \"your-oauth-client-id\",\n *   clientSecret: \"your-oauth-client-secret\",\n * });\n *\n * // Create folder structure and upload file\n * const folderId = await googleDriveStorage.findOrCreateFolder(\"screenshots\");\n * const result = await googleDriveStorage.upload(fileBlob, \"image.png\");\n * ```\n */\nexport class GoogleDriveStorage implements StorageProvider {\n  private readonly baseUrl = \"https://www.googleapis.com/drive/v3\";\n  private readonly uploadUrl = \"https://www.googleapis.com/upload/drive/v3\";\n\n  constructor(private config: GoogleDriveConfig) {\n    if (!config.accessToken) {\n      throw new StorageError(\n        \"Google Drive access token is required\",\n        \"MISSING_ACCESS_TOKEN\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n    try {\n      const fileName = filename || `vana-file-${Date.now()}.dat`;\n\n      // Create file metadata\n      const metadata = {\n        name: fileName,\n        parents: this.config.folderId ? [this.config.folderId] : undefined,\n      };\n\n      // Create multipart upload request\n      const delimiter = \"-------314159265358979323846\";\n      const closeDelim = `\\r\\n--${delimiter}--`;\n\n      const metadataBlob = new Blob([JSON.stringify(metadata)], {\n        type: \"application/json\",\n      });\n\n      const multipartRequestBody = [\n        `--${delimiter}`,\n        \"Content-Type: application/json\",\n        \"\",\n        await metadataBlob.text(),\n        `--${delimiter}`,\n        `Content-Type: ${file.type || \"application/octet-stream\"}`,\n        \"\",\n        \"\",\n      ].join(\"\\r\\n\");\n\n      const requestBody = new Blob([multipartRequestBody, file, closeDelim]);\n\n      const response = await fetch(\n        `${this.uploadUrl}/files?uploadType=multipart`,\n        {\n          method: \"POST\",\n          headers: {\n            Authorization: `Bearer ${this.config.accessToken}`,\n            \"Content-Type\": `multipart/related; boundary=\"${delimiter}\"`,\n          },\n          body: requestBody,\n        },\n      );\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to upload to Google Drive: ${error}`,\n          \"UPLOAD_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      const result = (await response.json()) as GoogleDriveUploadResponse;\n\n      // Make file publicly readable\n      await this.makeFilePublic(result.id);\n\n      return {\n        url: `https://drive.google.com/uc?id=${result.id}&export=download`,\n        size: file.size,\n        contentType: file.type || \"application/octet-stream\",\n        metadata: {\n          id: result.id,\n          name: result.name,\n          driveUrl: `https://drive.google.com/file/d/${result.id}/view`,\n        },\n      };\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive upload error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"UPLOAD_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  async download(url: string): Promise<Blob> {\n    try {\n      // Extract file ID from Google Drive URL\n      const fileId = this.extractFileId(url);\n      if (!fileId) {\n        throw new StorageError(\n          \"Invalid Google Drive URL format\",\n          \"INVALID_URL\",\n          \"google-drive\",\n        );\n      }\n\n      const response = await fetch(\n        `${this.baseUrl}/files/${fileId}?alt=media`,\n        {\n          headers: {\n            Authorization: `Bearer ${this.config.accessToken}`,\n          },\n        },\n      );\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to download from Google Drive: ${error}`,\n          \"DOWNLOAD_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      const blob = await response.blob();\n\n      // Check if we got HTML content instead of the actual file (authentication issue)\n      if (blob.type === \"text/html\") {\n        throw new StorageError(\n          \"Received HTML content instead of file data. This suggests an authentication or URL formatting issue with Google Drive.\",\n          \"AUTHENTICATION_ERROR\",\n          \"google-drive\",\n        );\n      }\n\n      return blob;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive download error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DOWNLOAD_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  async list(options?: StorageListOptions): Promise<StorageFile[]> {\n    try {\n      let query = \"trashed = false\";\n\n      // Add parent folder filter if configured\n      if (this.config.folderId) {\n        query += ` and '${this.config.folderId}' in parents`;\n      }\n\n      // Add name pattern filter\n      if (options?.namePattern) {\n        query += ` and name contains '${options.namePattern}'`;\n      }\n\n      const params = new URLSearchParams({\n        q: query,\n        fields: \"files(id,name,size,mimeType,createdTime,webViewLink)\",\n        pageSize: (options?.limit || 100).toString(),\n      });\n\n      if (options?.offset && typeof options.offset === \"string\") {\n        params.set(\"pageToken\", options.offset);\n      }\n\n      const response = await fetch(`${this.baseUrl}/files?${params}`, {\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n        },\n      });\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to list Google Drive files: ${error}`,\n          \"LIST_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      const result = (await response.json()) as GoogleDriveListResponse;\n\n      return result.files.map((file: GoogleDriveFile) => ({\n        id: file.id,\n        name: file.name,\n        url: `https://drive.google.com/uc?id=${file.id}&export=download`,\n        size: parseInt(file.size) || 0,\n        contentType: file.mimeType,\n        createdAt: new Date(file.createdTime),\n        metadata: {\n          id: file.id,\n          driveUrl: file.webViewLink,\n        },\n      }));\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive list error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"LIST_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  async delete(url: string): Promise<boolean> {\n    try {\n      // Extract file ID from Google Drive URL\n      const fileId = this.extractFileId(url);\n      if (!fileId) {\n        throw new StorageError(\n          \"Invalid Google Drive URL format\",\n          \"INVALID_URL\",\n          \"google-drive\",\n        );\n      }\n\n      const response = await fetch(`${this.baseUrl}/files/${fileId}`, {\n        method: \"DELETE\",\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n        },\n      });\n\n      if (!response.ok && response.status !== 404) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to delete from Google Drive: ${error}`,\n          \"DELETE_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      return true;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive delete error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DELETE_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  getConfig(): StorageProviderConfig {\n    return {\n      name: \"Google Drive\",\n      type: \"google-drive\",\n      requiresAuth: true,\n      features: {\n        upload: true,\n        download: true,\n        list: true,\n        delete: true,\n      },\n    };\n  }\n\n  /**\n   * Make a Google Drive file publicly readable\n   *\n   * @param fileId - Google Drive file ID\n   */\n  private async makeFilePublic(fileId: string): Promise<void> {\n    try {\n      await fetch(`${this.baseUrl}/files/${fileId}/permissions`, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          role: \"reader\",\n          type: \"anyone\",\n        }),\n      });\n    } catch (error) {\n      // Non-critical error - file upload succeeded but sharing failed\n      console.warn(\"Failed to make Google Drive file public:\", error);\n    }\n  }\n\n  /**\n   * Extract file ID from various Google Drive URL formats\n   *\n   * @param url - Google Drive URL\n   * @returns File ID or null if not found\n   */\n  private extractFileId(url: string): string | null {\n    // Handle various Google Drive URL formats\n    const patterns = [\n      /\\/file\\/d\\/([a-zA-Z0-9-_]+)/, // https://drive.google.com/file/d/FILE_ID/view\n      /id=([a-zA-Z0-9-_]+)/, // https://drive.google.com/uc?id=FILE_ID\n      /^([a-zA-Z0-9-_]+)$/, // Just the file ID\n    ];\n\n    for (const pattern of patterns) {\n      const match = url.match(pattern);\n      if (match) {\n        return match[1];\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Searches for an existing folder by name within a specified parent folder\n   *\n   * @remarks\n   * This method queries the Google Drive API to find a folder with the exact name\n   * within the specified parent directory. Only searches for folders (not files)\n   * and excludes trashed items.\n   *\n   * @param name - The exact name of the folder to search for\n   * @param parentId - The ID of the parent folder to search within (defaults to 'root')\n   * @returns Promise that resolves to the folder ID if found, or `null` if not found\n   * @throws {StorageError} When the Google Drive API request fails\n   *\n   * @example\n   * ```typescript\n   * // Search for a folder in the root directory\n   * const folderId = await googleDriveStorage.findFolder(\"screenshots\");\n   * if (folderId) {\n   *   console.log(\"Found folder:\", folderId);\n   * } else {\n   *   console.log(\"Folder not found\");\n   * }\n   *\n   * // Search for a subfolder within another folder\n   * const subFolderId = await googleDriveStorage.findFolder(\"roasts\", parentFolderId);\n   * ```\n   */\n  async findFolder(\n    name: string,\n    parentId: string = \"root\",\n  ): Promise<string | null> {\n    try {\n      const query = `name='${name}' and '${parentId}' in parents and mimeType='application/vnd.google-apps.folder' and trashed = false`;\n\n      const params = new URLSearchParams({\n        q: query,\n        fields: \"files(id,name,mimeType)\",\n      });\n\n      const response = await fetch(`${this.baseUrl}/files?${params}`, {\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n        },\n      });\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to search Google Drive folders: ${error}`,\n          \"FIND_FOLDER_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      const result = (await response.json()) as GoogleDriveListResponse;\n\n      if (result.files && result.files.length > 0) {\n        return result.files[0].id;\n      }\n\n      return null;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive findFolder error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"FIND_FOLDER_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  /**\n   * Creates a new folder within a specified parent folder\n   *\n   * @remarks\n   * This method creates a new folder using the Google Drive API. The folder will be\n   * created with the specified name as a child of the parent folder. Requires the\n   * `https://www.googleapis.com/auth/drive.file` OAuth scope.\n   *\n   * @param name - The name for the new folder\n   * @param parentId - The ID of the parent folder where the new folder will be created (defaults to 'root')\n   * @returns Promise that resolves to the ID of the newly created folder\n   * @throws {StorageError} When the Google Drive API request fails or folder creation is denied\n   *\n   * @example\n   * ```typescript\n   * // Create a folder in the root directory\n   * const folderId = await googleDriveStorage.createFolder(\"my-documents\");\n   * console.log(\"Created folder:\", folderId);\n   *\n   * // Create a subfolder within another folder\n   * const subFolderId = await googleDriveStorage.createFolder(\"reports\", parentFolderId);\n   * ```\n   */\n  async createFolder(name: string, parentId: string = \"root\"): Promise<string> {\n    try {\n      const metadata = {\n        name: name,\n        mimeType: \"application/vnd.google-apps.folder\",\n        parents: [parentId],\n      };\n\n      const response = await fetch(`${this.baseUrl}/files`, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify(metadata),\n      });\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to create Google Drive folder: ${error}`,\n          \"CREATE_FOLDER_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      const result = (await response.json()) as GoogleDriveUploadResponse;\n      return result.id;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive createFolder error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"CREATE_FOLDER_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  /**\n   * Finds an existing folder by name, or creates it if it doesn't exist\n   *\n   * @remarks\n   * This is a convenience method that combines `findFolder` and `createFolder`.\n   * It first searches for an existing folder with the specified name. If found,\n   * it returns the existing folder's ID. If not found, it creates a new folder\n   * and returns the new folder's ID.\n   *\n   * @param name - The name of the folder to find or create\n   * @param parentId - The ID of the parent folder to search within or create the folder in (defaults to 'root')\n   * @returns Promise that resolves to the folder ID (either existing or newly created)\n   * @throws {StorageError} When the Google Drive API request fails\n   *\n   * @example\n   * ```typescript\n   * // Ensure a folder exists, creating it if necessary\n   * const folderId = await googleDriveStorage.findOrCreateFolder(\"screenshots\");\n   * console.log(\"Folder ID:\", folderId); // Will be same ID if folder already existed\n   *\n   * // Create nested folder structure\n   * const parentId = await googleDriveStorage.findOrCreateFolder(\"projects\");\n   * const childId = await googleDriveStorage.findOrCreateFolder(\"vana-app\", parentId);\n   * ```\n   */\n  async findOrCreateFolder(\n    name: string,\n    parentId: string = \"root\",\n  ): Promise<string> {\n    try {\n      const existingFolderId = await this.findFolder(name, parentId);\n\n      if (existingFolderId) {\n        return existingFolderId;\n      }\n\n      return await this.createFolder(name, parentId);\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive findOrCreateFolder error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"FIND_OR_CREATE_FOLDER_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  /**\n   * Refresh the access token using refresh token\n   *\n   * @returns Promise with new access token\n   */\n  async refreshAccessToken(): Promise<string> {\n    if (\n      !this.config.refreshToken ||\n      !this.config.clientId ||\n      !this.config.clientSecret\n    ) {\n      throw new StorageError(\n        \"Refresh token, client ID, and client secret are required for token refresh\",\n        \"MISSING_REFRESH_CONFIG\",\n        \"google-drive\",\n      );\n    }\n\n    try {\n      const response = await fetch(\"https://oauth2.googleapis.com/token\", {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/x-www-form-urlencoded\",\n        },\n        body: new URLSearchParams({\n          client_id: this.config.clientId,\n          client_secret: this.config.clientSecret,\n          refresh_token: this.config.refreshToken,\n          grant_type: \"refresh_token\",\n        }),\n      });\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to refresh Google Drive token: ${error}`,\n          \"TOKEN_REFRESH_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      const result = (await response.json()) as GoogleDriveTokenResponse;\n      this.config.accessToken = result.access_token;\n\n      return result.access_token;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive token refresh error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"TOKEN_REFRESH_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n}\n","import {\n  StorageProvider,\n  StorageUploadResult,\n  StorageFile,\n  StorageListOptions,\n  StorageProviderConfig,\n  StorageError,\n} from \"../index\";\n\nexport interface IpfsConfig {\n  /** IPFS API endpoint for uploads */\n  apiEndpoint: string;\n  /** Gateway URL for downloads (optional, defaults to public gateway) */\n  gatewayUrl?: string;\n  /** Additional headers for API requests */\n  headers?: Record<string, string>;\n}\n\ninterface IpfsUploadResponse {\n  Hash?: string;\n  Size?: number;\n}\n\n/**\n * Connects to any standard IPFS node or service provider\n *\n * @remarks\n * This provider implements the standard IPFS HTTP API (`/api/v0/add`) and works\n * with any IPFS-compatible service. It provides the essential IPFS operations\n * (upload/download) while maintaining the immutable, content-addressed nature\n * of IPFS. Use static factory methods for common providers like Infura or local nodes.\n *\n * @category Storage\n *\n * @example\n * ```typescript\n * // Use with Infura (recommended for production)\n * const ipfsStorage = IpfsStorage.forInfura({\n *   projectId: \"your-project-id\",\n *   projectSecret: \"your-project-secret\"\n * });\n *\n * // Use with local IPFS node\n * const localStorage = IpfsStorage.forLocalNode();\n *\n * // Upload file and get CID\n * const result = await ipfsStorage.upload(fileBlob, \"document.pdf\");\n * console.log(\"Uploaded to IPFS:\", result.url);\n * ```\n */\nexport class IpfsStorage implements StorageProvider {\n  private readonly gatewayUrl: string;\n  private readonly hasAuth: boolean;\n\n  constructor(private config: IpfsConfig) {\n    if (!config.apiEndpoint) {\n      throw new StorageError(\n        \"IPFS API endpoint is required\",\n        \"MISSING_API_ENDPOINT\",\n        \"ipfs\",\n      );\n    }\n\n    this.gatewayUrl = config.gatewayUrl || \"https://gateway.pinata.cloud/ipfs\";\n    this.hasAuth = !!(config.headers && Object.keys(config.headers).length > 0);\n  }\n\n  /**\n   * Creates an IPFS storage instance configured for Infura\n   *\n   * @remarks\n   * Infura provides reliable, scalable IPFS infrastructure with global availability.\n   * This factory method automatically configures the correct endpoints and authentication\n   * for Infura's IPFS service.\n   *\n   * @param credentials - Infura project credentials\n   * @param credentials.projectId - Your Infura project ID\n   * @param credentials.projectSecret - Your Infura project secret\n   * @returns Configured IpfsStorage instance for Infura\n   *\n   * @example\n   * ```typescript\n   * const ipfsStorage = IpfsStorage.forInfura({\n   *   projectId: \"2FVGj8UJP5v8ZcnX9K5L7M8c\",\n   *   projectSecret: \"a7f2c1e5b8d9f3a6e4c8b2d7f9e1a4c3\"\n   * });\n   *\n   * const result = await ipfsStorage.upload(fileBlob);\n   * ```\n   */\n  static forInfura(credentials: {\n    projectId: string;\n    projectSecret: string;\n  }): IpfsStorage {\n    const auth = btoa(`${credentials.projectId}:${credentials.projectSecret}`);\n    return new IpfsStorage({\n      apiEndpoint: \"https://ipfs.infura.io:5001/api/v0/add\",\n      gatewayUrl: \"https://ipfs.infura.io/ipfs\",\n      headers: {\n        Authorization: `Basic ${auth}`,\n      },\n    });\n  }\n\n  /**\n   * Creates an IPFS storage instance configured for a local IPFS node\n   *\n   * @remarks\n   * This factory method configures the storage provider to connect to a local IPFS node,\n   * typically running on your development machine or server. Assumes standard ports\n   * (5001 for API, 8080 for gateway) unless otherwise specified.\n   *\n   * @param options - Local node configuration options\n   * @param options.url - Base URL of the local IPFS node (defaults to http://localhost:5001)\n   * @returns Configured IpfsStorage instance for local node\n   *\n   * @example\n   * ```typescript\n   * // Use default localhost configuration\n   * const localStorage = IpfsStorage.forLocalNode();\n   *\n   * // Use custom local node URL\n   * const customStorage = IpfsStorage.forLocalNode({\n   *   url: \"http://192.168.1.100:5001\"\n   * });\n   *\n   * const result = await localStorage.upload(fileBlob, \"local-file.txt\");\n   * ```\n   */\n  static forLocalNode(options?: { url?: string }): IpfsStorage {\n    const baseUrl = options?.url || \"http://localhost:5001\";\n    return new IpfsStorage({\n      apiEndpoint: `${baseUrl}/api/v0/add`,\n      gatewayUrl: `${baseUrl.replace(\":5001\", \":8080\")}/ipfs`,\n    });\n  }\n\n  /**\n   * Uploads a file to IPFS and returns the content identifier (CID)\n   *\n   * @remarks\n   * This method uploads the file to the configured IPFS endpoint using the standard\n   * `/api/v0/add` API. The file is content-addressed, meaning the same file will\n   * always produce the same CID regardless of when or where it's uploaded.\n   *\n   * @param file - The file to upload to IPFS\n   * @param filename - Optional filename (for metadata purposes only)\n   * @returns Promise that resolves to StorageUploadResult with IPFS gateway URL\n   * @throws {StorageError} When the upload fails or no CID is returned\n   *\n   * @example\n   * ```typescript\n   * const result = await ipfsStorage.upload(fileBlob, \"report.pdf\");\n   * console.log(\"File uploaded to IPFS:\", result.url);\n   * // Example URL: \"https://gateway.pinata.cloud/ipfs/QmTzQ1JRkWErjk39mryYw2WVrgBMe2B36gRq8GCL8qCACj\"\n   * ```\n   */\n  async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n    try {\n      const fileName = filename || `ipfs-file-${Date.now()}.dat`;\n\n      // Create FormData for IPFS upload\n      const formData = new FormData();\n      formData.append(\"file\", file, fileName);\n\n      const response = await fetch(this.config.apiEndpoint, {\n        method: \"POST\",\n        headers: this.config.headers || {},\n        body: formData,\n      });\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to upload to IPFS: ${error}`,\n          \"UPLOAD_FAILED\",\n          \"ipfs\",\n        );\n      }\n\n      const result = (await response.json()) as IpfsUploadResponse;\n      const hash = result.Hash;\n\n      if (!hash) {\n        throw new StorageError(\n          \"IPFS upload succeeded but no hash returned\",\n          \"NO_HASH_RETURNED\",\n          \"ipfs\",\n        );\n      }\n\n      return {\n        url: `ipfs://${hash}`,\n        size: file.size,\n        contentType: file.type || \"application/octet-stream\",\n      };\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `IPFS upload error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"UPLOAD_ERROR\",\n        \"ipfs\",\n      );\n    }\n  }\n\n  /**\n   * Downloads a file from IPFS using its content identifier (CID)\n   *\n   * @remarks\n   * This method retrieves the file from IPFS using the configured gateway.\n   * It accepts various formats including raw CIDs, ipfs:// URLs, and gateway URLs.\n   * The file is downloaded from the globally distributed IPFS network.\n   *\n   * @param cid - The IPFS content identifier, ipfs:// URL, or gateway URL\n   * @returns Promise that resolves to the downloaded file content\n   * @throws {StorageError} When the download fails or CID format is invalid\n   *\n   * @example\n   * ```typescript\n   * // Download using raw CID\n   * const file = await ipfsStorage.download(\"QmTzQ1JRkWErjk39mryYw2WVrgBMe2B36gRq8GCL8qCACj\");\n   *\n   * // Download using ipfs:// URL\n   * const file2 = await ipfsStorage.download(\"ipfs://QmTzQ1JRkWErjk39mryYw2WVrgBMe2B36gRq8GCL8qCACj\");\n   *\n   * // Create download link\n   * const url = URL.createObjectURL(file);\n   * ```\n   */\n  async download(cid: string): Promise<Blob> {\n    try {\n      const downloadUrl = this.buildDownloadUrl(cid);\n\n      const response = await fetch(downloadUrl);\n\n      if (!response.ok) {\n        throw new StorageError(\n          `Failed to download from IPFS: ${response.statusText}`,\n          \"DOWNLOAD_FAILED\",\n          \"ipfs\",\n        );\n      }\n\n      return await response.blob();\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `IPFS download error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DOWNLOAD_ERROR\",\n        \"ipfs\",\n      );\n    }\n  }\n\n  async list(_options?: StorageListOptions): Promise<StorageFile[]> {\n    throw new StorageError(\n      \"List operation is not supported by standard IPFS. Use a service-specific provider like Pinata.\",\n      \"LIST_NOT_SUPPORTED\",\n      \"ipfs\",\n    );\n  }\n\n  async delete(_url: string): Promise<boolean> {\n    throw new StorageError(\n      \"Delete operation is not supported by IPFS. Files are immutable once uploaded.\",\n      \"DELETE_NOT_SUPPORTED\",\n      \"ipfs\",\n    );\n  }\n\n  getConfig(): StorageProviderConfig {\n    return {\n      name: \"IPFS\",\n      type: \"ipfs\",\n      requiresAuth: this.hasAuth,\n      features: {\n        upload: true,\n        download: true,\n        list: false,\n        delete: false,\n      },\n    };\n  }\n\n  /**\n   * Build download URL from CID or existing URL\n   *\n   * @param cid - IPFS CID or URL\n   * @returns Gateway URL for download\n   */\n  private buildDownloadUrl(cid: string): string {\n    // If it's already a full URL, return as-is\n    if (cid.startsWith(\"http://\") || cid.startsWith(\"https://\")) {\n      return cid;\n    }\n\n    // Handle ipfs:// URLs\n    if (cid.startsWith(\"ipfs://\")) {\n      const hash = cid.replace(\"ipfs://\", \"\");\n      return `${this.gatewayUrl}/${hash}`;\n    }\n\n    // Validate CID format (basic validation)\n    if (!this.isValidCID(cid)) {\n      throw new StorageError(\n        \"Invalid IPFS CID or URL format\",\n        \"INVALID_CID\",\n        \"ipfs\",\n      );\n    }\n\n    // Assume it's a raw CID\n    return `${this.gatewayUrl}/${cid}`;\n  }\n\n  /**\n   * Basic CID validation\n   *\n   * @param cid - Content identifier to validate\n   * @returns True if CID appears valid\n   */\n  private isValidCID(cid: string): boolean {\n    // Basic validation: CIDs typically start with 'Qm' or 'ba' and contain alphanumeric characters\n    // Allow shorter hashes for testing purposes\n    return (\n      /^[a-zA-Z0-9]{10,}$/.test(cid) &&\n      (cid.startsWith(\"Qm\") || cid.startsWith(\"ba\") || cid.includes(\"Test\"))\n    );\n  }\n}\n","import {\n  StorageProvider,\n  StorageUploadResult,\n  StorageFile,\n  StorageListOptions,\n  StorageProviderConfig,\n  StorageError,\n} from \"../index\";\n\nexport interface PinataConfig {\n  /** Pinata JWT token for authentication */\n  jwt: string;\n  /** Optional custom gateway URL (defaults to https://gateway.pinata.cloud) */\n  gatewayUrl?: string;\n}\n\nexport interface PinataListQuery {\n  /** Maximum number of results to return */\n  limit?: number;\n  /** Offset for pagination */\n  offset?: number;\n  /** Filter by name pattern */\n  namePattern?: string;\n}\n\nexport interface PinataFile {\n  /** Pin identifier */\n  id: string;\n  /** File name */\n  name: string;\n  /** IPFS CID */\n  cid: string;\n  /** File size in bytes */\n  size: number;\n  /** Creation timestamp */\n  createdAt: Date;\n  /** Optional metadata */\n  metadata?: object;\n}\n\ninterface PinataUploadResponse {\n  /** IPFS hash of the uploaded content */\n  IpfsHash: string;\n  /** Size of the uploaded content in bytes */\n  PinSize: number;\n  /** Upload timestamp (ISO string) */\n  Timestamp: string;\n}\n\ninterface PinataListResponse {\n  /** Total number of pins matching the query */\n  count: number;\n  /** Array of pin objects */\n  rows: Array<{\n    /** Unique pin identifier */\n    id: string;\n    /** IPFS hash of the pinned content */\n    ipfs_pin_hash: string;\n    /** Size in bytes */\n    size: number;\n    /** User ID that owns the pin */\n    user_id: string;\n    /** Date when content was pinned */\n    date_pinned: string;\n    /** Date when content was unpinned (if applicable) */\n    date_unpinned?: string;\n    /** Pin metadata */\n    metadata: {\n      /** Optional name for the pin */\n      name?: string;\n      /** Additional key-value metadata */\n      keyvalues?: Record<string, unknown>;\n    };\n  }>;\n}\n\n/**\n * Provides managed IPFS storage with full-featured API via Pinata\n *\n * @remarks\n * This provider uses Pinata's enhanced IPFS service, which extends standard IPFS\n * with additional features like file listing, deletion (unpinning), and rich metadata.\n * It's the \"it just works\" solution for developers who want full CRUD operations\n * on IPFS without managing infrastructure.\n *\n * @category Storage\n *\n * @example\n * ```typescript\n * const pinataStorage = new PinataStorage({\n *   jwt: \"your-pinata-jwt-token\"\n * });\n *\n * // Upload with metadata\n * const cid = await pinataStorage.upload(fileBlob, {\n *   name: \"user-avatar.png\",\n *   metadata: { userId: \"123\", category: \"avatar\" }\n * });\n *\n * // List files with query\n * const files = await pinataStorage.list({ limit: 10 });\n *\n * // Delete file\n * await pinataStorage.delete(cid);\n * ```\n */\nexport class PinataStorage implements StorageProvider {\n  private readonly apiUrl = \"https://api.pinata.cloud\";\n  private readonly gatewayUrl: string;\n\n  constructor(private config: PinataConfig) {\n    this.gatewayUrl = config.gatewayUrl || \"https://gateway.pinata.cloud\";\n    if (!config.jwt) {\n      throw new StorageError(\n        \"Pinata JWT token is required\",\n        \"MISSING_JWT\",\n        \"pinata\",\n      );\n    }\n  }\n\n  /**\n   * Uploads a file to IPFS via Pinata and returns the CID\n   *\n   * @remarks\n   * This method uploads the file to Pinata's IPFS service with enhanced metadata support.\n   * The file is pinned to ensure availability and can include custom metadata for\n   * organization and querying. The metadata is stored alongside the file for later retrieval.\n   *\n   * @param file - The file to upload to IPFS\n   * @param filename - Optional custom filename\n   * @returns Promise that resolves to the IPFS CID (content identifier)\n   * @throws {StorageError} When the upload fails or no CID is returned\n   *\n   * @example\n   * ```typescript\n   * const cid = await pinataStorage.upload(fileBlob, {\n   *   name: \"user-document.pdf\",\n   *   metadata: {\n   *     userId: \"user-123\",\n   *     category: \"documents\",\n   *     uploadDate: new Date().toISOString()\n   *   }\n   * });\n   * console.log(\"File pinned to IPFS:\", cid);\n   * ```\n   */\n  async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n    try {\n      const fileName = filename || `vana-file-${Date.now()}.dat`;\n\n      // Create form data for Pinata upload\n      const formData = new FormData();\n      formData.append(\"file\", file, fileName);\n\n      // Add metadata\n      const metadata = {\n        name: fileName,\n        keyvalues: {\n          uploadedBy: \"vana-sdk\",\n          timestamp: new Date().toISOString(),\n        },\n      };\n      formData.append(\"pinataMetadata\", JSON.stringify(metadata));\n\n      // Upload to Pinata\n      const response = await fetch(`${this.apiUrl}/pinning/pinFileToIPFS`, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${this.config.jwt}`,\n        },\n        body: formData,\n      });\n\n      if (!response.ok) {\n        const errorText = await response.text();\n        throw new StorageError(\n          `Pinata upload failed: ${errorText}`,\n          \"UPLOAD_FAILED\",\n          \"pinata\",\n        );\n      }\n\n      const result = (await response.json()) as PinataUploadResponse;\n      const ipfsHash = result.IpfsHash;\n\n      if (!ipfsHash) {\n        throw new StorageError(\n          \"Pinata upload succeeded but no IPFS hash returned\",\n          \"NO_HASH_RETURNED\",\n          \"pinata\",\n        );\n      }\n\n      return {\n        url: `ipfs://${ipfsHash}`,\n        size: file.size,\n        contentType: file.type || \"application/octet-stream\",\n      };\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Pinata upload error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"UPLOAD_ERROR\",\n        \"pinata\",\n      );\n    }\n  }\n\n  async download(cid: string): Promise<Blob> {\n    try {\n      // Validate CID format\n      if (!this.isValidCID(cid)) {\n        throw new StorageError(\n          \"Invalid IPFS CID format\",\n          \"INVALID_CID\",\n          \"pinata\",\n        );\n      }\n\n      // Download from gateway\n      const downloadUrl = `${this.gatewayUrl}/ipfs/${cid}`;\n      const response = await fetch(downloadUrl);\n\n      if (!response.ok) {\n        throw new StorageError(\n          `Failed to download from IPFS: ${response.statusText}`,\n          \"DOWNLOAD_FAILED\",\n          \"pinata\",\n        );\n      }\n\n      return await response.blob();\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Pinata download error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DOWNLOAD_ERROR\",\n        \"pinata\",\n      );\n    }\n  }\n\n  /**\n   * Lists files uploaded to Pinata with optional filtering\n   *\n   * @remarks\n   * This method retrieves a list of files that have been uploaded to Pinata,\n   * filtered to only include files uploaded by the Vana SDK. You can further\n   * filter results by name pattern, limit results, or paginate through them.\n   *\n   * @param options - Optional query parameters for filtering and pagination\n   * @param options.limit - Maximum number of results to return (default: 10)\n   * @param options.offset - Number of results to skip for pagination\n   * @param options.namePattern - Filter files by name pattern\n   * @returns Promise that resolves to an array of PinataFile objects\n   * @throws {StorageError} When the list operation fails\n   *\n   * @example\n   * ```typescript\n   * // List all files\n   * const allFiles = await pinataStorage.list();\n   *\n   * // List with pagination and filtering\n   * const filteredFiles = await pinataStorage.list({\n   *   limit: 20,\n   *   offset: 10,\n   *   namePattern: \"document\"\n   * });\n   *\n   * filteredFiles.forEach(file => {\n   *   console.log(`${file.name} (${file.size} bytes): ${file.cid}`);\n   * });\n   * ```\n   */\n  async list(options?: StorageListOptions): Promise<StorageFile[]> {\n    try {\n      const params = new URLSearchParams({\n        status: \"pinned\",\n        pageLimit: (options?.limit || 10).toString(),\n        metadata: JSON.stringify({\n          keyvalues: {\n            uploadedBy: \"vana-sdk\",\n          },\n        }),\n      });\n\n      if (options?.offset) {\n        params.set(\"pageOffset\", options.offset.toString());\n      }\n\n      if (options?.namePattern) {\n        params.set(\"metadata[name]\", options.namePattern);\n      }\n\n      const response = await fetch(`${this.apiUrl}/data/pinList?${params}`, {\n        headers: {\n          Authorization: `Bearer ${this.config.jwt}`,\n        },\n      });\n\n      if (!response.ok) {\n        const errorText = await response.text();\n        throw new StorageError(\n          `Failed to list Pinata files: ${errorText}`,\n          \"LIST_FAILED\",\n          \"pinata\",\n        );\n      }\n\n      const result = (await response.json()) as PinataListResponse;\n\n      return result.rows.map((pin) => ({\n        id: pin.id,\n        name: pin.metadata?.name || \"Unnamed\",\n        url: `ipfs://${pin.ipfs_pin_hash}`,\n        size: parseInt(String(pin.size), 10) || 0,\n        contentType: \"application/octet-stream\", // Pinata doesn't store content type\n        createdAt: new Date(pin.date_pinned),\n        metadata: pin.metadata?.keyvalues || {},\n      }));\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Pinata list error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"LIST_ERROR\",\n        \"pinata\",\n      );\n    }\n  }\n\n  /**\n   * Deletes a file from Pinata by unpinning it from IPFS\n   *\n   * @remarks\n   * This method removes the file from your Pinata account by unpinning it,\n   * which means it will no longer be guaranteed to be available on the IPFS network.\n   * Note that if the file is pinned elsewhere or cached by other nodes, it may still\n   * be accessible for some time.\n   *\n   * @param url - The IPFS URL or content identifier of the file to delete\n   * @returns Promise that resolves when the file is successfully unpinned\n   * @throws {StorageError} When the deletion fails or CID format is invalid\n   *\n   * @example\n   * ```typescript\n   * // Delete a file by CID\n   * await pinataStorage.delete(\"QmTzQ1JRkWErjk39mryYw2WVrgBMe2B36gRq8GCL8qCACj\");\n   * console.log(\"File unpinned from Pinata\");\n   *\n   * // Delete after listing\n   * const files = await pinataStorage.list();\n   * for (const file of files) {\n   *   if (file.name.includes(\"temp\")) {\n   *     await pinataStorage.delete(file.cid);\n   *   }\n   * }\n   * ```\n   */\n  async delete(url: string): Promise<boolean> {\n    try {\n      // Extract CID from URL or use as-is\n      const cid = this.extractCidFromUrl(url);\n\n      // Validate CID format\n      if (!this.isValidCID(cid)) {\n        throw new StorageError(\n          \"Invalid IPFS CID format\",\n          \"INVALID_CID\",\n          \"pinata\",\n        );\n      }\n\n      const response = await fetch(`${this.apiUrl}/pinning/unpin/${cid}`, {\n        method: \"DELETE\",\n        headers: {\n          Authorization: `Bearer ${this.config.jwt}`,\n        },\n      });\n\n      if (!response.ok) {\n        const errorText = await response.text();\n        throw new StorageError(\n          `Failed to delete from Pinata: ${errorText}`,\n          \"DELETE_FAILED\",\n          \"pinata\",\n        );\n      }\n\n      return true;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Pinata delete error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DELETE_ERROR\",\n        \"pinata\",\n      );\n    }\n  }\n\n  getConfig(): StorageProviderConfig {\n    return {\n      name: \"Pinata IPFS\",\n      type: \"pinata\",\n      requiresAuth: true,\n      features: {\n        upload: true,\n        download: true,\n        list: true,\n        delete: true,\n      },\n    };\n  }\n\n  /**\n   * Extract CID from URL or return as-is\n   *\n   * @param url - URL or CID string\n   * @returns CID string\n   */\n  private extractCidFromUrl(url: string): string {\n    // If it's already a CID (not a URL), return as-is\n    if (!url.includes(\"/\")) {\n      return url;\n    }\n\n    // Extract CID from gateway URL\n    const cidMatch = url.match(/\\/ipfs\\/([a-zA-Z0-9]+)/);\n    if (cidMatch) {\n      return cidMatch[1];\n    }\n\n    // If no match, assume it's a CID\n    return url;\n  }\n\n  /**\n   * Basic CID validation\n   *\n   * @param cid - Content identifier to validate\n   * @returns True if CID appears valid\n   */\n  private isValidCID(cid: string): boolean {\n    // Basic validation: CIDs typically start with 'Qm' or 'ba' and contain alphanumeric characters\n    return (\n      /^[a-zA-Z0-9]{10,}$/.test(cid) &&\n      (cid.startsWith(\"Qm\") || cid.startsWith(\"ba\") || cid.includes(\"Test\"))\n    );\n  }\n}\n","import {\n  StorageProvider,\n  StorageUploadResult,\n  StorageFile,\n  StorageListOptions,\n  StorageProviderConfig,\n  StorageError,\n} from \"../index\";\n\nexport interface ServerProxyConfig {\n  /** Server endpoint for file uploads */\n  uploadUrl: string;\n  /** Server endpoint for file downloads */\n  downloadUrl: string;\n}\n\ninterface ServerProxyUploadResponse {\n  success: boolean;\n  identifier?: string;\n  url?: string;\n  error?: string;\n}\n\n/**\n * Delegates storage operations to your server endpoints\n *\n * @remarks\n * This provider is completely agnostic about the actual storage backend used by\n * your server. It simply proxies upload and download requests to your configured\n * endpoints, allowing you to implement any storage strategy (IPFS, S3, local filesystem, etc.)\n * on the server side while maintaining a consistent client interface.\n *\n * @category Storage\n *\n * @example\n * ```typescript\n * const serverStorage = new ServerProxyStorage({\n *   uploadUrl: \"/api/files/upload\",\n *   downloadUrl: \"/api/files/download\"\n * });\n *\n * // Upload file through your server\n * const identifier = await serverStorage.upload(fileBlob, { name: \"document.pdf\" });\n *\n * // Download file through your server\n * const file = await serverStorage.download(identifier);\n * ```\n */\nexport class ServerProxyStorage implements StorageProvider {\n  constructor(private config: ServerProxyConfig) {\n    if (!config.uploadUrl) {\n      throw new StorageError(\n        \"Upload URL is required\",\n        \"MISSING_UPLOAD_URL\",\n        \"server-proxy\",\n      );\n    }\n\n    if (!config.downloadUrl) {\n      throw new StorageError(\n        \"Download URL is required\",\n        \"MISSING_DOWNLOAD_URL\",\n        \"server-proxy\",\n      );\n    }\n  }\n\n  /**\n   * Uploads a file through your server endpoint\n   *\n   * @remarks\n   * This method sends the file to your configured upload endpoint via FormData.\n   * Your server is responsible for handling the actual storage implementation\n   * and must return a JSON response with `success: true` and an `identifier` field.\n   *\n   * @param file - The file to upload\n   * @param filename - Optional custom filename\n   * @returns Promise that resolves to the server-provided identifier\n   * @throws {StorageError} When the upload fails or server returns an error\n   *\n   * @example\n   * ```typescript\n   * const identifier = await serverStorage.upload(fileBlob, { name: \"report.pdf\" });\n   * console.log(\"File uploaded with identifier:\", identifier);\n   * ```\n   */\n  async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n    try {\n      const formData = new FormData();\n      formData.append(\"file\", file);\n\n      if (filename) {\n        formData.append(\"name\", filename);\n      }\n\n      const response = await fetch(this.config.uploadUrl, {\n        method: \"POST\",\n        body: formData,\n      });\n\n      if (!response.ok) {\n        const _errorText = await response.text();\n        throw new StorageError(\n          `Server upload failed: ${response.status} ${response.statusText}`,\n          \"UPLOAD_FAILED\",\n          \"server-proxy\",\n        );\n      }\n\n      const result = (await response.json()) as ServerProxyUploadResponse;\n\n      if (!result.success) {\n        throw new StorageError(\n          `Upload failed: ${result.error || \"Unknown server error\"}`,\n          \"UPLOAD_FAILED\",\n          \"server-proxy\",\n        );\n      }\n\n      if (!result.identifier) {\n        throw new StorageError(\n          \"Server upload succeeded but no identifier returned\",\n          \"NO_IDENTIFIER_RETURNED\",\n          \"server-proxy\",\n        );\n      }\n\n      return {\n        url: result.url || result.identifier,\n        size: file.size,\n        contentType: file.type || \"application/octet-stream\",\n      };\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Server proxy upload error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"UPLOAD_ERROR\",\n        \"server-proxy\",\n      );\n    }\n  }\n\n  /**\n   * Downloads a file through your server endpoint\n   *\n   * @remarks\n   * This method sends the identifier to your configured download endpoint via POST request.\n   * Your server is responsible for retrieving the file from your storage backend\n   * and returning the file content as a blob response.\n   *\n   * @param url - The server-provided URL or identifier from upload\n   * @returns Promise that resolves to the downloaded file content\n   * @throws {StorageError} When the download fails or file is not found\n   *\n   * @example\n   * ```typescript\n   * const fileBlob = await serverStorage.download(\"file-123\");\n   * const url = URL.createObjectURL(fileBlob);\n   * ```\n   */\n  async download(url: string): Promise<Blob> {\n    try {\n      // Extract identifier from URL if needed\n      const identifier = this.extractIdentifierFromUrl(url);\n\n      const response = await fetch(this.config.downloadUrl, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({ identifier }),\n      });\n\n      if (!response.ok) {\n        const _errorText = await response.text();\n        throw new StorageError(\n          `Server download failed: ${response.status} ${response.statusText}`,\n          \"DOWNLOAD_FAILED\",\n          \"server-proxy\",\n        );\n      }\n\n      return await response.blob();\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Server proxy download error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DOWNLOAD_ERROR\",\n        \"server-proxy\",\n      );\n    }\n  }\n\n  async list(_options?: StorageListOptions): Promise<StorageFile[]> {\n    throw new StorageError(\n      \"List operation is not supported by server proxy storage\",\n      \"LIST_NOT_SUPPORTED\",\n      \"server-proxy\",\n    );\n  }\n\n  async delete(_url: string): Promise<boolean> {\n    throw new StorageError(\n      \"Delete operation is not supported by server proxy storage\",\n      \"DELETE_NOT_SUPPORTED\",\n      \"server-proxy\",\n    );\n  }\n\n  /**\n   * Extract identifier from URL or return as-is\n   *\n   * @param url - URL or identifier string\n   * @returns identifier string\n   */\n  private extractIdentifierFromUrl(url: string): string {\n    // If it's a URL, we might need to extract the identifier\n    // For now, assume server handles both URLs and identifiers\n    return url;\n  }\n\n  getConfig(): StorageProviderConfig {\n    return {\n      name: \"Server Proxy\",\n      type: \"server-proxy\",\n      requiresAuth: false,\n      features: {\n        upload: true,\n        download: true,\n        list: false,\n        delete: false,\n      },\n    };\n  }\n}\n","import {\n  StorageProvider,\n  StorageUploadResult,\n  StorageFile,\n  StorageListOptions,\n  StorageError,\n} from \"./index\";\n\n/**\n * Manages multiple storage providers with a unified interface for file operations.\n *\n * @remarks\n * The StorageManager provides a consistent API for uploading, downloading, and managing\n * files across different storage backends including IPFS, Pinata, Google Drive, and\n * server-managed storage. It handles provider registration, default provider selection,\n * and automatic fallback scenarios for robust file operations.\n *\n * Used internally by DataController for encrypted file storage, but can also be used\n * directly for custom storage workflows. Each provider implements the `StorageProvider`\n * interface to ensure consistent behavior across different storage backends.\n *\n * The manager supports provider-specific configurations and features while maintaining\n * a uniform API surface for applications.\n * @example\n * ```typescript\n * import { StorageManager, IPFSStorage, PinataStorage } from 'vana-sdk';\n *\n * const storage = new StorageManager();\n *\n * // Register multiple providers\n * storage.register('ipfs', new IPFSStorage({\n *   apiEndpoint: 'https://api.pinata.cloud/pinning/pinFileToIPFS'\n * }), true);\n * storage.register('pinata', new PinataStorage({\n *   jwt: 'your-pinata-jwt-token'\n * }));\n *\n * // Upload to default provider\n * const result = await storage.upload(fileBlob, 'myfile.json');\n *\n * // Upload to specific provider\n * const result2 = await storage.upload(fileBlob, 'myfile.json', 'pinata');\n * ```\n * @category Storage\n * @see {@link [URL_PLACEHOLDER] | Storage Providers Guide} for configuration details\n */\nexport class StorageManager {\n  private providers: Map<string, StorageProvider> = new Map();\n  private defaultProvider: string | null = null;\n\n  /**\n   * Registers a storage provider with the manager.\n   *\n   * @remarks\n   * This method adds a new storage provider to the manager's registry and optionally\n   * sets it as the default provider for subsequent operations. If no default provider\n   * is currently set, the first registered provider automatically becomes the default.\n   * @param name - Unique identifier for the provider\n   * @param provider - The storage provider instance implementing the `StorageProvider` interface\n   * @param isDefault - Whether this provider should be set as the default (defaults to `false`)\n   * @example\n   * ```typescript\n   * const pinata = new PinataStorage({ jwt: 'your-jwt-token' });\n   * storage.register('pinata', pinata, true); // Set as default\n   *\n   * const ipfs = new IPFSStorage({ apiEndpoint: 'https://...' });\n   * storage.register('ipfs', ipfs); // Not default\n   * ```\n   */\n  register(name: string, provider: StorageProvider, isDefault = false): void {\n    this.providers.set(name, provider);\n\n    if (isDefault || this.defaultProvider === null) {\n      this.defaultProvider = name;\n    }\n  }\n\n  /**\n   * Get a registered storage provider\n   *\n   * @param name - Provider identifier, uses default if not specified\n   * @returns Storage provider instance\n   */\n  getProvider(name?: string): StorageProvider {\n    const providerName = name || this.defaultProvider;\n\n    if (!providerName) {\n      throw new StorageError(\n        \"No storage provider specified and no default provider set\",\n        \"NO_PROVIDER\",\n        \"manager\",\n      );\n    }\n\n    const provider = this.providers.get(providerName);\n    if (!provider) {\n      throw new StorageError(\n        `Storage provider '${providerName}' not found`,\n        \"PROVIDER_NOT_FOUND\",\n        \"manager\",\n      );\n    }\n\n    return provider;\n  }\n\n  /**\n   * List all registered providers\n   *\n   * @returns Array of provider names\n   */\n  listProviders(): string[] {\n    return Array.from(this.providers.keys());\n  }\n\n  /**\n   * Get the default provider name\n   *\n   * @returns Default provider name or null\n   */\n  getDefaultProvider(): string | null {\n    return this.defaultProvider;\n  }\n\n  /**\n   * Set the default provider\n   *\n   * @param name - Provider identifier\n   */\n  setDefaultProvider(name: string): void {\n    if (!this.providers.has(name)) {\n      throw new StorageError(\n        `Cannot set default provider '${name}': provider not registered`,\n        \"PROVIDER_NOT_FOUND\",\n        \"manager\",\n      );\n    }\n    this.defaultProvider = name;\n  }\n\n  /**\n   * Uploads a file using the specified or default storage provider.\n   *\n   * @remarks\n   * This method uploads a file to the specified provider or falls back to the default\n   * provider if none is specified. The upload result includes the storage URL, file size,\n   * content type, and provider-specific metadata that can be used for subsequent operations.\n   * @param file - The file blob to upload\n   * @param filename - Optional custom filename (defaults to auto-generated name)\n   * @param providerName - Optional provider identifier (uses default if not specified)\n   * @returns A Promise that resolves to the storage upload result with URL and metadata\n   * @throws {StorageError} When no provider is available or upload fails\n   * @example\n   * ```typescript\n   * // Upload to default provider\n   * const result = await storage.upload(fileBlob, 'data.json');\n   * console.log(`Uploaded to: ${result.url}`);\n   *\n   * // Upload to specific provider\n   * const result2 = await storage.upload(fileBlob, 'data.json', 'pinata');\n   * ```\n   */\n  async upload(\n    file: Blob,\n    filename?: string,\n    providerName?: string,\n  ): Promise<StorageUploadResult> {\n    const provider = this.getProvider(providerName);\n    return provider.upload(file, filename);\n  }\n\n  /**\n   * Download a file using the specified or default provider\n   *\n   * @param url - The storage URL\n   * @param providerName - Optional provider to use\n   * @returns Promise with file blob\n   */\n  async download(url: string, providerName?: string): Promise<Blob> {\n    const provider = this.getProvider(providerName);\n    return provider.download(url);\n  }\n\n  /**\n   * List files using the specified or default provider\n   *\n   * @param options - Optional filtering and pagination\n   * @param providerName - Optional provider to use\n   * @returns Promise with file list\n   */\n  async list(\n    options?: StorageListOptions,\n    providerName?: string,\n  ): Promise<StorageFile[]> {\n    const provider = this.getProvider(providerName);\n    return provider.list(options);\n  }\n\n  /**\n   * Delete a file using the specified or default provider\n   *\n   * @param url - The storage URL\n   * @param providerName - Optional provider to use\n   * @returns Promise with success status\n   */\n  async delete(url: string, providerName?: string): Promise<boolean> {\n    const provider = this.getProvider(providerName);\n    return provider.delete(url);\n  }\n\n  /**\n   * Get list of registered storage provider names\n   *\n   * @returns Array of provider names\n   */\n  getStorageProviders(): string[] {\n    return Array.from(this.providers.keys());\n  }\n\n  /**\n   * Get the default storage provider name\n   *\n   * @returns Default provider name or undefined\n   */\n  getDefaultStorageProvider(): string | undefined {\n    return this.defaultProvider || undefined;\n  }\n}\n","import type { VanaConfig, RuntimeConfig, VanaChainId } from \"./types\";\nimport { isWalletConfig, isChainConfig, isVanaChainId } from \"./types\";\nimport type { RelayerCallbacks } from \"./types/config\";\nimport { InvalidConfigurationError } from \"./errors\";\nimport {\n  PermissionsController,\n  ControllerContext,\n} from \"./controllers/permissions\";\nimport { DataController } from \"./controllers/data\";\nimport { ServerController } from \"./controllers/server\";\nimport { ProtocolController } from \"./controllers/protocol\";\nimport { StorageManager, StorageProvider } from \"./storage\";\nimport { createWalletClient, createPublicClient, http } from \"viem\";\nimport { chains } from \"./config/chains\";\nimport { getChainConfig } from \"./chains\";\nimport type { VanaPlatformAdapter } from \"./platform/interface\";\nimport { encryptUserData, decryptUserData } from \"./utils/encryption\";\n\n/**\n * Provides the core SDK functionality for interacting with the Vana network.\n *\n * @remarks\n * This environment-agnostic class contains all SDK logic and accepts a platform\n * adapter to handle environment-specific operations. It initializes all controllers\n * and manages shared context between them.\n *\n * For public usage, use the platform-specific Vana classes that extend this core:\n * - Use `new Vana(config)` from the main package import\n * @example\n * ```typescript\n * // Direct instantiation (typically used internally)\n * const core = new VanaCore({\n *   walletClient: myWalletClient,\n * }, platformAdapter);\n * ```\n * @category Core SDK\n */\nexport class VanaCore {\n  /** Manages gasless data access permissions and trusted server registry. */\n  public readonly permissions: PermissionsController;\n\n  /** Handles user data file operations and schema management. */\n  public readonly data: DataController;\n\n  /** Provides personal server setup and trusted server interactions. */\n  public readonly server: ServerController;\n\n  /** Offers low-level access to Vana protocol smart contracts. */\n  public readonly protocol: ProtocolController;\n\n  /** Handles environment-specific operations like encryption and file systems. */\n  protected platform: VanaPlatformAdapter;\n\n  private readonly relayerCallbacks?: RelayerCallbacks;\n  private readonly storageManager?: StorageManager;\n\n  /**\n   * Initializes a new VanaCore client instance with the provided configuration.\n   *\n   * @remarks\n   * The constructor validates the configuration, initializes storage providers if configured,\n   * creates wallet and public clients, and sets up all SDK controllers with shared context.\n   * @param platform - The platform adapter for environment-specific operations\n   * @param config - The configuration object specifying wallet or chain settings\n   * @throws {InvalidConfigurationError} When the configuration is invalid or incomplete\n   * @example\n   * ```typescript\n   * // Direct instantiation (consider using factory methods instead)\n   * const vanaCore = new VanaCore(platformAdapter, {\n   *   walletClient: myWalletClient,\n   * });\n   * ```\n   */\n  constructor(platform: VanaPlatformAdapter, config: VanaConfig) {\n    // Store the platform adapter\n    this.platform = platform;\n\n    // Validate configuration\n    this.validateConfig(config);\n\n    // Store relayer callbacks if provided\n    this.relayerCallbacks = config.relayerCallbacks;\n\n    // Initialize storage manager if storage providers are provided\n    if (config.storage?.providers) {\n      this.storageManager = new StorageManager();\n\n      // Register all provided storage providers\n      for (const [name, provider] of Object.entries(config.storage.providers)) {\n        const isDefault = name === config.storage.defaultProvider;\n        this.storageManager.register(\n          name,\n          provider as StorageProvider,\n          isDefault,\n        );\n      }\n\n      // If no default was explicitly set but providers exist, use the first one\n      if (\n        !config.storage.defaultProvider &&\n        Object.keys(config.storage.providers).length > 0\n      ) {\n        const firstProviderName = Object.keys(config.storage.providers)[0];\n        this.storageManager.setDefaultProvider(firstProviderName);\n      }\n    }\n\n    // Create wallet client based on configuration type\n    let walletClient;\n\n    if (isWalletConfig(config)) {\n      // Direct wallet client configuration\n      walletClient = config.walletClient;\n    } else if (isChainConfig(config)) {\n      // Chain configuration - create wallet client\n      if (!config.account) {\n        throw new InvalidConfigurationError(\n          \"Account is required when using ChainConfig\",\n        );\n      }\n\n      const chain = chains[config.chainId];\n      if (!chain) {\n        throw new InvalidConfigurationError(\n          `Unsupported chain ID: ${config.chainId}`,\n        );\n      }\n\n      walletClient = createWalletClient({\n        chain,\n        transport: http(config.rpcUrl || chain.rpcUrls.default.http[0]),\n        account: config.account,\n      });\n    } else {\n      throw new InvalidConfigurationError(\n        \"Invalid configuration: must be either WalletConfig or ChainConfig\",\n      );\n    }\n\n    // Create public client for reading contracts\n    const publicClient = createPublicClient({\n      chain: walletClient.chain,\n      transport: http(),\n    });\n\n    // Get default subgraph URL if not provided in config\n    const chainConfig = getChainConfig(walletClient.chain.id);\n    const subgraphUrl = config.subgraphUrl || chainConfig?.subgraphUrl;\n\n    // Create shared context for all controllers, now including the platform adapter\n    const sharedContext: ControllerContext = {\n      walletClient,\n      publicClient,\n      applicationClient: walletClient, // Using same wallet for now\n      relayerCallbacks: this.relayerCallbacks,\n      storageManager: this.storageManager,\n      subgraphUrl,\n      platform: this.platform, // Pass the platform adapter to controllers\n    };\n\n    // Initialize controllers\n    this.permissions = new PermissionsController(sharedContext);\n    this.data = new DataController(sharedContext);\n    this.server = new ServerController(sharedContext);\n    this.protocol = new ProtocolController(sharedContext);\n  }\n\n  /**\n   * Validates the provided configuration object against all requirements.\n   *\n   * @remarks\n   * This method performs comprehensive validation of wallet client configuration,\n   * chain configuration, storage providers, and relayer callbacks.\n   * @param config - The configuration object to validate\n   * @throws {InvalidConfigurationError} When any configuration parameter is invalid\n   */\n  private validateConfig(config: VanaConfig): void {\n    if (!config) {\n      throw new InvalidConfigurationError(\"Configuration object is required\");\n    }\n\n    // Validate relayerCallbacks if provided\n    if (config.relayerCallbacks !== undefined) {\n      if (typeof config.relayerCallbacks !== \"object\") {\n        throw new InvalidConfigurationError(\n          \"relayerCallbacks must be an object\",\n        );\n      }\n    }\n\n    // Validate storage configuration if provided\n    if (config.storage?.providers) {\n      if (typeof config.storage.providers !== \"object\") {\n        throw new InvalidConfigurationError(\n          \"storage.providers must be an object\",\n        );\n      }\n\n      // Validate that all providers have required methods\n      for (const [name, provider] of Object.entries(config.storage.providers)) {\n        if (!provider || typeof provider !== \"object\") {\n          throw new InvalidConfigurationError(\n            `Storage provider '${name}' must be a valid StorageProvider object`,\n          );\n        }\n      }\n\n      // Validate default provider if specified\n      if (config.storage.defaultProvider) {\n        if (!(config.storage.defaultProvider in config.storage.providers)) {\n          throw new InvalidConfigurationError(\n            `Default storage provider '${config.storage.defaultProvider}' not found in providers`,\n          );\n        }\n      }\n    }\n\n    if (isWalletConfig(config)) {\n      // Validate WalletConfig\n      if (!config.walletClient) {\n        throw new InvalidConfigurationError(\"walletClient is required\");\n      }\n\n      // Validate that walletClient is actually a WalletClient\n      if (\n        typeof config.walletClient !== \"object\" ||\n        !config.walletClient.signTypedData\n      ) {\n        throw new InvalidConfigurationError(\n          \"walletClient must be a valid viem WalletClient\",\n        );\n      }\n\n      // Validate that wallet client has a chain\n      if (!config.walletClient.chain) {\n        throw new InvalidConfigurationError(\n          \"walletClient must have a chain configured\",\n        );\n      }\n\n      // Validate that the chain is supported\n      if (!isVanaChainId(config.walletClient.chain.id)) {\n        throw new InvalidConfigurationError(\n          `Unsupported chain ID: ${config.walletClient.chain.id}. Supported chains: 14800 (Moksha testnet), 1480 (Vana mainnet)`,\n        );\n      }\n    } else if (isChainConfig(config)) {\n      // Validate ChainConfig\n      if (!isVanaChainId(config.chainId)) {\n        throw new InvalidConfigurationError(\n          `Unsupported chain ID: ${config.chainId}. Supported chains: 14800 (Moksha testnet), 1480 (Vana mainnet)`,\n        );\n      }\n\n      // Validate rpcUrl if provided\n      if (config.rpcUrl) {\n        if (typeof config.rpcUrl !== \"string\") {\n          throw new InvalidConfigurationError(\"rpcUrl must be a string\");\n        }\n\n        if (config.rpcUrl.trim() === \"\") {\n          throw new InvalidConfigurationError(\"rpcUrl cannot be empty\");\n        }\n\n        // Basic URL validation for RPC URL\n        try {\n          new URL(config.rpcUrl);\n        } catch {\n          throw new InvalidConfigurationError(\"rpcUrl must be a valid URL\");\n        }\n      }\n\n      // Account is optional for ChainConfig, but if provided, validate it\n      if (config.account) {\n        if (typeof config.account !== \"object\" || !config.account.address) {\n          throw new InvalidConfigurationError(\n            \"account must be a valid viem Account object\",\n          );\n        }\n      }\n    } else {\n      throw new InvalidConfigurationError(\n        \"Configuration must be either WalletConfig or ChainConfig\",\n      );\n    }\n  }\n\n  /**\n   * Gets the current chain ID from the wallet client.\n   *\n   * @returns The numeric chain ID of the connected network\n   * @example\n   * ```typescript\n   * const chainId = vana.chainId;\n   * console.log(`Connected to chain: ${chainId}`); // e.g., \"Connected to chain: 14800\"\n   * ```\n   */\n  get chainId(): number {\n    return this.protocol.getChainId();\n  }\n\n  /**\n   * Gets the current chain name from the wallet client.\n   *\n   * @returns The human-readable name of the connected network\n   * @example\n   * ```typescript\n   * const chainName = vana.chainName;\n   * console.log(`Connected to: ${chainName}`); // e.g., \"Connected to: Moksha Testnet\"\n   * ```\n   */\n  get chainName(): string {\n    return this.protocol.getChainName();\n  }\n\n  /**\n   * Retrieves the user's wallet address from the connected client.\n   *\n   * @returns A Promise that resolves to the user's Ethereum address\n   * @example\n   * ```typescript\n   * const address = await vana.getUserAddress();\n   * console.log(`User address: ${address}`); // e.g., \"User address: 0x742d35...\"\n   * ```\n   */\n  async getUserAddress() {\n    const addresses = await this.permissions[\"getUserAddress\"]();\n    return addresses;\n  }\n\n  /**\n   * Retrieves comprehensive runtime configuration information.\n   *\n   * @returns The current runtime configuration including chain, storage, and relayer settings\n   * @example\n   * ```typescript\n   * const config = vana.getConfig();\n   * console.log(`Chain: ${config.chainName} (${config.chainId})`);\n   * console.log(`Storage providers: ${config.storageProviders.join(\", \")}`);\n   * ```\n   */\n  getConfig(): RuntimeConfig {\n    return {\n      chainId: this.chainId as VanaChainId,\n      chainName: this.chainName,\n      relayerCallbacks: this.relayerCallbacks,\n      storageProviders: this.storageManager?.getStorageProviders() || [],\n      defaultStorageProvider: this.storageManager?.getDefaultStorageProvider(),\n    };\n  }\n\n  /**\n   * Sets the platform adapter for environment-specific operations.\n   * This is useful for testing and advanced use cases where you need\n   * to override the default platform detection.\n   *\n   * @param adapter - The platform adapter to use\n   * @example\n   * ```typescript\n   * // For testing with a mock adapter\n   * const mockAdapter = new MockPlatformAdapter();\n   * vana.setPlatformAdapter(mockAdapter);\n   *\n   * // For advanced use cases with custom adapters\n   * const customAdapter = new CustomPlatformAdapter();\n   * vana.setPlatformAdapter(customAdapter);\n   * ```\n   */\n  setPlatformAdapter(adapter: VanaPlatformAdapter): void {\n    this.platform = adapter;\n\n    // Note: Controllers will use the new platform adapter on their next operation\n    // since they access this.platform from the shared context\n  }\n\n  /**\n   * Gets the current platform adapter.\n   * This is useful for advanced use cases where you need to access\n   * the platform adapter directly.\n   *\n   * @returns The current platform adapter\n   * @example\n   * ```typescript\n   * const adapter = vana.getPlatformAdapter();\n   * const encrypted = await adapter.encrypt(data, key);\n   * ```\n   */\n  getPlatformAdapter(): VanaPlatformAdapter {\n    return this.platform;\n  }\n\n  /**\n   * Encrypts user data using the Vana protocol standard encryption.\n   * This method automatically uses the correct platform adapter for the current environment.\n   *\n   * @param data The data to encrypt (string or Blob)\n   * @param walletSignature The wallet signature to use as encryption key\n   * @returns The encrypted data as Blob\n   * @example\n   * ```typescript\n   * const encryptionKey = await generateEncryptionKey(walletClient);\n   * const encrypted = await vana.encryptUserData(\"sensitive data\", encryptionKey);\n   * ```\n   */\n  public async encryptUserData(\n    data: string | Blob,\n    walletSignature: string,\n  ): Promise<Blob> {\n    return encryptUserData(data, walletSignature, this.platform);\n  }\n\n  /**\n   * Decrypts user data using the Vana protocol standard decryption.\n   * This method automatically uses the correct platform adapter for the current environment.\n   *\n   * @param encryptedData The encrypted data (string or Blob)\n   * @param walletSignature The wallet signature to use as decryption key\n   * @returns The decrypted data as Blob\n   * @example\n   * ```typescript\n   * const encryptionKey = await generateEncryptionKey(walletClient);\n   * const decrypted = await vana.decryptUserData(encryptedData, encryptionKey);\n   * const text = await decrypted.text();\n   * ```\n   */\n  public async decryptUserData(\n    encryptedData: string | Blob,\n    walletSignature: string,\n  ): Promise<Blob> {\n    return decryptUserData(encryptedData, walletSignature, this.platform);\n  }\n}\n","/**\n * Chain configuration definitions for Vana networks\n *\n * These provide default configurations for known Vana chains.\n * Applications can use these as-is or override specific values.\n */\n\nimport type { Chain } from \"viem\";\n\nexport interface VanaChainConfig extends Chain {\n  /** URL for the subgraph API endpoint used to query on-chain data */\n  subgraphUrl: string;\n}\n\n/**\n * Vana Mainnet configuration\n */\nexport const vanaMainnet: VanaChainConfig = {\n  id: 1480,\n  name: \"Vana\",\n  nativeCurrency: {\n    name: \"VANA\",\n    symbol: \"VANA\",\n    decimals: 18,\n  },\n  rpcUrls: {\n    default: {\n      http: [\"https://rpc.vana.org\"],\n    },\n  },\n  blockExplorers: {\n    default: {\n      name: \"Vanascan\",\n      url: \"https://vanascan.io\",\n    },\n  },\n  subgraphUrl:\n    \"https://api.goldsky.com/api/public/project_cm168cz887zva010j39il7a6p/subgraphs/vana/7.0.2/gn\",\n};\n\n/**\n * Moksha Testnet configuration\n */\nexport const moksha: VanaChainConfig = {\n  id: 14800,\n  name: \"Moksha Testnet\",\n  nativeCurrency: {\n    name: \"VANA\",\n    symbol: \"VANA\",\n    decimals: 18,\n  },\n  rpcUrls: {\n    default: {\n      http: [\"https://rpc.moksha.vana.org\"],\n    },\n  },\n  blockExplorers: {\n    default: {\n      name: \"Vanascan - Moksha\",\n      url: \"https://moksha.vanascan.io\",\n    },\n  },\n  subgraphUrl:\n    \"https://api.goldsky.com/api/public/project_cm168cz887zva010j39il7a6p/subgraphs/moksha/7.0.4/gn\",\n};\n\n/**\n * Retrieves the chain configuration for a given chain ID.\n *\n * @param chainId - The numeric chain ID to look up\n * @returns The chain configuration if found, undefined otherwise\n * @example\n * ```typescript\n * const config = getChainConfig(1480);\n * if (config) {\n *   console.log('Chain name:', config.name);\n *   console.log('Subgraph URL:', config.subgraphUrl);\n * }\n * ```\n */\nexport function getChainConfig(chainId: number): VanaChainConfig | undefined {\n  switch (chainId) {\n    case 1480:\n      return vanaMainnet;\n    case 14800:\n      return moksha;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Retrieves all available Vana chain configurations.\n *\n * @returns Array of all supported Vana chain configurations\n * @example\n * ```typescript\n * const chains = getAllChains();\n * console.log('Supported chains:');\n * chains.forEach(chain => {\n *   console.log(`- ${chain.name} (ID: ${chain.id})`);\n * });\n * ```\n */\nexport function getAllChains(): VanaChainConfig[] {\n  return [vanaMainnet, moksha];\n}\n","import { formatEther, formatUnits } from \"viem\";\n\n/**\n * Format a bigint or BigNumber to a regular number\n *\n * @param value BigInt, BigNumber or numeric string to convert\n * @returns Regular JavaScript number\n */\nexport function formatNumber(value: bigint | string | number): number {\n  return Number(value);\n}\n\n/**\n * Format wei value to ETH with specified decimal places\n *\n * @param wei Value in wei (as bigint, string, or number)\n * @param decimals Number of decimal places to display (default: 4)\n * @returns Formatted ETH value as string\n */\nexport function formatEth(wei: bigint | string | number, decimals = 4): string {\n  return formatEther(BigInt(wei.toString())).slice(0, decimals + 2);\n}\n\n/**\n * Format a token amount based on its decimals\n *\n * @param amount Raw token amount\n * @param decimals Token decimals (default: 18)\n * @param displayDecimals Decimals to show in formatted output (default: 4)\n * @returns Formatted token amount as string\n */\nexport function formatToken(\n  amount: bigint | string | number,\n  decimals = 18,\n  displayDecimals = 4,\n): string {\n  const value = formatUnits(BigInt(amount.toString()), decimals);\n  const parts = value.split(\".\");\n\n  if (parts.length === 1) {\n    return parts[0];\n  }\n\n  return `${parts[0]}.${parts[1].slice(0, displayDecimals)}`;\n}\n\n/**\n * Format an address for display (showing first 6 and last 4 characters)\n *\n * @param address EVM address\n * @returns Shortened address string\n */\nexport function shortenAddress(address: string): string {\n  if (!address || address.length < 10) return address;\n  return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n","import { Address } from \"viem\";\nimport type { GrantFile, GrantPermissionParams } from \"../types/permissions\";\nimport {\n  createGrantFile,\n  storeGrantFile,\n  retrieveGrantFile,\n} from \"./grantFiles\";\nimport { validateGrant, GrantValidationError } from \"./grantValidation\";\n\n/**\n * High-level utilities for working with grants in the Vana SDK\n */\n\n/**\n * Creates and validates a grant file from permission parameters\n *\n * @param params - The permission parameters to create and validate the grant from\n * @returns The validated grant file object\n */\nexport function createValidatedGrant(params: GrantPermissionParams): GrantFile {\n  const grantFile = createGrantFile(params);\n\n  // Validate the created grant file\n  try {\n    validateGrant(grantFile, {\n      schema: true,\n      grantee: params.to,\n      operation: params.operation,\n    });\n  } catch (error) {\n    throw new GrantValidationError(\n      `Created grant file failed validation: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      { grantFile, params },\n    );\n  }\n\n  return grantFile;\n}\n\n/**\n * Creates a grant file and stores it in IPFS\n *\n * @param params - The permission parameters to create the grant from\n * @param relayerUrl - The URL of the relayer service for IPFS storage\n * @returns Promise resolving to an object containing the grant file and its IPFS URL\n */\nexport async function createAndStoreGrant(\n  params: GrantPermissionParams,\n  relayerUrl: string,\n): Promise<{ grantFile: GrantFile; grantUrl: string }> {\n  const grantFile = createValidatedGrant(params);\n  const grantUrl = await storeGrantFile(grantFile, relayerUrl);\n\n  return { grantFile, grantUrl };\n}\n\n/**\n * Retrieves and validates a grant file from IPFS\n *\n * @param grantUrl - The IPFS URL of the grant file to retrieve\n * @param relayerUrl - Optional URL of the relayer service\n * @returns Promise resolving to the validated grant file\n */\nexport async function retrieveAndValidateGrant(\n  grantUrl: string,\n  relayerUrl?: string,\n): Promise<GrantFile> {\n  const grantFile = await retrieveGrantFile(grantUrl, relayerUrl);\n\n  // Additional validation can be added here if needed\n  return grantFile;\n}\n\n/**\n * Checks if a grant allows access for a specific request\n *\n * @param grantUrl - The IPFS URL of the grant file to check\n * @param requestingAddress - The address making the access request\n * @param operation - The operation being requested\n * @param fileIds - Array of file IDs being accessed (currently unused but part of interface)\n * @param relayerUrl - Optional URL of the relayer service\n * @returns Promise resolving to access result with allowed status, reason, and grant file\n */\nexport async function checkGrantAccess(\n  grantUrl: string,\n  requestingAddress: Address,\n  operation: string,\n  fileIds: number[],\n  relayerUrl?: string,\n): Promise<{ allowed: boolean; reason?: string; grantFile?: GrantFile }> {\n  try {\n    const grantFile = await retrieveAndValidateGrant(grantUrl, relayerUrl);\n\n    // Validate the grant for the request\n    validateGrant(grantFile, {\n      schema: true,\n      grantee: requestingAddress,\n      operation,\n    });\n\n    return { allowed: true, grantFile };\n  } catch (error) {\n    if (error instanceof GrantValidationError) {\n      return {\n        allowed: false,\n        reason: error.message,\n      };\n    }\n\n    return {\n      allowed: false,\n      reason: `Grant access check failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n    };\n  }\n}\n\n/**\n * Utility to check if a grant has expired\n *\n * @param grantFile - The grant file to check for expiration\n * @returns True if the grant has expired, false otherwise\n */\nexport function isGrantExpired(grantFile: GrantFile): boolean {\n  if (!grantFile.expires) {\n    return false; // No expiration set\n  }\n\n  const now = Math.floor(Date.now() / 1000);\n  return now > grantFile.expires;\n}\n\n/**\n * Utility to get the time remaining before grant expires (in seconds)\n *\n * @param grantFile - The grant file to check time remaining for\n * @returns Number of seconds remaining, or null if no expiration is set\n */\nexport function getGrantTimeRemaining(grantFile: GrantFile): number | null {\n  if (!grantFile.expires) {\n    return null; // No expiration set\n  }\n\n  const now = Math.floor(Date.now() / 1000);\n  const remaining = grantFile.expires - now;\n  return Math.max(0, remaining);\n}\n\n/**\n * Creates a human-readable summary of a grant\n *\n * @param grantFile - The grant file to create a summary for\n * @returns A human-readable string describing the grant\n */\nexport function summarizeGrant(grantFile: GrantFile): string {\n  const expiration = grantFile.expires\n    ? new Date(grantFile.expires * 1000).toISOString()\n    : \"No expiration\";\n\n  return `Grant for ${grantFile.grantee} to perform \"${grantFile.operation}\" (expires: ${expiration})`;\n}\n","import type {\n  Controller,\n  ControllerContext,\n  GenericRequest,\n  GenericResponse,\n  RetryConfig,\n  RateLimiterConfig,\n  Middleware,\n  Cache,\n  Observer,\n  Observable,\n} from \"../types/generics\";\n\n/**\n * Base controller class with common functionality\n */\nexport abstract class BaseController<\n  TContext extends ControllerContext = ControllerContext,\n> implements Controller<TContext>\n{\n  public readonly context: TContext;\n\n  constructor(context: TContext) {\n    this.context = context;\n  }\n\n  /**\n   * Execute a request with optional middleware pipeline\n   *\n   * @param request - The generic request object containing parameters and metadata\n   * @param handler - The function that processes the request parameters\n   * @param middleware - Optional array of middleware functions to apply\n   * @returns Promise resolving to a generic response object\n   */\n  protected async executeRequest<TParams, TResponse>(\n    request: GenericRequest<TParams>,\n    handler: (params: TParams) => Promise<TResponse>,\n    middleware: Middleware[] = [],\n  ): Promise<GenericResponse<TResponse>> {\n    try {\n      // Apply request middleware\n      let processedRequest = request;\n      for (const mw of middleware) {\n        if (mw.request) {\n          processedRequest = (await mw.request(\n            processedRequest,\n          )) as GenericRequest<TParams>;\n        }\n      }\n\n      // Execute handler\n      let response = await handler(processedRequest.params);\n\n      // Apply response middleware\n      for (const mw of middleware.reverse()) {\n        if (mw.response) {\n          response = (await mw.response(response)) as Awaited<TResponse>;\n        }\n      }\n\n      return {\n        data: response,\n        success: true,\n      };\n    } catch (error) {\n      // Handle errors with middleware\n      for (const mw of middleware) {\n        if (mw.error) {\n          const handled = await mw.error(error as Error, request);\n          if (handled) {\n            return {\n              data: handled as TResponse,\n              success: true,\n            };\n          }\n        }\n      }\n\n      return {\n        data: undefined as unknown as TResponse,\n        success: false,\n        error: {\n          code: \"EXECUTION_ERROR\",\n          message: error instanceof Error ? error.message : \"Unknown error\",\n          details: error,\n        },\n      };\n    }\n  }\n\n  /**\n   * Validate parameters with optional custom validator\n   *\n   * @param params - The parameters to validate\n   * @param validator - Optional function to validate parameter types\n   * @throws Error if validation fails, asserts type if successful\n   */\n  protected validateParams<T>(\n    params: unknown,\n    validator?: (params: unknown) => params is T,\n  ): asserts params is T {\n    if (validator && !validator(params)) {\n      throw new Error(\"Invalid parameters\");\n    }\n  }\n}\n\n/**\n * Generic retry utility with exponential backoff\n */\nexport class RetryUtility {\n  private static async delay(ms: number): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n  }\n\n  static async withRetry<T>(\n    operation: () => Promise<T>,\n    config: RetryConfig,\n  ): Promise<T> {\n    let lastError: Error | undefined;\n\n    for (let attempt = 1; attempt <= config.maxAttempts; attempt++) {\n      try {\n        return await operation();\n      } catch (error) {\n        lastError = error as Error;\n\n        // Check if we should retry\n        if (config.shouldRetry && !config.shouldRetry(lastError, attempt)) {\n          throw lastError;\n        }\n\n        // Don't delay on the last attempt\n        if (attempt === config.maxAttempts) {\n          break;\n        }\n\n        // Calculate delay with exponential backoff and jitter\n        const baseDelay =\n          config.baseDelay *\n          Math.pow(config.backoffMultiplier || 2, attempt - 1);\n        const maxDelay = config.maxDelay || 30000;\n        const jitter = config.jitter || 0;\n\n        let delay = Math.min(baseDelay, maxDelay);\n\n        if (jitter > 0) {\n          delay += Math.random() * jitter * delay;\n        }\n\n        await this.delay(delay);\n      }\n    }\n\n    throw lastError || new Error(\"Operation failed after retries\");\n  }\n}\n\n/**\n * Generic rate limiter\n */\nexport class RateLimiter {\n  private requests: number[] = [];\n\n  constructor(private config: RateLimiterConfig) {}\n\n  async checkLimit(): Promise<boolean> {\n    const now = Date.now();\n    const windowStart = now - this.config.windowMs;\n\n    // Remove requests outside the window\n    this.requests = this.requests.filter((time) => time > windowStart);\n\n    // Check if we can make a request\n    if (this.requests.length < this.config.requestsPerWindow) {\n      this.requests.push(now);\n      return true;\n    }\n\n    return false;\n  }\n\n  async waitForSlot(): Promise<void> {\n    while (!(await this.checkLimit())) {\n      await new Promise((resolve) => setTimeout(resolve, 100));\n    }\n  }\n\n  getRemainingRequests(): number {\n    const now = Date.now();\n    const windowStart = now - this.config.windowMs;\n    const activeRequests = this.requests.filter((time) => time > windowStart);\n    return Math.max(0, this.config.requestsPerWindow - activeRequests.length);\n  }\n\n  getResetTime(): number {\n    if (this.requests.length === 0) return 0;\n    return Math.max(0, this.requests[0] + this.config.windowMs - Date.now());\n  }\n}\n\n/**\n * Generic in-memory cache implementation\n */\nexport class MemoryCache<TKey = string, TValue = unknown>\n  implements Cache<TKey, TValue>\n{\n  private cache = new Map<TKey, { value: TValue; expiry?: number }>();\n\n  async get(key: TKey): Promise<TValue | undefined> {\n    const item = this.cache.get(key);\n\n    if (!item) return undefined;\n\n    // Check if expired\n    if (item.expiry && Date.now() > item.expiry) {\n      this.cache.delete(key);\n      return undefined;\n    }\n\n    return item.value;\n  }\n\n  async set(key: TKey, value: TValue, ttl?: number): Promise<void> {\n    const expiry = ttl ? Date.now() + ttl : undefined;\n    this.cache.set(key, { value, expiry });\n  }\n\n  async delete(key: TKey): Promise<boolean> {\n    return this.cache.delete(key);\n  }\n\n  async clear(): Promise<void> {\n    this.cache.clear();\n  }\n\n  async has(key: TKey): Promise<boolean> {\n    const exists = this.cache.has(key);\n    if (!exists) return false;\n\n    // Check expiry\n    const item = this.cache.get(key);\n    if (item?.expiry && Date.now() > item.expiry) {\n      this.cache.delete(key);\n      return false;\n    }\n\n    return true;\n  }\n\n  size(): number {\n    return this.cache.size;\n  }\n\n  keys(): TKey[] {\n    return Array.from(this.cache.keys());\n  }\n}\n\n/**\n * Generic event emitter implementation\n */\nexport class EventEmitter<TEvent = unknown> implements Observable<TEvent> {\n  private observers: Observer<TEvent>[] = [];\n\n  subscribe(observer: Observer<TEvent>): () => void {\n    this.observers.push(observer);\n\n    return () => this.unsubscribe(observer);\n  }\n\n  unsubscribe(observer: Observer<TEvent>): void {\n    const index = this.observers.indexOf(observer);\n    if (index > -1) {\n      this.observers.splice(index, 1);\n    }\n  }\n\n  emit(event: TEvent): void {\n    for (const observer of this.observers) {\n      try {\n        const result = observer.notify(event);\n        if (result instanceof Promise) {\n          result.catch((error) => {\n            console.error(\"Observer error:\", error);\n          });\n        }\n      } catch (error) {\n        console.error(\"Observer error:\", error);\n      }\n    }\n  }\n\n  getObserverCount(): number {\n    return this.observers.length;\n  }\n\n  removeAllObservers(): void {\n    this.observers = [];\n  }\n}\n\n/**\n * Generic middleware pipeline\n */\nexport class MiddlewarePipeline {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private middleware: Middleware<any, any>[] = [];\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  use(middleware: Middleware<any, any>): void {\n    this.middleware.push(middleware);\n  }\n\n  async processRequest<TRequest>(request: TRequest): Promise<TRequest> {\n    let processed = request;\n\n    for (const mw of this.middleware) {\n      if (mw.request) {\n        processed = await mw.request(processed);\n      }\n    }\n\n    return processed;\n  }\n\n  async processResponse<TResponse>(response: TResponse): Promise<TResponse> {\n    let processed = response;\n\n    // Process in reverse order\n    for (const mw of this.middleware.slice().reverse()) {\n      if (mw.response) {\n        processed = await mw.response(processed);\n      }\n    }\n\n    return processed;\n  }\n\n  async handleError<TRequest, TResponse>(\n    error: Error,\n    request: TRequest,\n  ): Promise<TResponse | void> {\n    for (const mw of this.middleware) {\n      if (mw.error) {\n        const result = await mw.error(error, request);\n        if (result) {\n          return result;\n        }\n      }\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  getMiddleware(): Middleware<any, any>[] {\n    return [...this.middleware];\n  }\n\n  clear(): void {\n    this.middleware = [];\n  }\n}\n\n/**\n * Generic async queue for managing concurrent operations\n */\nexport class AsyncQueue<T = unknown> {\n  private queue: Array<() => Promise<T>> = [];\n  private running = 0;\n\n  constructor(private concurrency = 1) {}\n\n  async add<R>(operation: () => Promise<R>): Promise<R> {\n    return new Promise((resolve, reject) => {\n      this.queue.push(async () => {\n        try {\n          const result = await operation();\n          resolve(result as unknown as R);\n          return result as unknown as T;\n        } catch (error) {\n          reject(error);\n          throw error;\n        } finally {\n          this.running--;\n          this.processQueue();\n        }\n      });\n\n      this.processQueue();\n    });\n  }\n\n  private processQueue(): void {\n    while (this.running < this.concurrency && this.queue.length > 0) {\n      const operation = this.queue.shift();\n      if (operation) {\n        this.running++;\n        operation().catch(() => {\n          // Error already handled in add method\n        });\n      }\n    }\n  }\n\n  get pending(): number {\n    return this.queue.length;\n  }\n\n  get active(): number {\n    return this.running;\n  }\n\n  get size(): number {\n    return this.queue.length + this.running;\n  }\n\n  clear(): void {\n    this.queue = [];\n  }\n}\n\n/**\n * Generic circuit breaker pattern\n */\nexport class CircuitBreaker {\n  private state: \"closed\" | \"open\" | \"half-open\" = \"closed\";\n  private failures = 0;\n  private lastFailureTime = 0;\n  private successes = 0;\n\n  constructor(\n    private config: {\n      failureThreshold: number;\n      recoveryTimeout: number;\n      halfOpenMaxAttempts?: number;\n    },\n  ) {}\n\n  async execute<TResult>(operation: () => Promise<TResult>): Promise<TResult> {\n    if (this.state === \"open\") {\n      if (Date.now() - this.lastFailureTime > this.config.recoveryTimeout) {\n        this.state = \"half-open\";\n        this.successes = 0;\n      } else {\n        throw new Error(\"Circuit breaker is open\");\n      }\n    }\n\n    try {\n      const result = await operation();\n      this.onSuccess();\n      return result;\n    } catch (error) {\n      this.onFailure();\n      throw error;\n    }\n  }\n\n  private onSuccess(): void {\n    this.failures = 0;\n\n    if (this.state === \"half-open\") {\n      this.successes++;\n      if (this.successes >= (this.config.halfOpenMaxAttempts || 1)) {\n        this.state = \"closed\";\n      }\n    }\n  }\n\n  private onFailure(): void {\n    this.failures++;\n    this.lastFailureTime = Date.now();\n\n    if (this.failures >= this.config.failureThreshold) {\n      this.state = \"open\";\n    }\n  }\n\n  getState(): string {\n    return this.state;\n  }\n\n  getFailures(): number {\n    return this.failures;\n  }\n\n  reset(): void {\n    this.state = \"closed\";\n    this.failures = 0;\n    this.successes = 0;\n    this.lastFailureTime = 0;\n  }\n}\n","import { Address, Hash, recoverTypedDataAddress } from \"viem\";\nimport type { Vana } from \"../index.node\";\nimport type {\n  GenericTypedData,\n  PermissionGrantTypedData,\n  TrustServerTypedData,\n} from \"../types\";\nimport { SignatureError } from \"../errors\";\n\n/**\n * Payload structure for relayer requests.\n * Contains the EIP-712 typed data, signature, and optional expected user address for security verification.\n *\n * @category Server\n */\nexport interface RelayerRequestPayload {\n  /** EIP-712 typed data containing the transaction details */\n  typedData: GenericTypedData;\n  /** User's signature of the typed data */\n  signature: Hash;\n  /** Optional expected user address for security verification */\n  expectedUserAddress?: Address;\n}\n\n/**\n * Unified server-side handler for processing relayed transactions.\n *\n * This function encapsulates the complete relayer workflow:\n * 1. Verifies the signature against the typed data\n * 2. Optionally checks the signer matches the expected user address\n * 3. Routes to the appropriate SDK method based on primaryType\n * 4. Returns the resulting transaction hash\n *\n * Supported transaction types:\n * - Permission: Permission grants\n * - PermissionRevoke: Permission revocations\n * - TrustServer: Trust server operations\n * - UntrustServer: Untrust server operations\n *\n * @param sdk - Initialized Vana SDK instance\n * @param payload - Request payload containing typed data, signature, and optional security check\n * @returns Promise resolving to the transaction hash\n * @throws {SignatureError} When signature verification fails or signer mismatch occurs\n * @throws {Error} When primaryType is unsupported or SDK operations fail\n * @category Server\n * @example\n * ```typescript\n * import { handleRelayerRequest } from 'vana-sdk';\n *\n * // In your relayer API endpoint:\n * export async function POST(request: NextRequest) {\n *   try {\n *     const body = await request.json();\n *     const vana = await createRelayerVana();\n *\n *     const txHash = await handleRelayerRequest(vana, {\n *       typedData: body.typedData,\n *       signature: body.signature,\n *       expectedUserAddress: body.expectedUserAddress\n *     });\n *\n *     return NextResponse.json({\n *       success: true,\n *       transactionHash: txHash\n *     });\n *   } catch (error) {\n *     return NextResponse.json({\n *       success: false,\n *       error: error.message\n *     }, { status: 500 });\n *   }\n * }\n * ```\n */\nexport async function handleRelayerRequest(\n  sdk: Vana,\n  payload: RelayerRequestPayload,\n): Promise<Hash> {\n  const { typedData, signature, expectedUserAddress } = payload;\n\n  // Step 1: Verify signature and recover signer address\n  const signerAddress = await recoverTypedDataAddress({\n    domain: typedData.domain,\n    types: typedData.types,\n    primaryType: typedData.primaryType,\n    message: typedData.message as unknown as Record<string, unknown>,\n    signature,\n  });\n\n  if (!signerAddress) {\n    throw new SignatureError(\n      \"Invalid signature - could not recover signer address\",\n    );\n  }\n\n  // Step 2: Security check - verify signer matches expected user address if provided\n  if (expectedUserAddress) {\n    const normalizedSigner = signerAddress.toLowerCase();\n    const normalizedExpected = expectedUserAddress.toLowerCase();\n\n    if (normalizedSigner !== normalizedExpected) {\n      throw new SignatureError(\n        `Security verification failed: Recovered signer address (${normalizedSigner}) does not match expected user address (${normalizedExpected}). This may be due to incorrect EIP-712 domain configuration.`,\n      );\n    }\n  }\n\n  // Step 3: Route to appropriate SDK method based on primaryType\n  switch (typedData.primaryType) {\n    case \"Permission\":\n      return await sdk.permissions.submitSignedGrant(\n        typedData as unknown as PermissionGrantTypedData,\n        signature,\n      );\n\n    case \"PermissionRevoke\":\n      return await sdk.permissions.submitSignedRevoke(\n        typedData as unknown as GenericTypedData,\n        signature,\n      );\n\n    case \"TrustServer\":\n      return await sdk.permissions.submitSignedTrustServer(\n        typedData as unknown as TrustServerTypedData,\n        signature,\n      );\n\n    case \"UntrustServer\":\n      return await sdk.permissions.submitSignedUntrustServer(\n        typedData as unknown as GenericTypedData,\n        signature,\n      );\n\n    default:\n      throw new Error(`Unsupported operation type: ${typedData.primaryType}`);\n  }\n}\n","import type {\n  GenericRequest,\n  GenericResponse,\n  RetryConfig,\n  RateLimiterConfig,\n  Middleware,\n} from \"../types/generics\";\nimport {\n  RetryUtility,\n  RateLimiter,\n  MiddlewarePipeline,\n  CircuitBreaker,\n} from \"./generics\";\n\n/**\n * Configuration for the generic API client\n */\nexport interface ApiClientConfig {\n  /** Base URL for all requests */\n  baseUrl?: string;\n  /** Default headers */\n  headers?: Record<string, string>;\n  /** Request timeout in milliseconds */\n  timeout?: number;\n  /** Retry configuration */\n  retry?: RetryConfig;\n  /** Rate limiting configuration */\n  rateLimit?: RateLimiterConfig;\n  /** Circuit breaker configuration */\n  circuitBreaker?: {\n    failureThreshold: number;\n    recoveryTimeout: number;\n    halfOpenMaxAttempts?: number;\n  };\n}\n\n/**\n * HTTP method types\n */\nexport type HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n\n/**\n * Request options for API calls\n */\nexport interface RequestOptions {\n  /** HTTP method */\n  method?: HttpMethod;\n  /** Request headers */\n  headers?: Record<string, string>;\n  /** Query parameters */\n  params?: Record<string, unknown>;\n  /** Request timeout */\n  timeout?: number;\n  /** Skip retry for this request */\n  skipRetry?: boolean;\n  /** Skip rate limiting for this request */\n  skipRateLimit?: boolean;\n}\n\n/**\n * Generic API client with middleware, retry, rate limiting, and circuit breaker support\n */\nexport class ApiClient {\n  private readonly config: Required<ApiClientConfig>;\n  private readonly middleware: MiddlewarePipeline;\n  private readonly rateLimiter?: RateLimiter;\n  private readonly circuitBreaker?: CircuitBreaker;\n\n  constructor(config: ApiClientConfig = {}) {\n    this.config = {\n      baseUrl: config.baseUrl || \"\",\n      headers: config.headers || {},\n      timeout: config.timeout || 30000,\n      retry: config.retry || {\n        maxAttempts: 3,\n        baseDelay: 1000,\n        backoffMultiplier: 2,\n        shouldRetry: (error) => error.message.includes(\"network\"),\n      },\n      rateLimit: config.rateLimit || {\n        requestsPerWindow: 100,\n        windowMs: 60000,\n      },\n      circuitBreaker: config.circuitBreaker || {\n        failureThreshold: 5,\n        recoveryTimeout: 60000,\n        halfOpenMaxAttempts: 3,\n      },\n    };\n\n    this.middleware = new MiddlewarePipeline();\n    this.rateLimiter = new RateLimiter(this.config.rateLimit);\n    this.circuitBreaker = new CircuitBreaker(this.config.circuitBreaker);\n  }\n\n  /**\n   * Add middleware to the request pipeline\n   *\n   * @param middleware - The middleware function to add to the pipeline\n   */\n  use(middleware: Middleware): void {\n    this.middleware.use(middleware);\n  }\n\n  /**\n   * Make a generic HTTP request\n   *\n   * @param url - The URL to make the request to\n   * @param options - Request options including method, headers, body, etc.\n   * @returns Promise resolving to the response data\n   */\n  async request<TData = unknown>(\n    url: string,\n    options: RequestOptions = {},\n  ): Promise<GenericResponse<TData>> {\n    const fullUrl = this.buildUrl(url);\n    const requestOptions = this.buildRequestOptions(options);\n\n    const request: GenericRequest<{\n      url: string;\n      options: RequestOptions;\n    }> = {\n      params: {\n        url: fullUrl,\n        options: requestOptions,\n      },\n      options: requestOptions,\n    };\n\n    // Apply rate limiting\n    if (!options.skipRateLimit && this.rateLimiter) {\n      await this.rateLimiter.waitForSlot();\n    }\n\n    // Execute with circuit breaker\n    if (this.circuitBreaker) {\n      return this.circuitBreaker.execute(() =>\n        this.executeRequest<TData>(request),\n      );\n    }\n\n    return this.executeRequest<TData>(request);\n  }\n\n  /**\n   * Make a GET request\n   *\n   * @param url - The URL to make the GET request to\n   * @param options - Request options (excluding method)\n   * @returns Promise resolving to the response data\n   */\n  async get<TData = unknown>(\n    url: string,\n    options: Omit<RequestOptions, \"method\"> = {},\n  ): Promise<GenericResponse<TData>> {\n    return this.request<TData>(url, { ...options, method: \"GET\" });\n  }\n\n  /**\n   * Make a POST request\n   *\n   * @param url - The URL to make the POST request to\n   * @param data - The data to send in the request body\n   * @param options - Request options (excluding method)\n   * @returns Promise resolving to the response data\n   */\n  async post<TData = unknown>(\n    url: string,\n    data?: unknown,\n    options: Omit<RequestOptions, \"method\"> = {},\n  ): Promise<GenericResponse<TData>> {\n    return this.request<TData>(url, {\n      ...options,\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        ...options.headers,\n      },\n    });\n  }\n\n  /**\n   * Make a PUT request\n   *\n   * @param url - The URL to make the PUT request to\n   * @param data - The data to send in the request body\n   * @param options - Request options (excluding method)\n   * @returns Promise resolving to the response data\n   */\n  async put<TData = unknown>(\n    url: string,\n    data?: unknown,\n    options: Omit<RequestOptions, \"method\"> = {},\n  ): Promise<GenericResponse<TData>> {\n    return this.request<TData>(url, {\n      ...options,\n      method: \"PUT\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        ...options.headers,\n      },\n    });\n  }\n\n  /**\n   * Make a DELETE request\n   *\n   * @param url - The URL to make the DELETE request to\n   * @param options - Request options (excluding method)\n   * @returns Promise resolving to the response data\n   */\n  async delete<TData = unknown>(\n    url: string,\n    options: Omit<RequestOptions, \"method\"> = {},\n  ): Promise<GenericResponse<TData>> {\n    return this.request<TData>(url, { ...options, method: \"DELETE\" });\n  }\n\n  /**\n   * Make a PATCH request\n   *\n   * @param url - The URL to make the PATCH request to\n   * @param data - The data to send in the request body\n   * @param options - Request options (excluding method)\n   * @returns Promise resolving to the response data\n   */\n  async patch<TData = unknown>(\n    url: string,\n    data?: unknown,\n    options: Omit<RequestOptions, \"method\"> = {},\n  ): Promise<GenericResponse<TData>> {\n    return this.request<TData>(url, {\n      ...options,\n      method: \"PATCH\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        ...options.headers,\n      },\n    });\n  }\n\n  /**\n   * Execute the actual HTTP request with middleware and retry\n   *\n   * @param request - The generic request object containing URL and options\n   * @returns Promise resolving to the generic response with data\n   */\n  private async executeRequest<TData>(\n    request: GenericRequest<{ url: string; options: RequestOptions }>,\n  ): Promise<GenericResponse<TData>> {\n    const executeWithRetry = async (): Promise<GenericResponse<TData>> => {\n      try {\n        // Process request through middleware\n        const processedRequest = await this.middleware.processRequest(request);\n\n        // Make the actual HTTP request\n        const response = await this.makeHttpRequest<TData>(\n          (\n            processedRequest as GenericRequest<{\n              url: string;\n              options: RequestOptions;\n            }>\n          ).params.url,\n          (\n            processedRequest as GenericRequest<{\n              url: string;\n              options: RequestOptions;\n            }>\n          ).params.options,\n        );\n\n        // Process response through middleware\n        const processedResponse =\n          await this.middleware.processResponse(response);\n\n        return processedResponse;\n      } catch (error) {\n        // Try to handle error with middleware\n        const handledResponse = await this.middleware.handleError<\n          typeof request,\n          GenericResponse<TData>\n        >(error as Error, request);\n\n        if (handledResponse) {\n          return handledResponse;\n        }\n\n        throw error;\n      }\n    };\n\n    // Apply retry logic if not skipped\n    if (!request.params.options.skipRetry) {\n      return RetryUtility.withRetry(executeWithRetry, this.config.retry);\n    }\n\n    return executeWithRetry();\n  }\n\n  /**\n   * Make the actual HTTP request using fetch API\n   *\n   * @param url - The URL to make the request to\n   * @param options - The request options including method, headers, body, etc.\n   * @returns Promise resolving to the generic response with data\n   */\n  private async makeHttpRequest<TData>(\n    url: string,\n    options: RequestOptions,\n  ): Promise<GenericResponse<TData>> {\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => {\n      controller.abort();\n    }, options.timeout || this.config.timeout);\n\n    try {\n      const response = await fetch(url, {\n        method: options.method || \"GET\",\n        headers: {\n          ...this.config.headers,\n          ...options.headers,\n        },\n        signal: controller.signal,\n        // Add body for POST/PUT/PATCH requests\n        ...(options.method &&\n          [\"POST\", \"PUT\", \"PATCH\"].includes(options.method) && {\n            body: JSON.stringify(options.params),\n          }),\n      });\n\n      clearTimeout(timeoutId);\n\n      const responseData: unknown = await response.json();\n      const data = responseData as { message?: string; [key: string]: unknown };\n\n      if (!response.ok) {\n        return {\n          data: null as unknown as TData,\n          success: false,\n          error: {\n            code: response.status.toString(),\n            message: data.message || response.statusText,\n            details: data,\n          },\n        };\n      }\n\n      return {\n        data: responseData as TData,\n        success: true,\n        meta: {\n          status: response.status,\n          statusText: response.statusText,\n          headers: Object.fromEntries(response.headers.entries()),\n        },\n      };\n    } catch (error) {\n      clearTimeout(timeoutId);\n\n      if (error instanceof Error && error.name === \"AbortError\") {\n        return {\n          data: null as unknown as TData,\n          success: false,\n          error: {\n            code: \"TIMEOUT\",\n            message: \"Request timeout\",\n            details: error,\n          },\n        };\n      }\n\n      return {\n        data: null as unknown as TData,\n        success: false,\n        error: {\n          code: \"NETWORK_ERROR\",\n          message: error instanceof Error ? error.message : \"Unknown error\",\n          details: error,\n        },\n      };\n    }\n  }\n\n  /**\n   * Build the full URL\n   *\n   * @param url - The URL or path to build the full URL from\n   * @returns The complete URL string\n   */\n  private buildUrl(url: string): string {\n    if (url.startsWith(\"http\")) {\n      return url;\n    }\n\n    const baseUrl = this.config.baseUrl.endsWith(\"/\")\n      ? this.config.baseUrl.slice(0, -1)\n      : this.config.baseUrl;\n    const path = url.startsWith(\"/\") ? url : `/${url}`;\n\n    return `${baseUrl}${path}`;\n  }\n\n  /**\n   * Build request options with defaults\n   *\n   * @param options - The request options to merge with defaults\n   * @returns The merged request options with defaults applied\n   */\n  private buildRequestOptions(options: RequestOptions): RequestOptions {\n    return {\n      method: \"GET\",\n      headers: {},\n      timeout: this.config.timeout,\n      ...options,\n    };\n  }\n\n  /**\n   * Get client statistics\n   *\n   * @returns Object containing client statistics and performance metrics\n   */\n  getStats() {\n    return {\n      rateLimiter: this.rateLimiter\n        ? {\n            remaining: this.rateLimiter.getRemainingRequests(),\n            resetTime: this.rateLimiter.getResetTime(),\n          }\n        : null,\n      circuitBreaker: this.circuitBreaker\n        ? {\n            state: this.circuitBreaker.getState(),\n            failures: this.circuitBreaker.getFailures(),\n          }\n        : null,\n      middleware: {\n        count: this.middleware.getMiddleware().length,\n      },\n    };\n  }\n\n  /**\n   * Reset client state\n   */\n  reset(): void {\n    this.circuitBreaker?.reset();\n    this.middleware.clear();\n  }\n}\n"],"mappings":"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","names":["Ajv","addFormats","DLPRegistryTreasuryABI","DLPRegistryTreasuryABI","extractIpfsHash","import_ajv","import_ajv_formats","Ajv","addFormats","extractIpfsHash","import_viem","import_viem","import_viem","import_viem","import_viem","vanaMainnet","import_viem","import_viem"]}