@anton-seriesfi/doppler-v3-sdk

中文文档
1.0.44-b发布于 2025/07/12MITTypeScriptCommonJS近 30 天下载 1893

SDK for interacting with Doppler v3 protocol

原始使用文档
文档目录13 节
  1. Features
  2. Installation
  3. Core Concepts
  4. Factory Interactions
  5. Token Operations
  6. Pool Analytics
  7. Price Quoting
  8. Key Components
  9. Examples
  10. Basic Swap Simulation
  11. Uniswap V3 Pool Data Queries
  12. Creating a V3 Pool with V4 Migration and Fee Streaming
  13. License

Doppler V3 SDK

npm version License: MIT

A TypeScript SDK for interacting with Doppler V3 protocol - a Liquidity Bootstrapping Protocol built on Uniswap V3.

Features

  • 🏭 Factory interactions for doppler contract creation and management
  • 💰 Token operations including DERC20 and native ETH handling
  • 🔍 Historical event querying for pools and tokens

Installation

# Using npm
npm install doppler-v3-sdk

# Using bun
bun add doppler-v3-sdk

Core Concepts

Factory Interactions

import { ReadFactory } from "doppler-v3-sdk";

const factory = new ReadFactory("0x...factoryAddress");
const assetData = await factory.getAssetData(tokenAddress);
const createEvents = await factory.getCreateEvents();

Token Operations

// ERC20 Token
const derc20 = new ReadDerc20(tokenAddress);
const balance = await derc20.getBalanceOf(userAddress);

// Native ETH
const eth = new ReadEth();
const ethBalance = await eth.getBalanceOf(userAddress);

Pool Analytics

const pool = new ReadUniswapV3Pool(poolAddress);
const [slot0, swapEvents] = await Promise.all([
  pool.getSlot0(),
  pool.getSwapEvents(),
]);

Price Quoting

const quoter = new ReadQuoter(quoterAddress);
const quote = await quoter.quoteExactInput({
  params: {
    tokenIn: "0x...",
    tokenOut: "0x...",
    amountIn: parseUnits("1", 18),
    fee: 3000,
  },
  options: {
    tokenDecimals: 18,
    formatDecimals: 4,
  },
});

Key Components

ComponentDescription
ReadFactoryInterface for reading from the Doppler airlock contract
ReadWriteFactoryInterface for writing to the Doppler airlock contract
ReadDerc20DERC20 token operations with vesting support
ReadEthNative ETH operations
ReadUniswapV3PoolInterface for Uniswap V3 pool contract operations
ReadInitializerInterface for the UniswapV3Initializer contract
ReadQuoterPrice quoting engine with fixed-point precision
ReadMigratorInterface for V4 migrator contract with fee streaming

Examples

Basic Swap Simulation

import { ReadQuoter, fixed } from "doppler-v3-sdk";

const quoter = new ReadQuoter("0x...quoterAddress");
const amountIn = fixed(1.5, 18); // 1.5 tokens with 18 decimals

const quote = await quoter.quoteExactInput(
  {
    tokenIn: "0x...",
    tokenOut: "0x...",
    amountIn: amountIn.toBigInt(),
    fee: 3000,
  },
  { tokenDecimals: 18, formatDecimals: 4 }
);

console.log(`Expected output: ${quote.formattedAmountOut}`);

Note: for executing swaps see doppler-router here

Uniswap V3 Pool Data Queries

import { ReadUniswapV3Pool } from "doppler-v3-sdk";

const pool = new ReadUniswapV3Pool("0x...poolAddress");
const [slot0, liquidityEvents] = await Promise.all([
  pool.getSlot0(),
  pool.getMintEvents(),
]);

console.log(`Current price: ${slot0.sqrtPriceX96}`);
console.log(`${liquidityEvents.length} liquidity positions found`);

Creating a V3 Pool with V4 Migration and Fee Streaming

The V3 SDK now supports creating Doppler V3 pools that can migrate to Uniswap V4 with advanced fee streaming capabilities. This allows you to distribute trading fees to multiple beneficiaries over time.

import { 
  ReadWriteFactory, 
  BeneficiaryData,
  V4MigratorData,
  WAD,
  addresses 
} from "doppler-v3-sdk";

// Step 1: Set up beneficiaries for fee streaming
// Shares must sum to exactly WAD (1e18)
const beneficiaries: BeneficiaryData[] = [
  { 
    beneficiary: "0x...", // Treasury address
    shares: WAD * 70n / 100n  // 70% of fees
  },
  { 
    beneficiary: "0x...", // Development fund
    shares: WAD * 20n / 100n  // 20% of fees
  },
  { 
    beneficiary: "0x...", // Community rewards
    shares: WAD * 10n / 100n  // 10% of fees
  }
];

