Rehype Pools
Create Multicurve pools with RehypeDopplerHook for advanced fee distribution and buyback mechanisms
Fee distribution model
Category
Description
Basic example
import { DopplerSDK, getAddresses } from '@whetstone-research/doppler-sdk';
import { parseEther, createPublicClient, createWalletClient, http } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { base } from 'viem/chains';
const privateKey = process.env.PRIVATE_KEY as `0x${string}`;
const rpcUrl = process.env.RPC_URL ?? 'https://mainnet.base.org';
async function main() {
const account = privateKeyToAccount(privateKey);
const addresses = getAddresses(base.id);
const publicClient = createPublicClient({
chain: base,
transport: http(rpcUrl),
});
const walletClient = createWalletClient({
chain: base,
transport: http(rpcUrl),
account,
});
const sdk = new DopplerSDK({
publicClient,
walletClient,
chainId: base.id,
});
// Get protocol owner for beneficiary requirement (min 5%)
const protocolOwner = await sdk.getAirlockBeneficiary();
// Beneficiaries receive the beneficiaryPercentWad portion of fees
const beneficiaries = [
protocolOwner, // 5% to protocol (minimum required)
{ beneficiary: account.address, shares: parseEther('0.95') }, // 95% to creator
];
const BUYBACK_DESTINATION = account.address; // receives bought-back tokens
const params = sdk
.buildMulticurveAuction()
.tokenConfig({
name: 'Rehype Token',
symbol: 'RHT',
tokenURI: 'https://example.com/metadata.json',
})
.saleConfig({
initialSupply: parseEther('1000000000'),
numTokensToSell: parseEther('1000000000'),
numeraire: addresses.weth,
})
.withCurves({
numerairePrice: 3000, // ETH = $3000 USD
curves: [
{ marketCap: { start: 500_000, end: 1_500_000 }, numPositions: 10, shares: parseEther('0.3') },
{ marketCap: { start: 1_000_000, end: 5_000_000 }, numPositions: 15, shares: parseEther('0.4') },
{ marketCap: { start: 4_000_000, end: 50_000_000 }, numPositions: 10, shares: parseEther('0.3') },
],
beneficiaries,
})
.withRehypeDopplerHook({
hookAddress: addresses.rehypeDopplerHook!,
buybackDestination: BUYBACK_DESTINATION,
customFee: 3000, // 0.3% swap fee
// Distribution must sum to WAD (100%)
assetBuybackPercentWad: parseEther('0.20'), // 20%
numeraireBuybackPercentWad: parseEther('0.20'), // 20%
beneficiaryPercentWad: parseEther('0.30'), // 30%
lpPercentWad: parseEther('0.30'), // 30%
})
.withGovernance({ type: 'noOp' })
.withMigration({ type: 'noOp' })
.withUserAddress(account.address)
.withDopplerHookInitializer(addresses.dopplerHookInitializer!)
.withNoOpMigrator(addresses.noOpMigrator!)
.build();
const result = await sdk.factory.createMulticurve(params);
console.log('Pool:', result.poolId);
console.log('Token:', result.tokenAddress);
}
main();Fee distribution strategies
Heavy buyback (price support)
LP-first (attract liquidity)
Treasury-building
Collecting fees
Configuration reference
RehypeDopplerHookConfig
Parameter
Type
Description
Rules
Last updated