@anton-seriesfi/doppler-v3-sdk
Version:
SDK for interacting with Doppler v3 protocol
309 lines • 12.2 kB
TypeScript
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