/** * Flap Tax Vaults — 类型定义 */ /** * FieldDescriptor — 字段描述符 * 对应 Solidity 结构体 IVaultSchemasV1.FieldDescriptor */ export interface FieldDescriptor { name: string; fieldType: string; description: string; decimals: number; } /** * VaultDataSchema — 工厂数据模式 * 对应 VaultFactoryBaseV2.vaultDataSchema() 返回值 */ export interface VaultDataSchema { description: string; fields: FieldDescriptor[]; isArray: boolean; } /** * ApproveAction — ERC-20 授权操作 */ export interface ApproveAction { tokenType: string; amountFieldName: string; } /** * VaultMethodSchema — 金库方法描述 */ export interface VaultMethodSchema { name: string; description: string; inputs: FieldDescriptor[]; outputs: FieldDescriptor[]; approvals: ApproveAction[]; isInputArray: boolean; isOutputArray: boolean; isWriteMethod: boolean; } /** * VaultUISchema — 金库 UI 模式 */ export interface VaultUISchema { vaultType: string; description: string; methods: VaultMethodSchema[]; } /** ABI 编码支持的字段值类型 */ export type AbiEncodeValue = string | number | boolean | bigint; /** 链上 vaultDataSchema 原始返回值 */ export interface RawFieldDescriptor { name: string; fieldType: string; description: string; decimals: bigint | number; } export interface RawVaultDataSchema { description: string; fields: RawFieldDescriptor[]; isArray: boolean; } export interface RawApproveAction { tokenType: string; amountFieldName: string; } export interface RawVaultMethodSchema { name: string; description: string; inputs: RawFieldDescriptor[]; outputs: RawFieldDescriptor[]; approvals: RawApproveAction[]; isInputArray: boolean; isOutputArray: boolean; isWriteMethod: boolean; } export interface RawVaultUISchema { vaultType: string; description: string; methods: RawVaultMethodSchema[]; } export interface RawVaultPortalInfo { vault: string; vaultFactory: string; description: string; isOfficial: boolean; riskLevel: bigint | number; } export declare function mapFieldDescriptor(f: RawFieldDescriptor): FieldDescriptor; export declare function mapApproveAction(a: RawApproveAction): ApproveAction; export declare function mapVaultMethodSchema(m: RawVaultMethodSchema): VaultMethodSchema; /** * 金库类型枚举 * * ⚠️ 基于 flap.sh 实际 JS 源码中 taxVaults.vaultTypes[] 配置 * 每种类型对应一个 VaultFactory 合约地址 */ export type VaultType = 'none' | 'gift' | 'split' | 'buyback_burn' | 'burnToEarn' | 'buildYourVault'; /** * Tax Vault 创建配置 * * ⚠️ 金库模式下的核心参数: * - vaultFactory: VaultFactory 合约地址(直接传递给 VaultPortal) * - vaultData: ABI 编码的金库初始化数据(由 vaultDataSchema 决定格式) * - extensionID 和 extensionData 始终为零值 */ export interface TaxVaultConfig { /** 金库类型 */ vaultType: VaultType; /** * VaultFactory 合约地址 * - 官方金库:从 VAULT_FACTORY_ADDRESSES 自动获取 * - buildYourVault:用户手动输入 */ factoryAddress?: string; /** * 金库初始化数据(原始 hex) * 直接使用此数据作为 vaultData */ rawVaultData?: string; /** * 金库数据字段值 * key = vaultDataSchema 中 field.name, value = 用户输入 */ vaultDataFields?: Record; /** * 工厂的 vaultDataSchema */ vaultDataSchema?: VaultDataSchema; } /** * 金库信息(链上查询结果) */ export interface VaultInfo { /** 金库合约地址 */ address: string; /** 金库中的原生代币余额 */ nativeBalance: bigint; /** 金库描述 */ description: string | null; /** 是否为 V2 金库 */ isV2: boolean; /** V2 金库的 UI 模式 */ uiSchema: VaultUISchema | null; }