import type { InputMarketParams } from "@morpho-org/blue-sdk"; import { type Address } from "viem"; import { type Metadata, type PermitRequirementSignature, type Transaction, type VaultV1InKindRedeemAction } from "../../types/index.js"; /** Parameters for {@link vaultV1InKindRedeem}. */ export interface VaultV1InKindRedeemParams { readonly vault: { readonly chainId: number; readonly address: Address; }; readonly args: { readonly amount: bigint; readonly marketParamsList: readonly InputMarketParams[]; readonly userAddress: Address; readonly deadline: bigint; readonly requirementSignature?: PermitRequirementSignature; }; readonly metadata?: Metadata; } /** * Prepares a Vault V1 in-kind redemption into Morpho Blue supply positions. * * The transaction calls VaultExitBundlesV1 directly. Without a signature it embeds the contract's * empty-permit sentinel; the user must first approve enough shares for the exit. * * @param params - In-kind redemption parameters. * @param params.vault.chainId - Chain containing the target Vault V1 and VaultExitBundlesV1. * @param params.vault.address - Target Vault V1 address. * @param params.args.amount - Asset-denominated amount to exit. * @param params.args.marketParamsList - Ordered markets consumed greedily by the contract. * @param params.args.userAddress - Expected transaction sender, recorded in action metadata only. * VaultExitBundlesV1 burns `msg.sender`'s vault shares, so the submitting account must equal this * address. * @param params.args.deadline - Permit and bundle deadline. * @param params.args.requirementSignature - Optional bounded Vault V1 shares permit. * @param params.metadata - Optional analytics metadata. * @returns A deep-frozen `Readonly>` with `to`, `value`, * `data`, and the typed action discriminator. * @throws {NonPositiveInputError} when `amount` or `deadline` is not positive. * @throws {EmptyMarketParamsListError} when no markets are supplied. * @throws {UnsupportedChainIdError} when no address registry exists for the target chain. * @throws {UnknownAddressError} when VaultExitBundlesV1 is not registered on the target chain. * @throws {VaultExitBundlesV1PermitMismatchError} when the requirement has the wrong permit kind, asset, or signature encoding. * @example * ```ts * import { vaultV1InKindRedeem } from "@morpho-org/morpho-sdk"; * * const tx = vaultV1InKindRedeem({ * vault: { chainId: 1, address: vault }, * args: { amount: 1_000_000n, marketParamsList, userAddress, deadline }, * }); * // tx satisfies Readonly> * ``` */ export declare const vaultV1InKindRedeem: ({ vault, args, metadata, }: VaultV1InKindRedeemParams) => Readonly>;