@gauntlet-xyz/sdk 3.0.1 → 3.1.1
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.
- package/README.md +34 -3
- package/dist/api/activity.d.ts +3 -1
- package/dist/api/activity.d.ts.map +1 -1
- package/dist/api/activityRows.d.ts +11 -0
- package/dist/api/activityRows.d.ts.map +1 -0
- package/dist/api/caip.d.ts.map +1 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/decimal.d.ts.map +1 -1
- package/dist/api/http.d.ts.map +1 -1
- package/dist/api/index.js +7 -8
- package/dist/api/positionHistory.d.ts.map +1 -1
- package/dist/attribution/index.d.ts +5 -2
- package/dist/attribution/index.d.ts.map +1 -1
- package/dist/{chunk-HC2BS7MK.js → chunk-JJOLVL5V.js} +113 -6
- package/dist/chunk-JJOLVL5V.js.map +7 -0
- package/dist/{chunk-S2TTA45N.js → chunk-JRSNLXFY.js} +2 -2
- package/dist/{chunk-SU6JAKIA.js → chunk-MEKISE2T.js} +131 -47
- package/dist/chunk-MEKISE2T.js.map +7 -0
- package/dist/{chunk-7TA2OJUK.js → chunk-YQXTLIJA.js} +209 -96
- package/dist/chunk-YQXTLIJA.js.map +7 -0
- package/dist/cjs/api/activity.d.ts +3 -1
- package/dist/cjs/api/activity.d.ts.map +1 -1
- package/dist/cjs/api/activity.js +14 -12
- package/dist/cjs/api/activity.js.map +2 -2
- package/dist/cjs/api/activityRows.d.ts +11 -0
- package/dist/cjs/api/activityRows.d.ts.map +1 -0
- package/dist/cjs/api/activityRows.js +139 -0
- package/dist/cjs/api/activityRows.js.map +7 -0
- package/dist/cjs/api/caip.d.ts.map +1 -1
- package/dist/cjs/api/caip.js +3 -1
- package/dist/cjs/api/caip.js.map +2 -2
- package/dist/cjs/api/client.d.ts.map +1 -1
- package/dist/cjs/api/client.js +29 -1
- package/dist/cjs/api/client.js.map +2 -2
- package/dist/cjs/api/decimal.d.ts.map +1 -1
- package/dist/cjs/api/decimal.js +1 -0
- package/dist/cjs/api/decimal.js.map +2 -2
- package/dist/cjs/api/http.d.ts.map +1 -1
- package/dist/cjs/api/http.js +1 -0
- package/dist/cjs/api/http.js.map +2 -2
- package/dist/cjs/api/positionHistory.d.ts.map +1 -1
- package/dist/cjs/api/positionHistory.js +17 -4
- package/dist/cjs/api/positionHistory.js.map +2 -2
- package/dist/cjs/attribution/index.d.ts +5 -2
- package/dist/cjs/attribution/index.d.ts.map +1 -1
- package/dist/cjs/attribution/index.js +3 -1
- package/dist/cjs/attribution/index.js.map +2 -2
- package/dist/cjs/evm/adapters/aera.d.ts.map +1 -1
- package/dist/cjs/evm/adapters/aera.js +16 -7
- package/dist/cjs/evm/adapters/aera.js.map +2 -2
- package/dist/cjs/evm/adapters/types.d.ts +1 -0
- package/dist/cjs/evm/adapters/types.d.ts.map +1 -1
- package/dist/cjs/evm/adapters/types.js.map +1 -1
- package/dist/cjs/evm/aeraContracts.d.ts.map +1 -1
- package/dist/cjs/evm/aeraContracts.js +21 -11
- package/dist/cjs/evm/aeraContracts.js.map +2 -2
- package/dist/cjs/evm/deposit.d.ts +3 -2
- package/dist/cjs/evm/deposit.d.ts.map +1 -1
- package/dist/cjs/evm/deposit.js +40 -10
- package/dist/cjs/evm/deposit.js.map +2 -2
- package/dist/cjs/evm/depositQuote.d.ts.map +1 -1
- package/dist/cjs/evm/depositQuote.js +1 -0
- package/dist/cjs/evm/depositQuote.js.map +2 -2
- package/dist/cjs/evm/depositReceiverApproval.d.ts.map +1 -1
- package/dist/cjs/evm/depositReceiverApproval.js +14 -9
- package/dist/cjs/evm/depositReceiverApproval.js.map +2 -2
- package/dist/cjs/evm/userCurrentBalance.d.ts +15 -1
- package/dist/cjs/evm/userCurrentBalance.d.ts.map +1 -1
- package/dist/cjs/evm/userCurrentBalance.js +94 -51
- package/dist/cjs/evm/userCurrentBalance.js.map +2 -2
- package/dist/cjs/evm/withdraw.d.ts +2 -0
- package/dist/cjs/evm/withdraw.d.ts.map +1 -1
- package/dist/cjs/evm/withdraw.js +14 -1
- package/dist/cjs/evm/withdraw.js.map +2 -2
- package/dist/cjs/evm/withdrawQuote.d.ts.map +1 -1
- package/dist/cjs/evm/withdrawQuote.js +1 -0
- package/dist/cjs/evm/withdrawQuote.js.map +2 -2
- package/dist/evm/adapters/aera.d.ts.map +1 -1
- package/dist/evm/adapters/types.d.ts +1 -0
- package/dist/evm/adapters/types.d.ts.map +1 -1
- package/dist/evm/aeraContracts.d.ts.map +1 -1
- package/dist/evm/deposit.d.ts +3 -2
- package/dist/evm/deposit.d.ts.map +1 -1
- package/dist/evm/depositQuote.d.ts.map +1 -1
- package/dist/evm/depositReceiverApproval.d.ts.map +1 -1
- package/dist/evm/index.js +6 -8
- package/dist/evm/userCurrentBalance.d.ts +15 -1
- package/dist/evm/userCurrentBalance.d.ts.map +1 -1
- package/dist/evm/withdraw.d.ts +2 -0
- package/dist/evm/withdraw.d.ts.map +1 -1
- package/dist/evm/withdrawQuote.d.ts.map +1 -1
- package/dist/index.js +11 -13
- package/dist/privy/index.js +2 -2
- package/package.json +1 -1
- package/src/api/activity.ts +18 -15
- package/src/api/activityRows.ts +143 -0
- package/src/api/caip.ts +3 -1
- package/src/api/client.ts +36 -1
- package/src/api/decimal.ts +1 -0
- package/src/api/http.ts +1 -0
- package/src/api/positionHistory.ts +20 -5
- package/src/attribution/index.ts +6 -2
- package/src/evm/adapters/aera.ts +26 -8
- package/src/evm/adapters/types.ts +1 -0
- package/src/evm/aeraContracts.ts +29 -14
- package/src/evm/deposit.ts +43 -12
- package/src/evm/depositQuote.ts +1 -0
- package/src/evm/depositReceiverApproval.ts +14 -9
- package/src/evm/userCurrentBalance.ts +144 -60
- package/src/evm/withdraw.ts +20 -1
- package/src/evm/withdrawQuote.ts +1 -0
- package/dist/chunk-7TA2OJUK.js.map +0 -7
- package/dist/chunk-HC2BS7MK.js.map +0 -7
- package/dist/chunk-STIV2CC4.js +0 -57
- package/dist/chunk-STIV2CC4.js.map +0 -7
- package/dist/chunk-SU6JAKIA.js.map +0 -7
- /package/dist/{chunk-S2TTA45N.js.map → chunk-JRSNLXFY.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/evm/types.ts", "../src/evm/aeraContracts.ts", "../src/evm/abis/multiDepositorVault.ts", "../src/evm/abis/provisioner.ts", "../src/evm/abis/provisionerV2.ts", "../src/evm/aeraContracts/readOptions.ts", "../src/evm/abis/priceAndFeeCalculator.ts", "../src/evm/abis/priceAndFeeCalculatorV2.ts", "../src/evm/aeraContracts/priceAndFeeCalculator.ts", "../src/evm/abis/erc20.ts", "../src/evm/aeraContracts/v1.ts", "../src/evm/aeraContracts/v2.ts", "../src/evm/adapters/aera.ts", "../src/evm/abis/erc4626.ts", "../src/evm/adapters/morpho.ts", "../src/evm/adapters/index.ts", "../src/attribution/index.ts", "../src/attribution/erc8021.ts", "../src/evm/operationMode.ts", "../src/evm/deposit.ts", "../src/evm/depositReceiverApproval.ts", "../src/evm/depositQuote.ts", "../src/evm/withdraw.ts", "../src/evm/withdrawQuote.ts", "../src/evm/tokenModes.ts", "../src/evm/userCurrentBalance.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Address } from 'viem';\n\nexport interface TokenInfo {\n symbol: string;\n address: Address;\n decimals: number;\n}\n\nexport const ContractVersion = {\n V1: 'v1',\n V2: 'v2',\n} as const;\n\nexport type ContractVersion = (typeof ContractVersion)[keyof typeof ContractVersion];\n\nexport interface EvmVaultDeployment {\n chain: 'evm';\n chainId: number;\n vaultAddress: Address;\n vaultType: 'single-depositor' | 'multi-depositor';\n supplyToken: TokenInfo[];\n /** Number of days before an async request deadline expires. Defaults to 3. */\n expirationDays?: number;\n}\n\n/** Union of all supported chain deployment types. Narrow on `chain` to access chain-specific fields. */\nexport type VaultDeployment = EvmVaultDeployment;\n\nexport interface VaultInfo {\n vaultId: string;\n name: string;\n protocol: 'aera' | 'morpho';\n strategy: string;\n deployments: VaultDeployment[];\n}\n\nexport interface VaultManifest {\n version: string;\n vaults: VaultInfo[];\n}\n", "import {\n ContractFunctionExecutionError,\n ContractFunctionRevertedError,\n ContractFunctionZeroDataError,\n type Address,\n type Client,\n type GetContractReturnType,\n type PublicClient,\n getContract,\n zeroAddress,\n} from 'viem';\nimport { UnimplementedFeatureError, UnsupportedFeatureError } from '../errors';\nimport { multiDepositorVaultAbi } from './abis/multiDepositorVault';\nimport { provisionerAbi } from './abis/provisioner';\nimport { provisionerV2Abi } from './abis/provisionerV2';\nimport { MAX_BPS } from '../constants';\nimport { ContractVersion, type EvmVaultDeployment } from './types';\nimport { readAtBlock } from './aeraContracts/readOptions';\n\nconst contractVersionCache = new Map<string, ContractVersion>();\n\nconst contractVersionAbi = [\n {\n type: 'function',\n inputs: [],\n name: 'version',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n] as const;\n\nconst solvingGateAbi = [\n {\n type: 'function',\n inputs: [\n { name: 'provisioner', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'address', type: 'address' },\n ],\n name: 'paused',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n] as const;\n\nexport interface AeraRuntimeContracts {\n provisioner: {\n address: Address;\n version: ContractVersion;\n };\n feeCalculator: {\n address: Address;\n version: ContractVersion;\n };\n}\n\nexport interface AeraTokenModeSupport {\n asyncDeposit: boolean;\n asyncRedeem: boolean;\n syncDeposit: boolean;\n syncRedeem: boolean;\n}\n\nexport function requireAeraSyncRedeemRuntime(runtime: AeraRuntimeContracts): void {\n if (runtime.provisioner.version !== ContractVersion.V2) {\n throw new UnsupportedFeatureError('Aera: sync redeem requires a V2 provisioner');\n }\n if (runtime.feeCalculator.version !== ContractVersion.V2) {\n throw new UnsupportedFeatureError('Aera: sync redeem requires a V2 price and fee calculator');\n }\n}\n\nexport type AeraReadOptions = {\n blockNumber?: bigint;\n};\n\nexport function applySlippageDown(amount: bigint, slippageBps: number): bigint {\n return (amount * (MAX_BPS - BigInt(slippageBps))) / MAX_BPS;\n}\n\nexport function applySlippageUp(amount: bigint, slippageBps: number): bigint {\n return (amount * (MAX_BPS + BigInt(slippageBps)) + MAX_BPS - 1n) / MAX_BPS;\n}\n\nfunction contractVersionCacheKey(client: PublicClient, address: Address): string {\n return `${client.chain?.id ?? 'unknown'}:${address.toLowerCase()}`;\n}\n\nfunction isVersionUnavailableError(error: unknown): boolean {\n if (!(error instanceof ContractFunctionExecutionError) || error.functionName !== 'version') {\n return false;\n }\n\n if (error.cause instanceof ContractFunctionRevertedError) {\n const hasDecodedError =\n error.cause.signature !== undefined ||\n error.cause.data !== undefined ||\n (error.cause.raw !== undefined && error.cause.raw !== '0x');\n\n return (\n !hasDecodedError &&\n (error.cause.reason === undefined || error.cause.reason === 'execution reverted')\n );\n }\n\n return error.cause instanceof ContractFunctionZeroDataError;\n}\n\nexport type MultiDepositorVaultContract<T extends Client> = GetContractReturnType<\n typeof multiDepositorVaultAbi,\n T,\n Address\n>;\n\nexport function getMultiDepositorVault<T extends Client>(\n client: T,\n vaultAddress: Address\n): MultiDepositorVaultContract<T> {\n return getContract({\n address: vaultAddress,\n abi: multiDepositorVaultAbi,\n client,\n });\n}\n\nexport async function resolveContractVersion(\n client: PublicClient,\n address: Address,\n options: AeraReadOptions = {}\n): Promise<ContractVersion> {\n const cacheKey = contractVersionCacheKey(client, address);\n const cached = contractVersionCache.get(cacheKey);\n if (cached) return cached;\n\n try {\n const versionString = await client.readContract({\n address,\n abi: contractVersionAbi,\n functionName: 'version',\n ...readAtBlock(options),\n });\n const version = versionString.startsWith('2.') ? ContractVersion.V2 : ContractVersion.V1;\n contractVersionCache.set(cacheKey, version);\n\n return version;\n } catch (error) {\n if (!isVersionUnavailableError(error)) throw error;\n\n contractVersionCache.set(cacheKey, ContractVersion.V1);\n return ContractVersion.V1;\n }\n}\n\nexport async function resolveAeraRuntimeContracts(\n client: PublicClient,\n vault: EvmVaultDeployment,\n options: AeraReadOptions = {}\n): Promise<AeraRuntimeContracts> {\n if (vault.vaultType !== 'multi-depositor') {\n throw new UnimplementedFeatureError('Aera: single depositor vaults');\n }\n\n const [provisionerAddress, feeCalculatorAddress] = await Promise.all([\n client.readContract({\n address: vault.vaultAddress,\n abi: multiDepositorVaultAbi,\n functionName: 'provisioner',\n ...readAtBlock(options),\n }),\n client.readContract({\n address: vault.vaultAddress,\n abi: multiDepositorVaultAbi,\n functionName: 'feeCalculator',\n ...readAtBlock(options),\n }),\n ]);\n\n if (provisionerAddress === zeroAddress) {\n throw new UnsupportedFeatureError('Aera: vault without provisioner');\n }\n if (feeCalculatorAddress === zeroAddress) {\n throw new UnsupportedFeatureError('Aera: vault without price and fee calculator');\n }\n\n const [provisionerVersion, feeCalculatorVersion] = await Promise.all([\n resolveContractVersion(client, provisionerAddress, options),\n resolveContractVersion(client, feeCalculatorAddress, options),\n ]);\n\n return {\n provisioner: {\n address: provisionerAddress,\n version: provisionerVersion,\n },\n feeCalculator: {\n address: feeCalculatorAddress,\n version: feeCalculatorVersion,\n },\n };\n}\n\nexport async function resolveAeraTokenModeSupport(\n client: PublicClient,\n runtime: AeraRuntimeContracts,\n token: Address,\n options: AeraReadOptions & { includeSyncModes?: boolean } = {}\n): Promise<AeraTokenModeSupport> {\n if (runtime.provisioner.version === ContractVersion.V2) {\n const tokenDetailsPromise = client.readContract({\n address: runtime.provisioner.address,\n abi: provisionerV2Abi,\n functionName: 'tokensDetails',\n args: [token],\n ...readAtBlock(options),\n });\n if (options.includeSyncModes === false) {\n const tokenDetails = await tokenDetailsPromise;\n return {\n asyncDeposit: Boolean(tokenDetails[0]),\n asyncRedeem: Boolean(tokenDetails[1]),\n syncDeposit: false,\n syncRedeem: false,\n };\n }\n\n const [tokenDetails, solvingGateEnabled, solvingGate] = await Promise.all([\n tokenDetailsPromise,\n client.readContract({\n address: runtime.provisioner.address,\n abi: provisionerV2Abi,\n functionName: 'SOLVING_GATE_ENABLED',\n ...readAtBlock(options),\n }),\n client.readContract({\n address: runtime.provisioner.address,\n abi: provisionerV2Abi,\n functionName: 'solvingGate',\n ...readAtBlock(options),\n }),\n ]);\n const solvingPaused =\n solvingGateEnabled && solvingGate !== zeroAddress\n ? await client.readContract({\n address: solvingGate,\n abi: solvingGateAbi,\n functionName: 'paused',\n args: [runtime.provisioner.address, token],\n ...readAtBlock(options),\n })\n : false;\n\n return {\n asyncDeposit: Boolean(tokenDetails[0]),\n asyncRedeem: Boolean(tokenDetails[1]),\n syncDeposit: Boolean(tokenDetails[2]) && !solvingPaused,\n syncRedeem:\n Boolean(tokenDetails[3]) &&\n !solvingPaused &&\n runtime.feeCalculator.version === ContractVersion.V2,\n };\n }\n\n const tokenDetails = await client.readContract({\n address: runtime.provisioner.address,\n abi: provisionerAbi,\n functionName: 'tokensDetails',\n args: [token],\n ...readAtBlock(options),\n });\n\n return {\n asyncDeposit: Boolean(tokenDetails[0]),\n asyncRedeem: Boolean(tokenDetails[1]),\n syncDeposit: false,\n syncRedeem: false,\n };\n}\n", "export const multiDepositorVaultAbi = [\n { type: 'constructor', inputs: [], stateMutability: 'nonpayable' },\n { type: 'fallback', stateMutability: 'nonpayable' },\n { type: 'receive', stateMutability: 'payable' },\n {\n type: 'function',\n inputs: [],\n name: 'FEE_TOKEN',\n outputs: [{ name: '', internalType: 'contract IERC20', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'WHITELIST',\n outputs: [{ name: '', internalType: 'contract IWhitelist', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n ],\n name: 'allowance',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'authority',\n outputs: [{ name: '', internalType: 'contract Authority', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'beforeTransferHook',\n outputs: [{ name: '', internalType: 'contract IBeforeTransferHook', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'guardian', internalType: 'address', type: 'address' }],\n name: 'checkGuardianWhitelist',\n outputs: [{ name: 'isRemoved', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'claimFees',\n outputs: [\n { name: 'feeRecipientFees', internalType: 'uint256', type: 'uint256' },\n { name: 'protocolFees', internalType: 'uint256', type: 'uint256' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'claimProtocolFees',\n outputs: [{ name: 'protocolFees', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'decimals',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'sender', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokenAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'unitsAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n ],\n name: 'enter',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'sender', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokenAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'unitsAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n ],\n name: 'exit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'feeCalculator',\n outputs: [{ name: '', internalType: 'contract IFeeCalculator', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'feeRecipient',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'getActiveGuardians',\n outputs: [{ name: '', internalType: 'address[]', type: 'address[]' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'getCurrentHookCallType',\n outputs: [{ name: '', internalType: 'enum HookCallType', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'guardian', internalType: 'address', type: 'address' }],\n name: 'getGuardianRoot',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'name',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'onERC721Received',\n outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n { type: 'function', inputs: [], name: 'pause', outputs: [], stateMutability: 'nonpayable' },\n {\n type: 'function',\n inputs: [],\n name: 'paused',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'pendingOwner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'provisioner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'guardian', internalType: 'address', type: 'address' }],\n name: 'removeGuardian',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newAuthority', internalType: 'contract Authority', type: 'address' }],\n name: 'setAuthority',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'hook', internalType: 'contract IBeforeTransferHook', type: 'address' }],\n name: 'setBeforeTransferHook',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'newFeeCalculator', internalType: 'contract IFeeCalculator', type: 'address' },\n ],\n name: 'setFeeCalculator',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newFeeRecipient', internalType: 'address', type: 'address' }],\n name: 'setFeeRecipient',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'guardian', internalType: 'address', type: 'address' },\n { name: 'root', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'setGuardianRoot',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'provisioner_', internalType: 'address', type: 'address' }],\n name: 'setProvisioner',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newSubmitHooks', internalType: 'contract ISubmitHooks', type: 'address' }],\n name: 'setSubmitHooks',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'data', internalType: 'bytes', type: 'bytes' }],\n name: 'submit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'submitHooks',\n outputs: [{ name: '', internalType: 'contract ISubmitHooks', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'symbol',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'totalSupply',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transferFrom',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n { type: 'function', inputs: [], name: 'unpause', outputs: [], stateMutability: 'nonpayable' },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address', indexed: true },\n { name: 'spender', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Approval',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newAuthority', internalType: 'contract Authority', type: 'address', indexed: true },\n ],\n name: 'AuthorityUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'beforeTransferHook', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'BeforeTransferHookSet',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'sender', internalType: 'address', type: 'address', indexed: true },\n { name: 'recipient', internalType: 'address', type: 'address', indexed: true },\n { name: 'token', internalType: 'contract IERC20', type: 'address', indexed: true },\n { name: 'tokenAmount', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'unitsAmount', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Enter',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'sender', internalType: 'address', type: 'address', indexed: true },\n { name: 'recipient', internalType: 'address', type: 'address', indexed: true },\n { name: 'token', internalType: 'contract IERC20', type: 'address', indexed: true },\n { name: 'tokenAmount', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'unitsAmount', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Exit',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'newFeeCalculator', internalType: 'address', type: 'address', indexed: true }],\n name: 'FeeCalculatorUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'newFeeRecipient', internalType: 'address', type: 'address', indexed: true }],\n name: 'FeeRecipientUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'feeRecipient', internalType: 'address', type: 'address', indexed: true },\n { name: 'fees', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'FeesClaimed',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'guardian', internalType: 'address', type: 'address', indexed: true },\n { name: 'root', internalType: 'bytes32', type: 'bytes32', indexed: true },\n ],\n name: 'GuardianRootSet',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferStarted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'account', internalType: 'address', type: 'address', indexed: false }],\n name: 'Paused',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'protocolFeeRecipient', internalType: 'address', type: 'address', indexed: true },\n { name: 'protocolEarnedFees', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'ProtocolFeesClaimed',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'provisioner', internalType: 'address', type: 'address', indexed: true }],\n name: 'ProvisionerSet',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'submitHooksAddress', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'SubmitHooksSet',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Transfer',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'account', internalType: 'address', type: 'address', indexed: false }],\n name: 'Unpaused',\n },\n {\n type: 'error',\n inputs: [\n { name: 'index', internalType: 'uint256', type: 'uint256' },\n { name: 'result', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'Aera__AfterOperationHooksFailed',\n },\n {\n type: 'error',\n inputs: [{ name: 'result', internalType: 'bytes', type: 'bytes' }],\n name: 'Aera__AfterSubmitHooksFailed',\n },\n {\n type: 'error',\n inputs: [\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n ],\n name: 'Aera__AllowanceIsNotZero',\n },\n {\n type: 'error',\n inputs: [\n { name: 'index', internalType: 'uint256', type: 'uint256' },\n { name: 'result', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'Aera__BeforeOperationHooksFailed',\n },\n { type: 'error', inputs: [], name: 'Aera__BeforeOperationHooksWithConfigurableHooks' },\n {\n type: 'error',\n inputs: [{ name: 'result', internalType: 'bytes', type: 'bytes' }],\n name: 'Aera__BeforeSubmitHooksFailed',\n },\n { type: 'error', inputs: [], name: 'Aera__CalldataTooShort' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotAuthOrGuardian' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotFeeRecipient' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotGuardian' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotProtocolFeeRecipient' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotProvisioner' },\n { type: 'error', inputs: [], name: 'Aera__CopyOffsetOutOfBounds' },\n { type: 'error', inputs: [], name: 'Aera__ExpectedCallbackNotReceived' },\n { type: 'error', inputs: [], name: 'Aera__ExtractionNumberTooLarge' },\n { type: 'error', inputs: [], name: 'Aera__GuardianNotWhitelisted' },\n { type: 'error', inputs: [], name: 'Aera__InvalidBeforeOperationHooksReturnDataLength' },\n { type: 'error', inputs: [], name: 'Aera__NoFeesToClaim' },\n { type: 'error', inputs: [], name: 'Aera__NoResults' },\n { type: 'error', inputs: [], name: 'Aera__OffsetOutOfBounds' },\n { type: 'error', inputs: [], name: 'Aera__PasteOffsetOutOfBounds' },\n { type: 'error', inputs: [], name: 'Aera__ProofVerificationFailed' },\n {\n type: 'error',\n inputs: [\n { name: 'index', internalType: 'uint256', type: 'uint256' },\n { name: 'result', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'Aera__SubmissionFailed',\n },\n { type: 'error', inputs: [], name: 'Aera__Unauthorized' },\n { type: 'error', inputs: [], name: 'Aera__UnauthorizedCallback' },\n { type: 'error', inputs: [], name: 'Aera__UnitsLocked' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressAuthority' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressFeeCalculator' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressFeeRecipient' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressFeeToken' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressGuardian' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressMerkleRoot' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressOwner' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressProvisioner' },\n {\n type: 'error',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'allowance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientAllowance',\n },\n {\n type: 'error',\n inputs: [\n { name: 'sender', internalType: 'address', type: 'address' },\n { name: 'balance', internalType: 'uint256', type: 'uint256' },\n { name: 'needed', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'ERC20InsufficientBalance',\n },\n {\n type: 'error',\n inputs: [{ name: 'approver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidApprover',\n },\n {\n type: 'error',\n inputs: [{ name: 'receiver', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidReceiver',\n },\n {\n type: 'error',\n inputs: [{ name: 'sender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSender',\n },\n {\n type: 'error',\n inputs: [{ name: 'spender', internalType: 'address', type: 'address' }],\n name: 'ERC20InvalidSpender',\n },\n { type: 'error', inputs: [], name: 'EnforcedPause' },\n { type: 'error', inputs: [], name: 'ExpectedPause' },\n { type: 'error', inputs: [], name: 'ReaderNotAtEnd' },\n { type: 'error', inputs: [], name: 'ReentrancyGuardReentrantCall' },\n {\n type: 'error',\n inputs: [{ name: 'token', internalType: 'address', type: 'address' }],\n name: 'SafeERC20FailedOperation',\n },\n] as const;\n", "export const provisionerAbi = [\n {\n type: 'constructor',\n inputs: [\n {\n name: 'priceAndFeeCalculator',\n internalType: 'contract IPriceAndFeeCalculator',\n type: 'address',\n },\n { name: 'multiDepositorVault', internalType: 'address', type: 'address' },\n { name: 'owner_', internalType: 'address', type: 'address' },\n { name: 'authority_', internalType: 'contract Authority', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MULTI_DEPOSITOR_VAULT',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'PRICE_FEE_CALCULATOR',\n outputs: [{ name: '', internalType: 'contract IPriceAndFeeCalculator', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'user', internalType: 'address', type: 'address' }],\n name: 'areUserUnitsLocked',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'asyncDepositHash', internalType: 'bytes32', type: 'bytes32' }],\n name: 'asyncDepositHashes',\n outputs: [{ name: 'exists', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'asyncRedeemHash', internalType: 'bytes32', type: 'bytes32' }],\n name: 'asyncRedeemHashes',\n outputs: [{ name: 'exists', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'authority',\n outputs: [{ name: '', internalType: 'contract Authority', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokensIn', internalType: 'uint256', type: 'uint256' },\n { name: 'minUnitsOut', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'deposit',\n outputs: [{ name: 'unitsOut', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'depositCap',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'depositRefundTimeout',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'user', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokenAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'unitsAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'refundableUntil', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'getDepositHash',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n {\n name: 'request',\n internalType: 'struct Request',\n type: 'tuple',\n components: [\n { name: 'requestType', internalType: 'enum RequestType', type: 'uint8' },\n { name: 'user', internalType: 'address', type: 'address' },\n { name: 'units', internalType: 'uint256', type: 'uint256' },\n { name: 'tokens', internalType: 'uint256', type: 'uint256' },\n { name: 'solverTip', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'maxPriceAge', internalType: 'uint256', type: 'uint256' },\n ],\n },\n ],\n name: 'getRequestHash',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'maxDeposit',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'unitsOut', internalType: 'uint256', type: 'uint256' },\n { name: 'maxTokensIn', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'mint',\n outputs: [{ name: 'tokensIn', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'pendingOwner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'sender', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokenAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'unitsAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'refundableUntil', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'refundDeposit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n {\n name: 'request',\n internalType: 'struct Request',\n type: 'tuple',\n components: [\n { name: 'requestType', internalType: 'enum RequestType', type: 'uint8' },\n { name: 'user', internalType: 'address', type: 'address' },\n { name: 'units', internalType: 'uint256', type: 'uint256' },\n { name: 'tokens', internalType: 'uint256', type: 'uint256' },\n { name: 'solverTip', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'maxPriceAge', internalType: 'uint256', type: 'uint256' },\n ],\n },\n ],\n name: 'refundRequest',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'token', internalType: 'contract IERC20', type: 'address' }],\n name: 'removeToken',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokensIn', internalType: 'uint256', type: 'uint256' },\n { name: 'minUnitsOut', internalType: 'uint256', type: 'uint256' },\n { name: 'solverTip', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'maxPriceAge', internalType: 'uint256', type: 'uint256' },\n { name: 'isFixedPrice', internalType: 'bool', type: 'bool' },\n ],\n name: 'requestDeposit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'unitsIn', internalType: 'uint256', type: 'uint256' },\n { name: 'minTokensOut', internalType: 'uint256', type: 'uint256' },\n { name: 'solverTip', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'maxPriceAge', internalType: 'uint256', type: 'uint256' },\n { name: 'isFixedPrice', internalType: 'bool', type: 'bool' },\n ],\n name: 'requestRedeem',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newAuthority', internalType: 'contract Authority', type: 'address' }],\n name: 'setAuthority',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'depositCap_', internalType: 'uint256', type: 'uint256' },\n { name: 'depositRefundTimeout_', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'setDepositDetails',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n {\n name: 'details',\n internalType: 'struct TokenDetails',\n type: 'tuple',\n components: [\n { name: 'asyncDepositEnabled', internalType: 'bool', type: 'bool' },\n { name: 'asyncRedeemEnabled', internalType: 'bool', type: 'bool' },\n { name: 'syncDepositEnabled', internalType: 'bool', type: 'bool' },\n { name: 'depositMultiplier', internalType: 'uint16', type: 'uint16' },\n { name: 'redeemMultiplier', internalType: 'uint16', type: 'uint16' },\n ],\n },\n ],\n name: 'setTokenDetails',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n {\n name: 'requests',\n internalType: 'struct Request[]',\n type: 'tuple[]',\n components: [\n { name: 'requestType', internalType: 'enum RequestType', type: 'uint8' },\n { name: 'user', internalType: 'address', type: 'address' },\n { name: 'units', internalType: 'uint256', type: 'uint256' },\n { name: 'tokens', internalType: 'uint256', type: 'uint256' },\n { name: 'solverTip', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'maxPriceAge', internalType: 'uint256', type: 'uint256' },\n ],\n },\n ],\n name: 'solveRequestsDirect',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n {\n name: 'requests',\n internalType: 'struct Request[]',\n type: 'tuple[]',\n components: [\n { name: 'requestType', internalType: 'enum RequestType', type: 'uint8' },\n { name: 'user', internalType: 'address', type: 'address' },\n { name: 'units', internalType: 'uint256', type: 'uint256' },\n { name: 'tokens', internalType: 'uint256', type: 'uint256' },\n { name: 'solverTip', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'maxPriceAge', internalType: 'uint256', type: 'uint256' },\n ],\n },\n ],\n name: 'solveRequestsVault',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'syncDepositHash', internalType: 'bytes32', type: 'bytes32' }],\n name: 'syncDepositHashes',\n outputs: [{ name: 'exists', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'token', internalType: 'contract IERC20', type: 'address' }],\n name: 'tokensDetails',\n outputs: [\n { name: 'asyncDepositEnabled', internalType: 'bool', type: 'bool' },\n { name: 'asyncRedeemEnabled', internalType: 'bool', type: 'bool' },\n { name: 'syncDepositEnabled', internalType: 'bool', type: 'bool' },\n { name: 'depositMultiplier', internalType: 'uint16', type: 'uint16' },\n { name: 'redeemMultiplier', internalType: 'uint16', type: 'uint16' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'user', internalType: 'address', type: 'address' }],\n name: 'userUnitsRefundableUntil',\n outputs: [{ name: 'unitsLockedUntil', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'index', internalType: 'uint256', type: 'uint256', indexed: true },\n { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'bound', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'AmountBoundExceeded',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256', indexed: true }],\n name: 'AsyncDepositDisabled',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256', indexed: true }],\n name: 'AsyncRedeemDisabled',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newAuthority', internalType: 'contract Authority', type: 'address', indexed: true },\n ],\n name: 'AuthorityUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256', indexed: true }],\n name: 'DepositCapExceeded',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'depositCap', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'depositRefundTimeout', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'DepositDetailsUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'depositHash', internalType: 'bytes32', type: 'bytes32', indexed: true }],\n name: 'DepositRefunded',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'token', internalType: 'contract IERC20', type: 'address', indexed: true },\n { name: 'tokensIn', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'minUnitsOut', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'solverTip', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'deadline', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'maxPriceAge', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'isFixedPrice', internalType: 'bool', type: 'bool', indexed: false },\n { name: 'depositRequestHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n ],\n name: 'DepositRequested',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'depositHash', internalType: 'bytes32', type: 'bytes32', indexed: true }],\n name: 'DepositSolved',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'token', internalType: 'contract IERC20', type: 'address', indexed: true },\n { name: 'tokensIn', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'unitsOut', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'depositHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n ],\n name: 'Deposited',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'depositHash', internalType: 'bytes32', type: 'bytes32', indexed: true }],\n name: 'DirectDepositRefunded',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256', indexed: true }],\n name: 'InsufficientTokensForTip',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'depositHash', internalType: 'bytes32', type: 'bytes32', indexed: true }],\n name: 'InvalidRequestHash',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferStarted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256', indexed: true }],\n name: 'PriceAgeExceeded',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'redeemHash', internalType: 'bytes32', type: 'bytes32', indexed: true }],\n name: 'RedeemRefunded',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'token', internalType: 'contract IERC20', type: 'address', indexed: true },\n { name: 'minTokensOut', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'unitsIn', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'solverTip', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'deadline', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'maxPriceAge', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'isFixedPrice', internalType: 'bool', type: 'bool', indexed: false },\n { name: 'redeemRequestHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n ],\n name: 'RedeemRequested',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'redeemHash', internalType: 'bytes32', type: 'bytes32', indexed: true }],\n name: 'RedeemSolved',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address', indexed: true },\n {\n name: 'tokensDetails',\n internalType: 'struct TokenDetails',\n type: 'tuple',\n components: [\n { name: 'asyncDepositEnabled', internalType: 'bool', type: 'bool' },\n { name: 'asyncRedeemEnabled', internalType: 'bool', type: 'bool' },\n { name: 'syncDepositEnabled', internalType: 'bool', type: 'bool' },\n { name: 'depositMultiplier', internalType: 'uint16', type: 'uint16' },\n { name: 'redeemMultiplier', internalType: 'uint16', type: 'uint16' },\n ],\n indexed: false,\n },\n ],\n name: 'TokenDetailsSet',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'token', internalType: 'contract IERC20', type: 'address', indexed: true }],\n name: 'TokenRemoved',\n },\n { type: 'error', inputs: [], name: 'Aera__AsyncDepositDisabled' },\n { type: 'error', inputs: [], name: 'Aera__AsyncRedeemDisabled' },\n { type: 'error', inputs: [], name: 'Aera__AutoPriceSolveNotAllowed' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsVault' },\n { type: 'error', inputs: [], name: 'Aera__DeadlineInFutureAndUnauthorized' },\n { type: 'error', inputs: [], name: 'Aera__DeadlineInPast' },\n { type: 'error', inputs: [], name: 'Aera__DeadlineTooFarInFuture' },\n { type: 'error', inputs: [], name: 'Aera__DepositCapExceeded' },\n { type: 'error', inputs: [], name: 'Aera__DepositCapZero' },\n { type: 'error', inputs: [], name: 'Aera__DepositHashNotFound' },\n { type: 'error', inputs: [], name: 'Aera__DepositMultiplierTooHigh' },\n { type: 'error', inputs: [], name: 'Aera__DepositMultiplierTooLow' },\n { type: 'error', inputs: [], name: 'Aera__FixedPriceSolverTipNotAllowed' },\n { type: 'error', inputs: [], name: 'Aera__HashCollision' },\n { type: 'error', inputs: [], name: 'Aera__HashNotFound' },\n { type: 'error', inputs: [], name: 'Aera__InvalidToken' },\n { type: 'error', inputs: [], name: 'Aera__MaxDepositRefundTimeoutExceeded' },\n { type: 'error', inputs: [], name: 'Aera__MaxTokensInExceeded' },\n { type: 'error', inputs: [], name: 'Aera__MaxTokensInZero' },\n { type: 'error', inputs: [], name: 'Aera__MinTokenOutZero' },\n { type: 'error', inputs: [], name: 'Aera__MinUnitsOutNotMet' },\n { type: 'error', inputs: [], name: 'Aera__MinUnitsOutZero' },\n { type: 'error', inputs: [], name: 'Aera__PriceAndFeeCalculatorVaultPaused' },\n { type: 'error', inputs: [], name: 'Aera__RedeemMultiplierTooHigh' },\n { type: 'error', inputs: [], name: 'Aera__RedeemMultiplierTooLow' },\n { type: 'error', inputs: [], name: 'Aera__RefundPeriodExpired' },\n { type: 'error', inputs: [], name: 'Aera__SyncDepositDisabled' },\n { type: 'error', inputs: [], name: 'Aera__TokenCantBePriced' },\n { type: 'error', inputs: [], name: 'Aera__TokensInZero' },\n { type: 'error', inputs: [], name: 'Aera__Unauthorized' },\n { type: 'error', inputs: [], name: 'Aera__UnitsInZero' },\n { type: 'error', inputs: [], name: 'Aera__UnitsOutZero' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressAuthority' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressMultiDepositorVault' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressPriceAndFeeCalculator' },\n { type: 'error', inputs: [], name: 'ReentrancyGuardReentrantCall' },\n {\n type: 'error',\n inputs: [{ name: 'token', internalType: 'address', type: 'address' }],\n name: 'SafeERC20FailedOperation',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ProvisionerFactory\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const provisionerFactoryAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'initialOwner', internalType: 'address', type: 'address' },\n { name: 'initialAuthorityForFactory', internalType: 'contract Authority', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'authority',\n outputs: [{ name: '', internalType: 'contract Authority', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: '_priceAndFeeCalculator',\n internalType: 'contract IPriceAndFeeCalculator',\n type: 'address',\n },\n { name: '_multiDepositorVault', internalType: 'address', type: 'address' },\n { name: '_provisionerOwner', internalType: 'address', type: 'address' },\n { name: '_authority', internalType: 'address', type: 'address' },\n { name: '_salt', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'computeProvisionerExpectedAddress',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: '_priceAndFeeCalculator',\n internalType: 'contract IPriceAndFeeCalculator',\n type: 'address',\n },\n { name: '_multiDepositorVault', internalType: 'address', type: 'address' },\n { name: '_provisionerOwner', internalType: 'address', type: 'address' },\n { name: '_provisionerAuthorityAddress', internalType: 'address', type: 'address' },\n { name: '_provisionerSalt', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'createProvisioner',\n outputs: [{ name: 'provisionerAddress', internalType: 'address', type: 'address' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'pendingOwner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'newAuthority', internalType: 'contract Authority', type: 'address' }],\n name: 'setAuthority',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newAuthority', internalType: 'contract Authority', type: 'address', indexed: true },\n ],\n name: 'AuthorityUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferStarted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'provisioner', internalType: 'address', type: 'address', indexed: true },\n {\n name: 'provisionerRolesAuthority',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n { name: 'multiDepositorVault', internalType: 'address', type: 'address', indexed: true },\n { name: 'provisionerOwner', internalType: 'address', type: 'address', indexed: false },\n { name: 'caller', internalType: 'address', type: 'address', indexed: false },\n { name: 'provisionerSalt', internalType: 'bytes32', type: 'bytes32', indexed: false },\n ],\n name: 'ProvisionerCreated',\n },\n { type: 'error', inputs: [], name: 'Aera__Unauthorized' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressAuthority' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressMultiDepositorVault' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressPriceAndFeeCalculator' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressProvisionerOwner' },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// RolesAuthority\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const rolesAuthorityAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: '_owner', internalType: 'address', type: 'address' },\n { name: '_authority', internalType: 'contract Authority', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'authority',\n outputs: [{ name: '', internalType: 'contract Authority', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'user', internalType: 'address', type: 'address' },\n { name: 'target', internalType: 'address', type: 'address' },\n { name: 'functionSig', internalType: 'bytes4', type: 'bytes4' },\n ],\n name: 'canCall',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'role', internalType: 'uint8', type: 'uint8' },\n { name: 'target', internalType: 'address', type: 'address' },\n { name: 'functionSig', internalType: 'bytes4', type: 'bytes4' },\n ],\n name: 'doesRoleHaveCapability',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'user', internalType: 'address', type: 'address' },\n { name: 'role', internalType: 'uint8', type: 'uint8' },\n ],\n name: 'doesUserHaveRole',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'bytes4', type: 'bytes4' },\n ],\n name: 'getRolesWithCapability',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: '', internalType: 'address', type: 'address' }],\n name: 'getUserRoles',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'bytes4', type: 'bytes4' },\n ],\n name: 'isCapabilityPublic',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'newAuthority', internalType: 'contract Authority', type: 'address' }],\n name: 'setAuthority',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'target', internalType: 'address', type: 'address' },\n { name: 'functionSig', internalType: 'bytes4', type: 'bytes4' },\n { name: 'enabled', internalType: 'bool', type: 'bool' },\n ],\n name: 'setPublicCapability',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'role', internalType: 'uint8', type: 'uint8' },\n { name: 'target', internalType: 'address', type: 'address' },\n { name: 'functionSig', internalType: 'bytes4', type: 'bytes4' },\n { name: 'enabled', internalType: 'bool', type: 'bool' },\n ],\n name: 'setRoleCapability',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'user', internalType: 'address', type: 'address' },\n { name: 'role', internalType: 'uint8', type: 'uint8' },\n { name: 'enabled', internalType: 'bool', type: 'bool' },\n ],\n name: 'setUserRole',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newAuthority', internalType: 'contract Authority', type: 'address', indexed: true },\n ],\n name: 'AuthorityUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'target', internalType: 'address', type: 'address', indexed: true },\n { name: 'functionSig', internalType: 'bytes4', type: 'bytes4', indexed: true },\n { name: 'enabled', internalType: 'bool', type: 'bool', indexed: false },\n ],\n name: 'PublicCapabilityUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'role', internalType: 'uint8', type: 'uint8', indexed: true },\n { name: 'target', internalType: 'address', type: 'address', indexed: true },\n { name: 'functionSig', internalType: 'bytes4', type: 'bytes4', indexed: true },\n { name: 'enabled', internalType: 'bool', type: 'bool', indexed: false },\n ],\n name: 'RoleCapabilityUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'role', internalType: 'uint8', type: 'uint8', indexed: true },\n { name: 'enabled', internalType: 'bool', type: 'bool', indexed: false },\n ],\n name: 'UserRoleUpdated',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// RolesAuthorityFactory\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const rolesAuthorityFactoryAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'initialOwner', internalType: 'address', type: 'address' },\n { name: 'initialAuthorityForFactory', internalType: 'contract Authority', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'authority',\n outputs: [{ name: '', internalType: 'contract Authority', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: '_owner', internalType: 'address', type: 'address' },\n { name: '_initialAuthority', internalType: 'address', type: 'address' },\n { name: '_salt', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'computeRolesAuthorityExpectedAddress',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: '_owner', internalType: 'address', type: 'address' },\n { name: '_initialAuthority', internalType: 'address', type: 'address' },\n { name: '_salt', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'createRolesAuthority',\n outputs: [{ name: 'rolesAuthorityAddress', internalType: 'address', type: 'address' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'pendingOwner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'newAuthority', internalType: 'contract Authority', type: 'address' }],\n name: 'setAuthority',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newAuthority', internalType: 'contract Authority', type: 'address', indexed: true },\n ],\n name: 'AuthorityUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferStarted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'rolesAuthorityAddress', internalType: 'address', type: 'address', indexed: true },\n { name: 'owner', internalType: 'address', type: 'address', indexed: true },\n { name: 'initialAuthority', internalType: 'address', type: 'address', indexed: true },\n { name: 'creator', internalType: 'address', type: 'address', indexed: false },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32', indexed: false },\n ],\n name: 'RolesAuthorityCreated',\n },\n { type: 'error', inputs: [], name: 'Aera__Unauthorized' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressAuthority' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressOwner' },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// SingleDepositorVault\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const singleDepositorVaultAbi = [\n { type: 'constructor', inputs: [], stateMutability: 'nonpayable' },\n { type: 'fallback', stateMutability: 'nonpayable' },\n { type: 'receive', stateMutability: 'payable' },\n {\n type: 'function',\n inputs: [],\n name: 'FEE_TOKEN',\n outputs: [{ name: '', internalType: 'contract IERC20', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'WHITELIST',\n outputs: [{ name: '', internalType: 'contract IWhitelist', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'authority',\n outputs: [{ name: '', internalType: 'contract Authority', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'guardian', internalType: 'address', type: 'address' }],\n name: 'checkGuardianWhitelist',\n outputs: [{ name: 'isRemoved', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'claimFees',\n outputs: [\n { name: 'feeRecipientFees', internalType: 'uint256', type: 'uint256' },\n { name: 'protocolFees', internalType: 'uint256', type: 'uint256' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'claimProtocolFees',\n outputs: [{ name: 'protocolFees', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'tokenAmounts',\n internalType: 'struct TokenAmount[]',\n type: 'tuple[]',\n components: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n },\n ],\n name: 'deposit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'operations',\n internalType: 'struct OperationPayable[]',\n type: 'tuple[]',\n components: [\n { name: 'target', internalType: 'address', type: 'address' },\n { name: 'data', internalType: 'bytes', type: 'bytes' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n },\n ],\n name: 'execute',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'feeCalculator',\n outputs: [{ name: '', internalType: 'contract IFeeCalculator', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'feeRecipient',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'getActiveGuardians',\n outputs: [{ name: '', internalType: 'address[]', type: 'address[]' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'getCurrentHookCallType',\n outputs: [{ name: '', internalType: 'enum HookCallType', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'guardian', internalType: 'address', type: 'address' }],\n name: 'getGuardianRoot',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'onERC721Received',\n outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n { type: 'function', inputs: [], name: 'pause', outputs: [], stateMutability: 'nonpayable' },\n {\n type: 'function',\n inputs: [],\n name: 'paused',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'pendingOwner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'guardian', internalType: 'address', type: 'address' }],\n name: 'removeGuardian',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newAuthority', internalType: 'contract Authority', type: 'address' }],\n name: 'setAuthority',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'newFeeCalculator', internalType: 'contract IFeeCalculator', type: 'address' },\n ],\n name: 'setFeeCalculator',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newFeeRecipient', internalType: 'address', type: 'address' }],\n name: 'setFeeRecipient',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'guardian', internalType: 'address', type: 'address' },\n { name: 'root', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'setGuardianRoot',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newSubmitHooks', internalType: 'contract ISubmitHooks', type: 'address' }],\n name: 'setSubmitHooks',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'data', internalType: 'bytes', type: 'bytes' }],\n name: 'submit',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'submitHooks',\n outputs: [{ name: '', internalType: 'contract ISubmitHooks', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n { type: 'function', inputs: [], name: 'unpause', outputs: [], stateMutability: 'nonpayable' },\n {\n type: 'function',\n inputs: [\n {\n name: 'tokenAmounts',\n internalType: 'struct TokenAmount[]',\n type: 'tuple[]',\n components: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n },\n ],\n name: 'withdraw',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newAuthority', internalType: 'contract Authority', type: 'address', indexed: true },\n ],\n name: 'AuthorityUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'depositor', internalType: 'address', type: 'address', indexed: true },\n {\n name: 'tokenAmounts',\n internalType: 'struct TokenAmount[]',\n type: 'tuple[]',\n components: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n indexed: false,\n },\n ],\n name: 'Deposited',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'executor', internalType: 'address', type: 'address', indexed: true },\n {\n name: 'operations',\n internalType: 'struct OperationPayable[]',\n type: 'tuple[]',\n components: [\n { name: 'target', internalType: 'address', type: 'address' },\n { name: 'data', internalType: 'bytes', type: 'bytes' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n indexed: false,\n },\n ],\n name: 'Executed',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'newFeeCalculator', internalType: 'address', type: 'address', indexed: true }],\n name: 'FeeCalculatorUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'newFeeRecipient', internalType: 'address', type: 'address', indexed: true }],\n name: 'FeeRecipientUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'feeRecipient', internalType: 'address', type: 'address', indexed: true },\n { name: 'fees', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'FeesClaimed',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'guardian', internalType: 'address', type: 'address', indexed: true },\n { name: 'root', internalType: 'bytes32', type: 'bytes32', indexed: true },\n ],\n name: 'GuardianRootSet',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferStarted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'account', internalType: 'address', type: 'address', indexed: false }],\n name: 'Paused',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'protocolFeeRecipient', internalType: 'address', type: 'address', indexed: true },\n { name: 'protocolEarnedFees', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'ProtocolFeesClaimed',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'submitHooksAddress', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'SubmitHooksSet',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'account', internalType: 'address', type: 'address', indexed: false }],\n name: 'Unpaused',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'withdrawer', internalType: 'address', type: 'address', indexed: true },\n {\n name: 'tokenAmounts',\n internalType: 'struct TokenAmount[]',\n type: 'tuple[]',\n components: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n indexed: false,\n },\n ],\n name: 'Withdrawn',\n },\n {\n type: 'error',\n inputs: [\n { name: 'index', internalType: 'uint256', type: 'uint256' },\n { name: 'result', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'Aera__AfterOperationHooksFailed',\n },\n {\n type: 'error',\n inputs: [{ name: 'result', internalType: 'bytes', type: 'bytes' }],\n name: 'Aera__AfterSubmitHooksFailed',\n },\n {\n type: 'error',\n inputs: [\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n ],\n name: 'Aera__AllowanceIsNotZero',\n },\n {\n type: 'error',\n inputs: [\n { name: 'index', internalType: 'uint256', type: 'uint256' },\n { name: 'result', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'Aera__BeforeOperationHooksFailed',\n },\n { type: 'error', inputs: [], name: 'Aera__BeforeOperationHooksWithConfigurableHooks' },\n {\n type: 'error',\n inputs: [{ name: 'result', internalType: 'bytes', type: 'bytes' }],\n name: 'Aera__BeforeSubmitHooksFailed',\n },\n { type: 'error', inputs: [], name: 'Aera__CalldataTooShort' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotAuthOrGuardian' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotFeeRecipient' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotGuardian' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotProtocolFeeRecipient' },\n { type: 'error', inputs: [], name: 'Aera__CopyOffsetOutOfBounds' },\n {\n type: 'error',\n inputs: [\n { name: 'index', internalType: 'uint256', type: 'uint256' },\n { name: 'result', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'Aera__ExecutionFailed',\n },\n { type: 'error', inputs: [], name: 'Aera__ExpectedCallbackNotReceived' },\n { type: 'error', inputs: [], name: 'Aera__ExtractionNumberTooLarge' },\n { type: 'error', inputs: [], name: 'Aera__GuardianNotWhitelisted' },\n { type: 'error', inputs: [], name: 'Aera__InvalidBeforeOperationHooksReturnDataLength' },\n { type: 'error', inputs: [], name: 'Aera__NoFeesToClaim' },\n { type: 'error', inputs: [], name: 'Aera__NoResults' },\n { type: 'error', inputs: [], name: 'Aera__OffsetOutOfBounds' },\n { type: 'error', inputs: [], name: 'Aera__PasteOffsetOutOfBounds' },\n { type: 'error', inputs: [], name: 'Aera__ProofVerificationFailed' },\n {\n type: 'error',\n inputs: [\n { name: 'index', internalType: 'uint256', type: 'uint256' },\n { name: 'result', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'Aera__SubmissionFailed',\n },\n { type: 'error', inputs: [], name: 'Aera__Unauthorized' },\n { type: 'error', inputs: [], name: 'Aera__UnauthorizedCallback' },\n {\n type: 'error',\n inputs: [{ name: 'allowance', internalType: 'uint256', type: 'uint256' }],\n name: 'Aera__UnexpectedTokenAllowance',\n },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressAuthority' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressFeeCalculator' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressFeeRecipient' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressFeeToken' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressGuardian' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressMerkleRoot' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressOwner' },\n { type: 'error', inputs: [], name: 'EnforcedPause' },\n { type: 'error', inputs: [], name: 'ExpectedPause' },\n { type: 'error', inputs: [], name: 'ReaderNotAtEnd' },\n { type: 'error', inputs: [], name: 'ReentrancyGuardReentrantCall' },\n {\n type: 'error',\n inputs: [{ name: 'token', internalType: 'address', type: 'address' }],\n name: 'SafeERC20FailedOperation',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// SingleDepositorVaultFactory\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const singleDepositorVaultFactoryAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'initialOwner', internalType: 'address', type: 'address' },\n { name: 'initialAuthority', internalType: 'contract Authority', type: 'address' },\n { name: 'deployDelegate', internalType: 'address', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'authority',\n outputs: [{ name: '', internalType: 'contract Authority', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'baseVaultParameters',\n outputs: [\n {\n name: 'params',\n internalType: 'struct BaseVaultParameters',\n type: 'tuple',\n components: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'authority', internalType: 'contract Authority', type: 'address' },\n { name: 'submitHooks', internalType: 'contract ISubmitHooks', type: 'address' },\n { name: 'whitelist', internalType: 'contract IWhitelist', type: 'address' },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n { name: 'description', internalType: 'string', type: 'string' },\n {\n name: 'baseVaultParams',\n internalType: 'struct BaseVaultParameters',\n type: 'tuple',\n components: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'authority', internalType: 'contract Authority', type: 'address' },\n { name: 'submitHooks', internalType: 'contract ISubmitHooks', type: 'address' },\n { name: 'whitelist', internalType: 'contract IWhitelist', type: 'address' },\n ],\n },\n {\n name: 'singleDepositorVaultParams',\n internalType: 'struct FeeVaultParameters',\n type: 'tuple',\n components: [\n { name: 'feeCalculator', internalType: 'contract IFeeCalculator', type: 'address' },\n { name: 'feeToken', internalType: 'contract IERC20', type: 'address' },\n { name: 'feeRecipient', internalType: 'address', type: 'address' },\n ],\n },\n { name: 'expectedVaultAddress', internalType: 'address', type: 'address' },\n ],\n name: 'create',\n outputs: [{ name: 'deployedVault', internalType: 'address', type: 'address' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'feeVaultParameters',\n outputs: [\n {\n name: 'params',\n internalType: 'struct FeeVaultParameters',\n type: 'tuple',\n components: [\n { name: 'feeCalculator', internalType: 'contract IFeeCalculator', type: 'address' },\n { name: 'feeToken', internalType: 'contract IERC20', type: 'address' },\n { name: 'feeRecipient', internalType: 'address', type: 'address' },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'pendingOwner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'newAuthority', internalType: 'contract Authority', type: 'address' }],\n name: 'setAuthority',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'sweep',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newAuthority', internalType: 'contract Authority', type: 'address', indexed: true },\n ],\n name: 'AuthorityUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferStarted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'token', internalType: 'address', type: 'address', indexed: true },\n { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Sweep',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address', indexed: true },\n { name: 'owner', internalType: 'address', type: 'address', indexed: true },\n { name: 'submitHooks', internalType: 'address', type: 'address', indexed: false },\n { name: 'feeToken', internalType: 'contract IERC20', type: 'address', indexed: false },\n {\n name: 'feeCalculator',\n internalType: 'contract IFeeCalculator',\n type: 'address',\n indexed: false,\n },\n { name: 'feeRecipient', internalType: 'address', type: 'address', indexed: false },\n { name: 'description', internalType: 'string', type: 'string', indexed: false },\n ],\n name: 'VaultCreated',\n },\n {\n type: 'error',\n inputs: [{ name: 'target', internalType: 'address', type: 'address' }],\n name: 'AddressEmptyCode',\n },\n { type: 'error', inputs: [], name: 'Aera__DescriptionIsEmpty' },\n { type: 'error', inputs: [], name: 'Aera__FailedToSendNativeToken' },\n { type: 'error', inputs: [], name: 'Aera__Unauthorized' },\n {\n type: 'error',\n inputs: [\n { name: 'deployed', internalType: 'address', type: 'address' },\n { name: 'expected', internalType: 'address', type: 'address' },\n ],\n name: 'Aera__VaultAddressMismatch',\n },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressAuthority' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressDeployDelegate' },\n { type: 'error', inputs: [], name: 'FailedCall' },\n {\n type: 'error',\n inputs: [{ name: 'token', internalType: 'address', type: 'address' }],\n name: 'SafeERC20FailedOperation',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// StablecoinStrategyHooks\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const stablecoinStrategyHooksAbi = [\n {\n type: 'constructor',\n inputs: [{ name: 'numeraire_', internalType: 'address', type: 'address' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAX_BPS',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'NUMERAIRE',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n { name: 'destinationDomain', internalType: 'uint32', type: 'uint32' },\n { name: 'mintRecipient', internalType: 'bytes32', type: 'bytes32' },\n { name: 'burnToken', internalType: 'address', type: 'address' },\n { name: 'destinationCaller', internalType: 'bytes32', type: 'bytes32' },\n { name: 'maxFee', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'uint32', type: 'uint32' },\n ],\n name: 'depositForBurn',\n outputs: [{ name: 'returnData', internalType: 'bytes', type: 'bytes' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'params',\n internalType: 'struct ISwapRouter.ExactInputParams',\n type: 'tuple',\n components: [\n { name: 'path', internalType: 'bytes', type: 'bytes' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'amountIn', internalType: 'uint256', type: 'uint256' },\n { name: 'amountOutMinimum', internalType: 'uint256', type: 'uint256' },\n ],\n },\n ],\n name: 'exactInput',\n outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'params',\n internalType: 'struct ISwapRouter.ExactInputSingleParams',\n type: 'tuple',\n components: [\n { name: 'tokenIn', internalType: 'address', type: 'address' },\n { name: 'tokenOut', internalType: 'address', type: 'address' },\n { name: 'fee', internalType: 'uint24', type: 'uint24' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'amountIn', internalType: 'uint256', type: 'uint256' },\n { name: 'amountOutMinimum', internalType: 'uint256', type: 'uint256' },\n { name: 'sqrtPriceLimitX96', internalType: 'uint160', type: 'uint160' },\n ],\n },\n ],\n name: 'exactInputSingle',\n outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'params',\n internalType: 'struct ISwapRouter.ExactOutputParams',\n type: 'tuple',\n components: [\n { name: 'path', internalType: 'bytes', type: 'bytes' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'amountOut', internalType: 'uint256', type: 'uint256' },\n { name: 'amountInMaximum', internalType: 'uint256', type: 'uint256' },\n ],\n },\n ],\n name: 'exactOutput',\n outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'params',\n internalType: 'struct ISwapRouter.ExactOutputSingleParams',\n type: 'tuple',\n components: [\n { name: 'tokenIn', internalType: 'address', type: 'address' },\n { name: 'tokenOut', internalType: 'address', type: 'address' },\n { name: 'fee', internalType: 'uint24', type: 'uint24' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'amountOut', internalType: 'uint256', type: 'uint256' },\n { name: 'amountInMaximum', internalType: 'uint256', type: 'uint256' },\n { name: 'sqrtPriceLimitX96', internalType: 'uint160', type: 'uint160' },\n ],\n },\n ],\n name: 'exactOutputSingle',\n outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'maxLoss', internalType: 'uint128', type: 'uint128' },\n ],\n name: 'setMaxDailyLoss',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'newMaxSlippage', internalType: 'uint16', type: 'uint16' },\n ],\n name: 'setMaxSlippagePerTrade',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'oracleRegistry', internalType: 'address', type: 'address' },\n ],\n name: 'setOracleRegistry',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'tokenInfo',\n internalType: 'struct IOdosRouterV2.SwapTokenInfo',\n type: 'tuple',\n components: [\n { name: 'inputToken', internalType: 'address', type: 'address' },\n { name: 'inputAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'inputReceiver', internalType: 'address', type: 'address' },\n { name: 'outputToken', internalType: 'address', type: 'address' },\n { name: 'outputQuote', internalType: 'uint256', type: 'uint256' },\n { name: 'outputMin', internalType: 'uint256', type: 'uint256' },\n { name: 'outputReceiver', internalType: 'address', type: 'address' },\n ],\n },\n { name: '', internalType: 'bytes', type: 'bytes' },\n { name: 'executor', internalType: 'address', type: 'address' },\n { name: '', internalType: 'uint32', type: 'uint32' },\n ],\n name: 'swap',\n outputs: [{ name: 'returnData', internalType: 'bytes', type: 'bytes' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'execution',\n internalType: 'struct IMetaAggregationRouterV2.SwapExecutionParams',\n type: 'tuple',\n components: [\n { name: 'callTarget', internalType: 'address', type: 'address' },\n { name: 'approveTarget', internalType: 'address', type: 'address' },\n { name: 'targetData', internalType: 'bytes', type: 'bytes' },\n {\n name: 'desc',\n internalType: 'struct IMetaAggregationRouterV2.SwapDescriptionV2',\n type: 'tuple',\n components: [\n { name: 'srcToken', internalType: 'contract IERC20', type: 'address' },\n { name: 'dstToken', internalType: 'contract IERC20', type: 'address' },\n { name: 'srcReceivers', internalType: 'address[]', type: 'address[]' },\n { name: 'srcAmounts', internalType: 'uint256[]', type: 'uint256[]' },\n { name: 'feeReceivers', internalType: 'address[]', type: 'address[]' },\n { name: 'feeAmounts', internalType: 'uint256[]', type: 'uint256[]' },\n { name: 'dstReceiver', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n { name: 'minReturnAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'flags', internalType: 'uint256', type: 'uint256' },\n { name: 'permit', internalType: 'bytes', type: 'bytes' },\n ],\n },\n { name: 'clientData', internalType: 'bytes', type: 'bytes' },\n ],\n },\n ],\n name: 'swap',\n outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'caller', internalType: 'contract IAggregationExecutor', type: 'address' },\n {\n name: 'desc',\n internalType: 'struct IMetaAggregationRouterV2.SwapDescriptionV2',\n type: 'tuple',\n components: [\n { name: 'srcToken', internalType: 'contract IERC20', type: 'address' },\n { name: 'dstToken', internalType: 'contract IERC20', type: 'address' },\n { name: 'srcReceivers', internalType: 'address[]', type: 'address[]' },\n { name: 'srcAmounts', internalType: 'uint256[]', type: 'uint256[]' },\n { name: 'feeReceivers', internalType: 'address[]', type: 'address[]' },\n { name: 'feeAmounts', internalType: 'uint256[]', type: 'uint256[]' },\n { name: 'dstReceiver', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n { name: 'minReturnAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'flags', internalType: 'uint256', type: 'uint256' },\n { name: 'permit', internalType: 'bytes', type: 'bytes' },\n ],\n },\n { name: '', internalType: 'bytes', type: 'bytes' },\n { name: '', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'swapSimpleMode',\n outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'vault', internalType: 'address', type: 'address' }],\n name: 'vaultStates',\n outputs: [\n {\n name: 'state',\n internalType: 'struct IBaseSlippageHooks.State',\n type: 'tuple',\n components: [\n { name: 'cumulativeDailyLossInNumeraire', internalType: 'uint128', type: 'uint128' },\n { name: 'maxDailyLossInNumeraire', internalType: 'uint128', type: 'uint128' },\n { name: 'maxSlippagePerTrade', internalType: 'uint16', type: 'uint16' },\n { name: 'currentDay', internalType: 'uint32', type: 'uint32' },\n { name: 'oracleRegistry', internalType: 'contract IOracleRegistry', type: 'address' },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address', indexed: true },\n { name: 'tokenIn', internalType: 'address', type: 'address', indexed: true },\n { name: 'tokenOut', internalType: 'address', type: 'address', indexed: true },\n { name: 'valueBeforeNumeraire', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'valueAfterNumeraire', internalType: 'uint256', type: 'uint256', indexed: false },\n {\n name: 'cumulativeDailyLossNumeraire',\n internalType: 'uint128',\n type: 'uint128',\n indexed: false,\n },\n ],\n name: 'TradeSlippageChecked',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address', indexed: true },\n { name: 'maxLoss', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'UpdateMaxDailyLoss',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address', indexed: true },\n { name: 'maxSlippage', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'UpdateMaxSlippage',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address', indexed: true },\n { name: 'oracleRegistry', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'UpdateOracleRegistry',\n },\n { type: 'error', inputs: [], name: 'AeraPeriphery__BadPathFormat' },\n { type: 'error', inputs: [], name: 'AeraPeriphery__CallerNotVaultOwner' },\n { type: 'error', inputs: [], name: 'AeraPeriphery__DestinationCallerNotZero' },\n {\n type: 'error',\n inputs: [\n { name: 'loss', internalType: 'uint256', type: 'uint256' },\n { name: 'maxLoss', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'AeraPeriphery__ExcessiveDailyLoss',\n },\n {\n type: 'error',\n inputs: [\n { name: 'loss', internalType: 'uint256', type: 'uint256' },\n { name: 'valueBefore', internalType: 'uint256', type: 'uint256' },\n { name: 'maxSlippage', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'AeraPeriphery__ExcessiveSlippage',\n },\n { type: 'error', inputs: [], name: 'AeraPeriphery__FeeReceiversNotEmpty' },\n { type: 'error', inputs: [], name: 'AeraPeriphery__InputAmountIsZero' },\n { type: 'error', inputs: [], name: 'AeraPeriphery__InputTokenIsETH' },\n {\n type: 'error',\n inputs: [{ name: 'maxSlippage', internalType: 'uint256', type: 'uint256' }],\n name: 'AeraPeriphery__MaxSlippagePerTradeTooHigh',\n },\n { type: 'error', inputs: [], name: 'AeraPeriphery__OutputTokenIsETH' },\n { type: 'error', inputs: [], name: 'AeraPeriphery__ZeroAddressOracleRegistry' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotAuthorized' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressNumeraire' },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// TimelockController\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const timelockControllerAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'minDelay', internalType: 'uint256', type: 'uint256' },\n { name: 'proposers', internalType: 'address[]', type: 'address[]' },\n { name: 'executors', internalType: 'address[]', type: 'address[]' },\n { name: 'admin', internalType: 'address', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n { type: 'receive', stateMutability: 'payable' },\n {\n type: 'function',\n inputs: [],\n name: 'CANCELLER_ROLE',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'DEFAULT_ADMIN_ROLE',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'EXECUTOR_ROLE',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'PROPOSER_ROLE',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }],\n name: 'cancel',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'target', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n { name: 'payload', internalType: 'bytes', type: 'bytes' },\n { name: 'predecessor', internalType: 'bytes32', type: 'bytes32' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'execute',\n outputs: [],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'targets', internalType: 'address[]', type: 'address[]' },\n { name: 'values', internalType: 'uint256[]', type: 'uint256[]' },\n { name: 'payloads', internalType: 'bytes[]', type: 'bytes[]' },\n { name: 'predecessor', internalType: 'bytes32', type: 'bytes32' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'executeBatch',\n outputs: [],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'getMinDelay',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }],\n name: 'getOperationState',\n outputs: [{ name: '', internalType: 'enum TimelockController.OperationState', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'role', internalType: 'bytes32', type: 'bytes32' }],\n name: 'getRoleAdmin',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }],\n name: 'getTimestamp',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'role', internalType: 'bytes32', type: 'bytes32' },\n { name: 'account', internalType: 'address', type: 'address' },\n ],\n name: 'grantRole',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'role', internalType: 'bytes32', type: 'bytes32' },\n { name: 'account', internalType: 'address', type: 'address' },\n ],\n name: 'hasRole',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'target', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n { name: 'data', internalType: 'bytes', type: 'bytes' },\n { name: 'predecessor', internalType: 'bytes32', type: 'bytes32' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'hashOperation',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n { name: 'targets', internalType: 'address[]', type: 'address[]' },\n { name: 'values', internalType: 'uint256[]', type: 'uint256[]' },\n { name: 'payloads', internalType: 'bytes[]', type: 'bytes[]' },\n { name: 'predecessor', internalType: 'bytes32', type: 'bytes32' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'hashOperationBatch',\n outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }],\n name: 'isOperation',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }],\n name: 'isOperationDone',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }],\n name: 'isOperationPending',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32' }],\n name: 'isOperationReady',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'uint256[]', type: 'uint256[]' },\n { name: '', internalType: 'uint256[]', type: 'uint256[]' },\n { name: '', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'onERC1155BatchReceived',\n outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'onERC1155Received',\n outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'onERC721Received',\n outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'role', internalType: 'bytes32', type: 'bytes32' },\n { name: 'callerConfirmation', internalType: 'address', type: 'address' },\n ],\n name: 'renounceRole',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'role', internalType: 'bytes32', type: 'bytes32' },\n { name: 'account', internalType: 'address', type: 'address' },\n ],\n name: 'revokeRole',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'target', internalType: 'address', type: 'address' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n { name: 'data', internalType: 'bytes', type: 'bytes' },\n { name: 'predecessor', internalType: 'bytes32', type: 'bytes32' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n { name: 'delay', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'schedule',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'targets', internalType: 'address[]', type: 'address[]' },\n { name: 'values', internalType: 'uint256[]', type: 'uint256[]' },\n { name: 'payloads', internalType: 'bytes[]', type: 'bytes[]' },\n { name: 'predecessor', internalType: 'bytes32', type: 'bytes32' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n { name: 'delay', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'scheduleBatch',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],\n name: 'supportsInterface',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'newDelay', internalType: 'uint256', type: 'uint256' }],\n name: 'updateDelay',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'id', internalType: 'bytes32', type: 'bytes32', indexed: true },\n { name: 'index', internalType: 'uint256', type: 'uint256', indexed: true },\n { name: 'target', internalType: 'address', type: 'address', indexed: false },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'data', internalType: 'bytes', type: 'bytes', indexed: false },\n ],\n name: 'CallExecuted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'id', internalType: 'bytes32', type: 'bytes32', indexed: true },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32', indexed: false },\n ],\n name: 'CallSalt',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'id', internalType: 'bytes32', type: 'bytes32', indexed: true },\n { name: 'index', internalType: 'uint256', type: 'uint256', indexed: true },\n { name: 'target', internalType: 'address', type: 'address', indexed: false },\n { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'data', internalType: 'bytes', type: 'bytes', indexed: false },\n { name: 'predecessor', internalType: 'bytes32', type: 'bytes32', indexed: false },\n { name: 'delay', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'CallScheduled',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'id', internalType: 'bytes32', type: 'bytes32', indexed: true }],\n name: 'Cancelled',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'oldDuration', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'newDuration', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'MinDelayChange',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true },\n { name: 'previousAdminRole', internalType: 'bytes32', type: 'bytes32', indexed: true },\n { name: 'newAdminRole', internalType: 'bytes32', type: 'bytes32', indexed: true },\n ],\n name: 'RoleAdminChanged',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true },\n { name: 'account', internalType: 'address', type: 'address', indexed: true },\n { name: 'sender', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'RoleGranted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'role', internalType: 'bytes32', type: 'bytes32', indexed: true },\n { name: 'account', internalType: 'address', type: 'address', indexed: true },\n { name: 'sender', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'RoleRevoked',\n },\n { type: 'error', inputs: [], name: 'AccessControlBadConfirmation' },\n {\n type: 'error',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'neededRole', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'AccessControlUnauthorizedAccount',\n },\n { type: 'error', inputs: [], name: 'FailedCall' },\n {\n type: 'error',\n inputs: [\n { name: 'delay', internalType: 'uint256', type: 'uint256' },\n { name: 'minDelay', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TimelockInsufficientDelay',\n },\n {\n type: 'error',\n inputs: [\n { name: 'targets', internalType: 'uint256', type: 'uint256' },\n { name: 'payloads', internalType: 'uint256', type: 'uint256' },\n { name: 'values', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TimelockInvalidOperationLength',\n },\n {\n type: 'error',\n inputs: [{ name: 'caller', internalType: 'address', type: 'address' }],\n name: 'TimelockUnauthorizedCaller',\n },\n {\n type: 'error',\n inputs: [{ name: 'predecessorId', internalType: 'bytes32', type: 'bytes32' }],\n name: 'TimelockUnexecutedPredecessor',\n },\n {\n type: 'error',\n inputs: [\n { name: 'operationId', internalType: 'bytes32', type: 'bytes32' },\n { name: 'expectedStates', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'TimelockUnexpectedOperationState',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// TimelockControllerFactory\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const timelockControllerFactoryAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'initialOwner', internalType: 'address', type: 'address' },\n { name: 'initialAuthorityForFactory', internalType: 'contract Authority', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'authority',\n outputs: [{ name: '', internalType: 'contract Authority', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'minDelay', internalType: 'uint256', type: 'uint256' },\n { name: 'proposers', internalType: 'address[]', type: 'address[]' },\n { name: 'executors', internalType: 'address[]', type: 'address[]' },\n { name: 'admin', internalType: 'address', type: 'address' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'computeTimelockControllerExpectedAddress',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'minDelay', internalType: 'uint256', type: 'uint256' },\n { name: 'proposers', internalType: 'address[]', type: 'address[]' },\n { name: 'executors', internalType: 'address[]', type: 'address[]' },\n { name: 'admin', internalType: 'address', type: 'address' },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32' },\n ],\n name: 'createTimelockController',\n outputs: [{ name: 'timelockAddress', internalType: 'address', type: 'address' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'pendingOwner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'newAuthority', internalType: 'contract Authority', type: 'address' }],\n name: 'setAuthority',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newAuthority', internalType: 'contract Authority', type: 'address', indexed: true },\n ],\n name: 'AuthorityUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferStarted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'timelockAddress', internalType: 'address', type: 'address', indexed: true },\n { name: 'minDelay', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'proposers', internalType: 'address[]', type: 'address[]', indexed: false },\n { name: 'executors', internalType: 'address[]', type: 'address[]', indexed: false },\n { name: 'admin', internalType: 'address', type: 'address', indexed: false },\n { name: 'creator', internalType: 'address', type: 'address', indexed: true },\n { name: 'salt', internalType: 'bytes32', type: 'bytes32', indexed: false },\n ],\n name: 'TimelockControllerCreated',\n },\n { type: 'error', inputs: [], name: 'Aera__EmptyExecutors' },\n { type: 'error', inputs: [], name: 'Aera__EmptyProposers' },\n { type: 'error', inputs: [], name: 'Aera__Unauthorized' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressAuthority' },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// TransferBlacklistHook\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const transferBlacklistHookAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'oracle_', internalType: 'contract IChainalysisSanctionsOracle', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'BLACKLIST_ORACLE',\n outputs: [{ name: '', internalType: 'contract IChainalysisSanctionsOracle', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'transferAgent', internalType: 'address', type: 'address' },\n ],\n name: 'beforeTransfer',\n outputs: [],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'vault', internalType: 'address', type: 'address' }],\n name: 'isVaultUnitTransferable',\n outputs: [{ name: 'isVaultUnitTransferable', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'isTransferable', internalType: 'bool', type: 'bool' },\n ],\n name: 'setIsVaultUnitsTransferable',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address', indexed: true },\n { name: 'isTransferable', internalType: 'bool', type: 'bool', indexed: false },\n ],\n name: 'VaultUnitTransferableSet',\n },\n {\n type: 'error',\n inputs: [{ name: 'address_', internalType: 'address', type: 'address' }],\n name: 'AeraPeriphery__BlacklistedAddress',\n },\n { type: 'error', inputs: [], name: 'AeraPeriphery__ZeroAddressBlacklistOracle' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotAuthorized' },\n { type: 'error', inputs: [], name: 'Aera__NotVaultOwner' },\n {\n type: 'error',\n inputs: [{ name: 'vault', internalType: 'address', type: 'address' }],\n name: 'Aera__VaultUnitsNotTransferable',\n },\n] as const;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Whitelist\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const whitelistAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'initialOwner', internalType: 'address', type: 'address' },\n { name: 'initialAuthority', internalType: 'contract Authority', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'authority',\n outputs: [{ name: '', internalType: 'contract Authority', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'getAllWhitelisted',\n outputs: [{ name: '', internalType: 'address[]', type: 'address[]' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'addr', internalType: 'address', type: 'address' }],\n name: 'isWhitelisted',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'pendingOwner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'newAuthority', internalType: 'contract Authority', type: 'address' }],\n name: 'setAuthority',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'addr', internalType: 'address', type: 'address' },\n { name: 'isAddressWhitelisted', internalType: 'bool', type: 'bool' },\n ],\n name: 'setWhitelisted',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newAuthority', internalType: 'contract Authority', type: 'address', indexed: true },\n ],\n name: 'AuthorityUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferStarted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'addr', internalType: 'address', type: 'address', indexed: true },\n { name: 'isAddressWhitelisted', internalType: 'bool', type: 'bool', indexed: false },\n ],\n name: 'WhitelistSet',\n },\n { type: 'error', inputs: [], name: 'Aera__Unauthorized' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressAuthority' },\n] as const;\n", "// Compact ABI derived from aera-finance/aera-contracts-v3@f4e3433058c29c3a0b1348ffbd358cc036a1687f\n// source: src/core/interfaces/IProvisionerV2.sol\nexport const provisionerV2Abi = [\n {\n type: 'function',\n inputs: [],\n name: 'SOLVING_GATE_ENABLED',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokensIn', internalType: 'uint256', type: 'uint256' },\n { name: 'minUnitsOut', internalType: 'uint256', type: 'uint256' },\n { name: 'receiver', internalType: 'address', type: 'address' },\n ],\n name: 'deposit',\n outputs: [{ name: 'unitsOut', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'receiver', internalType: 'address', type: 'address' },\n { name: 'depositor', internalType: 'address', type: 'address' },\n ],\n name: 'depositReceiverApprovals',\n outputs: [{ name: 'approved', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokensIn', internalType: 'uint256', type: 'uint256' },\n { name: 'minUnitsOut', internalType: 'uint256', type: 'uint256' },\n { name: 'solverTip', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'maxPriceAge', internalType: 'uint256', type: 'uint256' },\n { name: 'isFixedPrice', internalType: 'bool', type: 'bool' },\n { name: 'receiver', internalType: 'address', type: 'address' },\n ],\n name: 'requestDeposit',\n outputs: [{ name: 'depositRequestHash', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'getSyncRedeemDetails',\n outputs: [\n { name: 'maxPriceAge', internalType: 'uint24', type: 'uint24' },\n { name: 'relativeCapBps', internalType: 'uint16', type: 'uint16' },\n { name: 'maxDynamicPremiumBps', internalType: 'uint16', type: 'uint16' },\n { name: 'epochTimestamp', internalType: 'uint32', type: 'uint32' },\n { name: 'absoluteCapNumeraire', internalType: 'uint80', type: 'uint80' },\n { name: 'epochRedeemedNumeraire', internalType: 'uint80', type: 'uint80' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'getSyncRedeemEpochState',\n outputs: [\n { name: 'epochTimestamp', internalType: 'uint256', type: 'uint256' },\n { name: 'epochStartTvlNumeraire', internalType: 'uint256', type: 'uint256' },\n { name: 'epochRedeemedNumeraire', internalType: 'uint256', type: 'uint256' },\n { name: 'epochCapNumeraire', internalType: 'uint256', type: 'uint256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'user', internalType: 'address', type: 'address' }],\n name: 'userUnitsRefundableUntil',\n outputs: [{ name: 'unitsLockedUntil', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'depositor', internalType: 'address', type: 'address' },\n { name: 'approved', internalType: 'bool', type: 'bool' },\n ],\n name: 'setDepositReceiverApproval',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'solvingGate',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'token', internalType: 'contract IERC20', type: 'address' }],\n name: 'tokensDetails',\n outputs: [\n { name: 'asyncDepositEnabled', internalType: 'bool', type: 'bool' },\n { name: 'asyncRedeemEnabled', internalType: 'bool', type: 'bool' },\n { name: 'syncDepositEnabled', internalType: 'bool', type: 'bool' },\n { name: 'syncRedeemEnabled', internalType: 'bool', type: 'bool' },\n { name: 'asyncDepositMultiplier', internalType: 'uint16', type: 'uint16' },\n { name: 'asyncRedeemMultiplier', internalType: 'uint16', type: 'uint16' },\n { name: 'syncDepositMultiplier', internalType: 'uint16', type: 'uint16' },\n { name: 'syncRedeemMultiplier', internalType: 'uint16', type: 'uint16' },\n {\n name: 'pushFundsSubmitDataPointer',\n internalType: 'address',\n type: 'address',\n },\n {\n name: 'pullFundsSubmitDataPointer',\n internalType: 'address',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'unitsIn', internalType: 'uint256', type: 'uint256' },\n { name: 'minTokensOut', internalType: 'uint256', type: 'uint256' },\n { name: 'solverTip', internalType: 'uint256', type: 'uint256' },\n { name: 'deadline', internalType: 'uint256', type: 'uint256' },\n { name: 'maxPriceAge', internalType: 'uint256', type: 'uint256' },\n { name: 'isFixedPrice', internalType: 'bool', type: 'bool' },\n { name: 'receiver', internalType: 'address', type: 'address' },\n ],\n name: 'requestRedeem',\n outputs: [{ name: 'redeemRequestHash', internalType: 'bytes32', type: 'bytes32' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'unitsIn', internalType: 'uint256', type: 'uint256' },\n { name: 'minTokensOut', internalType: 'uint256', type: 'uint256' },\n { name: 'receiver', internalType: 'address', type: 'address' },\n ],\n name: 'redeem',\n outputs: [{ name: 'tokensOut', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokensOut', internalType: 'uint256', type: 'uint256' },\n { name: 'maxUnitsIn', internalType: 'uint256', type: 'uint256' },\n { name: 'receiver', internalType: 'address', type: 'address' },\n ],\n name: 'withdraw',\n outputs: [{ name: 'unitsIn', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'asyncRequestHash', internalType: 'bytes32', type: 'bytes32' }],\n name: 'asyncRequestHashes',\n outputs: [{ name: 'exists', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'version',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'pure',\n },\n {\n type: 'event',\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'receiver', internalType: 'address', type: 'address', indexed: true },\n { name: 'token', internalType: 'contract IERC20', type: 'address', indexed: true },\n { name: 'tokensIn', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'minUnitsOut', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'solverTip', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'deadline', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'maxPriceAge', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'isFixedPrice', internalType: 'bool', type: 'bool', indexed: false },\n { name: 'depositRequestHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n ],\n name: 'DepositRequested',\n anonymous: false,\n },\n {\n type: 'event',\n inputs: [\n { name: 'receiver', internalType: 'address', type: 'address', indexed: true },\n { name: 'depositor', internalType: 'address', type: 'address', indexed: true },\n { name: 'approved', internalType: 'bool', type: 'bool', indexed: false },\n ],\n name: 'DepositReceiverApprovalSet',\n anonymous: false,\n },\n {\n type: 'event',\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'receiver', internalType: 'address', type: 'address', indexed: true },\n { name: 'token', internalType: 'contract IERC20', type: 'address', indexed: true },\n { name: 'minTokensOut', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'unitsIn', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'solverTip', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'deadline', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'maxPriceAge', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'isFixedPrice', internalType: 'bool', type: 'bool', indexed: false },\n { name: 'redeemRequestHash', internalType: 'bytes32', type: 'bytes32', indexed: false },\n ],\n name: 'RedeemRequested',\n anonymous: false,\n },\n {\n type: 'event',\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'receiver', internalType: 'address', type: 'address', indexed: true },\n { name: 'token', internalType: 'contract IERC20', type: 'address', indexed: true },\n { name: 'unitsIn', internalType: 'uint256', type: 'uint256', indexed: false },\n { name: 'tokensOut', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'Redeemed',\n anonymous: false,\n },\n { type: 'error', inputs: [], name: 'Aera__AsyncDepositDisabled' },\n { type: 'error', inputs: [], name: 'Aera__AsyncRedeemDisabled' },\n { type: 'error', inputs: [], name: 'Aera__AutoPriceSolveNotAllowed' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotRequestUser' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsVault' },\n { type: 'error', inputs: [], name: 'Aera__CancellationFeeExceedsRequestAmount' },\n { type: 'error', inputs: [], name: 'Aera__DeadlineInFutureAndUnauthorized' },\n { type: 'error', inputs: [], name: 'Aera__DeadlineInPast' },\n { type: 'error', inputs: [], name: 'Aera__DeadlineTooFarInFuture' },\n { type: 'error', inputs: [], name: 'Aera__DepositCancellationDetailsNotZero' },\n { type: 'error', inputs: [], name: 'Aera__DepositCapExceeded' },\n { type: 'error', inputs: [], name: 'Aera__DepositCapZero' },\n { type: 'error', inputs: [], name: 'Aera__DepositHashNotFound' },\n { type: 'error', inputs: [], name: 'Aera__DepositRequestCancellationDisabled' },\n { type: 'error', inputs: [], name: 'Aera__FixedPriceSolverTipNotAllowed' },\n { type: 'error', inputs: [], name: 'Aera__HashCollision' },\n { type: 'error', inputs: [], name: 'Aera__HashNotFound' },\n { type: 'error', inputs: [], name: 'Aera__InvalidToken' },\n { type: 'error', inputs: [], name: 'Aera__MaxDepositRefundTimeoutExceeded' },\n { type: 'error', inputs: [], name: 'Aera__MaxTokensInExceeded' },\n { type: 'error', inputs: [], name: 'Aera__MaxUnitsInExceeded' },\n { type: 'error', inputs: [], name: 'Aera__MinTokensOutNotMet' },\n { type: 'error', inputs: [], name: 'Aera__MinUnitsOutNotMet' },\n { type: 'error', inputs: [], name: 'Aera__MultiplierOutOfRange' },\n { type: 'error', inputs: [], name: 'Aera__PriceAndFeeCalculatorVaultPaused' },\n { type: 'error', inputs: [], name: 'Aera__PullFundsSubmitDataNotSet' },\n { type: 'error', inputs: [], name: 'Aera__ReceiverNotApproved' },\n { type: 'error', inputs: [], name: 'Aera__RedeemCancellationCapNumeraireZero' },\n { type: 'error', inputs: [], name: 'Aera__RedeemCancellationDetailsNotZero' },\n { type: 'error', inputs: [], name: 'Aera__RedeemRequestCancellationDisabled' },\n { type: 'error', inputs: [], name: 'Aera__RefundPeriodExpired' },\n { type: 'error', inputs: [], name: 'Aera__RequestAmountExceedsRefundCap' },\n { type: 'error', inputs: [], name: 'Aera__SolvingGateDisabled' },\n { type: 'error', inputs: [], name: 'Aera__SolvingPaused' },\n { type: 'error', inputs: [], name: 'Aera__SyncDepositDisabled' },\n { type: 'error', inputs: [], name: 'Aera__SyncRedeemAbsoluteCapNumeraireZero' },\n { type: 'error', inputs: [], name: 'Aera__SyncRedeemDisabled' },\n { type: 'error', inputs: [], name: 'Aera__SyncRedeemEpochCapExceeded' },\n { type: 'error', inputs: [], name: 'Aera__SyncRedeemMaxDynamicPremiumBpsTooHigh' },\n { type: 'error', inputs: [], name: 'Aera__SyncRedeemMaxPriceAgeExceeded' },\n { type: 'error', inputs: [], name: 'Aera__SyncRedeemMaxPriceAgeZero' },\n { type: 'error', inputs: [], name: 'Aera__SyncRedeemNotConfigured' },\n { type: 'error', inputs: [], name: 'Aera__SyncRedeemRelativeCapBpsTooHigh' },\n { type: 'error', inputs: [], name: 'Aera__SyncRedeemRelativeCapBpsZero' },\n { type: 'error', inputs: [], name: 'Aera__TokenCantBePriced' },\n { type: 'error', inputs: [], name: 'Aera__TokensZero' },\n { type: 'error', inputs: [], name: 'Aera__Unauthorized' },\n { type: 'error', inputs: [], name: 'Aera__UnitsLocked' },\n { type: 'error', inputs: [], name: 'Aera__UnitsZero' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressAuthority' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressMultiDepositorVault' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressPriceAndFeeCalculator' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressReceiver' },\n { type: 'error', inputs: [], name: 'ReentrancyGuardReentrantCall' },\n {\n type: 'error',\n inputs: [{ name: 'token', internalType: 'address', type: 'address' }],\n name: 'SafeERC20FailedOperation',\n },\n] as const;\n", "export function readAtBlock(options: { blockNumber?: bigint } = {}) {\n return options.blockNumber === undefined ? {} : { blockNumber: options.blockNumber };\n}\n", "export const priceAndFeeCalculatorAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'numeraire', internalType: 'contract IERC20', type: 'address' },\n { name: 'oracleRegistry', internalType: 'contract IOracleRegistry', type: 'address' },\n { name: 'owner_', internalType: 'address', type: 'address' },\n { name: 'authority_', internalType: 'contract Authority', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'NUMERAIRE',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'ORACLE_REGISTRY',\n outputs: [{ name: '', internalType: 'contract IOracleRegistry', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'authority',\n outputs: [{ name: '', internalType: 'contract Authority', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'feeTokenBalance', internalType: 'uint256', type: 'uint256' }],\n name: 'claimFees',\n outputs: [\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'address', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'feeTokenBalance', internalType: 'uint256', type: 'uint256' }],\n name: 'claimProtocolFees',\n outputs: [\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'address', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokenAmount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'convertTokenToUnits',\n outputs: [{ name: 'unitsAmount', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokenAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'rounding', internalType: 'enum Math.Rounding', type: 'uint8' },\n ],\n name: 'convertTokenToUnitsIfActive',\n outputs: [{ name: 'unitsAmount', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'unitsAmount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'convertUnitsToNumeraire',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'unitsAmount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'convertUnitsToToken',\n outputs: [{ name: 'tokenAmount', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'unitsAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'rounding', internalType: 'enum Math.Rounding', type: 'uint8' },\n ],\n name: 'convertUnitsToTokenIfActive',\n outputs: [{ name: 'tokenAmount', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'vault', internalType: 'address', type: 'address' }],\n name: 'getVaultState',\n outputs: [\n {\n name: '',\n internalType: 'struct VaultPriceState',\n type: 'tuple',\n components: [\n { name: 'paused', internalType: 'bool', type: 'bool' },\n { name: 'maxPriceAge', internalType: 'uint8', type: 'uint8' },\n { name: 'minUpdateIntervalMinutes', internalType: 'uint16', type: 'uint16' },\n { name: 'maxPriceToleranceRatio', internalType: 'uint16', type: 'uint16' },\n { name: 'minPriceToleranceRatio', internalType: 'uint16', type: 'uint16' },\n { name: 'maxUpdateDelayDays', internalType: 'uint8', type: 'uint8' },\n { name: 'timestamp', internalType: 'uint32', type: 'uint32' },\n { name: 'accrualLag', internalType: 'uint24', type: 'uint24' },\n { name: 'unitPrice', internalType: 'uint128', type: 'uint128' },\n { name: 'highestPrice', internalType: 'uint128', type: 'uint128' },\n { name: 'lastTotalSupply', internalType: 'uint128', type: 'uint128' },\n ],\n },\n {\n name: '',\n internalType: 'struct VaultAccruals',\n type: 'tuple',\n components: [\n {\n name: 'fees',\n internalType: 'struct Fee',\n type: 'tuple',\n components: [\n { name: 'tvl', internalType: 'uint16', type: 'uint16' },\n { name: 'performance', internalType: 'uint16', type: 'uint16' },\n ],\n },\n { name: 'accruedFees', internalType: 'uint112', type: 'uint112' },\n { name: 'accruedProtocolFees', internalType: 'uint112', type: 'uint112' },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'vault', internalType: 'address', type: 'address' }],\n name: 'getVaultsPriceAge',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'vault', internalType: 'address', type: 'address' }],\n name: 'isVaultPaused',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'owner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'vault', internalType: 'address', type: 'address' }],\n name: 'pauseVault',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'pendingOwner',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'feeTokenBalance', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'previewFees',\n outputs: [\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'protocolFeeRecipient',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'protocolFees',\n outputs: [\n { name: 'tvl', internalType: 'uint16', type: 'uint16' },\n { name: 'performance', internalType: 'uint16', type: 'uint16' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'registerVault',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'vault', internalType: 'address', type: 'address' }],\n name: 'resetHighestPrice',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newAuthority', internalType: 'contract Authority', type: 'address' }],\n name: 'setAuthority',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'price', internalType: 'uint128', type: 'uint128' },\n { name: 'timestamp', internalType: 'uint32', type: 'uint32' },\n ],\n name: 'setInitialPrice',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'feeRecipient', internalType: 'address', type: 'address' }],\n name: 'setProtocolFeeRecipient',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'tvl', internalType: 'uint16', type: 'uint16' },\n { name: 'performance', internalType: 'uint16', type: 'uint16' },\n ],\n name: 'setProtocolFees',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'minPriceToleranceRatio', internalType: 'uint16', type: 'uint16' },\n { name: 'maxPriceToleranceRatio', internalType: 'uint16', type: 'uint16' },\n { name: 'minUpdateIntervalMinutes', internalType: 'uint16', type: 'uint16' },\n { name: 'maxPriceAge', internalType: 'uint8', type: 'uint8' },\n { name: 'maxUpdateDelayDays', internalType: 'uint8', type: 'uint8' },\n ],\n name: 'setThresholds',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'price', internalType: 'uint128', type: 'uint128' },\n { name: 'timestamp', internalType: 'uint32', type: 'uint32' },\n ],\n name: 'setUnitPrice',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'accountant', internalType: 'address', type: 'address' },\n ],\n name: 'setVaultAccountant',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'tvl', internalType: 'uint16', type: 'uint16' },\n { name: 'performance', internalType: 'uint16', type: 'uint16' },\n ],\n name: 'setVaultFees',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'newOwner', internalType: 'address', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'price', internalType: 'uint128', type: 'uint128' },\n { name: 'timestamp', internalType: 'uint32', type: 'uint32' },\n ],\n name: 'unpauseVault',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'vault', internalType: 'address', type: 'address' }],\n name: 'vaultAccountant',\n outputs: [{ name: 'accountant', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newAuthority', internalType: 'contract Authority', type: 'address', indexed: true },\n ],\n name: 'AuthorityUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address', indexed: true },\n { name: 'newHighestPrice', internalType: 'uint128', type: 'uint128', indexed: false },\n ],\n name: 'HighestPriceReset',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferStarted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },\n ],\n name: 'OwnershipTransferred',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'feeRecipient', internalType: 'address', type: 'address', indexed: true }],\n name: 'ProtocolFeeRecipientSet',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'tvlFee', internalType: 'uint16', type: 'uint16', indexed: false },\n { name: 'performanceFee', internalType: 'uint16', type: 'uint16', indexed: false },\n ],\n name: 'ProtocolFeesSet',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address', indexed: true },\n { name: 'minPriceToleranceRatio', internalType: 'uint16', type: 'uint16', indexed: false },\n { name: 'maxPriceToleranceRatio', internalType: 'uint16', type: 'uint16', indexed: false },\n { name: 'minUpdateIntervalMinutes', internalType: 'uint16', type: 'uint16', indexed: false },\n { name: 'maxPriceAge', internalType: 'uint8', type: 'uint8', indexed: false },\n ],\n name: 'ThresholdsSet',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address', indexed: true },\n { name: 'price', internalType: 'uint128', type: 'uint128', indexed: false },\n { name: 'timestamp', internalType: 'uint32', type: 'uint32', indexed: false },\n ],\n name: 'UnitPriceUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address', indexed: false },\n { name: 'accountant', internalType: 'address', type: 'address', indexed: false },\n ],\n name: 'VaultAccountantSet',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address', indexed: true },\n { name: 'tvlFee', internalType: 'uint16', type: 'uint16', indexed: false },\n { name: 'performanceFee', internalType: 'uint16', type: 'uint16', indexed: false },\n ],\n name: 'VaultFeesSet',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address', indexed: true },\n { name: 'paused', internalType: 'bool', type: 'bool', indexed: false },\n ],\n name: 'VaultPausedChanged',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'vault', internalType: 'address', type: 'address', indexed: true }],\n name: 'VaultRegistered',\n },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotAuthorized' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotVaultAccountant' },\n { type: 'error', inputs: [], name: 'Aera__CallerIsNotVaultOwner' },\n { type: 'error', inputs: [], name: 'Aera__CurrentPriceAboveHighestPrice' },\n { type: 'error', inputs: [], name: 'Aera__InvalidMaxPriceAge' },\n { type: 'error', inputs: [], name: 'Aera__InvalidMaxPriceToleranceRatio' },\n { type: 'error', inputs: [], name: 'Aera__InvalidMaxUpdateDelayDays' },\n { type: 'error', inputs: [], name: 'Aera__InvalidMinPriceToleranceRatio' },\n { type: 'error', inputs: [], name: 'Aera__InvalidPrice' },\n { type: 'error', inputs: [], name: 'Aera__PerformanceFeeTooHigh' },\n { type: 'error', inputs: [], name: 'Aera__StalePrice' },\n { type: 'error', inputs: [], name: 'Aera__ThresholdNotSet' },\n { type: 'error', inputs: [], name: 'Aera__TimestampCantBeInFuture' },\n { type: 'error', inputs: [], name: 'Aera__TimestampMismatch' },\n { type: 'error', inputs: [], name: 'Aera__TimestampMustBeAfterLastUpdate' },\n { type: 'error', inputs: [], name: 'Aera__TvlFeeTooHigh' },\n { type: 'error', inputs: [], name: 'Aera__Unauthorized' },\n { type: 'error', inputs: [], name: 'Aera__UnitPriceMismatch' },\n { type: 'error', inputs: [], name: 'Aera__VaultAlreadyInitialized' },\n { type: 'error', inputs: [], name: 'Aera__VaultAlreadyRegistered' },\n { type: 'error', inputs: [], name: 'Aera__VaultNotInitialized' },\n { type: 'error', inputs: [], name: 'Aera__VaultNotPaused' },\n { type: 'error', inputs: [], name: 'Aera__VaultNotRegistered' },\n { type: 'error', inputs: [], name: 'Aera__VaultPaused' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressAuthority' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressNumeraire' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressOracleRegistry' },\n { type: 'error', inputs: [], name: 'Aera__ZeroAddressProtocolFeeRecipient' },\n {\n type: 'error',\n inputs: [\n { name: 'bits', internalType: 'uint8', type: 'uint8' },\n { name: 'value', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'SafeCastOverflowedUintDowncast',\n },\n] as const;\n", "// Compact ABI derived from aera-finance/aera-contracts-v3@f4e3433058c29c3a0b1348ffbd358cc036a1687f\n// source: src/core/interfaces/IPriceAndFeeCalculatorV2.sol\nexport const priceAndFeeCalculatorV2Abi = [\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokenAmount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'convertTokenToUnits',\n outputs: [{ name: 'unitsAmount', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokenAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'rounding', internalType: 'enum Math.Rounding', type: 'uint8' },\n ],\n name: 'convertTokenToUnitsIfActive',\n outputs: [{ name: 'unitsAmount', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'unitsAmount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'convertUnitsToToken',\n outputs: [{ name: 'tokenAmount', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'unitsAmount', internalType: 'uint256', type: 'uint256' },\n { name: 'rounding', internalType: 'enum Math.Rounding', type: 'uint8' },\n ],\n name: 'convertUnitsToTokenIfActive',\n outputs: [{ name: 'tokenAmount', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'tokenAmount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'convertTokenToNumeraire',\n outputs: [{ name: 'numeraireAmount', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'vault', internalType: 'address', type: 'address' },\n { name: 'token', internalType: 'contract IERC20', type: 'address' },\n { name: 'numeraireAmount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'convertNumeraireToToken',\n outputs: [{ name: 'tokenAmount', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'vault', internalType: 'address', type: 'address' }],\n name: 'getAnchorTimestamp',\n outputs: [{ name: 'timestamp', internalType: 'uint32', type: 'uint32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'vault', internalType: 'address', type: 'address' }],\n name: 'getVaultState',\n outputs: [\n {\n name: '',\n internalType: 'struct VaultPriceStateV2',\n type: 'tuple',\n components: [\n { name: 'paused', internalType: 'bool', type: 'bool' },\n { name: 'pauseOnBadAnchorUpdate', internalType: 'bool', type: 'bool' },\n { name: 'maxPriceAge', internalType: 'uint16', type: 'uint16' },\n { name: 'minUpdateIntervalMinutes', internalType: 'uint16', type: 'uint16' },\n { name: 'maxPriceToleranceRatio', internalType: 'uint16', type: 'uint16' },\n { name: 'minPriceToleranceRatio', internalType: 'uint16', type: 'uint16' },\n { name: 'maxUpdateDelayDays', internalType: 'uint8', type: 'uint8' },\n { name: 'accrualLag', internalType: 'uint32', type: 'uint32' },\n { name: 'anchorTimestamp', internalType: 'uint32', type: 'uint32' },\n { name: 'driftTimestamp', internalType: 'uint32', type: 'uint32' },\n { name: 'anchorPrice', internalType: 'uint128', type: 'uint128' },\n { name: 'driftPrice', internalType: 'uint128', type: 'uint128' },\n { name: 'highestPrice', internalType: 'uint128', type: 'uint128' },\n { name: 'lastTotalSupply', internalType: 'uint128', type: 'uint128' },\n ],\n },\n {\n name: '',\n internalType: 'struct VaultAccruals',\n type: 'tuple',\n components: [\n {\n name: 'fees',\n internalType: 'struct Fee',\n type: 'tuple',\n components: [\n { name: 'tvl', internalType: 'uint16', type: 'uint16' },\n { name: 'performance', internalType: 'uint16', type: 'uint16' },\n ],\n },\n { name: 'accruedFees', internalType: 'uint112', type: 'uint112' },\n { name: 'accruedProtocolFees', internalType: 'uint112', type: 'uint112' },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'vault', internalType: 'address', type: 'address' }],\n name: 'isVaultPaused',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'version',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'pure',\n },\n] as const;\n", "import type { Address, PublicClient } from 'viem';\nimport { UnsupportedFeatureError } from '../../errors';\nimport { priceAndFeeCalculatorAbi } from '../abis/priceAndFeeCalculator';\nimport { priceAndFeeCalculatorV2Abi } from '../abis/priceAndFeeCalculatorV2';\nimport { ContractVersion } from '../types';\nimport { readAtBlock } from './readOptions';\n\nconst ROUNDING_FLOOR = 0;\nconst ROUNDING_CEIL = 1;\n\nexport interface NormalizedVaultPriceState {\n paused: boolean;\n unitPrice: bigint;\n timestamp: number;\n}\n\ntype AeraPriceReadOptions = {\n blockNumber?: bigint;\n};\n\nfunction toNumber(value: bigint | number): number {\n return typeof value === 'bigint' ? Number(value) : value;\n}\n\nfunction normalizeVaultPriceState<\n TState extends { paused: boolean } & (\n | { unitPrice: bigint; timestamp: bigint | number }\n | {\n anchorPrice: bigint;\n driftPrice: bigint;\n anchorTimestamp: bigint | number;\n driftTimestamp: bigint | number;\n }\n ),\n>(priceState: TState): TState & NormalizedVaultPriceState {\n if ('unitPrice' in priceState) {\n return {\n ...priceState,\n unitPrice: priceState.unitPrice,\n timestamp: toNumber(priceState.timestamp),\n } as TState & NormalizedVaultPriceState;\n }\n\n const anchorTimestamp = toNumber(priceState.anchorTimestamp);\n const driftTimestamp = toNumber(priceState.driftTimestamp);\n const useDriftPrice = driftTimestamp >= anchorTimestamp;\n\n return {\n ...priceState,\n unitPrice: useDriftPrice ? priceState.driftPrice : priceState.anchorPrice,\n timestamp: useDriftPrice ? driftTimestamp : anchorTimestamp,\n } as TState & NormalizedVaultPriceState;\n}\n\nexport async function convertTokenToUnitsIfActive(\n client: PublicClient,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n tokenAmount: bigint,\n rounding: typeof ROUNDING_FLOOR | typeof ROUNDING_CEIL,\n options: AeraPriceReadOptions = {}\n): Promise<bigint> {\n if (feeCalculatorVersion === ContractVersion.V2) {\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorV2Abi,\n functionName: 'convertTokenToUnitsIfActive',\n args: [vault, token, tokenAmount, rounding],\n ...readAtBlock(options),\n });\n }\n\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorAbi,\n functionName: 'convertTokenToUnitsIfActive',\n args: [vault, token, tokenAmount, rounding],\n ...readAtBlock(options),\n });\n}\n\nexport async function convertUnitsToTokenIfActive(\n client: PublicClient,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n unitsAmount: bigint,\n rounding: typeof ROUNDING_FLOOR | typeof ROUNDING_CEIL,\n options: AeraPriceReadOptions = {}\n): Promise<bigint> {\n if (feeCalculatorVersion === ContractVersion.V2) {\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorV2Abi,\n functionName: 'convertUnitsToTokenIfActive',\n args: [vault, token, unitsAmount, rounding],\n ...readAtBlock(options),\n });\n }\n\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorAbi,\n functionName: 'convertUnitsToTokenIfActive',\n args: [vault, token, unitsAmount, rounding],\n ...readAtBlock(options),\n });\n}\n\nexport async function convertTokenToUnits(\n client: PublicClient,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n tokenAmount: bigint,\n options: AeraPriceReadOptions = {}\n): Promise<bigint> {\n if (feeCalculatorVersion === ContractVersion.V2) {\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorV2Abi,\n functionName: 'convertTokenToUnits',\n args: [vault, token, tokenAmount],\n ...readAtBlock(options),\n });\n }\n\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorAbi,\n functionName: 'convertTokenToUnits',\n args: [vault, token, tokenAmount],\n ...readAtBlock(options),\n });\n}\n\nexport async function convertUnitsToToken(\n client: PublicClient,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n unitsAmount: bigint,\n options: AeraPriceReadOptions = {}\n): Promise<bigint> {\n if (feeCalculatorVersion === ContractVersion.V2) {\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorV2Abi,\n functionName: 'convertUnitsToToken',\n args: [vault, token, unitsAmount],\n ...readAtBlock(options),\n });\n }\n\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorAbi,\n functionName: 'convertUnitsToToken',\n args: [vault, token, unitsAmount],\n ...readAtBlock(options),\n });\n}\n\nexport async function convertTokenToNumeraire(\n client: PublicClient,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n tokenAmount: bigint,\n options: AeraPriceReadOptions = {}\n): Promise<bigint> {\n if (feeCalculatorVersion !== ContractVersion.V2) {\n throw new UnsupportedFeatureError(\n 'Aera: numeraire conversion requires V2 price and fee calculator'\n );\n }\n\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorV2Abi,\n functionName: 'convertTokenToNumeraire',\n args: [vault, token, tokenAmount],\n ...readAtBlock(options),\n });\n}\n\nexport async function convertNumeraireToToken(\n client: PublicClient,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n numeraireAmount: bigint,\n options: AeraPriceReadOptions = {}\n): Promise<bigint> {\n if (feeCalculatorVersion !== ContractVersion.V2) {\n throw new UnsupportedFeatureError(\n 'Aera: numeraire conversion requires V2 price and fee calculator'\n );\n }\n\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorV2Abi,\n functionName: 'convertNumeraireToToken',\n args: [vault, token, numeraireAmount],\n ...readAtBlock(options),\n });\n}\n\nexport async function getAnchorTimestamp(\n client: PublicClient,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n options: AeraPriceReadOptions = {}\n): Promise<number> {\n if (feeCalculatorVersion !== ContractVersion.V2) {\n throw new UnsupportedFeatureError('Aera: sync redeem requires V2 price and fee calculator');\n }\n\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorV2Abi,\n functionName: 'getAnchorTimestamp',\n args: [vault],\n ...readAtBlock(options),\n });\n}\n\nexport async function getVaultState(\n client: PublicClient,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address\n) {\n if (feeCalculatorVersion === ContractVersion.V2) {\n const [priceState, accruals] = await client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorV2Abi,\n functionName: 'getVaultState',\n args: [vault],\n });\n\n return [normalizeVaultPriceState(priceState), accruals] as const;\n }\n\n const [priceState, accruals] = await client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorAbi,\n functionName: 'getVaultState',\n args: [vault],\n });\n\n return [normalizeVaultPriceState(priceState), accruals] as const;\n}\n\nexport async function isVaultPaused(\n client: PublicClient,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address\n): Promise<boolean> {\n if (feeCalculatorVersion === ContractVersion.V2) {\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorV2Abi,\n functionName: 'isVaultPaused',\n args: [vault],\n });\n }\n\n return client.readContract({\n address: feeCalculator,\n abi: priceAndFeeCalculatorAbi,\n functionName: 'isVaultPaused',\n args: [vault],\n });\n}\n\nexport const Rounding = {\n Floor: ROUNDING_FLOOR,\n Ceil: ROUNDING_CEIL,\n} as const;\n", "export const erc20Abi = [\n {\n type: 'function',\n name: 'approve',\n inputs: [\n { name: 'spender', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'allowance',\n inputs: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n ],\n outputs: [{ type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'balanceOf',\n inputs: [{ name: 'account', type: 'address' }],\n outputs: [{ type: 'uint256' }],\n stateMutability: 'view',\n },\n] as const;\n", "import {\n type Address,\n type Client,\n type GetContractReturnType,\n type PublicClient,\n getContract,\n} from 'viem';\nimport { priceAndFeeCalculatorAbi } from '../abis/priceAndFeeCalculator';\nimport { provisionerAbi } from '../abis/provisioner';\nimport {\n Rounding,\n convertTokenToUnitsIfActive,\n convertUnitsToTokenIfActive,\n} from './priceAndFeeCalculator';\nimport { MAX_BPS } from '../../constants';\nimport type { ContractVersion } from '../types';\n\nexport type PriceAndFeeCalculatorContract<T extends Client> = GetContractReturnType<\n typeof priceAndFeeCalculatorAbi,\n T,\n Address\n>;\n\nexport function getPriceAndFeeCalculator<T extends Client>(\n client: T,\n address: Address\n): PriceAndFeeCalculatorContract<T> {\n return getContract({\n address,\n abi: priceAndFeeCalculatorAbi,\n client,\n });\n}\n\nfunction getProvisioner<T extends Client>(client: T, address: Address) {\n return getContract({\n address,\n abi: provisionerAbi,\n client,\n });\n}\n\nasync function getTokenDetails(client: PublicClient, provisioner: Address, token: Address) {\n return getProvisioner(client, provisioner).read.tokensDetails([token]);\n}\n\nexport async function getAsyncDepositUnitsOut(\n client: PublicClient,\n provisioner: Address,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n tokensIn: bigint\n): Promise<bigint> {\n const tokenDetails = await getTokenDetails(client, provisioner, token);\n const depositMultiplier = BigInt(tokenDetails[3]);\n const adjustedTokensIn = (tokensIn * depositMultiplier) / MAX_BPS;\n\n return convertTokenToUnitsIfActive(\n client,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n adjustedTokensIn,\n Rounding.Floor\n );\n}\n\nexport async function getAsyncRedeemTokenOut(\n client: PublicClient,\n provisioner: Address,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n unitsIn: bigint\n): Promise<bigint> {\n const tokenDetails = await getTokenDetails(client, provisioner, token);\n const redeemMultiplier = BigInt(tokenDetails[4]);\n const tokensOut = await convertUnitsToTokenIfActive(\n client,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n unitsIn,\n Rounding.Floor\n );\n\n return (tokensOut * redeemMultiplier) / MAX_BPS;\n}\n\nexport async function getAsyncWithdrawUnitsIn(\n client: PublicClient,\n provisioner: Address,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n tokensOut: bigint\n): Promise<bigint> {\n const tokenDetails = await getTokenDetails(client, provisioner, token);\n const redeemMultiplier = BigInt(tokenDetails[4]);\n const preMultiplierTokensOut = (tokensOut * MAX_BPS + redeemMultiplier - 1n) / redeemMultiplier;\n\n return convertTokenToUnitsIfActive(\n client,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n preMultiplierTokensOut,\n Rounding.Ceil\n );\n}\n\nexport function requestDepositTxRequest(\n provisioner: Address,\n token: Address,\n tokensIn: bigint,\n minUnitsOut: bigint,\n solverTip: bigint,\n deadline: bigint,\n maxPriceAge: bigint,\n isFixedPrice: boolean,\n account: Address\n) {\n return {\n address: provisioner,\n abi: provisionerAbi,\n functionName: 'requestDeposit' as const,\n args: [token, tokensIn, minUnitsOut, solverTip, deadline, maxPriceAge, isFixedPrice] as const,\n account,\n };\n}\n\nexport function requestRedeemTxRequest(\n provisioner: Address,\n token: Address,\n unitsIn: bigint,\n minTokenOut: bigint,\n solverTip: bigint,\n deadline: bigint,\n maxPriceAge: bigint,\n isFixedPrice: boolean,\n account: Address\n) {\n return {\n address: provisioner,\n abi: provisionerAbi,\n functionName: 'requestRedeem' as const,\n args: [token, unitsIn, minTokenOut, solverTip, deadline, maxPriceAge, isFixedPrice] as const,\n account,\n };\n}\n", "import {\n type Address,\n type Client,\n type GetContractReturnType,\n type PublicClient,\n getContract,\n zeroAddress,\n} from 'viem';\nimport { erc20Abi } from '../abis/erc20';\nimport { priceAndFeeCalculatorV2Abi } from '../abis/priceAndFeeCalculatorV2';\nimport { provisionerV2Abi } from '../abis/provisionerV2';\nimport {\n Rounding,\n convertTokenToNumeraire,\n convertTokenToUnitsIfActive,\n convertUnitsToTokenIfActive,\n} from './priceAndFeeCalculator';\nimport { MAX_BPS } from '../../constants';\nimport { StalePriceError, UnsupportedFeatureError } from '../../errors';\nimport type { ContractVersion } from '../types';\nimport { readAtBlock } from './readOptions';\n\nexport type PriceAndFeeCalculatorContract<T extends Client> = GetContractReturnType<\n typeof priceAndFeeCalculatorV2Abi,\n T,\n Address\n>;\n\nexport function getPriceAndFeeCalculator<T extends Client>(\n client: T,\n address: Address\n): PriceAndFeeCalculatorContract<T> {\n return getContract({\n address,\n abi: priceAndFeeCalculatorV2Abi,\n client,\n });\n}\n\ntype SyncRedeemReadOptions = {\n blockNumber?: bigint;\n blockTimestamp?: bigint;\n};\n\nasync function resolveReadContext(\n client: PublicClient,\n options: SyncRedeemReadOptions = {}\n): Promise<Required<SyncRedeemReadOptions>> {\n if (options.blockNumber !== undefined && options.blockTimestamp !== undefined) {\n return { blockNumber: options.blockNumber, blockTimestamp: options.blockTimestamp };\n }\n\n const block =\n options.blockNumber === undefined ? await client.getBlock() : await client.getBlock(options);\n if (block.number === null) {\n throw new UnsupportedFeatureError('Aera: sync redeem reads require a numbered block');\n }\n\n return {\n blockNumber: options.blockNumber ?? block.number,\n blockTimestamp: options.blockTimestamp ?? BigInt(block.timestamp),\n };\n}\n\nasync function getTokenDetails(\n client: PublicClient,\n provisioner: Address,\n token: Address,\n options: SyncRedeemReadOptions = {}\n) {\n return client.readContract({\n address: provisioner,\n abi: provisionerV2Abi,\n functionName: 'tokensDetails',\n args: [token],\n ...readAtBlock(options),\n });\n}\n\n/**\n * Returns the vault's currently known sync-redeem liquidity in tokens.\n *\n * When a pull-funds pointer is configured, the provisioner may source more tokens during the\n * redemption, so the vault's current token balance is not a reliable liquidity limit.\n */\nexport async function getKnownSyncRedeemLiquidityTokens(\n client: PublicClient,\n vault: Address,\n token: Address,\n hasPullFundsSubmitData: boolean,\n options: SyncRedeemReadOptions = {}\n): Promise<bigint | undefined> {\n if (hasPullFundsSubmitData) return undefined;\n\n return client.readContract({\n address: token,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: [vault],\n ...readAtBlock(options),\n });\n}\n\nasync function getDepositQuote({\n client,\n provisioner,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n tokensIn,\n multiplierIndex,\n options,\n}: {\n client: PublicClient;\n provisioner: Address;\n feeCalculator: Address;\n feeCalculatorVersion: ContractVersion;\n vault: Address;\n token: Address;\n tokensIn: bigint;\n multiplierIndex: 4 | 6;\n options?: SyncRedeemReadOptions;\n}): Promise<{ unitsOut: bigint; multiplierBps: bigint }> {\n const tokenDetails = await getTokenDetails(client, provisioner, token, options);\n const multiplierBps = BigInt(tokenDetails[multiplierIndex]);\n const adjustedTokensIn = (tokensIn * multiplierBps) / MAX_BPS;\n\n const unitsOut = await convertTokenToUnitsIfActive(\n client,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n adjustedTokensIn,\n Rounding.Floor,\n options\n );\n\n return { unitsOut, multiplierBps };\n}\n\nasync function getRedeemTokenOut({\n client,\n provisioner,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n unitsIn,\n multiplierIndex,\n options,\n}: {\n client: PublicClient;\n provisioner: Address;\n feeCalculator: Address;\n feeCalculatorVersion: ContractVersion;\n vault: Address;\n token: Address;\n unitsIn: bigint;\n multiplierIndex: 5 | 7;\n options?: SyncRedeemReadOptions;\n}): Promise<bigint> {\n const [tokenDetails, tokensOut] = await Promise.all([\n getTokenDetails(client, provisioner, token, options),\n convertUnitsToTokenIfActive(\n client,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n unitsIn,\n Rounding.Floor,\n options\n ),\n ]);\n const multiplier = BigInt(tokenDetails[multiplierIndex]);\n\n return (tokensOut * multiplier) / MAX_BPS;\n}\n\nasync function getWithdrawUnitsIn({\n client,\n provisioner,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n tokensOut,\n multiplierIndex,\n options,\n}: {\n client: PublicClient;\n provisioner: Address;\n feeCalculator: Address;\n feeCalculatorVersion: ContractVersion;\n vault: Address;\n token: Address;\n tokensOut: bigint;\n multiplierIndex: 5 | 7;\n options?: SyncRedeemReadOptions;\n}): Promise<bigint> {\n const tokenDetails = await getTokenDetails(client, provisioner, token, options);\n const multiplier = BigInt(tokenDetails[multiplierIndex]);\n const preMultiplierTokens = (tokensOut * MAX_BPS + multiplier - 1n) / multiplier;\n\n return convertTokenToUnitsIfActive(\n client,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n preMultiplierTokens,\n Rounding.Ceil,\n options\n );\n}\n\n/** Breakdown of the effective sync redeem multiplier, in basis points. */\nexport interface SyncRedeemRate {\n /** Base sync redeem multiplier (tokensDetails.syncRedeemMultiplier). */\n baseMultiplierBps: bigint;\n /** Dynamic premium charged for the current oracle price age. */\n dynamicPremiumBps: bigint;\n /** Multiplier actually applied to size the redemption (base - dynamic premium). */\n effectiveMultiplierBps: bigint;\n}\n\n/**\n * Reads the live sync redeem rate and whether pull-funds calldata is configured.\n *\n * Both values come from the same token-details read, avoiding another RPC request when a quote\n * needs to determine whether the vault balance is a reliable liquidity limit.\n *\n * @throws {StalePriceError} If the oracle price is older than the configured max age,\n * in which case the on-chain sync redeem would revert.\n */\nexport async function getSyncRedeemRateContext(\n client: PublicClient,\n provisioner: Address,\n vault: Address,\n token: Address,\n feeCalculator: Address,\n options: SyncRedeemReadOptions = {}\n): Promise<{ rate: SyncRedeemRate; hasPullFundsSubmitData: boolean }> {\n const readContext = await resolveReadContext(client, options);\n const [tokenDetails, syncRedeemDetails, anchorTimestamp] = await client.multicall({\n contracts: [\n {\n address: provisioner,\n abi: provisionerV2Abi,\n functionName: 'tokensDetails',\n args: [token],\n },\n {\n address: provisioner,\n abi: provisionerV2Abi,\n functionName: 'getSyncRedeemDetails',\n },\n {\n address: feeCalculator,\n abi: priceAndFeeCalculatorV2Abi,\n functionName: 'getAnchorTimestamp',\n args: [vault],\n },\n ],\n allowFailure: false,\n blockNumber: readContext.blockNumber,\n });\n const baseMultiplierBps = BigInt(tokenDetails[7]);\n const maxPriceAge = BigInt(syncRedeemDetails[0]);\n const maxDynamicPremiumBps = BigInt(syncRedeemDetails[2]);\n const blockTimestamp = readContext.blockTimestamp;\n const priceTimestamp = BigInt(anchorTimestamp);\n\n if (priceTimestamp + maxPriceAge < blockTimestamp) {\n throw new StalePriceError({\n blockTimestamp,\n maxPriceAge,\n priceTimestamp,\n });\n }\n\n const dynamicPremiumBps =\n maxDynamicPremiumBps === 0n || maxPriceAge === 0n\n ? 0n\n : ((blockTimestamp - priceTimestamp) * maxDynamicPremiumBps + maxPriceAge - 1n) / maxPriceAge;\n\n return {\n rate: {\n baseMultiplierBps,\n dynamicPremiumBps,\n effectiveMultiplierBps: baseMultiplierBps - dynamicPremiumBps,\n },\n hasPullFundsSubmitData: tokenDetails[9] !== zeroAddress,\n };\n}\n\n/** Preserves the existing rate-only API for callers that do not need pull-funds state. */\nexport async function getSyncRedeemRate(\n client: PublicClient,\n provisioner: Address,\n vault: Address,\n token: Address,\n feeCalculator: Address,\n options: SyncRedeemReadOptions = {}\n): Promise<SyncRedeemRate> {\n return (await getSyncRedeemRateContext(client, provisioner, vault, token, feeCalculator, options))\n .rate;\n}\n\nasync function getSyncRedeemMultiplier(\n client: PublicClient,\n provisioner: Address,\n vault: Address,\n token: Address,\n feeCalculator: Address,\n options: SyncRedeemReadOptions = {}\n): Promise<bigint> {\n return (await getSyncRedeemRate(client, provisioner, vault, token, feeCalculator, options))\n .effectiveMultiplierBps;\n}\n\nexport async function getSyncRedeemTokenOut(\n client: PublicClient,\n provisioner: Address,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n unitsIn: bigint,\n effectiveMultiplierBps?: bigint,\n options: SyncRedeemReadOptions = {}\n): Promise<bigint> {\n const readContext =\n effectiveMultiplierBps === undefined ? await resolveReadContext(client, options) : options;\n const [tokenAmount, multiplier] = await Promise.all([\n convertUnitsToTokenIfActive(\n client,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n unitsIn,\n Rounding.Floor,\n readContext\n ),\n effectiveMultiplierBps !== undefined\n ? Promise.resolve(effectiveMultiplierBps)\n : getSyncRedeemMultiplier(client, provisioner, vault, token, feeCalculator, readContext),\n ]);\n\n return (tokenAmount * multiplier) / MAX_BPS;\n}\n\nexport async function getAsyncDepositUnitsOut(\n client: PublicClient,\n provisioner: Address,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n tokensIn: bigint\n): Promise<bigint> {\n const quote = await getDepositQuote({\n client,\n provisioner,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n tokensIn,\n multiplierIndex: 4,\n });\n return quote.unitsOut;\n}\n\nconst getSyncDepositQuote = (\n client: PublicClient,\n provisioner: Address,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n tokensIn: bigint\n) =>\n getDepositQuote({\n client,\n provisioner,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n tokensIn,\n multiplierIndex: 6,\n });\n\nexport async function getSyncDepositUnitsOut(\n client: PublicClient,\n provisioner: Address,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n tokensIn: bigint\n): Promise<bigint> {\n const quote = await getSyncDepositQuote(\n client,\n provisioner,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n tokensIn\n );\n return quote.unitsOut;\n}\n\nexport async function getSyncDepositQuoteValues(\n client: PublicClient,\n provisioner: Address,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n tokensIn: bigint\n): Promise<{ unitsOut: bigint; feeBps: bigint; numeraireOut: bigint }> {\n const { unitsOut, multiplierBps } = await getSyncDepositQuote(\n client,\n provisioner,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n tokensIn\n );\n const numeraireOut = await convertTokenToNumeraire(\n client,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n (tokensIn * multiplierBps) / MAX_BPS\n );\n return { unitsOut, feeBps: MAX_BPS - multiplierBps, numeraireOut };\n}\n\n/** Reads the live Instant Supply fee for a vault token, independent of the deposit amount. */\nexport async function getSyncDepositFeeBps(\n client: PublicClient,\n provisioner: Address,\n token: Address,\n options: SyncRedeemReadOptions = {}\n): Promise<bigint> {\n const tokenDetails = await getTokenDetails(client, provisioner, token, options);\n return MAX_BPS - BigInt(tokenDetails[6]);\n}\n\nexport async function getAsyncRedeemTokenOut(\n client: PublicClient,\n provisioner: Address,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n unitsIn: bigint\n): Promise<bigint> {\n return getRedeemTokenOut({\n client,\n provisioner,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n unitsIn,\n multiplierIndex: 5,\n });\n}\n\nexport async function getAsyncWithdrawUnitsIn(\n client: PublicClient,\n provisioner: Address,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n tokensOut: bigint\n): Promise<bigint> {\n return getWithdrawUnitsIn({\n client,\n provisioner,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n tokensOut,\n multiplierIndex: 5,\n });\n}\n\nexport async function getSyncWithdrawUnitsIn(\n client: PublicClient,\n provisioner: Address,\n feeCalculator: Address,\n feeCalculatorVersion: ContractVersion,\n vault: Address,\n token: Address,\n tokensOut: bigint,\n effectiveMultiplierBps?: bigint,\n options: SyncRedeemReadOptions = {}\n): Promise<bigint> {\n const readContext =\n effectiveMultiplierBps === undefined ? await resolveReadContext(client, options) : options;\n const multiplier =\n effectiveMultiplierBps ??\n (await getSyncRedeemMultiplier(client, provisioner, vault, token, feeCalculator, readContext));\n const prePremiumTokens = (tokensOut * MAX_BPS + multiplier - 1n) / multiplier;\n\n return convertTokenToUnitsIfActive(\n client,\n feeCalculator,\n feeCalculatorVersion,\n vault,\n token,\n prePremiumTokens,\n Rounding.Ceil,\n readContext\n );\n}\n\n/** Current sync redeem epoch accounting, in numeraire (all values uint256). */\nexport interface SyncRedeemEpochState {\n epochTimestamp: bigint;\n epochStartTvlNumeraire: bigint;\n epochRedeemedNumeraire: bigint;\n epochCapNumeraire: bigint;\n}\n\nexport async function getSyncRedeemEpochState(\n client: PublicClient,\n provisioner: Address,\n options: SyncRedeemReadOptions = {}\n): Promise<SyncRedeemEpochState> {\n const [epochTimestamp, epochStartTvlNumeraire, epochRedeemedNumeraire, epochCapNumeraire] =\n await client.readContract({\n address: provisioner,\n abi: provisionerV2Abi,\n functionName: 'getSyncRedeemEpochState',\n ...readAtBlock(options),\n });\n\n return { epochTimestamp, epochStartTvlNumeraire, epochRedeemedNumeraire, epochCapNumeraire };\n}\n\n/**\n * Raw expiry timestamp for the user's latest sync-deposit lock (0 if none was recorded).\n * The user is locked while this value is greater than or equal to the relevant block timestamp.\n */\nexport async function getUserUnitsRefundableUntil(\n client: PublicClient,\n provisioner: Address,\n user: Address,\n options: SyncRedeemReadOptions = {}\n): Promise<bigint> {\n return client.readContract({\n address: provisioner,\n abi: provisionerV2Abi,\n functionName: 'userUnitsRefundableUntil',\n args: [user],\n ...readAtBlock(options),\n });\n}\n\nexport function depositTxRequest(\n provisioner: Address,\n token: Address,\n tokensIn: bigint,\n minUnitsOut: bigint,\n receiver: Address,\n account: Address\n) {\n return {\n address: provisioner,\n abi: provisionerV2Abi,\n functionName: 'deposit' as const,\n args: [token, tokensIn, minUnitsOut, receiver] as const,\n account,\n };\n}\n\nexport function requestDepositTxRequest(\n provisioner: Address,\n token: Address,\n tokensIn: bigint,\n minUnitsOut: bigint,\n solverTip: bigint,\n deadline: bigint,\n maxPriceAge: bigint,\n isFixedPrice: boolean,\n receiver: Address,\n account: Address\n) {\n return {\n address: provisioner,\n abi: provisionerV2Abi,\n functionName: 'requestDeposit' as const,\n args: [\n token,\n tokensIn,\n minUnitsOut,\n solverTip,\n deadline,\n maxPriceAge,\n isFixedPrice,\n receiver,\n ] as const,\n account,\n };\n}\n\nexport function setDepositReceiverApprovalTxRequest(\n provisioner: Address,\n depositor: Address,\n approved: boolean,\n receiver: Address\n) {\n return {\n address: provisioner,\n abi: provisionerV2Abi,\n functionName: 'setDepositReceiverApproval' as const,\n args: [depositor, approved] as const,\n account: receiver,\n };\n}\n\nexport function requestRedeemTxRequest(\n provisioner: Address,\n token: Address,\n unitsIn: bigint,\n minTokenOut: bigint,\n solverTip: bigint,\n deadline: bigint,\n maxPriceAge: bigint,\n isFixedPrice: boolean,\n receiver: Address,\n account: Address\n) {\n return {\n address: provisioner,\n abi: provisionerV2Abi,\n functionName: 'requestRedeem' as const,\n args: [\n token,\n unitsIn,\n minTokenOut,\n solverTip,\n deadline,\n maxPriceAge,\n isFixedPrice,\n receiver,\n ] as const,\n account,\n };\n}\n\nexport function redeemTxRequest(\n provisioner: Address,\n token: Address,\n unitsIn: bigint,\n minTokenOut: bigint,\n receiver: Address,\n account: Address\n) {\n return {\n address: provisioner,\n abi: provisionerV2Abi,\n functionName: 'redeem' as const,\n args: [token, unitsIn, minTokenOut, receiver] as const,\n account,\n };\n}\n\nexport function withdrawTxRequest(\n provisioner: Address,\n token: Address,\n tokensOut: bigint,\n maxUnitsIn: bigint,\n receiver: Address,\n account: Address\n) {\n return {\n address: provisioner,\n abi: provisionerV2Abi,\n functionName: 'withdraw' as const,\n args: [token, tokensOut, maxUnitsIn, receiver] as const,\n account,\n };\n}\n", "import { erc20Abi } from '../abis/erc20';\nimport {\n getMultiDepositorVault,\n applySlippageDown,\n applySlippageUp,\n requireAeraSyncRedeemRuntime,\n resolveContractVersion,\n type AeraRuntimeContracts,\n} from '../aeraContracts';\nimport { convertTokenToUnits, convertUnitsToToken } from '../aeraContracts/priceAndFeeCalculator';\nimport * as provisionerV1 from '../aeraContracts/v1';\nimport * as provisionerV2 from '../aeraContracts/v2';\nimport {\n InvalidWithdrawParamsError,\n InvalidSolverTipError,\n requireNonZeroSyncWithdrawBound,\n UnimplementedFeatureError,\n UnsupportedFeatureError,\n} from '../../errors';\nimport type {\n EvmProtocolAdapter,\n EvmTxStep,\n AdapterDepositParams,\n AdapterWithdrawParams,\n AllowanceParams,\n ApprovalParams,\n} from './types';\nimport type { Address, PublicClient } from 'viem';\nimport { multiDepositorVaultAbi } from '../abis/multiDepositorVault';\nimport {\n DEFAULT_BPS,\n DAY,\n DEFAULT_MAX_PRICE_AGE,\n DEFAULT_REQUEST_DEADLINE_BUFFER,\n DEFAULT_SOLVER_TIP,\n} from '../../constants';\nimport { ContractVersion } from '../types';\n\nexport const convertTokenAmountToUnits = async (\n publicClient: PublicClient,\n tokenAmount: bigint,\n vaultAddress: Address,\n tokenAddress: Address\n) => {\n const vaultContract = getMultiDepositorVault(publicClient, vaultAddress);\n if (vaultContract === undefined) return;\n\n const calculatorAddress = await vaultContract.read.feeCalculator();\n if (!calculatorAddress) return;\n const calculatorVersion = await resolveContractVersion(publicClient, calculatorAddress);\n\n const unitsAmount = await convertTokenToUnits(\n publicClient,\n calculatorAddress,\n calculatorVersion,\n vaultAddress,\n tokenAddress,\n tokenAmount\n );\n\n return unitsAmount;\n};\n\nexport const convertUnitsToTokenAmount = async (\n publicClient: PublicClient,\n unitsAmount: bigint,\n vaultAddress: Address,\n tokenAddress: Address\n) => {\n const vaultContract = getMultiDepositorVault(publicClient, vaultAddress);\n if (vaultContract === undefined) return;\n\n const calculatorAddress = await vaultContract.read.feeCalculator();\n if (!calculatorAddress) return;\n const calculatorVersion = await resolveContractVersion(publicClient, calculatorAddress);\n\n return convertUnitsToToken(\n publicClient,\n calculatorAddress,\n calculatorVersion,\n vaultAddress,\n tokenAddress,\n unitsAmount\n );\n};\n\nfunction subtractSolverTip(tokenAmount: bigint, solverTip: bigint): bigint {\n if (solverTip === 0n) return tokenAmount;\n if (solverTip >= tokenAmount) {\n throw new InvalidSolverTipError(solverTip, tokenAmount);\n }\n\n return tokenAmount - solverTip;\n}\n\nfunction getRequestDeadline(expirationDays?: number): bigint {\n const deadlineBuffer =\n expirationDays === undefined ? DEFAULT_REQUEST_DEADLINE_BUFFER : DAY * expirationDays;\n return BigInt(Math.ceil(new Date().getTime() / 1000) + deadlineBuffer);\n}\n\nasync function getDepositUnitsOut({\n publicClient,\n runtime,\n vault,\n token,\n tokensIn,\n isAsync,\n}: {\n publicClient: PublicClient;\n runtime: AeraRuntimeContracts;\n vault: Address;\n token: Address;\n tokensIn: bigint;\n isAsync: boolean;\n}): Promise<bigint> {\n if (runtime.provisioner.version === ContractVersion.V2) {\n return isAsync\n ? provisionerV2.getAsyncDepositUnitsOut(\n publicClient,\n runtime.provisioner.address,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n vault,\n token,\n tokensIn\n )\n : provisionerV2.getSyncDepositUnitsOut(\n publicClient,\n runtime.provisioner.address,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n vault,\n token,\n tokensIn\n );\n }\n\n return provisionerV1.getAsyncDepositUnitsOut(\n publicClient,\n runtime.provisioner.address,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n vault,\n token,\n tokensIn\n );\n}\n\nfunction getAsyncRedeemTokenOut(\n publicClient: PublicClient,\n runtime: AeraRuntimeContracts,\n vault: Address,\n token: Address,\n unitsIn: bigint\n): Promise<bigint> {\n return runtime.provisioner.version === ContractVersion.V2\n ? provisionerV2.getAsyncRedeemTokenOut(\n publicClient,\n runtime.provisioner.address,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n vault,\n token,\n unitsIn\n )\n : provisionerV1.getAsyncRedeemTokenOut(\n publicClient,\n runtime.provisioner.address,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n vault,\n token,\n unitsIn\n );\n}\n\nfunction getAsyncWithdrawUnitsIn(\n publicClient: PublicClient,\n runtime: AeraRuntimeContracts,\n vault: Address,\n token: Address,\n tokensOut: bigint\n): Promise<bigint> {\n return runtime.provisioner.version === ContractVersion.V2\n ? provisionerV2.getAsyncWithdrawUnitsIn(\n publicClient,\n runtime.provisioner.address,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n vault,\n token,\n tokensOut\n )\n : provisionerV1.getAsyncWithdrawUnitsIn(\n publicClient,\n runtime.provisioner.address,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n vault,\n token,\n tokensOut\n );\n}\n\nfunction requireAeraRuntime(runtime: AeraRuntimeContracts | undefined): AeraRuntimeContracts {\n if (!runtime) {\n throw new UnsupportedFeatureError('Aera: runtime contracts were not resolved');\n }\n\n return runtime;\n}\n\nexport const aeraAdapter: EvmProtocolAdapter = {\n async buildDeposit(params: AdapterDepositParams): Promise<EvmTxStep[]> {\n const {\n vault,\n receiver,\n amount,\n account,\n publicClient,\n asset,\n async: isAsync,\n slippageBps = DEFAULT_BPS,\n solverTip = DEFAULT_SOLVER_TIP,\n maxPriceAge = DEFAULT_MAX_PRICE_AGE,\n aeraRuntime,\n minUnitsOut: requestedMinUnitsOut,\n } = params;\n\n const runtime = requireAeraRuntime(aeraRuntime);\n const provisionerAddress = runtime.provisioner.address;\n const isContractV2 = runtime.provisioner.version === ContractVersion.V2;\n if (receiver !== account && !isContractV2) {\n throw new UnsupportedFeatureError('Aera: separate receiver address on V1');\n }\n\n if (!isAsync && !isContractV2) {\n throw new UnsupportedFeatureError('Aera: sync operations on V1');\n }\n\n const minUnitsOut =\n requestedMinUnitsOut ??\n applySlippageDown(\n await getDepositUnitsOut({\n publicClient,\n runtime,\n vault: vault.vaultAddress,\n token: asset.address,\n tokensIn: isAsync ? subtractSolverTip(amount, solverTip) : amount,\n isAsync,\n }),\n slippageBps\n );\n\n if (isAsync) {\n const deadline = getRequestDeadline(vault.expirationDays);\n return [\n {\n type: 'requestDeposit',\n ...(isContractV2\n ? provisionerV2.requestDepositTxRequest(\n provisionerAddress,\n asset.address,\n amount,\n minUnitsOut,\n solverTip,\n deadline,\n maxPriceAge,\n false,\n receiver,\n account\n )\n : provisionerV1.requestDepositTxRequest(\n provisionerAddress,\n asset.address,\n amount,\n minUnitsOut,\n solverTip,\n deadline,\n maxPriceAge,\n false,\n account\n )),\n },\n ];\n }\n\n if (isContractV2) {\n return [\n {\n type: 'deposit',\n ...provisionerV2.depositTxRequest(\n provisionerAddress,\n asset.address,\n amount,\n minUnitsOut,\n receiver,\n account\n ),\n },\n ];\n }\n\n throw new UnimplementedFeatureError('Aera Sync Operations');\n },\n\n async buildWithdraw(params: AdapterWithdrawParams): Promise<EvmTxStep[]> {\n const {\n vault,\n receiver,\n account,\n asset,\n publicClient,\n async: isAsync,\n slippageBps = DEFAULT_BPS,\n solverTip = DEFAULT_SOLVER_TIP,\n maxPriceAge = DEFAULT_MAX_PRICE_AGE,\n aeraRuntime,\n } = params;\n\n const runtime = requireAeraRuntime(aeraRuntime);\n const provisionerAddress = runtime.provisioner.address;\n const isContractV2 = runtime.provisioner.version === ContractVersion.V2;\n if (receiver !== account && !isContractV2) {\n throw new UnsupportedFeatureError('Aera: separate receiver address on V1');\n }\n\n if (!isAsync) requireAeraSyncRedeemRuntime(runtime);\n\n const isV2ExactTokenWithdraw =\n isContractV2 && !isAsync && 'amount' in params && params.amount != null;\n let minTokenOut: bigint;\n let maxUnitsIn: bigint;\n let shares: bigint | undefined;\n\n if (isContractV2 && !isAsync) {\n const quote = params.syncWithdrawQuote;\n if ('entireAmount' in params && params.entireAmount) {\n const balance = await publicClient.readContract({\n address: vault.vaultAddress,\n abi: multiDepositorVaultAbi,\n functionName: 'balanceOf',\n args: [account],\n });\n if (quote !== undefined) {\n if (quote.kind !== 'redeem' || quote.shares !== balance) {\n throw new InvalidWithdrawParamsError();\n }\n }\n shares = balance;\n } else if ('shares' in params && params.shares != null) {\n if (quote !== undefined && (quote.kind !== 'redeem' || quote.shares !== params.shares)) {\n throw new InvalidWithdrawParamsError();\n }\n shares = params.shares;\n } else if (!('amount' in params && params.amount != null)) {\n throw new InvalidWithdrawParamsError();\n }\n\n if (isV2ExactTokenWithdraw) {\n requireNonZeroSyncWithdrawBound(params.amount, 'tokensOut');\n if (quote !== undefined) {\n if (quote.kind !== 'withdraw' || quote.tokensOut !== params.amount) {\n throw new InvalidWithdrawParamsError();\n }\n minTokenOut = quote.tokensOut;\n maxUnitsIn = quote.maxUnitsIn;\n } else {\n minTokenOut = params.amount;\n maxUnitsIn = applySlippageUp(\n await provisionerV2.getSyncWithdrawUnitsIn(\n publicClient,\n provisionerAddress,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n vault.vaultAddress,\n asset.address,\n params.amount\n ),\n slippageBps\n );\n }\n requireNonZeroSyncWithdrawBound(maxUnitsIn, 'maxUnitsIn');\n } else {\n if (shares === undefined) {\n throw new InvalidWithdrawParamsError();\n }\n\n requireNonZeroSyncWithdrawBound(shares, 'unitsIn');\n if (quote !== undefined) {\n if (quote.kind !== 'redeem' || quote.shares !== shares) {\n throw new InvalidWithdrawParamsError();\n }\n minTokenOut = quote.minTokensOut;\n } else {\n const tokensOut = await provisionerV2.getSyncRedeemTokenOut(\n publicClient,\n provisionerAddress,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n vault.vaultAddress,\n asset.address,\n shares\n );\n minTokenOut = applySlippageDown(tokensOut, slippageBps);\n }\n requireNonZeroSyncWithdrawBound(minTokenOut, 'minTokensOut');\n maxUnitsIn = shares;\n }\n } else {\n if ('entireAmount' in params && params.entireAmount) {\n shares = await publicClient.readContract({\n address: vault.vaultAddress,\n abi: multiDepositorVaultAbi,\n functionName: 'balanceOf',\n args: [account],\n });\n } else if ('amount' in params && params.amount != null) {\n shares = await getAsyncWithdrawUnitsIn(\n publicClient,\n runtime,\n vault.vaultAddress,\n asset.address,\n params.amount + solverTip\n );\n } else if ('shares' in params && params.shares != null) {\n shares = params.shares;\n } else {\n throw new InvalidWithdrawParamsError();\n }\n\n const tokenOutBeforeTip = await getAsyncRedeemTokenOut(\n publicClient,\n runtime,\n vault.vaultAddress,\n asset.address,\n shares\n );\n minTokenOut = applySlippageDown(subtractSolverTip(tokenOutBeforeTip, solverTip), slippageBps);\n maxUnitsIn = shares;\n }\n\n const steps: EvmTxStep[] = [];\n\n if (isAsync) {\n if (shares === undefined) {\n throw new InvalidWithdrawParamsError();\n }\n\n // Only async requestRedeem needs a vault unit allowance: the provisioner\n // pulls units from the user. V2 sync redeem/withdraw exits through the\n // vault and burns the caller's units directly, so no approval is needed.\n const { sufficient } = await this.checkAllowance({\n publicClient,\n token: vault.vaultAddress,\n owner: account,\n spender: provisionerAddress,\n amount: shares,\n });\n\n if (!sufficient) {\n steps.push(\n this.buildApproval({\n token: vault.vaultAddress,\n spender: provisionerAddress,\n amount: shares,\n account,\n })\n );\n }\n\n const deadline = getRequestDeadline(vault.expirationDays);\n\n return [\n ...steps,\n {\n type: 'requestRedeem',\n ...(isContractV2\n ? provisionerV2.requestRedeemTxRequest(\n provisionerAddress,\n asset.address,\n shares,\n minTokenOut,\n solverTip,\n deadline,\n maxPriceAge,\n false,\n receiver,\n account\n )\n : provisionerV1.requestRedeemTxRequest(\n provisionerAddress,\n asset.address,\n shares,\n minTokenOut,\n solverTip,\n deadline,\n maxPriceAge,\n false,\n account\n )),\n },\n ];\n }\n\n if ('amount' in params && params.amount != null) {\n return [\n ...steps,\n {\n type: 'withdraw',\n ...provisionerV2.withdrawTxRequest(\n provisionerAddress,\n asset.address,\n params.amount,\n maxUnitsIn,\n receiver,\n account\n ),\n },\n ];\n }\n\n if (shares === undefined) {\n throw new InvalidWithdrawParamsError();\n }\n\n return [\n ...steps,\n {\n type: 'redeem',\n ...provisionerV2.redeemTxRequest(\n provisionerAddress,\n asset.address,\n shares,\n minTokenOut,\n receiver,\n account\n ),\n },\n ];\n },\n\n async checkAllowance(params: AllowanceParams) {\n const { publicClient, token, owner, spender, amount } = params;\n const current = await publicClient.readContract({\n address: token,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [owner, spender],\n });\n\n return { sufficient: current >= amount, current };\n },\n\n buildApproval(params: ApprovalParams): EvmTxStep {\n return {\n type: 'approve',\n address: params.token,\n abi: erc20Abi,\n functionName: 'approve',\n args: [params.spender, params.amount],\n account: params.account,\n };\n },\n};\n", "export const erc4626Abi = [\n {\n type: 'function',\n name: 'deposit',\n inputs: [\n { name: 'assets', type: 'uint256' },\n { name: 'receiver', type: 'address' },\n ],\n outputs: [{ type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'redeem',\n inputs: [\n { name: 'shares', type: 'uint256' },\n { name: 'receiver', type: 'address' },\n { name: 'owner', type: 'address' },\n ],\n outputs: [{ type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'convertToShares',\n inputs: [{ name: 'assets', type: 'uint256' }],\n outputs: [{ type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'convertToAssets',\n inputs: [{ name: 'shares', type: 'uint256' }],\n outputs: [{ type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'balanceOf',\n inputs: [{ name: 'account', type: 'address' }],\n outputs: [{ type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'maxDeposit',\n inputs: [{ name: 'receiver', type: 'address' }],\n outputs: [{ type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'maxRedeem',\n inputs: [{ name: 'owner', type: 'address' }],\n outputs: [{ type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'withdraw',\n inputs: [\n { name: 'assets', type: 'uint256' },\n { name: 'receiver', type: 'address' },\n { name: 'owner', type: 'address' },\n ],\n outputs: [{ type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n] as const;\n", "import type {\n EvmProtocolAdapter,\n EvmTxStep,\n AdapterDepositParams,\n AdapterWithdrawParams,\n AllowanceParams,\n ApprovalParams,\n} from './types';\nimport { erc20Abi } from '../abis/erc20';\nimport { erc4626Abi } from '../abis/erc4626';\nimport { InvalidWithdrawParamsError } from '../../errors';\n\nexport const morphoAdapter: EvmProtocolAdapter = {\n async buildDeposit(params: AdapterDepositParams): Promise<EvmTxStep[]> {\n const { vault, amount, receiver, account } = params;\n\n return [\n {\n type: 'deposit',\n address: vault.vaultAddress,\n abi: erc4626Abi,\n functionName: 'deposit',\n args: [amount, receiver],\n account,\n },\n ];\n },\n\n async buildWithdraw(params: AdapterWithdrawParams): Promise<EvmTxStep[]> {\n const { vault, receiver, account, publicClient } = params;\n\n let shares: bigint;\n\n if ('entireAmount' in params && params.entireAmount) {\n shares = await publicClient.readContract({\n address: vault.vaultAddress,\n abi: erc4626Abi,\n functionName: 'balanceOf',\n args: [account],\n });\n } else if ('amount' in params && params.amount != null) {\n return [\n {\n type: 'withdraw',\n address: vault.vaultAddress,\n abi: erc4626Abi,\n functionName: 'withdraw',\n args: [params.amount, receiver, account],\n account,\n },\n ];\n } else if ('shares' in params && params.shares != null) {\n shares = params.shares;\n } else {\n throw new InvalidWithdrawParamsError();\n }\n\n return [\n {\n type: 'redeem',\n address: vault.vaultAddress,\n abi: erc4626Abi,\n functionName: 'redeem',\n args: [shares, receiver, account],\n account,\n },\n ];\n },\n\n async checkAllowance(params: AllowanceParams) {\n const { publicClient, token, owner, spender, amount } = params;\n const current = await publicClient.readContract({\n address: token,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [owner, spender],\n });\n\n return { sufficient: current >= amount, current };\n },\n\n buildApproval(params: ApprovalParams): EvmTxStep {\n return {\n type: 'approve',\n address: params.token,\n abi: erc20Abi,\n functionName: 'approve',\n args: [params.spender, params.amount],\n account: params.account,\n };\n },\n};\n", "import { aeraAdapter } from './aera';\nimport { morphoAdapter } from './morpho';\nimport { UnsupportedProtocolError } from '../../errors';\nimport type { EvmProtocolAdapter } from './types';\n\nexport function getAdapter(protocol: string): EvmProtocolAdapter {\n switch (protocol) {\n case 'aera':\n return aeraAdapter;\n case 'morpho':\n return morphoAdapter;\n default:\n throw new UnsupportedProtocolError(protocol);\n }\n}\n", "import { Address, encodeFunctionData, type Hex } from 'viem';\nimport { encodeBuilderCode } from './erc8021';\nimport { AttributionMode, GauntletClient } from '../client';\nimport { UnimplementedFeatureError } from '../errors';\nimport { TxStep } from '../evm/adapters/types';\nexport { encodeBuilderCode } from './erc8021';\n\nexport type PreparedPayloadWithAttribution = {\n type: string;\n to: Address;\n data: Hex;\n account?: Address;\n};\n\nexport type PreparedTx = {\n payload: PreparedPayloadWithAttribution;\n tx: TxStep;\n};\n\n/**\n * Build the full attribution suffix to append to transaction calldata.\n *\n * PUBLIC: ERC-8021 builder code only \u2014 `0x{codesLength}{builderCode utf8}{schemaId=0x00}{ercMarker}`, or `0x` if no builderCode.\n * ENCODED: Requests a sourceId from the Gauntlet API with builder code as an arg and encodes that.\n * PRIVATE: Generates a random salt and posts it to the Gauntlet API.\n *\n */\nexport async function buildAttribution(client: GauntletClient): Promise<Hex> {\n switch (client.attributionMode) {\n case AttributionMode.PUBLIC:\n return client.builderCode ? encodeBuilderCode(client.builderCode) : '0x';\n case AttributionMode.ENCODED:\n throw new UnimplementedFeatureError('AttributionMode.ENCODED');\n case AttributionMode.PRIVATE:\n throw new UnimplementedFeatureError('AttributionMode.PRIVATE');\n }\n}\n\nexport async function encodeTransactionWithAttribution(\n client: GauntletClient,\n transaction: TxStep\n): Promise<PreparedTx> {\n const customAttribution = await buildAttribution(client);\n const encodedTx = encodeFunctionData({\n abi: transaction.abi,\n functionName: transaction.functionName,\n args: transaction.args,\n });\n const encodedTxWithAttribution = `${encodedTx}${customAttribution.replace('0x', '')}` as Hex;\n return {\n payload: {\n type: transaction.type,\n account: transaction.account,\n to: transaction.address,\n data: encodedTxWithAttribution,\n },\n tx: {\n ...transaction,\n attribution: customAttribution,\n },\n };\n}\n", "import { toHex, type Hex } from 'viem';\n\n// 16-byte ERC-8021 marker: \"8021\" repeated 8 times\nconst ERC8021_MARKER = '80218021802180218021802180218021' as const;\nconst ERC8021_SCHEMA_ID = '00' as const; // Schema 0: simple ASCII codes\n\n/**\n * Encode an ERC-8021 builder code as a calldata suffix.\n * Format: utf8-encoded builder code + codesLength (1 byte) + schemaId (1 byte) + ERC marker (16 bytes)\n *\n * @see https://eips.ethereum.org/EIPS/eip-8021\n */\nexport function encodeBuilderCode(builderCode: string): Hex {\n const codeHex = toHex(builderCode).slice(2); // UTF-8 hex without 0x prefix\n const codeByteLen = codeHex.length / 2;\n const codeLengthHex = codeByteLen.toString(16).padStart(2, '0');\n return `0x${codeHex}${codeLengthHex}${ERC8021_SCHEMA_ID}${ERC8021_MARKER}` as Hex;\n}\n", "import { UnsupportedDepositModeError } from '../errors';\n\nexport type OperationMode = 'sync' | 'async';\n\nexport interface OperationModeSupport {\n sync: boolean;\n async: boolean;\n}\n\nfunction formatAvailableModes(support: OperationModeSupport): string {\n if (support.async && support.sync) return 'both';\n if (support.async) return 'async';\n if (support.sync) return 'sync';\n return 'none';\n}\n\nexport function parseOperationMode(\n vaultId: string,\n requested: string | undefined\n): OperationMode | undefined {\n if (requested === undefined || requested === 'sync' || requested === 'async') {\n return requested;\n }\n\n throw new UnsupportedDepositModeError(vaultId, requested, 'sync, async');\n}\n\nexport function resolveOperationMode(\n vaultId: string,\n requested: OperationMode | undefined,\n support: OperationModeSupport\n): OperationMode {\n const available = formatAvailableModes(support);\n\n if (requested === 'sync') {\n if (!support.sync) throw new UnsupportedDepositModeError(vaultId, 'sync', available);\n return 'sync';\n }\n\n if (requested === 'async') {\n if (!support.async) throw new UnsupportedDepositModeError(vaultId, 'async', available);\n return 'async';\n }\n\n if (support.async) return 'async';\n if (support.sync) return 'sync';\n\n throw new UnsupportedDepositModeError(vaultId, 'async', available);\n}\n\nexport function resolveSyncOnlyOperationMode(\n vaultId: string,\n requested: OperationMode | undefined\n): OperationMode {\n if (requested === 'async') {\n throw new UnsupportedDepositModeError(vaultId, 'async', 'sync');\n }\n\n return 'sync';\n}\n", "import type { Address } from 'viem';\nimport type { GauntletClient } from '../client';\nimport type { EvmTxStep } from './adapters/types';\nimport { getAdapter } from './adapters';\nimport { encodeTransactionWithAttribution, PreparedTx } from '../attribution';\nimport {\n AccountRequiredError,\n VaultNotFoundError,\n UnsupportedAssetError,\n InvalidSlippageBPSError,\n InvalidSyncDepositBoundError,\n} from '../errors';\nimport {\n resolveAeraRuntimeContracts,\n resolveAeraTokenModeSupport,\n type AeraRuntimeContracts,\n} from './aeraContracts';\nimport { resolveVault } from './vaults';\nimport { DEFAULT_BPS, MAX_BPS } from '../constants';\nimport {\n parseOperationMode,\n resolveOperationMode,\n resolveSyncOnlyOperationMode,\n type OperationMode,\n} from './operationMode';\n\nexport interface EvmDepositParams {\n vaultId: string;\n amount: bigint;\n // Required for multichain vaults, will default to base\n chainId?: number;\n // Required for multiasset vaults, not utilized yet\n assetSymbol?: string;\n /** Request async (queued) or sync deposit. Availability is read from live vault configuration. */\n depositMode?: string;\n // So a developer is able to specify a separate receiver than the tx sender\n receiver?: Address;\n /** Slippage tolerance in basis points (e.g. 100 = 1%). Defaults to 100. */\n slippageBps?: number;\n /** Solver tip passed to async Aera provisioner requests. Defaults to 0. */\n solverTip?: bigint;\n /** Maximum price age passed to async Aera provisioner requests. Defaults to 10 days. */\n maxPriceAge?: bigint;\n /** Caller-reviewed minimum output for an explicit Aera synchronous deposit. */\n minUnitsOut?: bigint;\n}\n\n/**\n * Builds the ordered list of EVM transactions required to deposit into a Gauntlet vault.\n *\n * Returns one or two transactions: an ERC-20 approval (only if the current allowance is\n * insufficient) followed by the deposit or async deposit request. Each transaction is\n * returned as a `PreparedTx` object ready to be signed and sent.\n *\n * @param client - A configured `GauntletClient` instance with an EVM public client and wallet.\n * @param params - Deposit parameters including the vault identifier, token amount, and optional\n * chain, asset symbol, deposit mode (`'sync'` | `'async'`), and receiver address.\n * @returns Ordered array of prepared transactions to execute in sequence.\n *\n * @throws {VaultNotFoundError} If the vault ID is not found in the manifest.\n * @throws {AccountRequiredError} If no wallet account is set on the client.\n * @throws {UnsupportedDepositModeError} If the requested deposit mode is not supported by the vault.\n * @throws {UnsupportedAssetError} If the specified asset symbol is not accepted by the vault.\n *\n * @example\n * ```ts\n * const txs = await getDepositTx(client, {\n * vaultId: 'baseUsdcPrime',\n * amount: 100_000_000n, // 100 USDC (6 decimals)\n * });\n * for (const tx of txs) {\n * await walletClient.sendTransaction(tx.tx);\n * }\n * ```\n */\nexport async function getDepositTx(\n client: GauntletClient,\n params: EvmDepositParams\n): Promise<PreparedTx[]> {\n const slippageBps = params.slippageBps ?? DEFAULT_BPS;\n if (!Number.isInteger(slippageBps) || slippageBps < 0 || slippageBps > Number(MAX_BPS)) {\n throw new InvalidSlippageBPSError(slippageBps);\n }\n if (\n params.minUnitsOut !== undefined &&\n (typeof params.minUnitsOut !== 'bigint' || params.minUnitsOut <= 0n)\n ) {\n throw new InvalidSyncDepositBoundError();\n }\n\n const resolved = await resolveVault(client, params.vaultId, params.chainId);\n if (!resolved) throw new VaultNotFoundError(params.vaultId);\n\n const chainId = params.chainId ?? resolved.vault.chainId;\n\n const account = client.wallet?.account?.address;\n if (!account) throw new AccountRequiredError();\n\n const { vault, protocol } = resolved;\n\n const adapter = getAdapter(protocol);\n const publicClient = client.getPublicClient(chainId);\n const token =\n vault.supplyToken.length > 1\n ? vault.supplyToken.find((tInfo) => tInfo.symbol === params.assetSymbol)\n : vault.supplyToken[0];\n\n if (token === undefined) {\n throw new UnsupportedAssetError(params.assetSymbol ?? 'unknown', params.vaultId);\n }\n\n const requestedDepositMode = parseOperationMode(params.vaultId, params.depositMode);\n if (\n params.minUnitsOut !== undefined &&\n (protocol !== 'aera' || requestedDepositMode !== 'sync')\n ) {\n throw new InvalidSyncDepositBoundError();\n }\n let modifiedDepositMode: OperationMode;\n let aeraRuntime: AeraRuntimeContracts | undefined;\n\n if (protocol === 'aera') {\n aeraRuntime = await resolveAeraRuntimeContracts(publicClient, vault);\n const tokenModeSupport = await resolveAeraTokenModeSupport(\n publicClient,\n aeraRuntime,\n token.address,\n { includeSyncModes: requestedDepositMode !== 'async' }\n );\n modifiedDepositMode = resolveOperationMode(params.vaultId, requestedDepositMode, {\n async: tokenModeSupport.asyncDeposit,\n sync: tokenModeSupport.syncDeposit,\n });\n } else {\n modifiedDepositMode = resolveSyncOnlyOperationMode(params.vaultId, requestedDepositMode);\n }\n\n const spender =\n protocol === 'aera' && modifiedDepositMode === 'async'\n ? aeraRuntime!.provisioner.address\n : vault.vaultAddress;\n\n // NOTE: this could be moved to the buildDeposit level\n const { sufficient } = await adapter.checkAllowance({\n publicClient,\n token: token.address,\n owner: account,\n spender,\n amount: params.amount,\n });\n\n const steps: EvmTxStep[] = [];\n\n if (!sufficient) {\n steps.push(\n adapter.buildApproval({\n token: token.address,\n spender,\n amount: params.amount,\n account,\n })\n );\n }\n\n const depositSteps = await adapter.buildDeposit({\n vault,\n amount: params.amount,\n receiver: params.receiver ?? account,\n account,\n async: modifiedDepositMode === 'async',\n asset: token,\n publicClient,\n slippageBps,\n solverTip: params.solverTip,\n maxPriceAge: params.maxPriceAge,\n aeraRuntime,\n minUnitsOut: params.minUnitsOut,\n });\n steps.push(...depositSteps);\n\n return Promise.all(steps.map((step) => encodeTransactionWithAttribution(client, step)));\n}\n", "import type { Address } from 'viem';\nimport type { GauntletClient } from '../client';\nimport type { PreparedTx } from '../attribution';\nimport { encodeTransactionWithAttribution } from '../attribution';\nimport { AccountRequiredError, UnsupportedFeatureError, VaultNotFoundError } from '../errors';\nimport { resolveAeraRuntimeContracts } from './aeraContracts';\nimport * as provisionerV2 from './aeraContracts/v2';\nimport { ContractVersion } from './types';\nimport { resolveVault } from './vaults';\n\nexport interface EvmDepositReceiverApprovalParams {\n vaultId: string;\n depositor: Address;\n approved?: boolean;\n chainId?: number;\n}\n\n/**\n * Builds the V2 receiver-side approval transaction required before a depositor\n * can make sync deposits to a separate receiver.\n *\n * The wallet account on the client is the receiver and must sign this transaction.\n */\nexport async function getDepositReceiverApprovalTx(\n client: GauntletClient,\n params: EvmDepositReceiverApprovalParams\n): Promise<PreparedTx> {\n const resolved = await resolveVault(client, params.vaultId, params.chainId);\n if (!resolved) throw new VaultNotFoundError(params.vaultId);\n\n const chainId = params.chainId ?? resolved.vault.chainId;\n const receiver = client.wallet?.account?.address;\n if (!receiver) throw new AccountRequiredError();\n\n const { vault } = resolved;\n const publicClient = client.getPublicClient(chainId);\n const runtime = await resolveAeraRuntimeContracts(publicClient, vault);\n if (runtime.provisioner.version !== ContractVersion.V2) {\n throw new UnsupportedFeatureError('Aera: deposit receiver approval on V1');\n }\n\n return encodeTransactionWithAttribution(client, {\n type: 'setDepositReceiverApproval',\n ...provisionerV2.setDepositReceiverApprovalTxRequest(\n runtime.provisioner.address,\n params.depositor,\n params.approved ?? true,\n receiver\n ),\n });\n}\n", "import type { GauntletClient } from '../client';\nimport { DEFAULT_BPS, MAX_BPS } from '../constants';\nimport {\n InvalidSlippageBPSError,\n InvalidSyncDepositBoundError,\n UnsupportedAssetError,\n UnsupportedFeatureError,\n VaultNotFoundError,\n} from '../errors';\nimport {\n applySlippageDown,\n resolveAeraRuntimeContracts,\n resolveAeraTokenModeSupport,\n} from './aeraContracts';\nimport { getSyncDepositFeeBps, getSyncDepositQuoteValues } from './aeraContracts/v2';\nimport { resolveOperationMode } from './operationMode';\nimport { ContractVersion } from './types';\nimport { resolveVault } from './vaults';\n\nexport type SyncDepositQuote = Readonly<{\n unitsOut: bigint;\n minUnitsOut: bigint;\n /** Deposit amount converted to the vault's numeraire, after the Instant Supply fee. */\n numeraireOut: bigint;\n /** Instant Supply fee applied to the deposited token amount, in basis points. */\n feeBps: bigint;\n /** Slippage tolerance used to derive `minUnitsOut`, in basis points. */\n slippageBps: number;\n}>;\n\nexport type SyncDepositQuoteParams = {\n vaultId: string;\n chainId?: number;\n assetSymbol?: string;\n amount: bigint;\n slippageBps?: number;\n};\n\nexport type SyncDepositRateParams = {\n vaultId: string;\n chainId?: number;\n assetSymbol?: string;\n};\n\nexport type SyncDepositRate = Readonly<{\n /** Instant Supply fee, in basis points. Independent of the deposit amount. */\n feeBps: bigint;\n}>;\n\nasync function resolveSyncDepositContext(\n client: GauntletClient,\n params: SyncDepositRateParams,\n readKind: 'quote' | 'rate'\n) {\n const resolved = await resolveVault(client, params.vaultId, params.chainId);\n if (!resolved) throw new VaultNotFoundError(params.vaultId, params.chainId);\n if (resolved.protocol !== 'aera') {\n throw new UnsupportedFeatureError(\n readKind === 'quote'\n ? 'Sync deposit quote is only available for Aera vaults'\n : 'Sync deposit rate is only available for Aera vaults'\n );\n }\n\n const { vault } = resolved;\n const token =\n vault.supplyToken.length > 1\n ? vault.supplyToken.find(({ symbol }) => symbol === params.assetSymbol)\n : vault.supplyToken[0];\n if (!token) throw new UnsupportedAssetError(params.assetSymbol ?? 'unknown', params.vaultId);\n\n const publicClient = client.getPublicClient(params.chainId ?? vault.chainId);\n const runtime = await resolveAeraRuntimeContracts(publicClient, vault);\n if (runtime.provisioner.version !== ContractVersion.V2) {\n throw new UnsupportedFeatureError(\n readKind === 'quote'\n ? 'Sync deposit quote requires an Aera V2 provisioner'\n : 'Sync deposit rate requires an Aera V2 provisioner'\n );\n }\n\n const tokenModeSupport = await resolveAeraTokenModeSupport(publicClient, runtime, token.address, {\n includeSyncModes: true,\n });\n resolveOperationMode(params.vaultId, 'sync', {\n async: tokenModeSupport.asyncDeposit,\n sync: tokenModeSupport.syncDeposit,\n });\n\n return { publicClient, vault, token, runtime };\n}\n\n/** Quotes an Aera synchronous deposit and its execution bounds. */\nexport async function getSyncDepositQuote(\n client: GauntletClient,\n params: SyncDepositQuoteParams\n): Promise<SyncDepositQuote> {\n const slippageBps = params.slippageBps ?? DEFAULT_BPS;\n if (!Number.isInteger(slippageBps) || slippageBps < 0 || slippageBps > Number(MAX_BPS)) {\n throw new InvalidSlippageBPSError(slippageBps);\n }\n\n const { publicClient, vault, token, runtime } = await resolveSyncDepositContext(\n client,\n params,\n 'quote'\n );\n\n const { unitsOut, feeBps, numeraireOut } = await getSyncDepositQuoteValues(\n publicClient,\n runtime.provisioner.address,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n vault.vaultAddress,\n token.address,\n params.amount\n );\n const minUnitsOut = applySlippageDown(unitsOut, slippageBps);\n if (minUnitsOut <= 0n) throw new InvalidSyncDepositBoundError();\n\n return { unitsOut, minUnitsOut, numeraireOut, feeBps, slippageBps };\n}\n\n/** Reads the live Instant Supply fee for a vault token, without requiring a deposit amount. */\nexport async function getSyncDepositRate(\n client: GauntletClient,\n params: SyncDepositRateParams\n): Promise<SyncDepositRate> {\n const { publicClient, runtime, token } = await resolveSyncDepositContext(client, params, 'rate');\n\n const feeBps = await getSyncDepositFeeBps(\n publicClient,\n runtime.provisioner.address,\n token.address\n );\n return { feeBps };\n}\n", "import type { Address } from 'viem';\nimport type { GauntletClient } from '../client';\nimport type { AdapterWithdrawParams } from './adapters/types';\nimport type { SyncWithdrawQuoteBounds } from './withdrawQuote';\nimport { getAdapter } from './adapters';\nimport { encodeTransactionWithAttribution, PreparedTx } from '../attribution';\nimport {\n AccountMismatchError,\n AccountRequiredError,\n VaultNotFoundError,\n UnsupportedAssetError,\n InvalidSlippageBPSError,\n InvalidWithdrawParamsError,\n} from '../errors';\nimport {\n requireAeraSyncRedeemRuntime,\n resolveAeraRuntimeContracts,\n resolveAeraTokenModeSupport,\n type AeraRuntimeContracts,\n} from './aeraContracts';\nimport { resolveVault } from './vaults';\nimport { DEFAULT_BPS, MAX_BPS } from '../constants';\nimport {\n parseOperationMode,\n resolveOperationMode,\n resolveSyncOnlyOperationMode,\n type OperationMode,\n} from './operationMode';\nimport { ContractVersion } from './types';\n\nexport type EvmWithdrawParams = {\n vaultId: string;\n // Required for multichain vaults, will default to base\n chainId?: number;\n // Required for multiasset vaults, not utilized yet\n assetSymbol?: string;\n /** Request async (queued) or sync withdraw. Availability is read from live vault configuration. */\n depositMode?: string;\n // So a developer is able to specify a separate receiver than the tx sender\n receiver?: Address;\n /** Slippage tolerance in basis points (e.g. 100 = 1%). Defaults to 100. */\n slippageBps?: number;\n /** Solver tip passed to async Aera provisioner requests. Defaults to 0. */\n solverTip?: bigint;\n /** Maximum price age passed to async Aera provisioner requests. Defaults to 10 days. */\n maxPriceAge?: bigint;\n /**\n * Current sync quote bounds to pin instant withdraw transaction construction.\n * Supplying bounds implies `depositMode: 'sync'`; explicit async requests are rejected.\n */\n syncWithdrawQuote?: SyncWithdrawQuoteBounds;\n} & (\n | { shares: bigint; amount?: never; entireAmount?: never }\n | { amount: bigint; shares?: never; entireAmount?: never }\n | { account?: Address; entireAmount: true; shares?: never; amount?: never }\n);\n\nfunction validateWithdrawParams(params: EvmWithdrawParams) {\n const modes = [\n 'amount' in params && params.amount != null,\n 'shares' in params && params.shares != null,\n 'entireAmount' in params && params.entireAmount === true,\n ].filter(Boolean).length;\n\n if (modes !== 1) throw new InvalidWithdrawParamsError();\n}\n\nfunction sameAddress(left: Address, right: Address): boolean {\n return left.toLowerCase() === right.toLowerCase();\n}\n\nfunction validateSyncWithdrawQuote({\n params,\n account,\n chainId,\n slippageBps,\n tokenAddress,\n}: {\n params: EvmWithdrawParams;\n account: Address;\n chainId: number;\n slippageBps: number;\n tokenAddress: Address;\n}) {\n const quote = params.syncWithdrawQuote;\n if (quote === undefined) return;\n\n const { context } = quote;\n if (\n context.vaultId !== params.vaultId ||\n context.chainId !== chainId ||\n !sameAddress(context.tokenAddress, tokenAddress) ||\n context.slippageBps !== slippageBps\n ) {\n throw new InvalidWithdrawParamsError();\n }\n\n if (context.account !== undefined && !sameAddress(context.account, account)) {\n throw new InvalidWithdrawParamsError();\n }\n\n switch (context.request.mode) {\n case 'amount':\n if (\n quote.kind !== 'withdraw' ||\n !('amount' in params && params.amount != null) ||\n context.request.amount !== params.amount ||\n quote.tokensOut !== params.amount\n ) {\n throw new InvalidWithdrawParamsError();\n }\n return;\n case 'shares':\n if (\n quote.kind !== 'redeem' ||\n !('shares' in params && params.shares != null) ||\n context.request.shares !== params.shares ||\n quote.shares !== params.shares\n ) {\n throw new InvalidWithdrawParamsError();\n }\n return;\n case 'entireAmount':\n if (\n quote.kind !== 'redeem' ||\n !('entireAmount' in params && params.entireAmount) ||\n !sameAddress(context.request.account, account)\n ) {\n throw new InvalidWithdrawParamsError();\n }\n return;\n }\n}\n\n/**\n * Builds the ordered list of EVM transactions required to withdraw from a Gauntlet vault.\n *\n * Specify the withdrawal amount as one of: `shares` (vault units), `amount` (underlying\n * token amount), or `entireAmount: true` (full balance). Returns an ERC-20 approval\n * (only when needed for async redeem) followed by the withdraw or async redeem request,\n * each returned as a `PreparedTx` ready to be signed and sent.\n *\n * @param client - A configured `GauntletClient` instance with an EVM public client and wallet.\n * @param params - Withdrawal parameters including the vault identifier and exactly one of\n * `shares`, `amount`, or `entireAmount`, plus optional chain, asset symbol, deposit mode,\n * and receiver address.\n * @returns Ordered array of prepared transactions to execute in sequence.\n *\n * @throws {VaultNotFoundError} If the vault ID is not found in the manifest.\n * @throws {AccountRequiredError} If no wallet account is set on the client.\n * @throws {UnsupportedDepositModeError} If the requested withdrawal mode is not supported.\n * @throws {UnsupportedAssetError} If the specified asset symbol is not accepted by the vault.\n *\n * @example\n * ```ts\n * // Withdraw by token amount\n * const txs = await getWithdrawTx(client, {\n * vaultId: 'baseUsdcPrime',\n * amount: 50_000_000n, // 50 USDC (6 decimals)\n * });\n *\n * // Withdraw entire balance\n * const txs = await getWithdrawTx(client, {\n * vaultId: 'baseUsdcPrime',\n * entireAmount: true,\n * account: walletAddress,\n * });\n * ```\n */\nexport async function getWithdrawTx(\n client: GauntletClient,\n params: EvmWithdrawParams\n): Promise<PreparedTx[]> {\n validateWithdrawParams(params);\n\n if (\n params.slippageBps !== undefined &&\n (!Number.isInteger(params.slippageBps) ||\n params.slippageBps < 0 ||\n params.slippageBps > Number(MAX_BPS))\n ) {\n throw new InvalidSlippageBPSError(params.slippageBps);\n }\n\n const resolved = await resolveVault(client, params.vaultId, params.chainId);\n if (!resolved) throw new VaultNotFoundError(params.vaultId);\n\n const chainId = params.chainId ?? resolved.vault.chainId;\n\n const account = client.wallet?.account?.address;\n if (!account) throw new AccountRequiredError();\n if ('entireAmount' in params && params.entireAmount && params.account !== undefined) {\n if (!sameAddress(params.account, account)) {\n throw new AccountMismatchError(account, params.account);\n }\n }\n\n const { vault, protocol } = resolved;\n\n const token =\n vault.supplyToken.length > 1\n ? vault.supplyToken.find((tInfo) => tInfo.symbol === params.assetSymbol)\n : vault.supplyToken[0];\n\n if (token === undefined) {\n throw new UnsupportedAssetError(params.assetSymbol ?? 'unknown', params.vaultId);\n }\n\n const adapter = getAdapter(protocol);\n const publicClient = client.getPublicClient(chainId);\n const requestedWithdrawMode = parseOperationMode(params.vaultId, params.depositMode);\n const slippageBps =\n params.slippageBps ?? params.syncWithdrawQuote?.context.slippageBps ?? DEFAULT_BPS;\n let modifiedDepositMode: OperationMode;\n let aeraRuntime: AeraRuntimeContracts | undefined;\n\n if (params.syncWithdrawQuote !== undefined) {\n if (protocol !== 'aera' || requestedWithdrawMode === 'async') {\n throw new InvalidWithdrawParamsError();\n }\n\n validateSyncWithdrawQuote({\n params,\n account,\n chainId,\n slippageBps,\n tokenAddress: token.address,\n });\n }\n\n if (protocol === 'aera') {\n aeraRuntime = await resolveAeraRuntimeContracts(publicClient, vault);\n if (\n aeraRuntime.provisioner.version === ContractVersion.V2 &&\n (requestedWithdrawMode === 'sync' || params.syncWithdrawQuote !== undefined)\n ) {\n requireAeraSyncRedeemRuntime(aeraRuntime);\n }\n const tokenModeSupport = await resolveAeraTokenModeSupport(\n publicClient,\n aeraRuntime,\n token.address,\n { includeSyncModes: requestedWithdrawMode !== 'async' }\n );\n modifiedDepositMode = resolveOperationMode(\n params.vaultId,\n params.syncWithdrawQuote !== undefined ? 'sync' : requestedWithdrawMode,\n {\n async: tokenModeSupport.asyncRedeem,\n sync: tokenModeSupport.syncRedeem,\n }\n );\n if (modifiedDepositMode === 'sync') requireAeraSyncRedeemRuntime(aeraRuntime);\n } else {\n modifiedDepositMode = resolveSyncOnlyOperationMode(params.vaultId, requestedWithdrawMode);\n }\n\n const withdrawParams = {\n vault,\n receiver: params.receiver ?? account,\n account,\n async: modifiedDepositMode === 'async',\n asset: token,\n publicClient,\n slippageBps,\n solverTip: params.solverTip,\n maxPriceAge: params.maxPriceAge,\n aeraRuntime,\n syncWithdrawQuote: params.syncWithdrawQuote,\n ...('shares' in params && params.shares != null ? { shares: params.shares } : {}),\n ...('amount' in params && params.amount != null ? { amount: params.amount } : {}),\n ...('entireAmount' in params && params.entireAmount ? { entireAmount: true as const } : {}),\n };\n\n const steps = await adapter.buildWithdraw(withdrawParams as AdapterWithdrawParams);\n\n return await Promise.all(steps.map((step) => encodeTransactionWithAttribution(client, step)));\n}\n", "import type { Address } from 'viem';\nimport type { GauntletClient } from '../client';\nimport {\n AccountRequiredError,\n InvalidSlippageBPSError,\n InvalidWithdrawParamsError,\n requireNonZeroSyncWithdrawBound,\n UnsupportedAssetError,\n UnsupportedFeatureError,\n VaultNotFoundError,\n} from '../errors';\nimport { DEFAULT_BPS, MAX_BPS } from '../constants';\nimport { resolveVault } from './vaults';\nimport {\n applySlippageDown,\n applySlippageUp,\n requireAeraSyncRedeemRuntime,\n resolveAeraRuntimeContracts,\n resolveAeraTokenModeSupport,\n} from './aeraContracts';\nimport { multiDepositorVaultAbi } from './abis/multiDepositorVault';\nimport {\n convertNumeraireToToken,\n convertTokenToNumeraire,\n} from './aeraContracts/priceAndFeeCalculator';\nimport {\n getKnownSyncRedeemLiquidityTokens,\n getSyncRedeemEpochState,\n getSyncRedeemRate,\n getSyncRedeemRateContext,\n getSyncRedeemTokenOut,\n getSyncWithdrawUnitsIn,\n getUserUnitsRefundableUntil,\n type SyncRedeemRate,\n} from './aeraContracts/v2';\nimport { resolveOperationMode } from './operationMode';\n\n/** Epoch-cap accounting plus any liquid-token balance known to the caller. */\nexport interface SyncWithdrawCapacity {\n /** Effective epoch cap (min of relative and absolute), in numeraire. */\n epochCapNumeraire: bigint;\n /** Numeraire already redeemed globally in the current epoch. */\n epochRedeemedNumeraire: bigint;\n /** Remaining global sync redeem capacity this epoch, in numeraire. */\n remainingNumeraire: bigint;\n /** Remaining capacity expressed in the withdraw token. */\n remainingTokens: bigint;\n /** Vault token balance when no pull-funds calldata is configured; otherwise unknown. */\n knownLiquidityTokens?: bigint;\n /** This redemption's size in numeraire (matches the on-chain epoch accounting). */\n requestNumeraire: bigint;\n /** True when this redemption alone exceeds remaining epoch capacity (the tx would revert). */\n exceedsCapacity: boolean;\n}\n\nexport type SyncWithdrawQuoteRequest =\n | { mode: 'amount'; amount: bigint }\n | { mode: 'shares'; shares: bigint }\n | { mode: 'entireAmount'; account: Address };\n\nexport interface SyncWithdrawQuoteContext {\n vaultId: string;\n chainId: number;\n tokenAddress: Address;\n /** Account used for balance and lock reads when the quote is account-scoped. */\n account?: Address;\n /** Slippage tolerance used to derive `minTokensOut` or `maxUnitsIn`. */\n slippageBps: number;\n /** Block snapshot used for all quote reads. */\n blockNumber: bigint;\n /** Exact sizing request that produced this quote. */\n request: SyncWithdrawQuoteRequest;\n}\n\ninterface SyncWithdrawQuoteDetails {\n /** Vault units (shares) burned: exact for `'redeem'`, estimated for `'withdraw'`. */\n shares: bigint;\n /** Upper bound on shares burned after slippage (equals `shares` for `'redeem'`). */\n maxUnitsIn: bigint;\n /** Tokens received: exact (requested) for `'withdraw'`, estimated for `'redeem'`. */\n tokensOut: bigint;\n /** Lower bound on tokens received after slippage (equals `tokensOut` for `'withdraw'`). */\n minTokensOut: bigint;\n /** Largest exact-token withdrawal that fits `shares`; only set for `'redeem'` quotes. */\n shareSafeTokensOut?: bigint;\n /** Live multiplier breakdown (base, dynamic premium, effective), in bps. */\n rate: SyncRedeemRate;\n capacity: SyncWithdrawCapacity;\n /** Timestamp until which the account's units are locked; undefined when no account was quoted. */\n unitsLockedUntil?: bigint;\n /** Context that must match any transaction build using these quote bounds. */\n context: SyncWithdrawQuoteContext;\n}\n\n/** Bounds consumed by one of the two on-chain sync withdraw entry points. */\nexport type SyncWithdrawQuoteBounds =\n | {\n kind: 'redeem';\n shares: bigint;\n minTokensOut: bigint;\n context: SyncWithdrawQuoteContext;\n }\n | {\n kind: 'withdraw';\n tokensOut: bigint;\n maxUnitsIn: bigint;\n context: SyncWithdrawQuoteContext;\n };\n\n/**\n * A live quote for an instant (sync) withdraw.\n *\n * `kind` distinguishes the two on-chain entry points:\n * - `'redeem'`: exact shares burned, estimated tokens out (used for by-shares / entire-balance exits)\n * - `'withdraw'`: exact tokens out, estimated shares burned (used for by-token-amount exits)\n */\nexport type SyncWithdrawQuote =\n | (SyncWithdrawQuoteDetails & { kind: 'redeem' })\n | (SyncWithdrawQuoteDetails & { kind: 'withdraw' });\n\nexport type SyncWithdrawRateParams = {\n vaultId: string;\n /** EVM chain ID. Defaults to the vault's primary chain (Base for current multichain vaults). */\n chainId?: number;\n /** Required for multiasset vaults. */\n assetSymbol?: string;\n};\n\ntype SyncWithdrawQuoteBaseParams = SyncWithdrawRateParams & {\n /** Optional for explicit amount/shares quotes; required for full-position quotes. */\n account?: Address;\n /**\n * Slippage tolerance in basis points (e.g. 100 = 1%). Defaults to 100.\n * A value of 10000 is invalid for share-sized quotes because it makes `minTokensOut` zero.\n */\n slippageBps?: number;\n};\n\nexport type SyncWithdrawQuoteParams =\n | (SyncWithdrawQuoteBaseParams & { shares: bigint; amount?: never; entireAmount?: never })\n | (SyncWithdrawQuoteBaseParams & { amount: bigint; shares?: never; entireAmount?: never })\n | (SyncWithdrawQuoteBaseParams & {\n account: Address;\n entireAmount: true;\n shares?: never;\n amount?: never;\n });\n\nfunction validateSyncWithdrawQuoteParams(params: SyncWithdrawQuoteParams) {\n const modes = [\n 'amount' in params && params.amount != null,\n 'shares' in params && params.shares != null,\n 'entireAmount' in params && params.entireAmount === true,\n ].filter(Boolean).length;\n\n if (modes !== 1) throw new InvalidWithdrawParamsError();\n if ('entireAmount' in params && params.entireAmount === true && !params.account) {\n throw new AccountRequiredError();\n }\n}\n\nasync function resolveSyncWithdrawContext(\n client: GauntletClient,\n params: SyncWithdrawRateParams,\n readKind: 'quote' | 'rate'\n) {\n const resolved = await resolveVault(client, params.vaultId, params.chainId);\n if (!resolved) throw new VaultNotFoundError(params.vaultId);\n\n const { vault, protocol } = resolved;\n if (protocol !== 'aera') {\n throw new UnsupportedFeatureError(\n readKind === 'quote'\n ? 'Sync withdraw quote is only available for Aera vaults'\n : 'Sync withdraw rate is only available for Aera vaults'\n );\n }\n\n const chainId = params.chainId ?? vault.chainId;\n const publicClient = client.getPublicClient(chainId);\n const token =\n vault.supplyToken.length > 1\n ? vault.supplyToken.find((tInfo) => tInfo.symbol === params.assetSymbol)\n : vault.supplyToken[0];\n if (token === undefined) {\n throw new UnsupportedAssetError(params.assetSymbol ?? 'unknown', params.vaultId);\n }\n\n const quoteBlock = await publicClient.getBlock();\n if (quoteBlock.number === null) {\n throw new UnsupportedFeatureError(\n readKind === 'quote'\n ? 'Aera: sync withdraw quote requires a numbered block'\n : 'Aera: sync withdraw rate requires a numbered block'\n );\n }\n const readContext = {\n blockNumber: quoteBlock.number,\n blockTimestamp: BigInt(quoteBlock.timestamp),\n };\n\n const runtime = await resolveAeraRuntimeContracts(publicClient, vault, readContext);\n requireAeraSyncRedeemRuntime(runtime);\n\n const support = await resolveAeraTokenModeSupport(\n publicClient,\n runtime,\n token.address,\n readContext\n );\n resolveOperationMode(params.vaultId, 'sync', {\n async: support.asyncRedeem,\n sync: support.syncRedeem,\n });\n\n return { publicClient, vault, token, runtime, chainId, readContext };\n}\n\n/** Reads the live instant-withdraw fee rate without requiring a withdrawal amount or account. */\nexport async function getSyncWithdrawRate(\n client: GauntletClient,\n params: SyncWithdrawRateParams\n): Promise<SyncRedeemRate> {\n const { publicClient, vault, token, runtime, readContext } = await resolveSyncWithdrawContext(\n client,\n params,\n 'rate'\n );\n\n return getSyncRedeemRate(\n publicClient,\n runtime.provisioner.address,\n vault.vaultAddress,\n token.address,\n runtime.feeCalculator.address,\n readContext\n );\n}\n\n/**\n * Builds a live quote for an instant (sync) withdraw without sending a transaction.\n *\n * Surfaces everything the on-chain `redeem`/`withdraw` would apply or check but that a plain\n * transaction build does not pre-validate: the effective rate (including the price-age dynamic\n * premium), slippage bounds, the global per-epoch redeem capacity, any known vault-balance limit,\n * and whether the caller's units are still locked from a recent sync deposit.\n *\n * @throws {VaultNotFoundError} If the vault ID is not found.\n * @throws {UnsupportedAssetError} If the asset symbol is not accepted by the vault.\n * @throws {UnsupportedFeatureError} If the vault is not an Aera V2 deployment.\n * @throws {UnsupportedDepositModeError} If sync redeem is not enabled for the token.\n * @throws {StalePriceError} If the oracle price is too stale for an instant redeem.\n */\nexport async function getSyncWithdrawQuote(\n client: GauntletClient,\n params: SyncWithdrawQuoteParams\n): Promise<SyncWithdrawQuote> {\n validateSyncWithdrawQuoteParams(params);\n\n if (\n params.slippageBps !== undefined &&\n (!Number.isInteger(params.slippageBps) ||\n params.slippageBps < 0 ||\n params.slippageBps > Number(MAX_BPS))\n ) {\n throw new InvalidSlippageBPSError(params.slippageBps);\n }\n const slippageBps = params.slippageBps ?? DEFAULT_BPS;\n\n const {\n publicClient,\n vault,\n token,\n runtime,\n chainId,\n readContext: quoteReadContext,\n } = await resolveSyncWithdrawContext(client, params, 'quote');\n\n const provisioner = runtime.provisioner.address;\n const feeCalculator = runtime.feeCalculator.address;\n const feeVersion = runtime.feeCalculator.version;\n const vaultAddress = vault.vaultAddress;\n\n const { rate, hasPullFundsSubmitData } = await getSyncRedeemRateContext(\n publicClient,\n provisioner,\n vaultAddress,\n token.address,\n feeCalculator,\n quoteReadContext\n );\n\n let kind: SyncWithdrawQuote['kind'];\n let shares: bigint;\n let tokensOut: bigint;\n let minTokensOut: bigint;\n let maxUnitsIn: bigint;\n let request: SyncWithdrawQuoteRequest;\n let shareSafeTokensOut: bigint | undefined;\n\n if ('amount' in params && params.amount != null) {\n // Exact token out: shares burned is the estimate, bounded above by slippage.\n kind = 'withdraw';\n request = { mode: 'amount', amount: params.amount };\n tokensOut = params.amount;\n requireNonZeroSyncWithdrawBound(tokensOut, 'tokensOut');\n minTokensOut = params.amount;\n shares = await getSyncWithdrawUnitsIn(\n publicClient,\n provisioner,\n feeCalculator,\n feeVersion,\n vaultAddress,\n token.address,\n params.amount,\n rate.effectiveMultiplierBps,\n quoteReadContext\n );\n maxUnitsIn = applySlippageUp(shares, slippageBps);\n requireNonZeroSyncWithdrawBound(maxUnitsIn, 'maxUnitsIn');\n } else {\n // Exact shares in: tokens out is the estimate, bounded below by slippage.\n kind = 'redeem';\n if ('entireAmount' in params && params.entireAmount) {\n if (!params.account) throw new AccountRequiredError();\n request = { mode: 'entireAmount', account: params.account };\n shares = await publicClient.readContract({\n address: vaultAddress,\n abi: multiDepositorVaultAbi,\n functionName: 'balanceOf',\n args: [params.account],\n blockNumber: quoteReadContext.blockNumber,\n });\n } else if ('shares' in params && params.shares != null) {\n request = { mode: 'shares', shares: params.shares };\n shares = params.shares;\n } else {\n throw new InvalidWithdrawParamsError();\n }\n requireNonZeroSyncWithdrawBound(shares, 'unitsIn');\n const getTokensOut = (unitsIn: bigint) =>\n getSyncRedeemTokenOut(\n publicClient,\n provisioner,\n feeCalculator,\n feeVersion,\n vaultAddress,\n token.address,\n unitsIn,\n rate.effectiveMultiplierBps,\n quoteReadContext\n );\n // A capacity-limited Max is submitted as an exact-token withdraw. Reserve slippage headroom so\n // its maximum share cost cannot exceed the user's share balance.\n const shareSafeUnitsIn = (shares * MAX_BPS) / (MAX_BPS + BigInt(slippageBps));\n const tokensOutPromise = getTokensOut(shares);\n const shareSafeTokensOutPromise =\n shareSafeUnitsIn === shares ? tokensOutPromise : getTokensOut(shareSafeUnitsIn);\n [tokensOut, shareSafeTokensOut] = await Promise.all([\n tokensOutPromise,\n shareSafeTokensOutPromise,\n ]);\n minTokensOut = applySlippageDown(tokensOut, slippageBps);\n requireNonZeroSyncWithdrawBound(minTokensOut, 'minTokensOut');\n maxUnitsIn = shares;\n }\n\n const [epoch, requestNumeraire, unitsLockedUntil, knownLiquidityTokens] = await Promise.all([\n getSyncRedeemEpochState(publicClient, provisioner, quoteReadContext),\n convertTokenToNumeraire(\n publicClient,\n feeCalculator,\n feeVersion,\n vaultAddress,\n token.address,\n tokensOut,\n quoteReadContext\n ),\n params.account\n ? getUserUnitsRefundableUntil(publicClient, provisioner, params.account, quoteReadContext)\n : Promise.resolve(undefined),\n getKnownSyncRedeemLiquidityTokens(\n publicClient,\n vaultAddress,\n token.address,\n hasPullFundsSubmitData,\n quoteReadContext\n ),\n ]);\n\n const remainingNumeraire =\n epoch.epochCapNumeraire > epoch.epochRedeemedNumeraire\n ? epoch.epochCapNumeraire - epoch.epochRedeemedNumeraire\n : 0n;\n const remainingTokens = await convertNumeraireToToken(\n publicClient,\n feeCalculator,\n feeVersion,\n vaultAddress,\n token.address,\n remainingNumeraire,\n quoteReadContext\n );\n const quoteDetails: SyncWithdrawQuoteDetails = {\n shares,\n maxUnitsIn,\n tokensOut,\n minTokensOut,\n shareSafeTokensOut,\n rate,\n capacity: {\n epochCapNumeraire: epoch.epochCapNumeraire,\n epochRedeemedNumeraire: epoch.epochRedeemedNumeraire,\n remainingNumeraire,\n remainingTokens,\n knownLiquidityTokens,\n requestNumeraire,\n exceedsCapacity: requestNumeraire > remainingNumeraire,\n },\n unitsLockedUntil,\n context: {\n vaultId: params.vaultId,\n chainId,\n tokenAddress: token.address,\n ...(params.account ? { account: params.account } : {}),\n slippageBps,\n blockNumber: quoteReadContext.blockNumber,\n request,\n },\n };\n\n if (kind === 'redeem') return { kind, ...quoteDetails };\n return { kind, ...quoteDetails };\n}\n", "import type { GauntletClient } from '../client';\nimport { UnsupportedAssetError, UnsupportedFeatureError, VaultNotFoundError } from '../errors';\nimport { resolveVault } from './vaults';\nimport {\n resolveAeraRuntimeContracts,\n resolveAeraTokenModeSupport,\n type AeraTokenModeSupport,\n} from './aeraContracts';\n\nexport interface AeraTokenModeSupportParams {\n vaultId: string;\n /** EVM chain ID. Defaults to the vault's primary chain (Base for current multichain vaults). */\n chainId?: number;\n /** Required for multiasset vaults. */\n assetSymbol?: string;\n}\n\n/**\n * Reads which deposit/redeem modes (sync vs async) are currently enabled on-chain for a vault token.\n *\n * Use this to decide which entry points to offer a user (e.g. whether an instant withdraw is\n * available) before any amount is entered. Mode availability includes the provisioner's token\n * settings and live runtime gates. A paused V2 solving gate disables both sync modes.\n *\n * @throws {VaultNotFoundError} If the vault ID is not found.\n * @throws {UnsupportedFeatureError} If the vault is not an Aera deployment.\n * @throws {UnsupportedAssetError} If the asset symbol is not accepted by the vault.\n */\nexport async function getAeraTokenModeSupport(\n client: GauntletClient,\n params: AeraTokenModeSupportParams\n): Promise<AeraTokenModeSupport> {\n const resolved = await resolveVault(client, params.vaultId, params.chainId);\n if (!resolved) throw new VaultNotFoundError(params.vaultId);\n\n const { vault, protocol } = resolved;\n if (protocol !== 'aera') {\n throw new UnsupportedFeatureError('Token mode support is only available for Aera vaults');\n }\n\n const chainId = params.chainId ?? vault.chainId;\n const publicClient = client.getPublicClient(chainId);\n\n const token =\n vault.supplyToken.length > 1\n ? vault.supplyToken.find((tInfo) => tInfo.symbol === params.assetSymbol)\n : vault.supplyToken[0];\n if (token === undefined) {\n throw new UnsupportedAssetError(params.assetSymbol ?? 'unknown', params.vaultId);\n }\n\n const runtime = await resolveAeraRuntimeContracts(publicClient, vault);\n return resolveAeraTokenModeSupport(publicClient, runtime, token.address);\n}\n", "import { parseAbi, type Address } from 'viem';\nimport type { GauntletClient } from '../client';\nimport type { EvmVaultDeployment } from './types';\nimport { ChainMismatchError, UnsupportedProtocolError, VaultNotFoundError } from '../errors';\nimport { getMultiDepositorVault, resolveAeraRuntimeContracts } from './aeraContracts';\nimport { convertUnitsToToken } from './aeraContracts/priceAndFeeCalculator';\nimport { getUserUnitsRefundableUntil } from './aeraContracts/v2';\nimport { provisionerV2Abi } from './abis/provisionerV2';\nimport { ContractVersion } from './types';\nimport { BLOCKS_3_DAYS, CHAIN_NAMES, DEFAULT_BLOCKS_3_DAYS, LOG_PAGE_SIZE } from '../constants';\n\n// Inline as-const ABI items give viem full type inference for args and return types.\nconst DEPOSIT_REQUESTED_V1_ABI = [\n {\n type: 'event',\n name: 'DepositRequested',\n inputs: [\n { type: 'address', name: 'user', indexed: true },\n { type: 'address', name: 'token', indexed: true },\n { type: 'uint256', name: 'tokensIn', indexed: false },\n { type: 'uint256', name: 'minUnitsOut', indexed: false },\n { type: 'uint256', name: 'solverTip', indexed: false },\n { type: 'uint256', name: 'deadline', indexed: false },\n { type: 'uint256', name: 'maxPriceAge', indexed: false },\n { type: 'bool', name: 'isFixedPrice', indexed: false },\n { type: 'bytes32', name: 'depositRequestHash', indexed: false },\n ],\n },\n] as const;\n\nconst REDEEM_REQUESTED_V1_ABI = [\n {\n type: 'event',\n name: 'RedeemRequested',\n inputs: [\n { type: 'address', name: 'user', indexed: true },\n { type: 'address', name: 'token', indexed: true },\n { type: 'uint256', name: 'minTokensOut', indexed: false },\n { type: 'uint256', name: 'unitsIn', indexed: false },\n { type: 'uint256', name: 'solverTip', indexed: false },\n { type: 'uint256', name: 'deadline', indexed: false },\n { type: 'uint256', name: 'maxPriceAge', indexed: false },\n { type: 'bool', name: 'isFixedPrice', indexed: false },\n { type: 'bytes32', name: 'redeemRequestHash', indexed: false },\n ],\n },\n] as const;\n\nconst provisionerV1StateAbi = parseAbi([\n 'function asyncDepositHashes(bytes32 asyncDepositHash) view returns (bool exists)',\n 'function asyncRedeemHashes(bytes32 asyncRedeemHash) view returns (bool exists)',\n]);\n\nexport interface UserCurrentBalanceParams {\n vaultId: string;\n address: Address;\n chainId?: number;\n}\n\nexport interface UserCurrentBalance {\n /** Chain identifier, e.g. \"base\" */\n chain: string;\n /** EVM chain id of the deployment, e.g. 8453 */\n chainId: number;\n token: Address;\n decimals: number;\n /** Assets queued via async deposit, not yet earning */\n pendingDeposit: bigint;\n /** Assets actively earning in the vault */\n balance: bigint;\n /** Assets queued via async withdraw, not yet claimable */\n pendingWithdraw: bigint;\n /** Timestamp until which this account cannot redeem vault units. */\n unitsLockedUntil?: bigint;\n}\n\n// V2 legacy wrapper calls can emit both receiver-aware and legacy events for one request.\n// Keep one row per request hash before state checks and summing pending amounts.\nfunction dedupeByRequestHash<TLog extends { args: { [key: string]: unknown } }>(\n logs: TLog[],\n hashKey: 'depositRequestHash' | 'redeemRequestHash'\n): TLog[] {\n const seen = new Set<unknown>();\n\n return logs.filter((log) => {\n const hash = log.args[hashKey];\n // Drop malformed events and duplicates so one pending request cannot be counted twice.\n if (hash == null || seen.has(hash)) return false;\n seen.add(hash);\n return true;\n });\n}\n\nasync function queryDeploymentBalance(\n client: GauntletClient,\n deployment: EvmVaultDeployment,\n address: Address\n): Promise<UserCurrentBalance> {\n const publicClient = client.getPublicClient(deployment.chainId);\n const token = deployment.supplyToken[0];\n\n const vaultContract = getMultiDepositorVault(publicClient, deployment.vaultAddress);\n const [runtime, units] = await Promise.all([\n resolveAeraRuntimeContracts(publicClient, deployment),\n vaultContract.read.balanceOf([address]),\n ]);\n const provisionerAddress = runtime.provisioner.address;\n const isV2 = runtime.provisioner.version === ContractVersion.V2;\n const unitsLockedUntilPromise = isV2\n ? getUserUnitsRefundableUntil(publicClient, provisionerAddress, address)\n : Promise.resolve(undefined);\n\n const balance = await convertUnitsToToken(\n publicClient,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n deployment.vaultAddress,\n token.address,\n units\n );\n\n // Look back ~3 days for pending async requests\n const currentBlock = await publicClient.getBlockNumber();\n const lookback = BLOCKS_3_DAYS[deployment.chainId] ?? DEFAULT_BLOCKS_3_DAYS;\n const fromBlock = currentBlock > lookback ? currentBlock - lookback : 0n;\n\n // Compute block-range chunks to stay within the 10,000-block RPC limit, then fetch in parallel\n const chunks: [bigint, bigint][] = [];\n for (let cursor = fromBlock; cursor <= currentBlock; cursor += LOG_PAGE_SIZE + 1n) {\n const end = cursor + LOG_PAGE_SIZE <= currentBlock ? cursor + LOG_PAGE_SIZE : currentBlock;\n chunks.push([cursor, end]);\n }\n\n const [depositPages, redeemPages] = await Promise.all([\n Promise.all(\n chunks.map(([from, to]) =>\n isV2\n ? publicClient.getContractEvents({\n address: provisionerAddress,\n abi: provisionerV2Abi,\n eventName: 'DepositRequested',\n args: { receiver: address },\n fromBlock: from,\n toBlock: to,\n })\n : publicClient.getContractEvents({\n address: provisionerAddress,\n abi: DEPOSIT_REQUESTED_V1_ABI,\n eventName: 'DepositRequested',\n args: { user: address },\n fromBlock: from,\n toBlock: to,\n })\n )\n ),\n Promise.all(\n chunks.map(([from, to]) =>\n isV2\n ? publicClient.getContractEvents({\n address: provisionerAddress,\n abi: provisionerV2Abi,\n eventName: 'RedeemRequested',\n args: { user: address },\n fromBlock: from,\n toBlock: to,\n })\n : publicClient.getContractEvents({\n address: provisionerAddress,\n abi: REDEEM_REQUESTED_V1_ABI,\n eventName: 'RedeemRequested',\n args: { user: address },\n fromBlock: from,\n toBlock: to,\n })\n )\n ),\n ]);\n\n const depositLogs = dedupeByRequestHash(depositPages.flat(), 'depositRequestHash');\n const redeemLogs = dedupeByRequestHash(redeemPages.flat(), 'redeemRequestHash');\n\n // Check which requests are still pending on-chain via a single multicall\n const pendingChecks = await publicClient.multicall({\n contracts: [\n ...depositLogs.map((log) => ({\n address: provisionerAddress,\n abi: isV2 ? provisionerV2Abi : provisionerV1StateAbi,\n functionName: isV2 ? ('asyncRequestHashes' as const) : ('asyncDepositHashes' as const),\n args: [log.args.depositRequestHash!] as const,\n })),\n ...redeemLogs.map((log) => ({\n address: provisionerAddress,\n abi: isV2 ? provisionerV2Abi : provisionerV1StateAbi,\n functionName: isV2 ? ('asyncRequestHashes' as const) : ('asyncRedeemHashes' as const),\n args: [log.args.redeemRequestHash!] as const,\n })),\n ],\n allowFailure: false,\n });\n\n const depositChecks = pendingChecks.slice(0, depositLogs.length);\n const redeemChecks = pendingChecks.slice(depositLogs.length);\n\n let pendingDeposit = 0n;\n for (let i = 0; i < depositLogs.length; i++) {\n if (depositChecks[i]) {\n pendingDeposit += depositLogs[i].args.tokensIn ?? 0n;\n }\n }\n\n let pendingWithdrawUnits = 0n;\n for (let i = 0; i < redeemLogs.length; i++) {\n if (redeemChecks[i]) {\n pendingWithdrawUnits += redeemLogs[i].args.unitsIn ?? 0n;\n }\n }\n\n const pendingWithdraw =\n pendingWithdrawUnits > 0n\n ? await convertUnitsToToken(\n publicClient,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n deployment.vaultAddress,\n token.address,\n pendingWithdrawUnits\n )\n : 0n;\n const unitsLockedUntil = await unitsLockedUntilPromise;\n\n return {\n chain: CHAIN_NAMES[deployment.chainId] ?? `chain-${deployment.chainId}`,\n chainId: deployment.chainId,\n token: token.address,\n decimals: token.decimals,\n pendingDeposit,\n balance,\n pendingWithdraw,\n ...(unitsLockedUntil !== undefined ? { unitsLockedUntil } : {}),\n };\n}\n\n/**\n * Returns the current balance breakdown for a user across all EVM deployments of a vault.\n *\n * Queries the vault's on-chain state to split the user's position into three buckets:\n * - `balance` \u2014 assets actively earning inside the vault (converted from vault units to tokens).\n * - `pendingDeposit` \u2014 tokens submitted via async deposit but not yet processed by a solver.\n * - `pendingWithdraw` \u2014 vault units locked in a pending async redeem request (converted to tokens).\n *\n * Only supported for Aera multi-depositor vaults. Pending amounts are detected by scanning\n * the last ~3 days of provisioner events and cross-checking hash existence on-chain.\n *\n * @param client - A configured `GauntletClient` instance with an EVM public client for each\n * chain the vault is deployed on.\n * @param params - Query parameters including `vaultId`, the user `address`, and an optional\n * `chainId` to limit the query to a single deployment.\n * @returns One `UserCurrentBalance` entry per chain queried.\n *\n * @throws {VaultNotFoundError} If the vault ID is not found in the manifest.\n * @throws {UnsupportedProtocolError} If the vault is not an Aera multi-depositor vault.\n * @throws {ChainMismatchError} If `chainId` is specified but no deployment exists for that chain.\n *\n * @example\n * ```ts\n * const balances = await getUserCurrentBalance(client, {\n * vaultId: 'baseUsdcPrime',\n * address: '0xYourWalletAddress',\n * });\n * // [{ chain: 'base', chainId: 8453, token: '0x...', decimals: 6, balance: 100_000_000n, pendingDeposit: 0n, pendingWithdraw: 0n }]\n * ```\n */\nexport async function getUserCurrentBalance(\n client: GauntletClient,\n params: UserCurrentBalanceParams\n): Promise<UserCurrentBalance[]> {\n const manifest = await client.manifest;\n const vaultInfo = manifest.vaults.find((v) => v.vaultId === params.vaultId);\n if (!vaultInfo) throw new VaultNotFoundError(params.vaultId);\n\n const evmDeployments = vaultInfo.deployments.filter(\n (d): d is EvmVaultDeployment => d.chain === 'evm' && d.vaultType === 'multi-depositor'\n );\n\n if (vaultInfo.protocol !== 'aera' || evmDeployments.length === 0) {\n throw new UnsupportedProtocolError(vaultInfo.protocol);\n }\n\n if (params.chainId !== undefined) {\n const deployment = evmDeployments.find((d) => d.chainId === params.chainId);\n if (!deployment) {\n throw new ChainMismatchError(\n `${params.chainId}`,\n evmDeployments.map((d) => `${d.chainId}`).join(', ')\n );\n }\n return [await queryDeploymentBalance(client, deployment, params.address)];\n }\n\n return Promise.all(evmDeployments.map((d) => queryDeploymentBalance(client, d, params.address)));\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["tokenDetails", "priceState", "accruals", "getContract", "getContract", "getContract", "zeroAddress", "getTokenDetails", "zeroAddress", "getAsyncDepositUnitsOut", "getAsyncRedeemTokenOut", "getAsyncWithdrawUnitsIn", "requestDepositTxRequest", "requestRedeemTxRequest", "getAsyncDepositUnitsOut", "getAsyncRedeemTokenOut", "getAsyncWithdrawUnitsIn", "requestDepositTxRequest", "requestRedeemTxRequest", "getSyncDepositQuote"]
|
|
7
|
-
}
|