@fiatsend/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config.ts","../src/abis/MobileNumberNFT.ts","../src/abis/FiatsendGateway.ts","../src/abis/PaymentRouter.ts","../src/abis/Withdrawals.ts","../src/abis/LiquidityPool.ts","../src/abis/VaultController.ts","../src/abis/GHSFIAT.ts","../src/abis/PayoutEscrow.ts","../src/abis/P2PExchange.ts","../src/resources/identity.ts","../src/resources/gateway.ts","../src/resources/payments.ts","../src/resources/withdrawals.ts","../src/resources/liquidity.ts","../src/resources/vaults.ts","../src/resources/payouts.ts","../src/resources/p2p.ts","../src/client.ts"],"names":["config","FiatsendError","FiatsendErrorCode","getContract","wrapError","validateOfframpParams","mapStatus","createPublicClient","http"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Chain configurations and deployed contract addresses.\n *\n * Contract addresses are placeholder `0x0000...` until deployment.\n * Override via `FiatsendClientConfig.contractAddresses` for testnet/mainnet.\n *\n * @module @fiatsend/core/config\n */\n\nimport type { Address } from '@fiatsend/types';\n\n/** Addresses of all deployed Fiatsend contracts on a given chain */\nexport interface ContractAddresses {\n mobileNumberNFT: Address;\n gateway: Address;\n paymentRouter: Address;\n withdrawals: Address;\n liquidityPool: Address;\n vaultController: Address;\n ghsFiat: Address;\n /** PayoutEscrow — core B2B payout claim contract */\n payoutEscrow: Address;\n /** P2PExchange — peer-to-peer exchange with payment references */\n p2pExchange: Address;\n}\n\n/** Full chain configuration including RPC and contract addresses */\nexport interface ChainConfig {\n chainId: number;\n name: string;\n rpcUrl: string;\n contracts: ContractAddresses;\n}\n\n/** Zero address placeholder for undeployed contracts */\nconst ZERO = '0x0000000000000000000000000000000000000000' as Address;\n\n/**\n * Pre-configured chain definitions.\n *\n * Contract addresses will be populated after deployment.\n * Override any chain config with `FiatsendClientConfig.contractAddresses`.\n */\nexport const CHAINS: Record<string, ChainConfig> = {\n bsc: {\n chainId: 56,\n name: 'BNB Smart Chain',\n rpcUrl: 'https://bsc-dataseed.binance.org',\n contracts: {\n mobileNumberNFT: ZERO,\n gateway: ZERO,\n paymentRouter: ZERO,\n withdrawals: ZERO,\n liquidityPool: ZERO,\n vaultController: ZERO,\n ghsFiat: ZERO,\n payoutEscrow: ZERO,\n p2pExchange: ZERO,\n },\n },\n polygon: {\n chainId: 137,\n name: 'Polygon',\n rpcUrl: 'https://polygon-rpc.com',\n contracts: {\n mobileNumberNFT: ZERO,\n gateway: ZERO,\n paymentRouter: ZERO,\n withdrawals: ZERO,\n liquidityPool: ZERO,\n vaultController: ZERO,\n ghsFiat: ZERO,\n payoutEscrow: ZERO,\n p2pExchange: ZERO,\n },\n },\n bscTestnet: {\n chainId: 97,\n name: 'BNB Smart Chain Testnet',\n rpcUrl: 'https://bnb-testnet.g.alchemy.com/v2/f-aLkrbDR0Yn9cafkJrazWwWCh8DrbVF',\n contracts: {\n mobileNumberNFT: \"0x9f9914d4F528268CE070C52605852BB5207f0767\",\n gateway: \"0x284f2D3f65aCAdD30B06F963c316161385728B88\",\n paymentRouter: \"0x701ECdb6823fc3e258c7E291D2D8C16BC52Fbe94\",\n withdrawals: \"0x008864a6937cF16acbb0D08cBFE0a1b59FbDA2aB\",\n liquidityPool: \"0x915Be609c7aA429322447951c8905220D82a4e20\",\n vaultController: \"0x6c15230473422471ae0653B3530C840836092dd5\",\n ghsFiat: \"0x4D0FB402146204636f663f179828D409d4B578bf\",\n payoutEscrow: \"0xE3d86823f533a400D24AB3F01f9c907Ea07012AB\",\n p2pExchange: \"0x3364A46C779B60A6aCe8825C1e5A52dDB40cF256\",\n },\n },\n polygonMumbai: {\n chainId: 80001,\n name: 'Polygon Mumbai Testnet',\n rpcUrl: 'https://rpc-mumbai.maticvigil.com',\n contracts: {\n mobileNumberNFT: ZERO,\n gateway: ZERO,\n paymentRouter: ZERO,\n withdrawals: ZERO,\n liquidityPool: ZERO,\n vaultController: ZERO,\n ghsFiat: ZERO,\n payoutEscrow: ZERO,\n p2pExchange: ZERO,\n },\n },\n};\n\n/**\n * Looks up a ChainConfig by chain name or numeric chain ID.\n *\n * @param chainIdOrName - Chain name (e.g., \"bsc\") or numeric chain ID (e.g., 56)\n * @returns ChainConfig if found\n * @throws Error if the chain is not configured\n */\nexport function getChainConfig(chainIdOrName: string | number): ChainConfig {\n if (typeof chainIdOrName === 'string') {\n const config = CHAINS[chainIdOrName];\n if (!config) {\n throw new Error(\n `Chain \"${chainIdOrName}\" is not configured. Available chains: ${Object.keys(CHAINS).join(', ')}`,\n );\n }\n return config;\n }\n\n const config = Object.values(CHAINS).find((c) => c.chainId === chainIdOrName);\n if (!config) {\n throw new Error(\n `Chain ID ${chainIdOrName} is not configured. Available chain IDs: ${Object.values(CHAINS)\n .map((c) => c.chainId)\n .join(', ')}`,\n );\n }\n return config;\n}\n","/**\n * ABI for the MobileNumberNFT contract.\n *\n * Soulbound ERC-721 identity NFT tied to an encrypted phone number.\n * One NFT per user. Non-transferable after mint. Supports KYC tiers (0–2).\n */\nexport const MobileNumberNFTABI = [\n // ─── Custom Errors ────────────────────────────────────────────────────────\n {\n type: 'error',\n name: 'AlreadyRegistered',\n inputs: [],\n },\n {\n type: 'error',\n name: 'PhoneAlreadyRegistered',\n inputs: [],\n },\n {\n type: 'error',\n name: 'NotAuthorized',\n inputs: [],\n },\n {\n type: 'error',\n name: 'InvalidKYCLevel',\n inputs: [],\n },\n {\n type: 'error',\n name: 'TransferNotAllowed',\n inputs: [],\n },\n {\n type: 'error',\n name: 'SignatureExpired',\n inputs: [],\n },\n {\n type: 'error',\n name: 'InvalidSignature',\n inputs: [],\n },\n {\n type: 'error',\n name: 'ZeroAddress',\n inputs: [],\n },\n\n // ─── Events ───────────────────────────────────────────────────────────────\n {\n type: 'event',\n name: 'MobileNumberRegistered',\n inputs: [\n { name: 'user', type: 'address', indexed: true, internalType: 'address' },\n { name: 'tokenId', type: 'uint256', indexed: true, internalType: 'uint256' },\n { name: 'countryCode', type: 'string', indexed: false, internalType: 'string' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'KYCLevelUpdated',\n inputs: [\n { name: 'user', type: 'address', indexed: true, internalType: 'address' },\n { name: 'tokenId', type: 'uint256', indexed: true, internalType: 'uint256' },\n { name: 'newLevel', type: 'uint8', indexed: false, internalType: 'uint8' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n { name: 'from', type: 'address', indexed: true, internalType: 'address' },\n { name: 'to', type: 'address', indexed: true, internalType: 'address' },\n { name: 'tokenId', type: 'uint256', indexed: true, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n { name: 'owner', type: 'address', indexed: true, internalType: 'address' },\n { name: 'approved', type: 'address', indexed: true, internalType: 'address' },\n { name: 'tokenId', type: 'uint256', indexed: true, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ApprovalForAll',\n inputs: [\n { name: 'owner', type: 'address', indexed: true, internalType: 'address' },\n { name: 'operator', type: 'address', indexed: true, internalType: 'address' },\n { name: 'approved', type: 'bool', indexed: false, internalType: 'bool' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OwnershipTransferred',\n inputs: [\n { name: 'previousOwner', type: 'address', indexed: true, internalType: 'address' },\n { name: 'newOwner', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n\n // ─── Constructor ──────────────────────────────────────────────────────────\n {\n type: 'constructor',\n inputs: [{ name: 'baseURI', type: 'string', internalType: 'string' }],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Registration ──────────────────────────────────────────────\n {\n type: 'function',\n name: 'registerMobile',\n inputs: [\n { name: 'encryptedPhone', type: 'bytes', internalType: 'bytes' },\n { name: 'countryCode', type: 'string', internalType: 'string' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'registerMobileWithSignature',\n inputs: [\n { name: 'user', type: 'address', internalType: 'address' },\n { name: 'encryptedPhone', type: 'bytes', internalType: 'bytes' },\n { name: 'countryCode', type: 'string', internalType: 'string' },\n { name: 'deadline', type: 'uint256', internalType: 'uint256' },\n { name: 'signature', type: 'bytes', internalType: 'bytes' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: KYC ───────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'updateKYCLevel',\n inputs: [\n { name: 'tokenId', type: 'uint256', internalType: 'uint256' },\n { name: 'newLevel', type: 'uint8', internalType: 'uint8' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Admin ─────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'setAuthorizedMinter',\n inputs: [\n { name: 'minter', type: 'address', internalType: 'address' },\n { name: 'authorized', type: 'bool', internalType: 'bool' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setBaseURI',\n inputs: [{ name: 'baseURI', type: 'string', internalType: 'string' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'transferOwnership',\n inputs: [{ name: 'newOwner', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'renounceOwnership',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: View ──────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'getTokenId',\n inputs: [{ name: 'user', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getTokenIdByPhone',\n inputs: [{ name: 'encryptedPhone', type: 'bytes', internalType: 'bytes' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getKYCLevel',\n inputs: [{ name: 'tokenId', type: 'uint256', internalType: 'uint256' }],\n outputs: [{ name: '', type: 'uint8', internalType: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getKYCLevelByAddress',\n inputs: [{ name: 'user', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint8', internalType: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getCountryCode',\n inputs: [{ name: 'tokenId', type: 'uint256', internalType: 'uint256' }],\n outputs: [{ name: '', type: 'string', internalType: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getEncryptedPhone',\n inputs: [{ name: 'tokenId', type: 'uint256', internalType: 'uint256' }],\n outputs: [{ name: '', type: 'bytes', internalType: 'bytes' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'nonces',\n inputs: [{ name: 'user', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'owner',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'ownerOf',\n inputs: [{ name: 'tokenId', type: 'uint256', internalType: 'uint256' }],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'balanceOf',\n inputs: [{ name: 'owner', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'tokenURI',\n inputs: [{ name: 'tokenId', type: 'uint256', internalType: 'uint256' }],\n outputs: [{ name: '', type: 'string', internalType: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'totalSupply',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n inputs: [{ name: 'index', type: 'uint256', internalType: 'uint256' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'tokenOfOwnerByIndex',\n inputs: [\n { name: 'owner', type: 'address', internalType: 'address' },\n { name: 'index', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'supportsInterface',\n inputs: [{ name: 'interfaceId', type: 'bytes4', internalType: 'bytes4' }],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'name',\n inputs: [],\n outputs: [{ name: '', type: 'string', internalType: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'symbol',\n inputs: [],\n outputs: [{ name: '', type: 'string', internalType: 'string' }],\n stateMutability: 'view',\n },\n] as const;\n","/**\n * ABI for the FiatsendGateway contract.\n *\n * Core UUPS-upgradeable gateway for onramp/offramp operations.\n * Handles token conversion, KYC gating, fee collection, and daily limits.\n */\nexport const FiatsendGatewayABI = [\n // ─── Custom Errors ────────────────────────────────────────────────────────\n { type: 'error', name: 'TokenNotSupported', inputs: [] },\n { type: 'error', name: 'NoMobileNFT', inputs: [] },\n { type: 'error', name: 'KYCRequired', inputs: [] },\n { type: 'error', name: 'BelowMinimum', inputs: [] },\n { type: 'error', name: 'DailyLimitExceeded', inputs: [] },\n { type: 'error', name: 'ZeroAddress', inputs: [] },\n { type: 'error', name: 'ZeroAmount', inputs: [] },\n { type: 'error', name: 'InvalidFeeRate', inputs: [] },\n { type: 'error', name: 'NotAuthorizedOnramp', inputs: [] },\n { type: 'error', name: 'NotAuthorizedContract', inputs: [] },\n\n // ─── Events ───────────────────────────────────────────────────────────────\n {\n type: 'event',\n name: 'OfframpInitiated',\n inputs: [\n { name: 'user', type: 'address', indexed: true, internalType: 'address' },\n { name: 'token', type: 'address', indexed: true, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n { name: 'fee', type: 'uint256', indexed: false, internalType: 'uint256' },\n { name: 'phoneNumber', type: 'string', indexed: false, internalType: 'string' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OnrampCompleted',\n inputs: [\n { name: 'user', type: 'address', indexed: true, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ConversionRateUpdated',\n inputs: [\n { name: 'token', type: 'address', indexed: true, internalType: 'address' },\n { name: 'rate', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'TokenAdded',\n inputs: [{ name: 'token', type: 'address', indexed: true, internalType: 'address' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'TokenRemoved',\n inputs: [{ name: 'token', type: 'address', indexed: true, internalType: 'address' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'FeeCollected',\n inputs: [\n { name: 'token', type: 'address', indexed: true, internalType: 'address' },\n { name: 'feeAmount', type: 'uint256', indexed: false, internalType: 'uint256' },\n { name: 'treasury', type: 'address', indexed: false, internalType: 'address' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Paused',\n inputs: [{ name: 'account', type: 'address', indexed: false, internalType: 'address' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Unpaused',\n inputs: [{ name: 'account', type: 'address', indexed: false, internalType: 'address' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OwnershipTransferred',\n inputs: [\n { name: 'previousOwner', type: 'address', indexed: true, internalType: 'address' },\n { name: 'newOwner', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Upgraded',\n inputs: [{ name: 'implementation', type: 'address', indexed: true, internalType: 'address' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Initialized',\n inputs: [{ name: 'version', type: 'uint64', indexed: false, internalType: 'uint64' }],\n anonymous: false,\n },\n\n // ─── Functions: Initializer ───────────────────────────────────────────────\n {\n type: 'function',\n name: 'initialize',\n inputs: [\n { name: '_ghsFiatToken', type: 'address', internalType: 'address' },\n { name: '_mobileNumberNFT', type: 'address', internalType: 'address' },\n { name: '_treasury', type: 'address', internalType: 'address' },\n { name: '_feeRate', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Core operations ───────────────────────────────────────────\n {\n type: 'function',\n name: 'offrampFor',\n inputs: [\n { name: 'user', type: 'address', internalType: 'address' },\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n { name: 'phoneNumber', type: 'string', internalType: 'string' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'offramp',\n inputs: [\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n { name: 'phoneNumber', type: 'string', internalType: 'string' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'onramp',\n inputs: [\n { name: 'user', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Admin — Configuration ────────────────────────────────────\n {\n type: 'function',\n name: 'setConversionRate',\n inputs: [\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'rate', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'addSupportedToken',\n inputs: [{ name: 'token', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'removeSupportedToken',\n inputs: [{ name: 'token', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setKYC',\n inputs: [\n { name: 'user', type: 'address', internalType: 'address' },\n { name: 'status', type: 'bool', internalType: 'bool' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setProtocolFee',\n inputs: [{ name: 'newFeeRate', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setMinWithdrawAmount',\n inputs: [{ name: 'amount', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setDailyLimit',\n inputs: [{ name: 'limit', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setWithdrawalsContract',\n inputs: [{ name: '_withdrawals', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setAuthorizedOnramper',\n inputs: [\n { name: 'onramper', type: 'address', internalType: 'address' },\n { name: 'authorized', type: 'bool', internalType: 'bool' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setAuthorizedContract',\n inputs: [\n { name: 'contractAddr', type: 'address', internalType: 'address' },\n { name: 'authorized', type: 'bool', internalType: 'bool' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setProtocolTreasury',\n inputs: [{ name: 'treasury', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'emergencyWithdraw',\n inputs: [\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'pause',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'unpause',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'transferOwnership',\n inputs: [{ name: 'newOwner', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'renounceOwnership',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'upgradeTo',\n inputs: [{ name: 'newImplementation', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'upgradeToAndCall',\n inputs: [\n { name: 'newImplementation', type: 'address', internalType: 'address' },\n { name: 'data', type: 'bytes', internalType: 'bytes' },\n ],\n outputs: [],\n stateMutability: 'payable',\n },\n\n // ─── Functions: View ──────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'isTokenSupported',\n inputs: [{ name: 'token', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getConversionRate',\n inputs: [{ name: 'token', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'isKYCPassed',\n inputs: [{ name: 'user', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getDailyVolume',\n inputs: [{ name: 'user', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'isAuthorizedContract',\n inputs: [{ name: 'contractAddr', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'protocolFeeRate',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'protocolTreasury',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'minWithdrawAmount',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'dailyLimit',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'paused',\n inputs: [],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'owner',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MAX_FEE_RATE',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'KYC_THRESHOLD',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'ghsFiatToken',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'mobileNumberNFT',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'withdrawalsContract',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'proxiableUUID',\n inputs: [],\n outputs: [{ name: '', type: 'bytes32', internalType: 'bytes32' }],\n stateMutability: 'view',\n },\n] as const;\n","/**\n * ABI for the PaymentRouter contract.\n *\n * Routes P2P payments and payment requests between users.\n * Resolves phone-number-based payments via MobileNumberNFT.\n */\nexport const PaymentRouterABI = [\n // ─── Custom Errors ────────────────────────────────────────────────────────\n { type: 'error', name: 'ZeroAddress', inputs: [] },\n { type: 'error', name: 'ZeroAmount', inputs: [] },\n { type: 'error', name: 'PhoneNotRegistered', inputs: [] },\n { type: 'error', name: 'RequestNotFound', inputs: [] },\n { type: 'error', name: 'RequestNotPending', inputs: [] },\n { type: 'error', name: 'NotRequestOwner', inputs: [] },\n { type: 'error', name: 'NotRequestRecipient', inputs: [] },\n { type: 'error', name: 'SelfPayment', inputs: [] },\n\n // ─── Events ───────────────────────────────────────────────────────────────\n {\n type: 'event',\n name: 'PaymentSent',\n inputs: [\n { name: 'from', type: 'address', indexed: true, internalType: 'address' },\n { name: 'to', type: 'address', indexed: true, internalType: 'address' },\n { name: 'token', type: 'address', indexed: false, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n { name: 'memo', type: 'string', indexed: false, internalType: 'string' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PaymentRequestCreated',\n inputs: [\n { name: 'requestId', type: 'uint256', indexed: true, internalType: 'uint256' },\n { name: 'from', type: 'address', indexed: true, internalType: 'address' },\n { name: 'to', type: 'address', indexed: true, internalType: 'address' },\n { name: 'token', type: 'address', indexed: false, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PaymentRequestPaid',\n inputs: [\n { name: 'requestId', type: 'uint256', indexed: true, internalType: 'uint256' },\n { name: 'paidBy', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PaymentRequestCancelled',\n inputs: [{ name: 'requestId', type: 'uint256', indexed: true, internalType: 'uint256' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OwnershipTransferred',\n inputs: [\n { name: 'previousOwner', type: 'address', indexed: true, internalType: 'address' },\n { name: 'newOwner', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n\n // ─── Constructor ──────────────────────────────────────────────────────────\n {\n type: 'constructor',\n inputs: [\n { name: '_mobileNumberNFT', type: 'address', internalType: 'address' },\n { name: '_feeTreasury', type: 'address', internalType: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Payments ──────────────────────────────────────────────────\n {\n type: 'function',\n name: 'send',\n inputs: [\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'to', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n { name: 'memo', type: 'string', internalType: 'string' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'sendToPhone',\n inputs: [\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'encryptedPhone', type: 'bytes', internalType: 'bytes' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n { name: 'memo', type: 'string', internalType: 'string' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Payment Requests ─────────────────────────────────────────\n {\n type: 'function',\n name: 'createPaymentRequest',\n inputs: [\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'from', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n { name: 'memo', type: 'string', internalType: 'string' },\n ],\n outputs: [{ name: 'requestId', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'payRequest',\n inputs: [{ name: 'requestId', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'cancelRequest',\n inputs: [{ name: 'requestId', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Admin ─────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'setP2PFeeRate',\n inputs: [{ name: 'rate', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setFeeTreasury',\n inputs: [{ name: 'treasury', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'transferOwnership',\n inputs: [{ name: 'newOwner', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'renounceOwnership',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: View ──────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'getPaymentRequest',\n inputs: [{ name: 'requestId', type: 'uint256', internalType: 'uint256' }],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IPaymentRouter.PaymentRequest',\n components: [\n { name: 'id', type: 'uint256', internalType: 'uint256' },\n { name: 'from', type: 'address', internalType: 'address' },\n { name: 'to', type: 'address', internalType: 'address' },\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n { name: 'memo', type: 'string', internalType: 'string' },\n { name: 'status', type: 'uint8', internalType: 'enum IPaymentRouter.RequestStatus' },\n { name: 'createdAt', type: 'uint256', internalType: 'uint256' },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'paymentRequestCounter',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'p2pFeeRate',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'feeTreasury',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'mobileNumberNFT',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'owner',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n] as const;\n","/**\n * ABI for the Withdrawals contract.\n *\n * Manages withdrawal lifecycle: pending → processing → completed/failed.\n * Only the gateway can create withdrawals. Owner manages status transitions.\n */\nexport const WithdrawalsABI = [\n // ─── Custom Errors ────────────────────────────────────────────────────────\n { type: 'error', name: 'OnlyGateway', inputs: [] },\n { type: 'error', name: 'WithdrawalNotFound', inputs: [] },\n { type: 'error', name: 'InvalidStatus', inputs: [] },\n { type: 'error', name: 'ZeroAddress', inputs: [] },\n { type: 'error', name: 'ZeroAmount', inputs: [] },\n\n // ─── Events ───────────────────────────────────────────────────────────────\n {\n type: 'event',\n name: 'WithdrawalCreated',\n inputs: [\n { name: 'id', type: 'uint256', indexed: true, internalType: 'uint256' },\n { name: 'user', type: 'address', indexed: true, internalType: 'address' },\n { name: 'token', type: 'address', indexed: false, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n { name: 'fee', type: 'uint256', indexed: false, internalType: 'uint256' },\n { name: 'phoneNumber', type: 'string', indexed: false, internalType: 'string' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'WithdrawalProcessing',\n inputs: [{ name: 'id', type: 'uint256', indexed: true, internalType: 'uint256' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'WithdrawalCompleted',\n inputs: [\n { name: 'id', type: 'uint256', indexed: true, internalType: 'uint256' },\n { name: 'completedAt', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'WithdrawalFailed',\n inputs: [\n { name: 'id', type: 'uint256', indexed: true, internalType: 'uint256' },\n { name: 'user', type: 'address', indexed: true, internalType: 'address' },\n { name: 'refundAmount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'GatewayUpdated',\n inputs: [{ name: 'gateway', type: 'address', indexed: true, internalType: 'address' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OwnershipTransferred',\n inputs: [\n { name: 'previousOwner', type: 'address', indexed: true, internalType: 'address' },\n { name: 'newOwner', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n\n // ─── Constructor ──────────────────────────────────────────────────────────\n {\n type: 'constructor',\n inputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Admin ─────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'setGateway',\n inputs: [{ name: '_gateway', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'processWithdrawal',\n inputs: [{ name: 'id', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'completeWithdrawal',\n inputs: [{ name: 'id', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'failWithdrawal',\n inputs: [{ name: 'id', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Gateway-only ──────────────────────────────────────────────\n {\n type: 'function',\n name: 'createWithdrawal',\n inputs: [\n { name: 'user', type: 'address', internalType: 'address' },\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n { name: 'fee', type: 'uint256', internalType: 'uint256' },\n { name: 'paymentMethod', type: 'uint8', internalType: 'uint8' },\n { name: 'phoneNumber', type: 'string', internalType: 'string' },\n ],\n outputs: [{ name: 'id', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: View ──────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'getWithdrawal',\n inputs: [{ name: 'id', type: 'uint256', internalType: 'uint256' }],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct Withdrawals.Withdrawal',\n components: [\n { name: 'id', type: 'uint256', internalType: 'uint256' },\n { name: 'user', type: 'address', internalType: 'address' },\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n { name: 'fee', type: 'uint256', internalType: 'uint256' },\n { name: 'status', type: 'uint8', internalType: 'uint8' },\n { name: 'paymentMethod', type: 'uint8', internalType: 'uint8' },\n { name: 'phoneNumber', type: 'string', internalType: 'string' },\n { name: 'createdAt', type: 'uint256', internalType: 'uint256' },\n { name: 'completedAt', type: 'uint256', internalType: 'uint256' },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getUserWithdrawals',\n inputs: [{ name: 'user', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256[]', internalType: 'uint256[]' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'withdrawalCounter',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'gateway',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'STATUS_PENDING',\n inputs: [],\n outputs: [{ name: '', type: 'uint8', internalType: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'STATUS_PROCESSING',\n inputs: [],\n outputs: [{ name: '', type: 'uint8', internalType: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'STATUS_COMPLETED',\n inputs: [],\n outputs: [{ name: '', type: 'uint8', internalType: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'STATUS_FAILED',\n inputs: [],\n outputs: [{ name: '', type: 'uint8', internalType: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'owner',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n] as const;\n","/**\n * ABI for the LiquidityPool contract.\n *\n * LPs deposit a supported stablecoin and earn a proportional share of\n * conversion fees distributed by the gateway.\n */\nexport const LiquidityPoolABI = [\n // ─── Custom Errors ────────────────────────────────────────────────────────\n { type: 'error', name: 'BelowMinDeposit', inputs: [] },\n { type: 'error', name: 'ZeroAmount', inputs: [] },\n { type: 'error', name: 'LockPeriodActive', inputs: [] },\n { type: 'error', name: 'InsufficientBalance', inputs: [] },\n { type: 'error', name: 'OnlyGateway', inputs: [] },\n { type: 'error', name: 'ZeroAddress', inputs: [] },\n\n // ─── Events ───────────────────────────────────────────────────────────────\n {\n type: 'event',\n name: 'Deposited',\n inputs: [\n { name: 'user', type: 'address', indexed: true, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Withdrawn',\n inputs: [\n { name: 'user', type: 'address', indexed: true, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'RewardsClaimed',\n inputs: [\n { name: 'user', type: 'address', indexed: true, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'RewardsDistributed',\n inputs: [{ name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OwnershipTransferred',\n inputs: [\n { name: 'previousOwner', type: 'address', indexed: true, internalType: 'address' },\n { name: 'newOwner', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n\n // ─── Constructor ──────────────────────────────────────────────────────────\n {\n type: 'constructor',\n inputs: [\n { name: '_supportedToken', type: 'address', internalType: 'address' },\n { name: '_gateway', type: 'address', internalType: 'address' },\n { name: '_minDeposit', type: 'uint256', internalType: 'uint256' },\n { name: '_lockPeriod', type: 'uint256', internalType: 'uint256' },\n ],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: LP actions ────────────────────────────────────────────────\n {\n type: 'function',\n name: 'deposit',\n inputs: [{ name: 'amount', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'withdraw',\n inputs: [{ name: 'amount', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'claimRewards',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'distributeRewards',\n inputs: [{ name: 'amount', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Admin ─────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'setGateway',\n inputs: [{ name: '_gateway', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setMinDeposit',\n inputs: [{ name: '_minDeposit', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setLockPeriod',\n inputs: [{ name: '_lockPeriod', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: View ──────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'getRewards',\n inputs: [{ name: 'user', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getDeposit',\n inputs: [{ name: 'user', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPoolInfo',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct ILiquidityPool.PoolInfo',\n components: [\n { name: 'totalDeposits', type: 'uint256', internalType: 'uint256' },\n { name: 'rewardPerToken', type: 'uint256', internalType: 'uint256' },\n { name: 'supportedToken', type: 'address', internalType: 'address' },\n { name: 'minDeposit', type: 'uint256', internalType: 'uint256' },\n { name: 'lockPeriod', type: 'uint256', internalType: 'uint256' },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'supportedToken',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'totalDeposits',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'minDeposit',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'lockPeriod',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'accRewardPerShare',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'gateway',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'owner',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n] as const;\n","/**\n * ABI for the VaultController contract.\n *\n * Passive yield vault for stablecoin deposits.\n * Yield accrues linearly based on an annual rate (basis points).\n */\nexport const VaultControllerABI = [\n // ─── Custom Errors ────────────────────────────────────────────────────────\n { type: 'error', name: 'BelowMinDeposit', inputs: [] },\n { type: 'error', name: 'ZeroAmount', inputs: [] },\n { type: 'error', name: 'InsufficientBalance', inputs: [] },\n { type: 'error', name: 'NoYieldAvailable', inputs: [] },\n { type: 'error', name: 'ZeroAddress', inputs: [] },\n { type: 'error', name: 'InvalidYieldRate', inputs: [] },\n\n // ─── Events ───────────────────────────────────────────────────────────────\n {\n type: 'event',\n name: 'VaultDeposited',\n inputs: [\n { name: 'user', type: 'address', indexed: true, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VaultWithdrawn',\n inputs: [\n { name: 'user', type: 'address', indexed: true, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'YieldClaimed',\n inputs: [\n { name: 'user', type: 'address', indexed: true, internalType: 'address' },\n { name: 'yieldAmount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'YieldRateUpdated',\n inputs: [{ name: 'newRate', type: 'uint256', indexed: false, internalType: 'uint256' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OwnershipTransferred',\n inputs: [\n { name: 'previousOwner', type: 'address', indexed: true, internalType: 'address' },\n { name: 'newOwner', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n\n // ─── Constructor ──────────────────────────────────────────────────────────\n {\n type: 'constructor',\n inputs: [\n { name: '_supportedToken', type: 'address', internalType: 'address' },\n { name: '_annualYieldRate', type: 'uint256', internalType: 'uint256' },\n { name: '_minDeposit', type: 'uint256', internalType: 'uint256' },\n ],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Vault actions ─────────────────────────────────────────────\n {\n type: 'function',\n name: 'deposit',\n inputs: [{ name: 'amount', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'withdraw',\n inputs: [{ name: 'amount', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'claimYield',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Admin ─────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'setAnnualYieldRate',\n inputs: [{ name: 'rate', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setMinDeposit',\n inputs: [{ name: 'amount', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'transferOwnership',\n inputs: [{ name: 'newOwner', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'renounceOwnership',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: View ──────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'getVault',\n inputs: [{ name: 'user', type: 'address', internalType: 'address' }],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IVault.VaultInfo',\n components: [\n { name: 'balance', type: 'uint256', internalType: 'uint256' },\n { name: 'depositedAt', type: 'uint256', internalType: 'uint256' },\n { name: 'lastYieldClaim', type: 'uint256', internalType: 'uint256' },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'calculateYield',\n inputs: [{ name: 'user', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'annualYieldRate',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'minDeposit',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'totalDeposited',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'supportedToken',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MAX_YIELD_RATE',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'owner',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n] as const;\n","/**\n * ABI for the GHSFIAT token contract.\n *\n * ERC-20 stablecoin pegged to the Ghana Cedi (GHS).\n * Role-based minting/burning. Pausable for emergency stops.\n */\nexport const GHSFIATABI = [\n // ─── Custom Errors ────────────────────────────────────────────────────────\n { type: 'error', name: 'ZeroAddress', inputs: [] },\n { type: 'error', name: 'ZeroAmount', inputs: [] },\n\n // ─── Events ───────────────────────────────────────────────────────────────\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n { name: 'from', type: 'address', indexed: true, internalType: 'address' },\n { name: 'to', type: 'address', indexed: true, internalType: 'address' },\n { name: 'value', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n { name: 'owner', type: 'address', indexed: true, internalType: 'address' },\n { name: 'spender', type: 'address', indexed: true, internalType: 'address' },\n { name: 'value', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Paused',\n inputs: [{ name: 'account', type: 'address', indexed: false, internalType: 'address' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Unpaused',\n inputs: [{ name: 'account', type: 'address', indexed: false, internalType: 'address' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'RoleGranted',\n inputs: [\n { name: 'role', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n { name: 'account', type: 'address', indexed: true, internalType: 'address' },\n { name: 'sender', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'RoleRevoked',\n inputs: [\n { name: 'role', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n { name: 'account', type: 'address', indexed: true, internalType: 'address' },\n { name: 'sender', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n\n // ─── Constructor ──────────────────────────────────────────────────────────\n {\n type: 'constructor',\n inputs: [{ name: 'admin', type: 'address', internalType: 'address' }],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Mint / Burn ───────────────────────────────────────────────\n {\n type: 'function',\n name: 'mint',\n inputs: [\n { name: 'to', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'burn',\n inputs: [{ name: 'amount', type: 'uint256', internalType: 'uint256' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'burnFrom',\n inputs: [\n { name: 'account', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Pause / Unpause ───────────────────────────────────────────\n {\n type: 'function',\n name: 'pause',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'unpause',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: ERC20 ─────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'transfer',\n inputs: [\n { name: 'to', type: 'address', internalType: 'address' },\n { name: 'value', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'transferFrom',\n inputs: [\n { name: 'from', type: 'address', internalType: 'address' },\n { name: 'to', type: 'address', internalType: 'address' },\n { name: 'value', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'approve',\n inputs: [\n { name: 'spender', type: 'address', internalType: 'address' },\n { name: 'value', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: AccessControl ─────────────────────────────────────────────\n {\n type: 'function',\n name: 'grantRole',\n inputs: [\n { name: 'role', type: 'bytes32', internalType: 'bytes32' },\n { name: 'account', type: 'address', internalType: 'address' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'revokeRole',\n inputs: [\n { name: 'role', type: 'bytes32', internalType: 'bytes32' },\n { name: 'account', type: 'address', internalType: 'address' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'renounceRole',\n inputs: [\n { name: 'role', type: 'bytes32', internalType: 'bytes32' },\n { name: 'callerConfirmation', type: 'address', internalType: 'address' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: View ──────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'balanceOf',\n inputs: [{ name: 'account', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'allowance',\n inputs: [\n { name: 'owner', type: 'address', internalType: 'address' },\n { name: 'spender', type: 'address', internalType: 'address' },\n ],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'totalSupply',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'name',\n inputs: [],\n outputs: [{ name: '', type: 'string', internalType: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'symbol',\n inputs: [],\n outputs: [{ name: '', type: 'string', internalType: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'decimals',\n inputs: [],\n outputs: [{ name: '', type: 'uint8', internalType: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'paused',\n inputs: [],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MINTER_ROLE',\n inputs: [],\n outputs: [{ name: '', type: 'bytes32', internalType: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'PAUSER_ROLE',\n inputs: [],\n outputs: [{ name: '', type: 'bytes32', internalType: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'DEFAULT_ADMIN_ROLE',\n inputs: [],\n outputs: [{ name: '', type: 'bytes32', internalType: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'hasRole',\n inputs: [\n { name: 'role', type: 'bytes32', internalType: 'bytes32' },\n { name: 'account', type: 'address', internalType: 'address' },\n ],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getRoleAdmin',\n inputs: [{ name: 'role', type: 'bytes32', internalType: 'bytes32' }],\n outputs: [{ name: '', type: 'bytes32', internalType: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'supportsInterface',\n inputs: [{ name: 'interfaceId', type: 'bytes4', internalType: 'bytes4' }],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'view',\n },\n] as const;\n","/**\n * ABI for the PayoutEscrow contract.\n *\n * Core B2B payout contract. Businesses deposit stablecoins via the Fiatsend API;\n * funds are held here until the recipient claims using their MobileNumberNFT identity.\n * Recipients can claim to their wallet or immediately offramp to mobile money in one tx.\n */\nexport const PayoutEscrowABI = [\n // ─── Custom Errors ────────────────────────────────────────────────────────\n { type: 'error', name: 'PayoutAlreadyExists', inputs: [] },\n { type: 'error', name: 'PayoutNotFound', inputs: [] },\n { type: 'error', name: 'NotAuthorizedSender', inputs: [] },\n { type: 'error', name: 'NotPending', inputs: [] },\n { type: 'error', name: 'NotExpiredYet', inputs: [] },\n { type: 'error', name: 'NotRefundEligible', inputs: [] },\n { type: 'error', name: 'PhoneHashMismatch', inputs: [] },\n { type: 'error', name: 'NoMobileNFT', inputs: [] },\n { type: 'error', name: 'ZeroAddress', inputs: [] },\n { type: 'error', name: 'ZeroAmount', inputs: [] },\n { type: 'error', name: 'ArrayLengthMismatch', inputs: [] },\n { type: 'error', name: 'InvalidExpiry', inputs: [] },\n { type: 'error', name: 'GatewayNotSet', inputs: [] },\n { type: 'error', name: 'TokenNotSupportedByGateway', inputs: [] },\n\n // ─── Events ───────────────────────────────────────────────────────────────\n {\n type: 'event',\n name: 'PayoutCreated',\n inputs: [\n { name: 'payoutId', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n { name: 'sender', type: 'address', indexed: true, internalType: 'address' },\n { name: 'token', type: 'address', indexed: false, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n { name: 'phoneHash', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayoutClaimed',\n inputs: [\n { name: 'payoutId', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n { name: 'recipient', type: 'address', indexed: true, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayoutRefunded',\n inputs: [\n { name: 'payoutId', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n { name: 'sender', type: 'address', indexed: true, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayoutExpired',\n inputs: [\n { name: 'payoutId', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'AuthorizedSenderSet',\n inputs: [\n { name: 'sender', type: 'address', indexed: true, internalType: 'address' },\n { name: 'authorized', type: 'bool', indexed: false, internalType: 'bool' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'GatewaySet',\n inputs: [\n { name: 'gateway', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'DefaultExpiryDurationSet',\n inputs: [\n { name: 'duration', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OwnershipTransferred',\n inputs: [\n { name: 'previousOwner', type: 'address', indexed: true, internalType: 'address' },\n { name: 'newOwner', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Paused',\n inputs: [{ name: 'account', type: 'address', indexed: false, internalType: 'address' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Unpaused',\n inputs: [{ name: 'account', type: 'address', indexed: false, internalType: 'address' }],\n anonymous: false,\n },\n\n // ─── Constructor ──────────────────────────────────────────────────────────\n {\n type: 'constructor',\n inputs: [\n { name: '_mobileNumberNFT', type: 'address', internalType: 'address' },\n { name: '_gateway', type: 'address', internalType: 'address' },\n { name: '_expiryDuration', type: 'uint256', internalType: 'uint256' },\n ],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Payout creation ───────────────────────────────────────────\n {\n type: 'function',\n name: 'createPayout',\n inputs: [\n { name: 'payoutId', type: 'bytes32', internalType: 'bytes32' },\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n { name: 'phoneHash', type: 'bytes32', internalType: 'bytes32' },\n { name: 'expiresAt', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'createBatchPayout',\n inputs: [\n { name: 'payoutIds', type: 'bytes32[]', internalType: 'bytes32[]' },\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'amounts', type: 'uint256[]', internalType: 'uint256[]' },\n { name: 'phoneHashes', type: 'bytes32[]', internalType: 'bytes32[]' },\n { name: 'expiresAt', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Claim ─────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'claim',\n inputs: [\n { name: 'payoutId', type: 'bytes32', internalType: 'bytes32' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'claimToMoMo',\n inputs: [\n { name: 'payoutId', type: 'bytes32', internalType: 'bytes32' },\n { name: 'phoneNumber', type: 'string', internalType: 'string' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Refund ────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'refund',\n inputs: [\n { name: 'payoutId', type: 'bytes32', internalType: 'bytes32' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: View ──────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'getPayout',\n inputs: [\n { name: 'payoutId', type: 'bytes32', internalType: 'bytes32' },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IPayoutEscrow.Payout',\n components: [\n { name: 'id', type: 'bytes32', internalType: 'bytes32' },\n { name: 'sender', type: 'address', internalType: 'address' },\n { name: 'recipient', type: 'address', internalType: 'address' },\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n { name: 'phoneHash', type: 'bytes32', internalType: 'bytes32' },\n { name: 'status', type: 'uint8', internalType: 'enum IPayoutEscrow.PayoutStatus' },\n { name: 'expiresAt', type: 'uint256', internalType: 'uint256' },\n { name: 'createdAt', type: 'uint256', internalType: 'uint256' },\n { name: 'claimedAt', type: 'uint256', internalType: 'uint256' },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayoutsForPhone',\n inputs: [\n { name: 'phoneHash', type: 'bytes32', internalType: 'bytes32' },\n ],\n outputs: [\n { name: '', type: 'bytes32[]', internalType: 'bytes32[]' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayoutsByStatus',\n inputs: [\n { name: 'phoneHash', type: 'bytes32', internalType: 'bytes32' },\n { name: 'status', type: 'uint8', internalType: 'enum IPayoutEscrow.PayoutStatus' },\n ],\n outputs: [\n { name: '', type: 'bytes32[]', internalType: 'bytes32[]' },\n ],\n stateMutability: 'view',\n },\n\n // ─── Functions: Admin ─────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'setAuthorizedSender',\n inputs: [\n { name: 'sender', type: 'address', internalType: 'address' },\n { name: 'authorized', type: 'bool', internalType: 'bool' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setDefaultExpiryDuration',\n inputs: [\n { name: 'duration', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setGateway',\n inputs: [\n { name: '_gateway', type: 'address', internalType: 'address' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'pause',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'unpause',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'transferOwnership',\n inputs: [{ name: 'newOwner', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'renounceOwnership',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: State vars ────────────────────────────────────────────────\n {\n type: 'function',\n name: 'mobileNumberNFT',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'gateway',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'defaultExpiryDuration',\n inputs: [],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'authorizedSenders',\n inputs: [{ name: 'sender', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'owner',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'paused',\n inputs: [],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'view',\n },\n] as const;\n","/**\n * ABI for the P2PExchange contract.\n *\n * Peer-to-peer token exchange with exact payment references for crypto-exchange\n * auto-completion. A maker escrows tokens on-chain; a taker pays off-chain using\n * the exact reference; the maker confirms receipt and tokens are released — or\n * a dispute resolver adjudicates disagreements.\n */\nexport const P2PExchangeABI = [\n // ─── Custom Errors ────────────────────────────────────────────────────────\n { type: 'error', name: 'OrderAlreadyExists', inputs: [] },\n { type: 'error', name: 'OrderNotFound', inputs: [] },\n { type: 'error', name: 'NotMaker', inputs: [] },\n { type: 'error', name: 'NotParty', inputs: [] },\n { type: 'error', name: 'NotDisputeResolver', inputs: [] },\n { type: 'error', name: 'OrderNotOpen', inputs: [] },\n { type: 'error', name: 'OrderNotLocked', inputs: [] },\n { type: 'error', name: 'OrderNotDisputed', inputs: [] },\n { type: 'error', name: 'AlreadyTaken', inputs: [] },\n { type: 'error', name: 'SelfTake', inputs: [] },\n { type: 'error', name: 'ZeroAddress', inputs: [] },\n { type: 'error', name: 'ZeroAmount', inputs: [] },\n { type: 'error', name: 'ZeroExpiryDuration', inputs: [] },\n { type: 'error', name: 'InvalidWinner', inputs: [] },\n\n // ─── Events ───────────────────────────────────────────────────────────────\n {\n type: 'event',\n name: 'OrderCreated',\n inputs: [\n { name: 'orderId', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n { name: 'maker', type: 'address', indexed: true, internalType: 'address' },\n { name: 'token', type: 'address', indexed: false, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n { name: 'paymentReference', type: 'string', indexed: false, internalType: 'string' },\n { name: 'exchangePlatform', type: 'string', indexed: false, internalType: 'string' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OrderTaken',\n inputs: [\n { name: 'orderId', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n { name: 'taker', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OrderCompleted',\n inputs: [\n { name: 'orderId', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n { name: 'taker', type: 'address', indexed: true, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OrderCancelled',\n inputs: [\n { name: 'orderId', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OrderDisputed',\n inputs: [\n { name: 'orderId', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n { name: 'disputedBy', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'DisputeResolved',\n inputs: [\n { name: 'orderId', type: 'bytes32', indexed: true, internalType: 'bytes32' },\n { name: 'winner', type: 'address', indexed: true, internalType: 'address' },\n { name: 'amount', type: 'uint256', indexed: false, internalType: 'uint256' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'DisputeResolverSet',\n inputs: [\n { name: 'resolver', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OwnershipTransferred',\n inputs: [\n { name: 'previousOwner', type: 'address', indexed: true, internalType: 'address' },\n { name: 'newOwner', type: 'address', indexed: true, internalType: 'address' },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Paused',\n inputs: [{ name: 'account', type: 'address', indexed: false, internalType: 'address' }],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Unpaused',\n inputs: [{ name: 'account', type: 'address', indexed: false, internalType: 'address' }],\n anonymous: false,\n },\n\n // ─── Constructor ──────────────────────────────────────────────────────────\n {\n type: 'constructor',\n inputs: [\n { name: '_disputeResolver', type: 'address', internalType: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: Order lifecycle ───────────────────────────────────────────\n {\n type: 'function',\n name: 'createOrder',\n inputs: [\n { name: 'orderId', type: 'bytes32', internalType: 'bytes32' },\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n { name: 'paymentReference', type: 'string', internalType: 'string' },\n { name: 'exchangePlatform', type: 'string', internalType: 'string' },\n { name: 'expiryDuration', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'takeOrder',\n inputs: [\n { name: 'orderId', type: 'bytes32', internalType: 'bytes32' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'confirmPayment',\n inputs: [\n { name: 'orderId', type: 'bytes32', internalType: 'bytes32' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'cancelOrder',\n inputs: [\n { name: 'orderId', type: 'bytes32', internalType: 'bytes32' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'disputeOrder',\n inputs: [\n { name: 'orderId', type: 'bytes32', internalType: 'bytes32' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'resolveDispute',\n inputs: [\n { name: 'orderId', type: 'bytes32', internalType: 'bytes32' },\n { name: 'winner', type: 'address', internalType: 'address' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: View ──────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'getOrder',\n inputs: [\n { name: 'orderId', type: 'bytes32', internalType: 'bytes32' },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IP2PExchange.P2POrder',\n components: [\n { name: 'id', type: 'bytes32', internalType: 'bytes32' },\n { name: 'maker', type: 'address', internalType: 'address' },\n { name: 'taker', type: 'address', internalType: 'address' },\n { name: 'token', type: 'address', internalType: 'address' },\n { name: 'amount', type: 'uint256', internalType: 'uint256' },\n { name: 'paymentReference', type: 'string', internalType: 'string' },\n { name: 'exchangePlatform', type: 'string', internalType: 'string' },\n { name: 'status', type: 'uint8', internalType: 'enum IP2PExchange.OrderStatus' },\n { name: 'createdAt', type: 'uint256', internalType: 'uint256' },\n { name: 'lockedAt', type: 'uint256', internalType: 'uint256' },\n { name: 'completedAt', type: 'uint256', internalType: 'uint256' },\n { name: 'expiryDuration', type: 'uint256', internalType: 'uint256' },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getUserOrders',\n inputs: [\n { name: 'user', type: 'address', internalType: 'address' },\n ],\n outputs: [\n { name: '', type: 'bytes32[]', internalType: 'bytes32[]' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getOpenOrders',\n inputs: [\n { name: 'limit', type: 'uint256', internalType: 'uint256' },\n ],\n outputs: [\n { name: '', type: 'bytes32[]', internalType: 'bytes32[]' },\n ],\n stateMutability: 'view',\n },\n\n // ─── Functions: Admin ─────────────────────────────────────────────────────\n {\n type: 'function',\n name: 'setDisputeResolver',\n inputs: [\n { name: 'resolver', type: 'address', internalType: 'address' },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'pause',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'unpause',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'transferOwnership',\n inputs: [{ name: 'newOwner', type: 'address', internalType: 'address' }],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'renounceOwnership',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n\n // ─── Functions: State vars ────────────────────────────────────────────────\n {\n type: 'function',\n name: 'disputeResolver',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'owner',\n inputs: [],\n outputs: [{ name: '', type: 'address', internalType: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'paused',\n inputs: [],\n outputs: [{ name: '', type: 'bool', internalType: 'bool' }],\n stateMutability: 'view',\n },\n] as const;\n","/**\n * IdentityResource — interactions with the MobileNumberNFT contract.\n *\n * Handles NFT registration (direct and gasless), KYC level queries,\n * and phone-number-to-owner resolution.\n *\n * @module @fiatsend/core/resources/identity\n */\n\nimport {\n type PublicClient,\n type WalletClient,\n getContract,\n} from 'viem';\nimport type {\n Address,\n MobileNumberNFT,\n KYCLevel,\n RegisterMobileParams,\n RegisterMobileWithSignatureParams,\n TransactionResult,\n} from '@fiatsend/types';\nimport { FiatsendError, FiatsendErrorCode } from '@fiatsend/types';\nimport { MobileNumberNFTABI } from '../abis/index.js';\n\n/** @internal */\nfunction wrapError(err: unknown, contractAddress: Address): FiatsendError {\n if (err instanceof FiatsendError) return err;\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes('AlreadyRegistered')) {\n return new FiatsendError('Address already has a registered MobileNumber NFT', FiatsendErrorCode.UNAUTHORIZED, { contractAddress, ...(err instanceof Error && { cause: err }) });\n }\n if (message.includes('PhoneAlreadyRegistered')) {\n return new FiatsendError('Phone number is already registered to another address', FiatsendErrorCode.UNAUTHORIZED, { contractAddress, ...(err instanceof Error && { cause: err }) });\n }\n if (message.includes('NotAuthorized')) {\n return new FiatsendError('Caller is not an authorized minter', FiatsendErrorCode.UNAUTHORIZED, { contractAddress, ...(err instanceof Error && { cause: err }) });\n }\n if (message.includes('SignatureExpired')) {\n return new FiatsendError('Gasless registration signature has expired', FiatsendErrorCode.UNAUTHORIZED, { contractAddress, ...(err instanceof Error && { cause: err }) });\n }\n if (message.includes('InvalidSignature')) {\n return new FiatsendError('Invalid EIP-712 signature for gasless registration', FiatsendErrorCode.UNAUTHORIZED, { contractAddress, ...(err instanceof Error && { cause: err }) });\n }\n return new FiatsendError(message, FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress, ...(err instanceof Error && { cause: err }) });\n}\n\n/**\n * Resource for MobileNumberNFT contract interactions.\n *\n * Obtained via `client.identity` on a `FiatsendClient` instance.\n */\nexport class IdentityResource {\n private readonly publicClient: PublicClient;\n private readonly walletClient: WalletClient | undefined;\n private readonly contractAddress: Address;\n\n constructor(params: {\n publicClient: PublicClient;\n walletClient?: WalletClient;\n contractAddress: Address;\n }) {\n this.publicClient = params.publicClient;\n this.walletClient = params.walletClient;\n this.contractAddress = params.contractAddress;\n }\n\n private get readContract() {\n return getContract({\n address: this.contractAddress,\n abi: MobileNumberNFTABI,\n client: this.publicClient,\n });\n }\n\n private requireWallet(): WalletClient {\n if (!this.walletClient) {\n throw new FiatsendError(\n 'A walletClient is required for write operations. Pass one to FiatsendClient.',\n FiatsendErrorCode.UNAUTHORIZED,\n );\n }\n return this.walletClient;\n }\n\n /**\n * Mints a soulbound MobileNumber NFT for the connected wallet.\n *\n * @param params - Encrypted phone bytes and ISO country code\n * @returns Transaction result with hash and wait() function\n */\n async register(params: RegisterMobileParams): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: MobileNumberNFTABI,\n functionName: 'registerMobile',\n args: [params.encryptedPhone as `0x${string}`, params.countryCode],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return {\n hash: receipt.transactionHash,\n status: receipt.status,\n blockNumber: receipt.blockNumber,\n gasUsed: receipt.gasUsed,\n };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Gasless NFT mint: the authorized minter submits the transaction on behalf\n * of the user. The user must have previously signed the EIP-712 typed data.\n *\n * @param params - User address, encrypted phone, country code, deadline, and signature\n * @returns Transaction result with hash and wait() function\n */\n async registerWithSignature(params: RegisterMobileWithSignatureParams): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: MobileNumberNFTABI,\n functionName: 'registerMobileWithSignature',\n args: [\n params.user,\n params.encryptedPhone as `0x${string}`,\n params.countryCode,\n params.deadline,\n params.signature as `0x${string}`,\n ],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return {\n hash: receipt.transactionHash,\n status: receipt.status,\n blockNumber: receipt.blockNumber,\n gasUsed: receipt.gasUsed,\n };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns the MobileNumber NFT data for an address, or null if not registered.\n *\n * @param address - Wallet address to query\n */\n async getNFT(address: Address): Promise<MobileNumberNFT | null> {\n try {\n const contract = this.readContract;\n const tokenId = await contract.read.getTokenId([address]);\n if (tokenId === 0n) return null;\n\n const [countryCode, kycLevel, encryptedPhone] = await Promise.all([\n contract.read.getCountryCode([tokenId]),\n contract.read.getKYCLevel([tokenId]),\n contract.read.getEncryptedPhone([tokenId]),\n ]);\n\n return {\n tokenId,\n owner: address,\n encryptedPhone: encryptedPhone as `0x${string}`,\n countryCode,\n kycLevel: Math.min(kycLevel, 2) as KYCLevel,\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns the KYC level for an address (0 if no NFT).\n *\n * @param address - Wallet address to query\n */\n async getKYCLevel(address: Address): Promise<KYCLevel> {\n try {\n const level = await this.readContract.read.getKYCLevelByAddress([address]);\n return Math.min(level, 2) as KYCLevel;\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Resolves an encrypted phone hash to the owner address.\n *\n * @param encryptedPhone - Encrypted phone bytes (0x-prefixed)\n * @returns Owner address or null if not registered\n */\n async getOwnerByPhone(encryptedPhone: `0x${string}`): Promise<Address | null> {\n try {\n const contract = this.readContract;\n const tokenId = await contract.read.getTokenIdByPhone([encryptedPhone]);\n if (tokenId === 0n) return null;\n const owner = await this.publicClient.readContract({\n address: this.contractAddress,\n abi: MobileNumberNFTABI,\n functionName: 'ownerOf',\n args: [tokenId],\n });\n return owner as Address;\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns the token ID for an address (null if not registered).\n *\n * @param address - Wallet address\n */\n async getTokenId(address: Address): Promise<bigint | null> {\n try {\n const tokenId = await this.readContract.read.getTokenId([address]);\n return tokenId === 0n ? null : tokenId;\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns the user's nonce for EIP-712 replay protection.\n *\n * @param address - Wallet address\n */\n async getNonce(address: Address): Promise<bigint> {\n try {\n return await this.readContract.read.nonces([address]);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n}\n","/**\n * GatewayResource — interactions with the FiatsendGateway contract.\n *\n * Handles offramp (stablecoin → fiat), onramp, token management,\n * KYC status, and gateway configuration reads.\n *\n * @module @fiatsend/core/resources/gateway\n */\n\nimport { type PublicClient, type WalletClient, getContract } from 'viem';\nimport type {\n Address,\n OfframpParams,\n OfframpResult,\n GatewayConfig,\n TransactionResult,\n} from '@fiatsend/types';\nimport { FiatsendError, FiatsendErrorCode } from '@fiatsend/types';\nimport { validateOfframpParams } from '@fiatsend/utils';\nimport { FiatsendGatewayABI } from '../abis/index.js';\n\n/** @internal */\nfunction wrapError(err: unknown, contractAddress: Address): FiatsendError {\n if (err instanceof FiatsendError) return err;\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes('TokenNotSupported')) {\n return new FiatsendError('Token is not supported by the gateway', FiatsendErrorCode.TOKEN_NOT_SUPPORTED, { contractAddress });\n }\n if (message.includes('NoMobileNFT')) {\n return new FiatsendError('User does not have a MobileNumber NFT — please register first', FiatsendErrorCode.NO_NFT, { contractAddress });\n }\n if (message.includes('KYCRequired')) {\n return new FiatsendError('KYC verification is required for amounts above the threshold', FiatsendErrorCode.KYC_REQUIRED, { contractAddress });\n }\n if (message.includes('BelowMinimum')) {\n return new FiatsendError('Amount is below the minimum withdrawal amount', FiatsendErrorCode.BELOW_MINIMUM, { contractAddress });\n }\n if (message.includes('DailyLimitExceeded')) {\n return new FiatsendError('Daily withdrawal limit exceeded', FiatsendErrorCode.DAILY_LIMIT_EXCEEDED, { contractAddress });\n }\n if (message.includes('Paused') || message.includes('EnforcedPause')) {\n return new FiatsendError('Gateway is currently paused', FiatsendErrorCode.CONTRACT_PAUSED, { contractAddress });\n }\n return new FiatsendError(message, FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress, ...(err instanceof Error && { cause: err }) });\n}\n\n/**\n * Resource for FiatsendGateway contract interactions.\n *\n * Obtained via `client.gateway` on a `FiatsendClient` instance.\n */\nexport class GatewayResource {\n private readonly publicClient: PublicClient;\n private readonly walletClient: WalletClient | undefined;\n private readonly contractAddress: Address;\n\n constructor(params: {\n publicClient: PublicClient;\n walletClient?: WalletClient;\n contractAddress: Address;\n }) {\n this.publicClient = params.publicClient;\n this.walletClient = params.walletClient;\n this.contractAddress = params.contractAddress;\n }\n\n private get readContract() {\n return getContract({\n address: this.contractAddress,\n abi: FiatsendGatewayABI,\n client: this.publicClient,\n });\n }\n\n private requireWallet(): WalletClient {\n if (!this.walletClient) {\n throw new FiatsendError(\n 'A walletClient is required for write operations.',\n FiatsendErrorCode.UNAUTHORIZED,\n );\n }\n return this.walletClient;\n }\n\n /**\n * Initiates an offramp: converts a supported stablecoin to a mobile money payout.\n *\n * The user must:\n * 1. Have a MobileNumber NFT\n * 2. Pass KYC (if amount >= threshold)\n * 3. Have approved the gateway to spend `params.amount` of `params.token`\n *\n * @param params - Token, amount, and destination phone number\n * @returns Offramp result including the withdrawal ID and fees\n */\n async offramp(params: OfframpParams): Promise<OfframpResult> {\n validateOfframpParams(params);\n\n try {\n // Read current fee rate to compute expected fee\n const [feeRate, minWithdraw] = await Promise.all([\n this.readContract.read.protocolFeeRate(),\n this.readContract.read.minWithdrawAmount(),\n ]);\n\n if (params.amount < minWithdraw) {\n throw new FiatsendError(\n `Amount ${params.amount} is below the minimum withdrawal amount of ${minWithdraw}`,\n FiatsendErrorCode.BELOW_MINIMUM,\n { contractAddress: this.contractAddress },\n );\n }\n\n const fee = (params.amount * feeRate) / 10_000n;\n const netAmount = params.amount - fee;\n\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: FiatsendGatewayABI,\n functionName: 'offramp',\n args: [params.token, params.amount, params.phoneNumber],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n\n // Parse WithdrawalCreated log to get the withdrawal ID\n let withdrawalId = 0n;\n for (const log of receipt.logs) {\n if (log.topics.length >= 2) {\n const possibleId = BigInt(log.topics[1] ?? '0x0');\n if (possibleId > 0n) {\n withdrawalId = possibleId;\n break;\n }\n }\n }\n\n return {\n withdrawalId,\n amount: params.amount,\n fee,\n netAmount,\n hash,\n };\n } catch (err) {\n if (err instanceof FiatsendError) throw err;\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns the conversion rate for a supported token.\n *\n * @param token - Token address\n * @returns Scaled conversion rate as stored in the contract\n */\n async getConversionRate(token: Address): Promise<bigint> {\n try {\n return await this.readContract.read.getConversionRate([token]);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Checks whether a token is supported by the gateway.\n *\n * @param token - Token address\n */\n async isTokenSupported(token: Address): Promise<boolean> {\n try {\n return await this.readContract.read.isTokenSupported([token]);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Checks whether a user has passed KYC verification.\n *\n * @param user - User address\n */\n async isKYCPassed(user: Address): Promise<boolean> {\n try {\n return await this.readContract.read.isKYCPassed([user]);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns the gateway's full configuration snapshot.\n */\n async getConfig(): Promise<GatewayConfig> {\n try {\n const contract = this.readContract;\n const [protocolFeeRate, minWithdrawAmount, dailyLimit, treasury] = await Promise.all([\n contract.read.protocolFeeRate(),\n contract.read.minWithdrawAmount(),\n contract.read.dailyLimit(),\n contract.read.protocolTreasury(),\n ]);\n\n return {\n protocolFeeRate,\n minWithdrawAmount,\n dailyLimit,\n treasury: treasury as Address,\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns the daily volume used by a user today.\n *\n * @param user - User address\n */\n async getDailyVolume(user: Address): Promise<bigint> {\n try {\n return await this.readContract.read.getDailyVolume([user]);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns the remaining daily allowance for a user.\n *\n * @param user - User address\n */\n async getDailyRemaining(user: Address): Promise<bigint> {\n try {\n const contract = this.readContract;\n const [limit, used] = await Promise.all([\n contract.read.dailyLimit(),\n contract.read.getDailyVolume([user]),\n ]);\n return limit > used ? limit - used : 0n;\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Mints GHSFIAT for a user. Requires the caller to be an authorized onramper.\n *\n * @param user - Recipient address\n * @param amount - Amount to mint\n * @returns Transaction result\n */\n async onramp(user: Address, amount: bigint): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: FiatsendGatewayABI,\n functionName: 'onramp',\n args: [user, amount],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return {\n hash: receipt.transactionHash,\n status: receipt.status,\n blockNumber: receipt.blockNumber,\n gasUsed: receipt.gasUsed,\n };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n}\n","/**\n * PaymentsResource — interactions with the PaymentRouter contract.\n *\n * Handles direct P2P transfers (by address and by phone number)\n * and the payment request lifecycle.\n *\n * @module @fiatsend/core/resources/payments\n */\n\nimport { type PublicClient, type WalletClient, getContract } from 'viem';\nimport type {\n Address,\n Hash,\n SendPaymentParams,\n SendToPhoneParams,\n CreatePaymentRequestParams,\n PaymentRequest,\n PaymentRequestStatus,\n TransactionResult,\n} from '@fiatsend/types';\nimport { FiatsendError, FiatsendErrorCode } from '@fiatsend/types';\nimport { PaymentRouterABI } from '../abis/index.js';\n\n/** @internal */\nfunction mapStatus(status: number): PaymentRequestStatus {\n if (status === 0) return 'pending';\n if (status === 1) return 'paid';\n return 'cancelled';\n}\n\n/** @internal */\nfunction wrapError(err: unknown, contractAddress: Address): FiatsendError {\n if (err instanceof FiatsendError) return err;\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes('PhoneNotRegistered')) {\n return new FiatsendError('Phone number is not registered to any address', FiatsendErrorCode.NO_NFT, { contractAddress });\n }\n if (message.includes('SelfPayment')) {\n return new FiatsendError('Cannot send payment to yourself', FiatsendErrorCode.UNAUTHORIZED, { contractAddress });\n }\n if (message.includes('RequestNotFound')) {\n return new FiatsendError('Payment request not found', FiatsendErrorCode.UNAUTHORIZED, { contractAddress });\n }\n if (message.includes('RequestNotPending')) {\n return new FiatsendError('Payment request is no longer pending', FiatsendErrorCode.UNAUTHORIZED, { contractAddress });\n }\n if (message.includes('NotRequestOwner')) {\n return new FiatsendError('Only the request creator can cancel it', FiatsendErrorCode.UNAUTHORIZED, { contractAddress });\n }\n if (message.includes('NotRequestRecipient')) {\n return new FiatsendError('Only the intended payer can pay this request', FiatsendErrorCode.UNAUTHORIZED, { contractAddress });\n }\n return new FiatsendError(message, FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress, ...(err instanceof Error && { cause: err }) });\n}\n\n/**\n * Resource for PaymentRouter contract interactions.\n *\n * Obtained via `client.payments` on a `FiatsendClient` instance.\n */\nexport class PaymentsResource {\n private readonly publicClient: PublicClient;\n private readonly walletClient: WalletClient | undefined;\n private readonly contractAddress: Address;\n\n constructor(params: {\n publicClient: PublicClient;\n walletClient?: WalletClient;\n contractAddress: Address;\n }) {\n this.publicClient = params.publicClient;\n this.walletClient = params.walletClient;\n this.contractAddress = params.contractAddress;\n }\n\n private get readContract() {\n return getContract({\n address: this.contractAddress,\n abi: PaymentRouterABI,\n client: this.publicClient,\n });\n }\n\n private requireWallet(): WalletClient {\n if (!this.walletClient) {\n throw new FiatsendError(\n 'A walletClient is required for write operations.',\n FiatsendErrorCode.UNAUTHORIZED,\n );\n }\n return this.walletClient;\n }\n\n /**\n * Sends tokens directly to an address.\n *\n * The caller must have approved `params.amount` of `params.token` to the PaymentRouter.\n *\n * @param params - Token, recipient address, amount, and optional memo\n * @returns Transaction result\n */\n async send(params: SendPaymentParams): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: PaymentRouterABI,\n functionName: 'send',\n args: [params.token, params.to, params.amount, params.memo ?? ''],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return { hash: receipt.transactionHash, status: receipt.status, blockNumber: receipt.blockNumber, gasUsed: receipt.gasUsed };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Resolves an encrypted phone hash to an address via MobileNumberNFT and sends tokens.\n *\n * @param params - Token, encrypted phone, amount, and optional memo\n * @returns Transaction result\n */\n async sendToPhone(params: SendToPhoneParams): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: PaymentRouterABI,\n functionName: 'sendToPhone',\n args: [params.token, params.encryptedPhone as `0x${string}`, params.amount, params.memo ?? ''],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return { hash: receipt.transactionHash, status: receipt.status, blockNumber: receipt.blockNumber, gasUsed: receipt.gasUsed };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Creates a payment request — asks another address to pay you.\n *\n * @param params - Token, payer address, amount, and optional memo\n * @returns The created request ID and transaction hash\n */\n async createRequest(params: CreatePaymentRequestParams): Promise<{ requestId: bigint; hash: Hash }> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: PaymentRouterABI,\n functionName: 'createPaymentRequest',\n args: [params.token, params.from, params.amount, params.memo ?? ''],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n\n return { requestId: 0n, hash };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Pays a pending payment request.\n *\n * Only the `to` address on the request can call this.\n * The caller must approve `request.amount` of `request.token` to the PaymentRouter.\n *\n * @param requestId - The payment request ID to pay\n * @returns Transaction result\n */\n async payRequest(requestId: bigint): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: PaymentRouterABI,\n functionName: 'payRequest',\n args: [requestId],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return { hash: receipt.transactionHash, status: receipt.status, blockNumber: receipt.blockNumber, gasUsed: receipt.gasUsed };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Cancels a pending payment request.\n *\n * Only the request creator (`from` address) can cancel.\n *\n * @param requestId - The payment request ID to cancel\n * @returns Transaction result\n */\n async cancelRequest(requestId: bigint): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: PaymentRouterABI,\n functionName: 'cancelRequest',\n args: [requestId],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return { hash: receipt.transactionHash, status: receipt.status, blockNumber: receipt.blockNumber, gasUsed: receipt.gasUsed };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Fetches a payment request by ID.\n *\n * @param requestId - Payment request ID\n * @returns PaymentRequest data\n */\n async getRequest(requestId: bigint): Promise<PaymentRequest> {\n try {\n const req = await this.readContract.read.getPaymentRequest([requestId]);\n return {\n id: req.id,\n from: req.from as Address,\n to: req.to as Address,\n token: req.token as Address,\n amount: req.amount,\n memo: req.memo,\n status: mapStatus(req.status),\n createdAt: req.createdAt,\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns the total number of payment requests created.\n */\n async getRequestCount(): Promise<bigint> {\n try {\n return await this.readContract.read.paymentRequestCounter();\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n}\n","/**\n * WithdrawalsResource — read-only interactions with the Withdrawals contract.\n *\n * Tracks the lifecycle of withdrawal records: pending → processing → completed/failed.\n * Write operations (processWithdrawal, completeWithdrawal, failWithdrawal) are admin-only\n * and not exposed in the SDK.\n *\n * @module @fiatsend/core/resources/withdrawals\n */\n\nimport { type PublicClient, getContract } from 'viem';\nimport type { Address, Withdrawal, WithdrawalStatus } from '@fiatsend/types';\nimport { FiatsendError, FiatsendErrorCode } from '@fiatsend/types';\nimport { WithdrawalsABI } from '../abis/index.js';\n\n/** @internal */\nfunction mapStatus(status: number): WithdrawalStatus {\n switch (status) {\n case 1: return 'pending';\n case 2: return 'processing';\n case 3: return 'completed';\n case 4: return 'failed';\n default: return 'pending';\n }\n}\n\n/** @internal */\nfunction wrapError(err: unknown, contractAddress: Address): FiatsendError {\n if (err instanceof FiatsendError) return err;\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes('WithdrawalNotFound')) {\n return new FiatsendError('Withdrawal record not found', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n return new FiatsendError(message, FiatsendErrorCode.NETWORK_ERROR, { contractAddress, ...(err instanceof Error && { cause: err }) });\n}\n\n/**\n * Resource for Withdrawals contract read operations.\n *\n * Obtained via `client.withdrawals` on a `FiatsendClient` instance.\n */\nexport class WithdrawalsResource {\n private readonly publicClient: PublicClient;\n private readonly contractAddress: Address;\n\n constructor(params: {\n publicClient: PublicClient;\n contractAddress: Address;\n }) {\n this.publicClient = params.publicClient;\n this.contractAddress = params.contractAddress;\n }\n\n private get contract() {\n return getContract({\n address: this.contractAddress,\n abi: WithdrawalsABI,\n client: this.publicClient,\n });\n }\n\n /**\n * Returns a withdrawal record by ID.\n *\n * @param id - Withdrawal ID\n */\n async getWithdrawal(id: bigint): Promise<Withdrawal> {\n try {\n const w = await this.contract.read.getWithdrawal([id]);\n return {\n id: w.id,\n user: w.user as Address,\n token: w.token as Address,\n amount: w.amount,\n fee: w.fee,\n status: mapStatus(w.status),\n paymentMethod: w.paymentMethod,\n phoneNumber: w.phoneNumber,\n createdAt: w.createdAt,\n completedAt: w.completedAt,\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns all withdrawal records for a user, resolved from their IDs.\n *\n * @param user - User address\n */\n async getUserWithdrawals(user: Address): Promise<Withdrawal[]> {\n try {\n const ids = await this.contract.read.getUserWithdrawals([user]);\n const withdrawals = await Promise.all(ids.map((id) => this.getWithdrawal(id)));\n return withdrawals;\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns the total number of withdrawals ever created.\n */\n async getWithdrawalCount(): Promise<bigint> {\n try {\n return await this.contract.read.withdrawalCounter();\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n}\n","/**\n * LiquidityResource — interactions with the LiquidityPool contract.\n *\n * LP providers deposit stablecoins and earn fee rewards from the gateway.\n * The pool uses a per-share reward accumulator for gas-efficient distribution.\n *\n * @module @fiatsend/core/resources/liquidity\n */\n\nimport { type PublicClient, type WalletClient, getContract } from 'viem';\nimport type {\n Address,\n PoolInfo,\n UserPoolPosition,\n TransactionResult,\n} from '@fiatsend/types';\nimport { FiatsendError, FiatsendErrorCode } from '@fiatsend/types';\nimport { LiquidityPoolABI } from '../abis/index.js';\n\n/** @internal */\nfunction wrapError(err: unknown, contractAddress: Address): FiatsendError {\n if (err instanceof FiatsendError) return err;\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes('BelowMinDeposit')) {\n return new FiatsendError('Amount is below the minimum deposit for this pool', FiatsendErrorCode.BELOW_MINIMUM, { contractAddress });\n }\n if (message.includes('LockPeriodActive')) {\n return new FiatsendError('Cannot withdraw — lock period is still active', FiatsendErrorCode.LOCK_PERIOD_ACTIVE, { contractAddress });\n }\n if (message.includes('InsufficientBalance')) {\n return new FiatsendError('Insufficient deposited balance', FiatsendErrorCode.INSUFFICIENT_BALANCE, { contractAddress });\n }\n if (message.includes('ZeroAmount')) {\n return new FiatsendError('Amount must be greater than zero', FiatsendErrorCode.BELOW_MINIMUM, { contractAddress });\n }\n return new FiatsendError(message, FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress, ...(err instanceof Error && { cause: err }) });\n}\n\n/**\n * Resource for LiquidityPool contract interactions.\n *\n * Obtained via `client.liquidity` on a `FiatsendClient` instance.\n */\nexport class LiquidityResource {\n private readonly publicClient: PublicClient;\n private readonly walletClient: WalletClient | undefined;\n private readonly contractAddress: Address;\n\n constructor(params: {\n publicClient: PublicClient;\n walletClient?: WalletClient;\n contractAddress: Address;\n }) {\n this.publicClient = params.publicClient;\n this.walletClient = params.walletClient;\n this.contractAddress = params.contractAddress;\n }\n\n private get readContract() {\n return getContract({\n address: this.contractAddress,\n abi: LiquidityPoolABI,\n client: this.publicClient,\n });\n }\n\n private requireWallet(): WalletClient {\n if (!this.walletClient) {\n throw new FiatsendError('A walletClient is required for write operations.', FiatsendErrorCode.UNAUTHORIZED);\n }\n return this.walletClient;\n }\n\n /**\n * Deposits stablecoins into the liquidity pool.\n *\n * The caller must approve `amount` of the pool's supported token to this contract.\n *\n * @param amount - Amount to deposit (must be >= pool minDeposit)\n * @returns Transaction result\n */\n async deposit(amount: bigint): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: LiquidityPoolABI,\n functionName: 'deposit',\n args: [amount],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return { hash: receipt.transactionHash, status: receipt.status, blockNumber: receipt.blockNumber, gasUsed: receipt.gasUsed };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Withdraws stablecoins from the pool (after the lock period has elapsed).\n *\n * @param amount - Amount to withdraw\n * @returns Transaction result\n */\n async withdraw(amount: bigint): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: LiquidityPoolABI,\n functionName: 'withdraw',\n args: [amount],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return { hash: receipt.transactionHash, status: receipt.status, blockNumber: receipt.blockNumber, gasUsed: receipt.gasUsed };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Claims all pending fee rewards for the caller.\n *\n * @returns Transaction result\n */\n async claimRewards(): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: LiquidityPoolABI,\n functionName: 'claimRewards',\n args: [],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return { hash: receipt.transactionHash, status: receipt.status, blockNumber: receipt.blockNumber, gasUsed: receipt.gasUsed };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns pool-level statistics.\n */\n async getPoolInfo(): Promise<PoolInfo> {\n try {\n const info = await this.readContract.read.getPoolInfo();\n return {\n token: info.supportedToken as Address,\n totalDeposits: info.totalDeposits,\n rewardPerToken: info.rewardPerToken,\n minDeposit: info.minDeposit,\n lockPeriod: info.lockPeriod,\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns a user's LP position including deposited balance and pending rewards.\n *\n * @param user - User address\n */\n async getPosition(user: Address): Promise<UserPoolPosition> {\n try {\n const contract = this.readContract;\n const [deposited, pendingRewards] = await Promise.all([\n contract.read.getDeposit([user]),\n contract.read.getRewards([user]),\n ]);\n\n return {\n deposited,\n pendingRewards,\n depositTimestamp: 0n,\n canWithdraw: true,\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns pending rewards for a user.\n *\n * @param user - User address\n */\n async getPendingRewards(user: Address): Promise<bigint> {\n try {\n return await this.readContract.read.getRewards([user]);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n}\n","/**\n * VaultsResource — interactions with the VaultController contract.\n *\n * Passive yield vault for stablecoin deposits.\n * Yield accrues linearly: (balance × annualYieldRate × timeElapsed) / (365 days × 10000)\n *\n * @module @fiatsend/core/resources/vaults\n */\n\nimport { type PublicClient, type WalletClient, getContract } from 'viem';\nimport type {\n Address,\n VaultInfo,\n UserVaultPosition,\n TransactionResult,\n} from '@fiatsend/types';\nimport { FiatsendError, FiatsendErrorCode } from '@fiatsend/types';\nimport { VaultControllerABI } from '../abis/index.js';\n\n/** @internal */\nfunction wrapError(err: unknown, contractAddress: Address): FiatsendError {\n if (err instanceof FiatsendError) return err;\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes('BelowMinDeposit')) {\n return new FiatsendError('Amount is below the minimum vault deposit', FiatsendErrorCode.BELOW_MINIMUM, { contractAddress });\n }\n if (message.includes('InsufficientBalance')) {\n return new FiatsendError('Insufficient vault balance', FiatsendErrorCode.INSUFFICIENT_BALANCE, { contractAddress });\n }\n if (message.includes('NoYieldAvailable')) {\n return new FiatsendError('No yield available to claim yet', FiatsendErrorCode.BELOW_MINIMUM, { contractAddress });\n }\n return new FiatsendError(message, FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress, ...(err instanceof Error && { cause: err }) });\n}\n\n/**\n * Resource for VaultController contract interactions.\n *\n * Obtained via `client.vaults` on a `FiatsendClient` instance.\n */\nexport class VaultsResource {\n private readonly publicClient: PublicClient;\n private readonly walletClient: WalletClient | undefined;\n private readonly contractAddress: Address;\n private readonly supportedTokenAddress: Address;\n\n constructor(params: {\n publicClient: PublicClient;\n walletClient?: WalletClient;\n contractAddress: Address;\n supportedTokenAddress: Address;\n }) {\n this.publicClient = params.publicClient;\n this.walletClient = params.walletClient;\n this.contractAddress = params.contractAddress;\n this.supportedTokenAddress = params.supportedTokenAddress;\n }\n\n private get readContract() {\n return getContract({\n address: this.contractAddress,\n abi: VaultControllerABI,\n client: this.publicClient,\n });\n }\n\n private requireWallet(): WalletClient {\n if (!this.walletClient) {\n throw new FiatsendError('A walletClient is required for write operations.', FiatsendErrorCode.UNAUTHORIZED);\n }\n return this.walletClient;\n }\n\n /**\n * Deposits stablecoins into the vault.\n *\n * The caller must approve `amount` of the vault's supported token to this contract.\n *\n * @param amount - Amount to deposit (must be >= vault minDeposit)\n * @returns Transaction result\n */\n async deposit(amount: bigint): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: VaultControllerABI,\n functionName: 'deposit',\n args: [amount],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return { hash: receipt.transactionHash, status: receipt.status, blockNumber: receipt.blockNumber, gasUsed: receipt.gasUsed };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Withdraws stablecoins from the vault. Accrued yield is claimed automatically.\n *\n * @param amount - Amount to withdraw\n * @returns Transaction result\n */\n async withdraw(amount: bigint): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: VaultControllerABI,\n functionName: 'withdraw',\n args: [amount],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return { hash: receipt.transactionHash, status: receipt.status, blockNumber: receipt.blockNumber, gasUsed: receipt.gasUsed };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Claims accrued yield without withdrawing principal.\n *\n * @returns Transaction result\n */\n async claimYield(): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: VaultControllerABI,\n functionName: 'claimYield',\n args: [],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return { hash: receipt.transactionHash, status: receipt.status, blockNumber: receipt.blockNumber, gasUsed: receipt.gasUsed };\n },\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns vault-level configuration.\n */\n async getVaultInfo(): Promise<VaultInfo> {\n try {\n const contract = this.readContract;\n const [annualYieldRate, minDeposit, totalDeposited] = await Promise.all([\n contract.read.annualYieldRate(),\n contract.read.minDeposit(),\n contract.read.totalDeposited(),\n ]);\n return {\n token: this.supportedTokenAddress,\n totalDeposited,\n annualYieldRate,\n minDeposit,\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns a user's vault position.\n *\n * @param user - User address\n */\n async getPosition(user: Address): Promise<UserVaultPosition> {\n try {\n const contract = this.readContract;\n const [vaultData, pendingYield] = await Promise.all([\n contract.read.getVault([user]),\n contract.read.calculateYield([user]),\n ]);\n return {\n balance: vaultData.balance,\n pendingYield,\n depositedAt: vaultData.depositedAt,\n lastYieldClaim: vaultData.lastYieldClaim,\n };\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns the pending yield for a user.\n *\n * @param user - User address\n */\n async getPendingYield(user: Address): Promise<bigint> {\n try {\n return await this.readContract.read.calculateYield([user]);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n}\n","/**\n * PayoutsResource — interactions with the PayoutEscrow contract.\n *\n * The PayoutEscrow is the core B2B payout contract. Businesses deposit stablecoins\n * via the Fiatsend API; funds are held in escrow until the recipient claims using\n * their MobileNumberNFT identity. Recipients can claim to their wallet or\n * immediately offramp to mobile money in a single transaction.\n *\n * @module @fiatsend/core/resources/payouts\n */\n\nimport { type PublicClient, type WalletClient, getContract } from 'viem';\nimport type {\n Address,\n Hash,\n TransactionResult,\n Payout,\n CreatePayoutParams,\n CreateBatchPayoutParams,\n} from '@fiatsend/types';\nimport { FiatsendError, FiatsendErrorCode } from '@fiatsend/types';\nimport { PayoutEscrowABI } from '../abis/index.js';\n\n/** Maps uint8 contract enum to TypeScript string literal */\nfunction mapPayoutStatus(status: number): Payout['status'] {\n switch (status) {\n case 0: return 'pending';\n case 1: return 'claimed';\n case 2: return 'refunded';\n case 3: return 'expired';\n default: return 'pending';\n }\n}\n\n/** @internal Maps a raw contract tuple to a typed Payout */\nfunction mapPayout(raw: {\n id: `0x${string}`;\n sender: `0x${string}`;\n recipient: `0x${string}`;\n token: `0x${string}`;\n amount: bigint;\n phoneHash: `0x${string}`;\n status: number;\n expiresAt: bigint;\n createdAt: bigint;\n claimedAt: bigint;\n}): Payout {\n return {\n id: raw.id as Hash,\n sender: raw.sender as Address,\n recipient: raw.recipient as Address,\n token: raw.token as Address,\n amount: raw.amount,\n phoneHash: raw.phoneHash as Hash,\n status: mapPayoutStatus(raw.status),\n expiresAt: raw.expiresAt,\n createdAt: raw.createdAt,\n claimedAt: raw.claimedAt,\n };\n}\n\n/** @internal */\nfunction wrapError(err: unknown, contractAddress: Address): FiatsendError {\n if (err instanceof FiatsendError) return err;\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes('PayoutAlreadyExists')) {\n return new FiatsendError('A payout with this ID already exists', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('PayoutNotFound')) {\n return new FiatsendError('Payout not found', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('NotAuthorizedSender')) {\n return new FiatsendError('Caller is not an authorized sender', FiatsendErrorCode.UNAUTHORIZED, { contractAddress });\n }\n if (message.includes('NotPending')) {\n return new FiatsendError('Payout is not in pending status', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('NotExpiredYet')) {\n return new FiatsendError('Payout has not expired yet — cannot refund', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('NotRefundEligible')) {\n return new FiatsendError('Only the original sender or owner may refund this payout', FiatsendErrorCode.UNAUTHORIZED, { contractAddress });\n }\n if (message.includes('PhoneHashMismatch')) {\n return new FiatsendError('Your phone hash does not match this payout', FiatsendErrorCode.UNAUTHORIZED, { contractAddress });\n }\n if (message.includes('NoMobileNFT')) {\n return new FiatsendError('You do not have a MobileNumber NFT — please register first', FiatsendErrorCode.NO_NFT, { contractAddress });\n }\n if (message.includes('ZeroAmount')) {\n return new FiatsendError('Amount must be greater than zero', FiatsendErrorCode.BELOW_MINIMUM, { contractAddress });\n }\n if (message.includes('GatewayNotSet')) {\n return new FiatsendError('Gateway address has not been configured on PayoutEscrow', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('TokenNotSupportedByGateway')) {\n return new FiatsendError('This token is not supported by the gateway', FiatsendErrorCode.TOKEN_NOT_SUPPORTED, { contractAddress });\n }\n if (message.includes('ArrayLengthMismatch')) {\n return new FiatsendError('Batch payout arrays must all be the same length', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('InvalidExpiry')) {\n return new FiatsendError('Expiry timestamp must be in the future', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('Paused') || message.includes('EnforcedPause')) {\n return new FiatsendError('PayoutEscrow is currently paused', FiatsendErrorCode.CONTRACT_PAUSED, { contractAddress });\n }\n return new FiatsendError(message, FiatsendErrorCode.TRANSACTION_FAILED, {\n contractAddress,\n ...(err instanceof Error && { cause: err }),\n });\n}\n\n/**\n * Resource for PayoutEscrow contract interactions.\n *\n * The main interface for the B2B payout claim flow:\n * - Businesses create payouts (requires API authorization)\n * - Recipients claim by proving their phone NFT matches\n * - Recipients can optionally claim directly to mobile money in one tx\n * - Businesses can refund expired unclaimed payouts\n *\n * Obtained via `client.payouts` on a `FiatsendClient` instance.\n */\nexport class PayoutsResource {\n private readonly publicClient: PublicClient;\n private readonly walletClient: WalletClient | undefined;\n private readonly contractAddress: Address;\n\n constructor(params: {\n publicClient: PublicClient;\n walletClient?: WalletClient;\n contractAddress: Address;\n }) {\n this.publicClient = params.publicClient;\n this.walletClient = params.walletClient;\n this.contractAddress = params.contractAddress;\n }\n\n private get readContract() {\n return getContract({\n address: this.contractAddress,\n abi: PayoutEscrowABI,\n client: this.publicClient,\n });\n }\n\n private requireWallet(): WalletClient {\n if (!this.walletClient) {\n throw new FiatsendError(\n 'A walletClient is required for write operations.',\n FiatsendErrorCode.UNAUTHORIZED,\n );\n }\n return this.walletClient;\n }\n\n private buildTxResult(hash: Hash): TransactionResult {\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return {\n hash: receipt.transactionHash,\n status: receipt.status,\n blockNumber: receipt.blockNumber,\n gasUsed: receipt.gasUsed,\n };\n },\n };\n }\n\n // ─── Write: Business payout creation ────────────────────────────────────\n\n /**\n * Creates a single payout in the escrow.\n *\n * The caller must be an authorized sender (set by the contract owner) and must\n * have approved `amount` of `token` to the PayoutEscrow contract first.\n *\n * @param params - Payout parameters including token, amount, phone hash, and optional expiry\n * @returns Transaction result\n */\n async createPayout(params: CreatePayoutParams): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: PayoutEscrowABI,\n functionName: 'createPayout',\n args: [\n params.payoutId,\n params.token,\n params.amount,\n params.phoneHash,\n params.expiresAt ?? 0n,\n ],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return this.buildTxResult(hash);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Creates multiple payouts in a single transaction (single token approval).\n *\n * The caller must be an authorized sender and must have approved the total sum\n * of all amounts to the PayoutEscrow contract.\n *\n * @param params - Batch payout parameters\n * @returns Transaction result\n */\n async createBatchPayout(params: CreateBatchPayoutParams): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: PayoutEscrowABI,\n functionName: 'createBatchPayout',\n args: [\n params.payoutIds,\n params.token,\n params.amounts,\n params.phoneHashes,\n params.expiresAt ?? 0n,\n ],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return this.buildTxResult(hash);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n // ─── Write: Recipient claim ──────────────────────────────────────────────\n\n /**\n * Claims a payout to the caller's wallet.\n *\n * The caller must hold a MobileNumberNFT whose phone hash matches the payout.\n *\n * @param payoutId - ID of the payout to claim\n * @returns Transaction result\n */\n async claim(payoutId: Hash): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: PayoutEscrowABI,\n functionName: 'claim',\n args: [payoutId],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return this.buildTxResult(hash);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Claims a payout and immediately routes funds through the gateway to mobile money.\n *\n * Requires the gateway to be set on the PayoutEscrow and the token to be supported.\n * The caller must hold a MobileNumberNFT whose phone hash matches the payout.\n *\n * @param payoutId - ID of the payout to claim\n * @param phoneNumber - Destination MoMo phone number (e.g., \"+233241234567\")\n * @returns Transaction result\n */\n async claimToMoMo(payoutId: Hash, phoneNumber: string): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: PayoutEscrowABI,\n functionName: 'claimToMoMo',\n args: [payoutId, phoneNumber],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return this.buildTxResult(hash);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n // ─── Write: Business refund ──────────────────────────────────────────────\n\n /**\n * Refunds an expired pending payout back to the original sender.\n *\n * Only the original sender or contract owner may call this. The payout must\n * be past its expiry timestamp.\n *\n * @param payoutId - ID of the expired payout to refund\n * @returns Transaction result\n */\n async refund(payoutId: Hash): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: PayoutEscrowABI,\n functionName: 'refund',\n args: [payoutId],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return this.buildTxResult(hash);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n // ─── Read operations ──────────────────────────────────────────────────────\n\n /**\n * Returns the full payout struct for a given ID.\n *\n * @param payoutId - ID of the payout to look up\n * @returns Full Payout object with TypeScript-mapped status\n */\n async getPayout(payoutId: Hash): Promise<Payout> {\n try {\n const raw = await this.readContract.read.getPayout([payoutId]);\n return mapPayout(raw as Parameters<typeof mapPayout>[0]);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns all payout IDs associated with a phone hash.\n *\n * @param phoneHash - keccak256 of the recipient's encrypted phone bytes\n * @returns Array of payout IDs (as bytes32 hashes)\n */\n async getPayoutsForPhone(phoneHash: Hash): Promise<Hash[]> {\n try {\n const ids = await this.readContract.read.getPayoutsForPhone([phoneHash]);\n return ids as Hash[];\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns full payout objects that are still pending for a given phone hash.\n *\n * Convenience wrapper around `getPayoutsForPhone` + `getPayout` — fetches all\n * payout IDs for the phone and filters to those with status 'pending'.\n *\n * @param phoneHash - keccak256 of the recipient's encrypted phone bytes\n * @returns Array of pending Payout objects\n */\n async getPendingPayouts(phoneHash: Hash): Promise<Payout[]> {\n try {\n const ids = await this.readContract.read.getPayoutsByStatus([phoneHash, 0]);\n if (ids.length === 0) return [];\n const payouts = await Promise.all(\n (ids as Hash[]).map((id) => this.getPayout(id)),\n );\n return payouts;\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns all payouts claimable by a user based on their MobileNumberNFT phone hash.\n *\n * This is a convenience method: it reads the user's NFT phone hash on-chain (if\n * the NFT contract is accessible via the escrow's `mobileNumberNFT` reference),\n * then returns all pending payouts for that phone hash.\n *\n * Note: This requires the MobileNumberNFT to be queryable. If the NFT contract\n * is not set, this will throw. Use `getPendingPayouts(phoneHash)` if you already\n * know the phone hash.\n *\n * @param userAddress - Wallet address of the potential recipient\n * @returns Array of pending Payout objects claimable by this user\n */\n async getClaimablePayouts(userAddress: Address): Promise<Payout[]> {\n try {\n // Read NFT address from escrow, then get phone hash via NFT contract\n const nftAddress = await this.readContract.read.mobileNumberNFT();\n\n // Call getTokenId on the NFT contract\n const tokenId = await this.publicClient.readContract({\n address: nftAddress as Address,\n abi: [\n {\n type: 'function',\n name: 'getTokenId',\n inputs: [{ name: 'user', type: 'address', internalType: 'address' }],\n outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n stateMutability: 'view',\n },\n ] as const,\n functionName: 'getTokenId',\n args: [userAddress],\n });\n\n if (tokenId === 0n) return [];\n\n // Get encrypted phone for hash computation\n const encryptedPhone = await this.publicClient.readContract({\n address: nftAddress as Address,\n abi: [\n {\n type: 'function',\n name: 'getEncryptedPhone',\n inputs: [{ name: 'tokenId', type: 'uint256', internalType: 'uint256' }],\n outputs: [{ name: '', type: 'bytes', internalType: 'bytes' }],\n stateMutability: 'view',\n },\n ] as const,\n functionName: 'getEncryptedPhone',\n args: [tokenId],\n });\n\n // Compute phone hash the same way the contract does\n const { keccak256 } = await import('viem');\n const phoneHash = keccak256(encryptedPhone as `0x${string}`) as Hash;\n\n return this.getPendingPayouts(phoneHash);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n}\n","/**\n * P2PResource — interactions with the P2PExchange contract.\n *\n * Enables peer-to-peer token exchange with exact payment references for\n * crypto-exchange platform auto-completion (Binance P2P, Paxful, Noones, etc.).\n *\n * Flow:\n * 1. Maker calls `createOrder` — tokens are escrowed on-chain\n * 2. Taker calls `takeOrder` — order is locked; taker pays off-chain via reference\n * 3. Maker calls `confirmPayment` when off-chain payment arrives — tokens go to taker\n * 4. Either party can call `disputeOrder` if there's disagreement\n *\n * @module @fiatsend/core/resources/p2p\n */\n\nimport { type PublicClient, type WalletClient, getContract } from 'viem';\nimport type {\n Address,\n Hash,\n TransactionResult,\n P2POrder,\n CreateP2POrderParams,\n} from '@fiatsend/types';\nimport { FiatsendError, FiatsendErrorCode } from '@fiatsend/types';\nimport { P2PExchangeABI } from '../abis/index.js';\n\n/** Maps uint8 contract enum to TypeScript string literal */\nfunction mapOrderStatus(status: number): P2POrder['status'] {\n switch (status) {\n case 0: return 'open';\n case 1: return 'locked';\n case 2: return 'completed';\n case 3: return 'cancelled';\n case 4: return 'disputed';\n default: return 'open';\n }\n}\n\n/** @internal Maps a raw contract tuple to a typed P2POrder */\nfunction mapOrder(raw: {\n id: `0x${string}`;\n maker: `0x${string}`;\n taker: `0x${string}`;\n token: `0x${string}`;\n amount: bigint;\n paymentReference: string;\n exchangePlatform: string;\n status: number;\n createdAt: bigint;\n lockedAt: bigint;\n completedAt: bigint;\n expiryDuration: bigint;\n}): P2POrder {\n return {\n id: raw.id as Hash,\n maker: raw.maker as Address,\n taker: raw.taker as Address,\n token: raw.token as Address,\n amount: raw.amount,\n paymentReference: raw.paymentReference,\n exchangePlatform: raw.exchangePlatform,\n status: mapOrderStatus(raw.status),\n createdAt: raw.createdAt,\n lockedAt: raw.lockedAt,\n completedAt: raw.completedAt,\n expiryDuration: raw.expiryDuration,\n };\n}\n\n/** @internal */\nfunction wrapError(err: unknown, contractAddress: Address): FiatsendError {\n if (err instanceof FiatsendError) return err;\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes('OrderAlreadyExists')) {\n return new FiatsendError('An order with this ID already exists', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('OrderNotFound')) {\n return new FiatsendError('Order not found', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('NotMaker')) {\n return new FiatsendError('Only the order maker can perform this action', FiatsendErrorCode.UNAUTHORIZED, { contractAddress });\n }\n if (message.includes('NotParty')) {\n return new FiatsendError('Only the maker or taker can dispute an order', FiatsendErrorCode.UNAUTHORIZED, { contractAddress });\n }\n if (message.includes('NotDisputeResolver')) {\n return new FiatsendError('Only the designated dispute resolver can resolve disputes', FiatsendErrorCode.UNAUTHORIZED, { contractAddress });\n }\n if (message.includes('OrderNotOpen')) {\n return new FiatsendError('Order is not open — it may have already been taken or cancelled', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('OrderNotLocked')) {\n return new FiatsendError('Order is not locked — it must be taken before payment can be confirmed', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('OrderNotDisputed')) {\n return new FiatsendError('Order is not in disputed status', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('SelfTake')) {\n return new FiatsendError('Maker cannot take their own order', FiatsendErrorCode.UNAUTHORIZED, { contractAddress });\n }\n if (message.includes('ZeroAmount')) {\n return new FiatsendError('Amount must be greater than zero', FiatsendErrorCode.BELOW_MINIMUM, { contractAddress });\n }\n if (message.includes('ZeroExpiryDuration')) {\n return new FiatsendError('Expiry duration must be greater than zero', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('InvalidWinner')) {\n return new FiatsendError('Winner must be either the maker or the taker', FiatsendErrorCode.TRANSACTION_FAILED, { contractAddress });\n }\n if (message.includes('Paused') || message.includes('EnforcedPause')) {\n return new FiatsendError('P2PExchange is currently paused', FiatsendErrorCode.CONTRACT_PAUSED, { contractAddress });\n }\n return new FiatsendError(message, FiatsendErrorCode.TRANSACTION_FAILED, {\n contractAddress,\n ...(err instanceof Error && { cause: err }),\n });\n}\n\n/**\n * Resource for P2PExchange contract interactions.\n *\n * Obtained via `client.p2p` on a `FiatsendClient` instance.\n */\nexport class P2PResource {\n private readonly publicClient: PublicClient;\n private readonly walletClient: WalletClient | undefined;\n private readonly contractAddress: Address;\n\n constructor(params: {\n publicClient: PublicClient;\n walletClient?: WalletClient;\n contractAddress: Address;\n }) {\n this.publicClient = params.publicClient;\n this.walletClient = params.walletClient;\n this.contractAddress = params.contractAddress;\n }\n\n private get readContract() {\n return getContract({\n address: this.contractAddress,\n abi: P2PExchangeABI,\n client: this.publicClient,\n });\n }\n\n private requireWallet(): WalletClient {\n if (!this.walletClient) {\n throw new FiatsendError(\n 'A walletClient is required for write operations.',\n FiatsendErrorCode.UNAUTHORIZED,\n );\n }\n return this.walletClient;\n }\n\n private buildTxResult(hash: Hash): TransactionResult {\n return {\n hash,\n wait: async () => {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n return {\n hash: receipt.transactionHash,\n status: receipt.status,\n blockNumber: receipt.blockNumber,\n gasUsed: receipt.gasUsed,\n };\n },\n };\n }\n\n // ─── Write operations ─────────────────────────────────────────────────────\n\n /**\n * Creates a new P2P order and escrows tokens from the maker.\n *\n * The caller must have approved `amount` of `token` to the P2PExchange contract.\n *\n * @param params - Order parameters\n * @returns Transaction result\n */\n async createOrder(params: CreateP2POrderParams): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: P2PExchangeABI,\n functionName: 'createOrder',\n args: [\n params.orderId,\n params.token,\n params.amount,\n params.paymentReference,\n params.exchangePlatform,\n params.expiryDuration,\n ],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return this.buildTxResult(hash);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Locks an open order. Taker commits to pay via the exchange using the payment reference.\n *\n * Once taken, the taker must complete the off-chain payment using the exact reference\n * string from the order. The maker then calls `confirmPayment` to release funds.\n *\n * @param orderId - ID of the order to take\n * @returns Transaction result\n */\n async takeOrder(orderId: Hash): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: P2PExchangeABI,\n functionName: 'takeOrder',\n args: [orderId],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return this.buildTxResult(hash);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Confirms payment received on the exchange and releases tokens to the taker.\n *\n * Only the maker can call this. After confirmation, the escrowed tokens are\n * transferred to the taker's wallet.\n *\n * @param orderId - ID of the locked order to confirm\n * @returns Transaction result\n */\n async confirmPayment(orderId: Hash): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: P2PExchangeABI,\n functionName: 'confirmPayment',\n args: [orderId],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return this.buildTxResult(hash);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Cancels an open (not yet taken) order and returns tokens to the maker.\n *\n * Only the maker can cancel, and only while the order is still open.\n *\n * @param orderId - ID of the open order to cancel\n * @returns Transaction result\n */\n async cancelOrder(orderId: Hash): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: P2PExchangeABI,\n functionName: 'cancelOrder',\n args: [orderId],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return this.buildTxResult(hash);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Raises a dispute on a locked order.\n *\n * Either the maker or taker can dispute. Once disputed, the order is frozen\n * until the designated dispute resolver calls `resolveDispute`.\n *\n * @param orderId - ID of the locked order to dispute\n * @returns Transaction result\n */\n async disputeOrder(orderId: Hash): Promise<TransactionResult> {\n try {\n const wallet = this.requireWallet();\n const hash = await wallet.writeContract({\n address: this.contractAddress,\n abi: P2PExchangeABI,\n functionName: 'disputeOrder',\n args: [orderId],\n account: wallet.account!,\n chain: wallet.chain ?? null,\n });\n return this.buildTxResult(hash);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n // ─── Read operations ──────────────────────────────────────────────────────\n\n /**\n * Returns the full order struct for a given ID.\n *\n * @param orderId - ID of the order to look up\n * @returns Full P2POrder object with TypeScript-mapped status\n */\n async getOrder(orderId: Hash): Promise<P2POrder> {\n try {\n const raw = await this.readContract.read.getOrder([orderId]);\n return mapOrder(raw as Parameters<typeof mapOrder>[0]);\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns all order IDs created by a user.\n *\n * @param user - Wallet address of the maker\n * @returns Array of order IDs (as bytes32 hashes)\n */\n async getUserOrders(user: Address): Promise<Hash[]> {\n try {\n const ids = await this.readContract.read.getUserOrders([user]);\n return ids as Hash[];\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns open order IDs available for taking.\n *\n * @param limit - Maximum number of order IDs to return (0 = all)\n * @returns Array of open order IDs\n */\n async getOpenOrders(limit = 0): Promise<Hash[]> {\n try {\n const ids = await this.readContract.read.getOpenOrders([BigInt(limit)]);\n return ids as Hash[];\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n\n /**\n * Returns full order objects for all currently open orders.\n *\n * Convenience wrapper around `getOpenOrders` + `getOrder` — fetches all\n * open order IDs and resolves each to a full P2POrder.\n *\n * @param limit - Maximum number of orders to fetch (0 = all)\n * @returns Array of full P2POrder objects\n */\n async getOpenOrdersDetailed(limit = 0): Promise<P2POrder[]> {\n try {\n const ids = await this.getOpenOrders(limit);\n if (ids.length === 0) return [];\n return Promise.all(ids.map((id) => this.getOrder(id)));\n } catch (err) {\n throw wrapError(err, this.contractAddress);\n }\n }\n}\n","/**\n * FiatsendClient — the main entry point for the Fiatsend SDK.\n *\n * Instantiate with a chain name/ID and optional viem clients to get typed\n * access to all Fiatsend contract resources.\n *\n * @example\n * ```typescript\n * import { FiatsendClient } from '@fiatsend/core';\n * import { createPublicClient, createWalletClient, http } from 'viem';\n * import { bsc } from 'viem/chains';\n *\n * const publicClient = createPublicClient({ chain: bsc, transport: http() });\n *\n * const fiatsend = new FiatsendClient({\n * chain: 'bsc',\n * publicClient,\n * });\n *\n * // Business creates a payout\n * await fiatsend.payouts.createPayout({\n * payoutId: '0x...',\n * token: USDC_ADDRESS,\n * amount: parseTokenAmount('500', 6),\n * phoneHash: encodePhoneNumber('+233241234567'),\n * });\n *\n * // Recipient claims directly to mobile money\n * await fiatsend.payouts.claimToMoMo(payoutId, '+233241234567');\n * ```\n *\n * @module @fiatsend/core/client\n */\n\nimport { createPublicClient, http, type PublicClient, type WalletClient } from 'viem';\nimport { type ChainConfig, type ContractAddresses, getChainConfig } from './config.js';\nimport { IdentityResource } from './resources/identity.js';\nimport { GatewayResource } from './resources/gateway.js';\nimport { PaymentsResource } from './resources/payments.js';\nimport { WithdrawalsResource } from './resources/withdrawals.js';\nimport { LiquidityResource } from './resources/liquidity.js';\nimport { VaultsResource } from './resources/vaults.js';\nimport { PayoutsResource } from './resources/payouts.js';\nimport { P2PResource } from './resources/p2p.js';\n\n/** Configuration for creating a FiatsendClient */\nexport interface FiatsendClientConfig {\n /**\n * Chain to connect to. Accepts a chain name (e.g., \"bsc\", \"polygon\")\n * or a numeric chain ID (e.g., 56).\n */\n chain: string | number;\n\n /**\n * Optional RPC URL override. If omitted, uses the default RPC from CHAINS config.\n */\n rpcUrl?: string;\n\n /**\n * An existing viem PublicClient for read operations.\n * If omitted, one is created automatically using the configured RPC URL.\n */\n publicClient?: PublicClient;\n\n /**\n * An existing viem WalletClient for write (transaction) operations.\n * Required for any state-changing method (register, offramp, createPayout, etc.).\n */\n walletClient?: WalletClient;\n\n /**\n * Override any or all contract addresses for the selected chain.\n * Useful during testing or when deploying to a new network.\n */\n contractAddresses?: Partial<ContractAddresses>;\n}\n\n/**\n * The main Fiatsend SDK client.\n *\n * All contract interactions are grouped into typed resource classes accessible\n * as properties. Read-only operations require only `publicClient`.\n * Write operations additionally require `walletClient`.\n */\nexport class FiatsendClient {\n /** Chain configuration used by this client */\n readonly chainConfig: ChainConfig;\n\n /** viem PublicClient used for all read operations */\n readonly publicClient: PublicClient;\n\n /** viem WalletClient (optional) used for write operations */\n readonly walletClient: WalletClient | undefined;\n\n /** Resolved contract addresses */\n readonly addresses: ContractAddresses;\n\n // ─── Resources ────────────────────────────────────────────────────────────\n\n /** MobileNumberNFT interactions — register, resolve, KYC */\n readonly identity: IdentityResource;\n\n /** FiatsendGateway interactions — offramp, onramp, configuration */\n readonly gateway: GatewayResource;\n\n /** PaymentRouter interactions — send, sendToPhone, payment requests */\n readonly payments: PaymentsResource;\n\n /** Withdrawals contract — read-only withdrawal tracking */\n readonly withdrawals: WithdrawalsResource;\n\n /** LiquidityPool interactions — deposit, withdraw, claim rewards */\n readonly liquidity: LiquidityResource;\n\n /** VaultController interactions — deposit, withdraw, claim yield */\n readonly vaults: VaultsResource;\n\n /**\n * PayoutEscrow interactions — core B2B payout claim flow.\n *\n * Businesses create payouts; recipients claim via their MobileNumberNFT identity.\n * Supports single-tx `claimToMoMo` for immediate mobile money delivery.\n */\n readonly payouts: PayoutsResource;\n\n /**\n * P2PExchange interactions — peer-to-peer exchange with payment references.\n *\n * Makers escrow tokens on-chain; takers pay via exchange platforms (Binance P2P,\n * Paxful, Noones) using the exact payment reference; makers confirm receipt.\n */\n readonly p2p: P2PResource;\n\n constructor(config: FiatsendClientConfig) {\n // Resolve chain config\n this.chainConfig = getChainConfig(config.chain);\n\n // Merge contract address overrides\n this.addresses = {\n ...this.chainConfig.contracts,\n ...config.contractAddresses,\n };\n\n // Set up public client\n this.publicClient =\n config.publicClient ??\n createPublicClient({\n transport: http(config.rpcUrl ?? this.chainConfig.rpcUrl),\n });\n\n this.walletClient = config.walletClient;\n\n // Build a base-params helper that only includes walletClient when defined,\n // satisfying exactOptionalPropertyTypes: true.\n const walletOpt = this.walletClient !== undefined\n ? { walletClient: this.walletClient }\n : {};\n\n this.identity = new IdentityResource({\n publicClient: this.publicClient,\n ...walletOpt,\n contractAddress: this.addresses.mobileNumberNFT,\n });\n\n this.gateway = new GatewayResource({\n publicClient: this.publicClient,\n ...walletOpt,\n contractAddress: this.addresses.gateway,\n });\n\n this.payments = new PaymentsResource({\n publicClient: this.publicClient,\n ...walletOpt,\n contractAddress: this.addresses.paymentRouter,\n });\n\n this.withdrawals = new WithdrawalsResource({\n publicClient: this.publicClient,\n contractAddress: this.addresses.withdrawals,\n });\n\n this.liquidity = new LiquidityResource({\n publicClient: this.publicClient,\n ...walletOpt,\n contractAddress: this.addresses.liquidityPool,\n });\n\n this.vaults = new VaultsResource({\n publicClient: this.publicClient,\n ...walletOpt,\n contractAddress: this.addresses.vaultController,\n supportedTokenAddress: this.addresses.ghsFiat,\n });\n\n this.payouts = new PayoutsResource({\n publicClient: this.publicClient,\n ...walletOpt,\n contractAddress: this.addresses.payoutEscrow,\n });\n\n this.p2p = new P2PResource({\n publicClient: this.publicClient,\n ...walletOpt,\n contractAddress: this.addresses.p2pExchange,\n });\n }\n\n /**\n * Convenience: returns a copy of this client with a new walletClient attached.\n *\n * Useful when the wallet connects after the client is created.\n *\n * @param walletClient - The viem WalletClient to attach\n */\n withWallet(walletClient: WalletClient): FiatsendClient {\n return new FiatsendClient({\n chain: this.chainConfig.chainId,\n publicClient: this.publicClient,\n walletClient,\n contractAddresses: this.addresses,\n });\n }\n}\n"]}