// Step 2: Sort beneficiaries (required by the contract)
const factory = new ReadWriteFactory(
  addresses.unichain.airlock,
  addresses.unichain.bundler
);
const sortedBeneficiaries = factory.sortBeneficiaries(beneficiaries);

// Step 3: Configure the V4 migrator
const migratorConfig: V4MigratorData = {
  fee: 3000,                    // 0.3% fee tier
  tickSpacing: 60,              // Tick spacing for the V4 pool
  lockDuration: 365 * 24 * 60 * 60, // 1 year lock
  beneficiaries: sortedBeneficiaries
};

// Step 4: Encode the migrator data (automatically includes 5% for airlock owner)
const encodedMigratorData = await factory.encodeV4MigratorData(migratorConfig);

// Or exclude the default beneficiary:
// const encodedMigratorData = await factory.encodeV4MigratorData(migratorConfig, false);

// Step 5: Create the pool with V4 migration configuration
const createParams = await factory.buildConfig({
  integrator: "0x...",
  userAddress: userAddress,
  numeraire: addresses.unichain.weth,
  contracts: {
    tokenFactory: addresses.unichain.tokenFactory,
    governanceFactory: addresses.unichain.governanceFactory,
    poolInitializer: addresses.unichain.v3Initializer,
    liquidityMigrator: addresses.unichain.liquidityMigrator, // V4 migrator
  },
  tokenConfig: {
    name: "My Token",
    symbol: "MTK",
    tokenURI: "https://example.com/token-metadata.json"
  },
  // Pass the encoded migrator data
  liquidityMigratorData: encodedMigratorData,
  // ... other parameters
});

await factory.create(createParams);

Querying V4 Migrator State

After deployment, you can query the migrator configuration:

import { ReadMigrator } from "doppler-v3-sdk";

const migrator = new ReadMigrator(addresses.unichain.liquidityMigrator);

// Get the V4 pool configuration that will be created
const poolKey = await migrator.getAssetData(token0, token1);
console.log(`Fee tier: ${poolKey.fee}`);
console.log(`Tick spacing: ${poolKey.tickSpacing}`);

// Get important contract addresses
const locker = await migrator.locker(); // StreamableFeesLocker address
const poolManager = await migrator.poolManager(); // V4 PoolManager address

Fee Streaming Benefits

The V4 migrator with StreamableFeesLocker provides several advantages:

  1. Multiple Beneficiaries: Distribute fees to multiple addresses based on shares
  2. Time-Locked Liquidity: Liquidity is locked for a specified duration
  3. Streaming Fees: Beneficiaries can claim accumulated fees over time
  4. No-Op Governance: Option to permanently lock liquidity by setting recipient to DEAD_ADDRESS
  5. Updatable Beneficiaries: Beneficiaries can update their receiving address

License

This project is licensed under the MIT License - see the LICENSE file for details.

版本与发布记录

@anton-seriesfi/doppler-v3-sdk 共发布 9 个版本,首次发布于 2025/02/22;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.0.44-blatest2025/07/121.3 年前
1.0.44-a2025/07/121.3 年前
1.0.442025/07/121.3 年前
1.0.29-maybe2025/07/011.4 年前
1.0.292025/06/271.4 年前
1.0.282025/06/271.4 年前

关于 @anton-seriesfi/doppler-v3-sdk 的常见问题

@anton-seriesfi/doppler-v3-sdk 是什么?

SDK for interacting with Doppler v3 protocol

如何安装 @anton-seriesfi/doppler-v3-sdk?

在项目目录运行 npm install @anton-seriesfi/doppler-v3-sdk,或使用 pnpm add / yarn add / bun add。

@anton-seriesfi/doppler-v3-sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@anton-seriesfi/doppler-v3-sdk 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@anton-seriesfi/doppler-v3-sdk 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@anton-seriesfi/doppler-v3-sdk 可以商用吗?

@anton-seriesfi/doppler-v3-sdk 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@anton-seriesfi/doppler-v3-sdk 的下载量有多少?

根据 npm 官方下载统计,@anton-seriesfi/doppler-v3-sdk 在 2026/10/06 – 2026/11/04 这 30 天内被下载 1,893 次,日均约 63 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@anton-seriesfi/doppler-v3-sdk 还在维护吗?

最新版本 1.0.44-b 发布于 2025/07/12(1.3 年前);至今共发布 9 个版本,其中过去 12 个月发布了 0 个;首次发布于 2025/02/22。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。