# Home

## About

[Doppler](https://doppler.lol) is an onchain protocol for launching tokens through various [price discovery auctions](https://aada.ms/pdfs/pda.pdf). Applications integrate Doppler, configure their token launch parameters, and get to market faster than building in-house smart contracts. Teams including [Zora](https://zora.co), [Paragraph](https://paragraph.com), [Noice](https://noice.so), and [Bankr](https://bankr.bot/) use Doppler to create new tokens by configuring inputs such as supply curves, vesting + inflation schedules, governance structures, and ongoing economics, such as fees or treasury management.

{% hint style="success" %}
Doppler is now available on Solana devnet. View the [SDK examples](https://docs.doppler.lol/reference/svm-sdk-examples) to get started.
{% endhint %}

## Start building on Base

```bash
npm install @whetstone-research/doppler-sdk viem
```

```javascript
import { DopplerSDK } from '@whetstone-research/doppler-sdk';
import {
  createPublicClient,
  createWalletClient,
  http,
  parseEther
} from 'viem';
import { base } from 'viem/chains'

// 1. Set up viem clients
const publicClient = createPublicClient({
  chain: base,
  transport: http(),
});

// 2. Set up your local wallet client
const walletClient = createWalletClient({
  chain: base,
  transport: http(),
  account: '0x...', // Your wallet address
});

// 3. Initialize the SDK
const sdk = new DopplerSDK({
  publicClient,
  walletClient,
  chainId: base.id,
});

// 4. Configure a multicurve auction using market cap ranges
const WETH = '0x4200000000000000000000000000000000000006';

const params = sdk
  .buildMulticurveAuction()
  .tokenConfig({
    name: 'TEST',
    symbol: 'TEST',
    tokenURI: 'https://example.com/metadata.json'
  })
  .saleConfig({
    initialSupply: parseEther('1000000000'),
    numTokensToSell: parseEther('900000000'),
    numeraire: WETH,
  })
  .withCurves({
    numerairePrice: 3000, // ETH = $3000 USD
    curves: [
      {
        marketCap: { start: 500_000, end: 1_500_000 },
        numPositions: 10,
        shares: parseEther('0.4')
      },
      {
        marketCap: { start: 1_000_000, end: 5_000_000 },
        numPositions: 10,
        shares: parseEther('0.5')
      },
      {
        marketCap: { start: 5_000_000, end: 'max' },
        numPositions: 1,
        shares: parseEther('0.1')
      },
    ],
  })
  .withGovernance({ type: 'noOp' })
  .withMigration({ type: 'noOp' })
  .withUserAddress('0x...')
  .build()

const result = await sdk.factory.createMulticurve(params)
console.log('Pool:', result.poolId)
console.log('Token address:', result.tokenAddress)
```

### Example configuration details

With this [Doppler Multicurve](https://doppler.lol/multicurve.pdf) Launch on Base, we configured:

* Token config - metadata such as the name, symbol, and other relevant data like an image.
* Sale config - allocations of the token and how much is available for sale.
* Curves - Defined in USD, the first curve ($500k) sets launch price.
* Governance & Migration - no onchain governance or protocol migration configured.

## Next steps

Continue [learning more about Doppler](https://docs.doppler.lol/explainer) and follow along with other SDK [examples](https://docs.doppler.lol/reference/examples).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.doppler.lol/readme.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
