import { type Address } from "viem"; import { type Metadata, type RequirementSignature, type Transaction, type VaultV1MigrateToV2Action } from "../../types"; /** Parameters for {@link vaultV1MigrateToV2}. */ export interface VaultV1MigrateToV2Params { vault: { chainId: number; address: Address; }; args: { targetVault: Address; /** Number of V1 shares to migrate. */ shares: bigint; /** Minimum acceptable share price for V1 redeem (slippage protection, in RAY). */ minSharePriceVaultV1: bigint; /** Maximum acceptable share price for V2 deposit (inflation protection, in RAY). */ maxSharePriceVaultV2: bigint; /** Receives the V2 vault shares. */ recipient: Address; /** Pre-signed permit/permit2 approval for V1 share transfer. */ requirementSignature?: RequirementSignature; }; metadata?: Metadata; } /** * Prepares an atomic full-migration transaction from VaultV1 to VaultV2. * * Routed through bundler3: transfers V1 shares to GeneralAdapter1 (via * `erc20TransferFrom` or permit/permit2), redeems them via `erc4626Redeem` * (GA1 redeems its own shares — no allowance check), then deposits the * resulting assets into V2 via `erc4626Deposit`. All operations execute * atomically in a single transaction. * * **Prerequisite:** The user must either approve GeneralAdapter1 to spend * their V1 vault shares (classic approve) or provide a pre-signed * permit/permit2 via `requirementSignature`. Use `getRequirements()` on the * entity to resolve the appropriate approval. * * @param params - The migration parameters. * @param params.vault.chainId - The chain ID (used to resolve bundler addresses). * @param params.vault.address - The VaultV1 (MetaMorpho) address. * @param params.args.targetVault - The VaultV2 address to deposit into. * @param params.args.shares - Number of V1 shares to migrate. * @param params.args.minSharePriceVaultV1 - Minimum V1 share price in RAY (slippage protection for redeem). * @param params.args.maxSharePriceVaultV2 - Maximum V2 share price in RAY (inflation protection for deposit). * @param params.args.recipient - Receives the V2 vault shares. * @param params.args.requirementSignature - Pre-signed permit/permit2 for V1 share transfer. * @param params.metadata - Optional analytics metadata. * @returns Deep-frozen transaction. */ export declare const vaultV1MigrateToV2: ({ vault: { chainId, address: sourceVault }, args: { targetVault, shares, minSharePriceVaultV1, maxSharePriceVaultV2, recipient, requirementSignature, }, metadata, }: VaultV1MigrateToV2Params) => Readonly>;