UNPKG

@anton-seriesfi/doppler-v3-sdk

Version:
309 lines 12.2 kB
import { ReadWriteContract, ReadWriteAdapter, Drift, TransactionOptions, FunctionReturn, FunctionArgs } from "@delvtech/drift"; import { ReadFactory, AirlockABI } from "./ReadFactory"; import { BundlerAbi } from "../../abis"; import { Address, Hex } from "viem"; import { BeneficiaryData, V4MigratorData } from "../../types"; export declare const ONE_YEAR_IN_SECONDS: number; export declare const DEFAULT_START_TICK = 175000; export declare const DEFAULT_END_TICK = 225000; export declare const DEFAULT_NUM_POSITIONS = 15; export declare const DEFAULT_FEE = 10000; export declare const DEFAULT_VESTING_DURATION: bigint; export declare const DEFAULT_INITIAL_SUPPLY_WAD: bigint; export declare const DEFAULT_NUM_TOKENS_TO_SELL_WAD: bigint; export declare const DEFAULT_YEARLY_MINT_RATE_WAD: bigint; export declare const DEFAULT_PRE_MINT_WAD: bigint; export declare const DEFAULT_MAX_SHARE_TO_BE_SOLD: bigint; export declare const DEFAULT_INITIAL_VOTING_DELAY = 172800; export declare const DEFAULT_INITIAL_VOTING_PERIOD = 1209600; export declare const DEFAULT_INITIAL_PROPOSAL_THRESHOLD: bigint; export declare const WAD: bigint; export declare const DEAD_ADDRESS: Address; /** * Parameters required for creating a new Doppler V3 pool * @property initialSupply Initial token supply * @property numTokensToSell Number of tokens to sell * @property numeraire Address of the numeraire token * @property tokenFactory Address of token factory contract * @property tokenFactoryData Encoded token factory initialization data * @property governanceFactory Address of governance factory contract * @property governanceFactoryData Encoded governance factory initialization data * @property poolInitializer Address of pool initializer contract * @property poolInitializerData Encoded pool initialization data * @property liquidityMigrator Address of liquidity migrator contract * @property liquidityMigratorData Encoded liquidity migration data * @property integrator Integrator address * @property salt Unique salt for deployment */ export interface CreateParams { initialSupply: bigint; numTokensToSell: bigint; numeraire: Address; tokenFactory: Address; tokenFactoryData: Hex; governanceFactory: Address; governanceFactoryData: Hex; poolInitializer: Address; poolInitializerData: Hex; liquidityMigrator: Address; liquidityMigratorData: Hex; integrator: Address; salt: Hex; } /** * Configuration for a Doppler V3 liquidity pool * @property startTick Initial tick position * @property endTick Final tick position * @property numPositions Number of positions * @property maxShareToBeSold Maximum percentage of shares to sell * @property maxShareToBond Maximum percentage of shares to bond * @property fee Pool fee percentage (in basis points) * @property beneficiaries Array of beneficiaries (only for fee streaming pools) */ export interface V3PoolConfig { startTick: number; endTick: number; numPositions: number; maxShareToBeSold: bigint; fee: number; beneficiaries?: BeneficiaryData[]; } /** * Token sale configuration parameters * @property initialSupply Initial token supply * @property numTokensToSell Number of tokens available for sale */ export interface SaleConfig { initialSupply: bigint; numTokensToSell: bigint; } /** * Vesting schedule configuration * @property yearlyMintCap Annual minting cap * @property vestingDuration Duration of vesting period * @property recipients Array of recipient addresses * @property amounts Corresponding vesting amounts */ export interface VestingConfig { yearlyMintRate: bigint; vestingDuration: bigint; recipients: Address[]; amounts: bigint[]; } /** * Basic token metadata configuration * @property name Token name * @property symbol Token symbol * @property tokenURI URI for token metadata */ export interface TokenConfig { name: string; symbol: string; tokenURI: string; } /** * Governance configuration parameters * @property initialVotingDelay Initial voting delay in seconds * @property initialVotingPeriod Initial voting period in seconds * @property initialProposalThreshold Initial proposal threshold */ export interface GovernanceConfig { initialVotingDelay: number; initialVotingPeriod: number; initialProposalThreshold: bigint; } /** * Contract dependencies for pool initialization * @property tokenFactory Address of token factory * @property governanceFactory Address of governance factory * @property v3Initializer Address of V3 initializer * @property liquidityMigrator Address of liquidity migrator */ export interface InitializerContractDependencies { tokenFactory: Address; governanceFactory: Address; v3Initializer: Address; liquidityMigrator: Address; } /** * Parameters for creating a Doppler V3 pool * @property integrator Integrator address * @property userAddress User address for salt generation * @property numeraire Address of numeraire token * @property contracts Contract dependencies * @property tokenConfig Token metadata configuration * @property saleConfig Optional sale configuration overrides * @property v3PoolConfig Optional pool configuration overrides * @property vestingConfig Vesting configuration or "default" preset * @property liquidityMigratorData Optional encoded V4 migrator data for future migration */ export interface CreateV3PoolParams { integrator: Address; userAddress: Address; numeraire: Address; contracts: InitializerContractDependencies; tokenConfig: TokenConfig; saleConfig?: Partial<SaleConfig>; v3PoolConfig?: Partial<V3PoolConfig>; vestingConfig: VestingConfig | "default"; governanceConfig?: Partial<GovernanceConfig>; liquidityMigratorData?: Hex; } /** * Default configuration presets * @property defaultV3PoolConfig Default pool configuration * @property defaultVestingConfig Default vesting schedule * @property defaultSaleConfig Default sale parameters * @property defaultGovernanceConfig Default governance parameters */ export interface DefaultConfigs { defaultV3PoolConfig?: V3PoolConfig; defaultVestingConfig?: VestingConfig; defaultSaleConfig?: SaleConfig; defaultGovernanceConfig?: GovernanceConfig; } export type BundlerABI = typeof BundlerAbi; /** * Factory class for creating and managing Doppler V3 pools with read/write capabilities */ export declare class ReadWriteFactory extends ReadFactory { airlock: ReadWriteContract<AirlockABI>; bundler: ReadWriteContract<BundlerABI>; defaultV3PoolConfig: V3PoolConfig; defaultVestingConfig: VestingConfig; defaultSaleConfig: SaleConfig; defaultGovernanceConfig: GovernanceConfig; private drift; /** * Create a new ReadWriteFactory instance * @param address Contract address * @param drift Drift instance for blockchain interaction * @param defaultConfigs Optional default configurations */ constructor(address: Address, bundlerAddress: Address, drift?: Drift<ReadWriteAdapter>, defaultConfigs?: DefaultConfigs); /** * Merge user configuration with defaults * @param config User-provided partial configuration * @param defaults Full default configuration * @returns Merged configuration object */ private mergeWithDefaults; /** * Get merged sale configuration * @param saleConfig Optional partial sale config * @returns Complete SaleConfig */ private getMergedSaleConfig; /** * Get merged pool configuration * @param v3PoolConfig Optional partial pool config * @returns Complete V3PoolConfig */ private getMergedV3PoolConfig; /** * Get merged governance configuration * @param governanceConfig Optional partial governance config * @returns Complete GovernanceConfig */ private getMergedGovernanceConfig; /** * Get merged vesting configuration * @param config Vesting config or "default" preset * @param userAddress User address for default recipient * @returns Complete VestingConfig */ private getMergedVestingConfig; /** * Generate a random salt * @param account User address to incorporate into salt * @returns Hex string of generated salt */ private generateRandomSalt; /** * Encode lockable pool initializer data * @param v3PoolConfig Complete pool configuration * @returns ABI-encoded initialization data */ private encodeLockablePoolInitializerData; /** * Encode pool initialization data for contract calls * @param v3PoolConfig Complete pool configuration * @returns ABI-encoded initialization data */ private encodePoolInitializerData; /** * Encode token factory initialization data * @param tokenConfig Token metadata * @param vestingConfig Vesting schedule * @returns ABI-encoded token factory data */ private encodeTokenFactoryData; /** * Encode governance factory initialization data * @param tokenConfig Token metadata * @returns ABI-encoded governance data */ private encodeGovernanceFactoryData; /** * Encode all parameters for pool creation * @param params CreateV3PoolParams input parameters * @returns Object containing create parameters and final pool config * @throws Error if user address is missing or invalid tick range */ encode(params: CreateV3PoolParams): { createParams: CreateParams; v3PoolConfig: V3PoolConfig; }; /** * Encode creation data with token order validation * @param params CreateV3PoolParams input parameters * @returns Finalized create parameters with adjusted ticks if needed */ encodeCreateData(params: CreateV3PoolParams): Promise<CreateParams>; /** * Execute pool creation transaction * @param params Finalized create parameters * @param options Write options and mined handlers * @returns Transaction hash */ create(params: CreateParams, options?: TransactionOptions): Promise<Hex>; /** * Simulate pool creation transaction * @param params Create parameters * @returns Simulation results */ simulateCreate(params: CreateParams): Promise<FunctionReturn<AirlockABI, "create">>; simulateBundleExactOutput(createData: CreateParams, params: FunctionArgs<BundlerABI, "simulateBundleExactOut">["params"]): Promise<FunctionReturn<BundlerABI, "simulateBundleExactOut">>; simulateBundleExactInput(createData: CreateParams, params: FunctionArgs<BundlerABI, "simulateBundleExactIn">["params"]): Promise<FunctionReturn<BundlerABI, "simulateBundleExactIn">>; bundle(createData: CreateParams, commands: FunctionArgs<BundlerABI, "bundle">["commands"], inputs: FunctionArgs<BundlerABI, "bundle">["inputs"], options?: TransactionOptions): Promise<Hex>; /** * Update default configurations * @param configs Partial configuration overrides */ updateDefaultConfigs(configs: { defaultV3PoolConfig?: Partial<V3PoolConfig>; defaultVestingConfig?: Partial<VestingConfig>; defaultSaleConfig?: Partial<SaleConfig>; defaultGovernanceConfig?: Partial<GovernanceConfig>; }): void; /** * Sort beneficiaries by address in ascending order * @param beneficiaries Array of beneficiary data * @returns Sorted array of beneficiaries */ sortBeneficiaries(beneficiaries: BeneficiaryData[]): BeneficiaryData[]; /** * Validate beneficiary data * @param beneficiaries Array of beneficiary data to validate * @throws Error if validation fails */ private validateBeneficiaries; /** * Encode V4 migrator data for Uniswap V4 migration with StreamableFeesLocker * @param data V4 migrator configuration * @param includeDefaultBeneficiary Whether to include the airlock owner as a default 5% beneficiary * @returns Encoded hex data */ encodeV4MigratorData(data: V4MigratorData, includeDefaultBeneficiary?: boolean): Promise<Hex>; } //# sourceMappingURL=ReadWriteFactory.d.ts.map