/** * Private Lend Pipeline — Unshield + deposit into Morpho vault * * Same 5-step pattern as swap pipeline: * 1. Derive smart wallet + Railgun keys * 2. Check privacy pool balance, shield if needed * 3. Preview deposit (vault shares estimate) * 4. Generate ZK proof (full or partial unshield) * 5. Build atomic multicall [unshield → approve → deposit], submit UserOp */ import type { TokenInfo, SwapProgress } from '../pipeline'; export interface PrivateLendConfig { privateKey: string; paymasterSignerKey: string; token: TokenInfo; /** Human-readable amount, e.g. "100" */ amount: string; /** Vault name (e.g. "steakhouse") or address */ vault: string; rpcUrl?: string; chainId?: number; } export interface PrivateLendResult { txHash: string; blockNumber: number; smartWallet: string; ownerEOA: string; amountDeposited: string; tokenSymbol: string; vaultName: string; vaultAddress: string; railgunFee: string; proofTimeSeconds: number; } export declare function executePrivateLend(config: PrivateLendConfig, progress: SwapProgress): Promise; export interface RedeemConfig { privateKey: string; paymasterSignerKey: string; token: TokenInfo; /** Vault name or address */ vault: string; /** 'all' or specific share amount */ shares?: string; rpcUrl?: string; chainId?: number; } export interface RedeemResult { txHash: string; blockNumber: number; smartWallet: string; vaultName: string; vaultAddress: string; sharesRedeemed: string; assetsReceived: string; tokenSymbol: string; } /** * Redeem (withdraw) from a Morpho vault. * No ZK proof needed — vault shares already sit on the smart wallet. */ export declare function executeRedeem(config: RedeemConfig, progress: SwapProgress): Promise; export interface DirectDepositConfig { privateKey: string; paymasterSignerKey: string; token: { address: string; symbol: string; decimals: number; }; /** Human-readable amount (tokens must already be on smart wallet) */ amount: string; vault: string; rpcUrl?: string; chainId?: number; } export interface DirectDepositResult { txHash: string; blockNumber: number; smartWallet: string; amountDeposited: string; tokenSymbol: string; vaultName: string; vaultAddress: string; } /** * Deposit tokens that are already on the smart wallet into a vault. * No ZK proof needed — just [approve, deposit] via UserOp. * Used after a redeem (rebalance flow). */ export declare function executeDirectDeposit(config: DirectDepositConfig, progress: SwapProgress): Promise;