@whetstone-research/doppler-sdk 0.0.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +432 -0
- package/dist/DopplerSDK.d.mts +56 -0
- package/dist/DopplerSDK.d.ts +56 -0
- package/dist/DopplerSDK.js +23 -0
- package/dist/DopplerSDK.js.map +1 -0
- package/dist/DopplerSDK.mjs +14 -0
- package/dist/DopplerSDK.mjs.map +1 -0
- package/dist/__tests__/mocks/addresses.d.mts +46 -0
- package/dist/__tests__/mocks/addresses.d.ts +46 -0
- package/dist/__tests__/mocks/addresses.js +53 -0
- package/dist/__tests__/mocks/addresses.js.map +1 -0
- package/dist/__tests__/mocks/addresses.mjs +44 -0
- package/dist/__tests__/mocks/addresses.mjs.map +1 -0
- package/dist/__tests__/mocks/clients.d.mts +22 -0
- package/dist/__tests__/mocks/clients.d.ts +22 -0
- package/dist/__tests__/mocks/clients.js +17088 -0
- package/dist/__tests__/mocks/clients.js.map +1 -0
- package/dist/__tests__/mocks/clients.mjs +17084 -0
- package/dist/__tests__/mocks/clients.mjs.map +1 -0
- package/dist/abis/bytecodes.d.mts +5 -0
- package/dist/abis/bytecodes.d.ts +5 -0
- package/dist/abis/bytecodes.js +21 -0
- package/dist/abis/bytecodes.js.map +1 -0
- package/dist/abis/bytecodes.mjs +4 -0
- package/dist/abis/bytecodes.mjs.map +1 -0
- package/dist/abis/index.d.mts +1864 -0
- package/dist/abis/index.d.ts +1864 -0
- package/dist/abis/index.js +74 -0
- package/dist/abis/index.js.map +1 -0
- package/dist/abis/index.mjs +5 -0
- package/dist/abis/index.mjs.map +1 -0
- package/dist/addresses.d.mts +46 -0
- package/dist/addresses.d.ts +46 -0
- package/dist/addresses.js +21 -0
- package/dist/addresses.js.map +1 -0
- package/dist/addresses.mjs +4 -0
- package/dist/addresses.mjs.map +1 -0
- package/dist/chunk-2LPOXGKT.mjs +181 -0
- package/dist/chunk-2LPOXGKT.mjs.map +1 -0
- package/dist/chunk-4K5GBNQV.mjs +157 -0
- package/dist/chunk-4K5GBNQV.mjs.map +1 -0
- package/dist/chunk-5B7IYSVK.js +82 -0
- package/dist/chunk-5B7IYSVK.js.map +1 -0
- package/dist/chunk-6H6BP7GZ.mjs +12 -0
- package/dist/chunk-6H6BP7GZ.mjs.map +1 -0
- package/dist/chunk-6REZA4TU.mjs +268 -0
- package/dist/chunk-6REZA4TU.mjs.map +1 -0
- package/dist/chunk-AYPP5JEQ.mjs +67 -0
- package/dist/chunk-AYPP5JEQ.mjs.map +1 -0
- package/dist/chunk-AZLFJNTG.mjs +3 -0
- package/dist/chunk-AZLFJNTG.mjs.map +1 -0
- package/dist/chunk-BYK425DD.mjs +160 -0
- package/dist/chunk-BYK425DD.mjs.map +1 -0
- package/dist/chunk-BYR4WWCZ.mjs +80 -0
- package/dist/chunk-BYR4WWCZ.mjs.map +1 -0
- package/dist/chunk-CYDWEPFL.mjs +3 -0
- package/dist/chunk-CYDWEPFL.mjs.map +1 -0
- package/dist/chunk-DLL6MEJA.js +270 -0
- package/dist/chunk-DLL6MEJA.js.map +1 -0
- package/dist/chunk-DRBRT57F.js +4 -0
- package/dist/chunk-DRBRT57F.js.map +1 -0
- package/dist/chunk-ER42VG7H.js +102 -0
- package/dist/chunk-ER42VG7H.js.map +1 -0
- package/dist/chunk-FOESYJP3.mjs +3 -0
- package/dist/chunk-FOESYJP3.mjs.map +1 -0
- package/dist/chunk-IGLVXIHA.js +924 -0
- package/dist/chunk-IGLVXIHA.js.map +1 -0
- package/dist/chunk-IPW2I4JJ.mjs +922 -0
- package/dist/chunk-IPW2I4JJ.mjs.map +1 -0
- package/dist/chunk-IX32KFK3.js +14 -0
- package/dist/chunk-IX32KFK3.js.map +1 -0
- package/dist/chunk-JHKPKTCV.js +1269 -0
- package/dist/chunk-JHKPKTCV.js.map +1 -0
- package/dist/chunk-K7BWQVAX.js +185 -0
- package/dist/chunk-K7BWQVAX.js.map +1 -0
- package/dist/chunk-KEXKKQVW.js +42 -0
- package/dist/chunk-KEXKKQVW.js.map +1 -0
- package/dist/chunk-KPBCG4X2.js +76 -0
- package/dist/chunk-KPBCG4X2.js.map +1 -0
- package/dist/chunk-KRN3ROUE.js +4 -0
- package/dist/chunk-KRN3ROUE.js.map +1 -0
- package/dist/chunk-L4TKYN6R.mjs +207 -0
- package/dist/chunk-L4TKYN6R.mjs.map +1 -0
- package/dist/chunk-LOROXNH3.mjs +37 -0
- package/dist/chunk-LOROXNH3.mjs.map +1 -0
- package/dist/chunk-NDWBEGEN.mjs +8 -0
- package/dist/chunk-NDWBEGEN.mjs.map +1 -0
- package/dist/chunk-O55NMSZK.mjs +131 -0
- package/dist/chunk-O55NMSZK.mjs.map +1 -0
- package/dist/chunk-OMN7RXR4.js +12 -0
- package/dist/chunk-OMN7RXR4.js.map +1 -0
- package/dist/chunk-OPKQMN46.mjs +54 -0
- package/dist/chunk-OPKQMN46.mjs.map +1 -0
- package/dist/chunk-P7CHGWY7.js +4 -0
- package/dist/chunk-P7CHGWY7.js.map +1 -0
- package/dist/chunk-QSQGLWNY.mjs +3 -0
- package/dist/chunk-QSQGLWNY.mjs.map +1 -0
- package/dist/chunk-R3YCKIM4.js +133 -0
- package/dist/chunk-R3YCKIM4.js.map +1 -0
- package/dist/chunk-RV64M4Q6.mjs +3 -0
- package/dist/chunk-RV64M4Q6.mjs.map +1 -0
- package/dist/chunk-SIVXK7WY.js +162 -0
- package/dist/chunk-SIVXK7WY.js.map +1 -0
- package/dist/chunk-T644D54P.mjs +65 -0
- package/dist/chunk-T644D54P.mjs.map +1 -0
- package/dist/chunk-TOMVBPNZ.js +56 -0
- package/dist/chunk-TOMVBPNZ.js.map +1 -0
- package/dist/chunk-VEIVYUYF.js +4 -0
- package/dist/chunk-VEIVYUYF.js.map +1 -0
- package/dist/chunk-WQHTNL5L.js +4 -0
- package/dist/chunk-WQHTNL5L.js.map +1 -0
- package/dist/chunk-X3UMAHOJ.js +4 -0
- package/dist/chunk-X3UMAHOJ.js.map +1 -0
- package/dist/chunk-XG7K4R56.js +170 -0
- package/dist/chunk-XG7K4R56.js.map +1 -0
- package/dist/chunk-XJGF77WN.mjs +1254 -0
- package/dist/chunk-XJGF77WN.mjs.map +1 -0
- package/dist/chunk-XNMXN5SZ.mjs +3 -0
- package/dist/chunk-XNMXN5SZ.mjs.map +1 -0
- package/dist/chunk-YPNUUFAD.js +209 -0
- package/dist/chunk-YPNUUFAD.js.map +1 -0
- package/dist/constants.d.mts +50 -0
- package/dist/constants.d.ts +50 -0
- package/dist/constants.js +153 -0
- package/dist/constants.js.map +1 -0
- package/dist/constants.mjs +4 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/entities/DopplerFactory.d.mts +118 -0
- package/dist/entities/DopplerFactory.d.ts +118 -0
- package/dist/entities/DopplerFactory.js +17 -0
- package/dist/entities/DopplerFactory.js.map +1 -0
- package/dist/entities/DopplerFactory.mjs +8 -0
- package/dist/entities/DopplerFactory.mjs.map +1 -0
- package/dist/entities/auction/DynamicAuction.d.mts +57 -0
- package/dist/entities/auction/DynamicAuction.d.ts +57 -0
- package/dist/entities/auction/DynamicAuction.js +16 -0
- package/dist/entities/auction/DynamicAuction.js.map +1 -0
- package/dist/entities/auction/DynamicAuction.mjs +7 -0
- package/dist/entities/auction/DynamicAuction.mjs.map +1 -0
- package/dist/entities/auction/StaticAuction.d.mts +41 -0
- package/dist/entities/auction/StaticAuction.d.ts +41 -0
- package/dist/entities/auction/StaticAuction.js +16 -0
- package/dist/entities/auction/StaticAuction.js.map +1 -0
- package/dist/entities/auction/StaticAuction.mjs +7 -0
- package/dist/entities/auction/StaticAuction.mjs.map +1 -0
- package/dist/entities/auction/index.d.mts +4 -0
- package/dist/entities/auction/index.d.ts +4 -0
- package/dist/entities/auction/index.js +22 -0
- package/dist/entities/auction/index.js.map +1 -0
- package/dist/entities/auction/index.mjs +9 -0
- package/dist/entities/auction/index.mjs.map +1 -0
- package/dist/entities/quoter/Quoter.d.mts +108 -0
- package/dist/entities/quoter/Quoter.d.ts +108 -0
- package/dist/entities/quoter/Quoter.js +16 -0
- package/dist/entities/quoter/Quoter.js.map +1 -0
- package/dist/entities/quoter/Quoter.mjs +7 -0
- package/dist/entities/quoter/Quoter.mjs.map +1 -0
- package/dist/entities/quoter/index.d.mts +2 -0
- package/dist/entities/quoter/index.d.ts +2 -0
- package/dist/entities/quoter/index.js +17 -0
- package/dist/entities/quoter/index.js.map +1 -0
- package/dist/entities/quoter/index.mjs +8 -0
- package/dist/entities/quoter/index.mjs.map +1 -0
- package/dist/entities/token/derc20/Derc20.d.mts +76 -0
- package/dist/entities/token/derc20/Derc20.d.ts +76 -0
- package/dist/entities/token/derc20/Derc20.js +15 -0
- package/dist/entities/token/derc20/Derc20.js.map +1 -0
- package/dist/entities/token/derc20/Derc20.mjs +6 -0
- package/dist/entities/token/derc20/Derc20.mjs.map +1 -0
- package/dist/entities/token/derc20/index.d.mts +2 -0
- package/dist/entities/token/derc20/index.d.ts +2 -0
- package/dist/entities/token/derc20/index.js +16 -0
- package/dist/entities/token/derc20/index.js.map +1 -0
- package/dist/entities/token/derc20/index.mjs +7 -0
- package/dist/entities/token/derc20/index.mjs.map +1 -0
- package/dist/entities/token/eth/Eth.d.mts +50 -0
- package/dist/entities/token/eth/Eth.d.ts +50 -0
- package/dist/entities/token/eth/Eth.js +13 -0
- package/dist/entities/token/eth/Eth.js.map +1 -0
- package/dist/entities/token/eth/Eth.mjs +4 -0
- package/dist/entities/token/eth/Eth.mjs.map +1 -0
- package/dist/entities/token/eth/index.d.mts +2 -0
- package/dist/entities/token/eth/index.d.ts +2 -0
- package/dist/entities/token/eth/index.js +14 -0
- package/dist/entities/token/eth/index.js.map +1 -0
- package/dist/entities/token/eth/index.mjs +5 -0
- package/dist/entities/token/eth/index.mjs.map +1 -0
- package/dist/entities/token/index.d.mts +3 -0
- package/dist/entities/token/index.d.ts +3 -0
- package/dist/entities/token/index.js +23 -0
- package/dist/entities/token/index.js.map +1 -0
- package/dist/entities/token/index.mjs +10 -0
- package/dist/entities/token/index.mjs.map +1 -0
- package/dist/index.d.mts +19 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +338 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +28 -0
- package/dist/index.mjs.map +1 -0
- package/dist/magic-string.es-NMLAOY5A.js +1298 -0
- package/dist/magic-string.es-NMLAOY5A.js.map +1 -0
- package/dist/magic-string.es-QCVTE6QG.mjs +1292 -0
- package/dist/magic-string.es-QCVTE6QG.mjs.map +1 -0
- package/dist/types.d.mts +206 -0
- package/dist/types.d.ts +206 -0
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +4 -0
- package/dist/types.mjs.map +1 -0
- package/dist/utils/index.d.mts +2 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +91 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +6 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/utils/priceHelpers.d.mts +86 -0
- package/dist/utils/priceHelpers.d.ts +86 -0
- package/dist/utils/priceHelpers.js +42 -0
- package/dist/utils/priceHelpers.js.map +1 -0
- package/dist/utils/priceHelpers.mjs +5 -0
- package/dist/utils/priceHelpers.mjs.map +1 -0
- package/dist/utils/tickMath.d.mts +65 -0
- package/dist/utils/tickMath.d.ts +65 -0
- package/dist/utils/tickMath.js +57 -0
- package/dist/utils/tickMath.js.map +1 -0
- package/dist/utils/tickMath.mjs +4 -0
- package/dist/utils/tickMath.mjs.map +1 -0
- package/package.json +62 -0
package/README.md
ADDED
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
# Doppler SDK
|
|
2
|
+
|
|
3
|
+
A unified TypeScript SDK for interacting with the Doppler Protocol - enabling fair token launches through Dutch auction mechanisms on Uniswap.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Doppler SDK consolidates functionality from the previous `doppler-v3-sdk` and `doppler-v4-sdk` packages into a single, intuitive interface. It provides comprehensive support for creating and managing token auctions on Ethereum and EVM-compatible chains.
|
|
8
|
+
|
|
9
|
+
### Key Features
|
|
10
|
+
|
|
11
|
+
- **Static Auctions**: Fixed price range liquidity bootstrapping using Uniswap V3
|
|
12
|
+
- **Dynamic Auctions**: Gradual Dutch auctions using Uniswap V4 hooks
|
|
13
|
+
- **Flexible Migration**: Support for migrating to Uniswap V2, V3, or V4
|
|
14
|
+
- **Token Management**: Built-in support for DERC20 tokens with vesting
|
|
15
|
+
- **Type Safety**: Full TypeScript support with discriminated unions
|
|
16
|
+
- **Chain Support**: Works with Base, Unichain, Ink, and other EVM chains
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install @doppler/sdk viem
|
|
22
|
+
# or
|
|
23
|
+
yarn add @doppler/sdk viem
|
|
24
|
+
# or
|
|
25
|
+
pnpm add @doppler/sdk viem
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Quick Start
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { DopplerSDK } from '@doppler/sdk';
|
|
32
|
+
import { createPublicClient, createWalletClient, http } from 'viem';
|
|
33
|
+
import { base } from 'viem/chains';
|
|
34
|
+
|
|
35
|
+
// Set up viem clients
|
|
36
|
+
const publicClient = createPublicClient({
|
|
37
|
+
chain: base,
|
|
38
|
+
transport: http(),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const walletClient = createWalletClient({
|
|
42
|
+
chain: base,
|
|
43
|
+
transport: http(),
|
|
44
|
+
account: '0x...', // Your wallet address
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// Initialize the SDK
|
|
48
|
+
const sdk = new DopplerSDK({
|
|
49
|
+
publicClient,
|
|
50
|
+
walletClient,
|
|
51
|
+
chainId: base.id,
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Creating Auctions
|
|
56
|
+
|
|
57
|
+
### Static Auction (Fixed Price Range)
|
|
58
|
+
|
|
59
|
+
Static auctions use Uniswap V3 pools with concentrated liquidity in a fixed price range. They're ideal for simple, predictable price discovery.
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
const result = await sdk.factory.createStaticAuction({
|
|
63
|
+
token: {
|
|
64
|
+
name: 'My Token',
|
|
65
|
+
symbol: 'MTK',
|
|
66
|
+
tokenURI: 'https://example.com/metadata.json',
|
|
67
|
+
totalSupply: parseEther('1000000000'), // 1 billion tokens
|
|
68
|
+
},
|
|
69
|
+
sale: {
|
|
70
|
+
numTokensToSell: parseEther('900000000'), // Sell 900 million
|
|
71
|
+
numeraire: '0x...', // WETH address
|
|
72
|
+
},
|
|
73
|
+
pool: {
|
|
74
|
+
startTick: -92103, // ~0.0001 ETH per token
|
|
75
|
+
endTick: -69080, // ~0.001 ETH per token
|
|
76
|
+
fee: 10000, // 1%
|
|
77
|
+
numPositions: 15, // Number of liquidity positions
|
|
78
|
+
},
|
|
79
|
+
vesting: {
|
|
80
|
+
duration: BigInt(365 * 24 * 60 * 60), // 1 year
|
|
81
|
+
recipients: [
|
|
82
|
+
{ address: '0x...', amount: parseEther('50000000') }, // 50M tokens
|
|
83
|
+
{ address: '0x...', amount: parseEther('50000000') }, // 50M tokens
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
migration: {
|
|
87
|
+
type: 'uniswapV2', // Migrate to V2 after auction
|
|
88
|
+
},
|
|
89
|
+
governance: {
|
|
90
|
+
maxShareToBeSold: parseEther('0.35'), // 35% max
|
|
91
|
+
yearlyMintRate: parseEther('0.02'), // 2% annual
|
|
92
|
+
},
|
|
93
|
+
userAddress: '0x...', // Your address
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
console.log('Pool address:', result.poolAddress);
|
|
97
|
+
console.log('Token address:', result.tokenAddress);
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Dynamic Auction (Dutch Auction)
|
|
101
|
+
|
|
102
|
+
Dynamic auctions use Uniswap V4 hooks to implement gradual Dutch auctions where the price moves over time.
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
const result = await sdk.factory.createDynamicAuction({
|
|
106
|
+
token: {
|
|
107
|
+
name: 'My Token',
|
|
108
|
+
symbol: 'MTK',
|
|
109
|
+
tokenURI: 'https://example.com/metadata.json',
|
|
110
|
+
totalSupply: parseEther('1000000'), // 1M tokens
|
|
111
|
+
},
|
|
112
|
+
sale: {
|
|
113
|
+
numTokensToSell: parseEther('900000'), // Sell 900k
|
|
114
|
+
numeraire: '0x...', // WETH address
|
|
115
|
+
minProceeds: parseEther('100'), // Min 100 ETH
|
|
116
|
+
maxProceeds: parseEther('1000'), // Max 1000 ETH
|
|
117
|
+
},
|
|
118
|
+
auction: {
|
|
119
|
+
duration: 7, // 7 days
|
|
120
|
+
epochLength: 3600, // 1 hour epochs
|
|
121
|
+
startTick: -92103, // ~0.0001 ETH per token
|
|
122
|
+
endTick: -69080, // ~0.01 ETH per token
|
|
123
|
+
gamma: parseEther('0.998'), // Price decrease rate
|
|
124
|
+
numPdSlugs: 5, // Price discovery slugs
|
|
125
|
+
},
|
|
126
|
+
pool: {
|
|
127
|
+
fee: 3000, // 0.3%
|
|
128
|
+
tickSpacing: 60, // Standard for 0.3% pools
|
|
129
|
+
},
|
|
130
|
+
vesting: {
|
|
131
|
+
duration: BigInt(365 * 24 * 60 * 60), // 1 year
|
|
132
|
+
recipients: [
|
|
133
|
+
{ address: '0x...', amount: parseEther('50000') },
|
|
134
|
+
{ address: '0x...', amount: parseEther('50000') },
|
|
135
|
+
],
|
|
136
|
+
},
|
|
137
|
+
migration: {
|
|
138
|
+
type: 'uniswapV4',
|
|
139
|
+
fee: 3000,
|
|
140
|
+
tickSpacing: 60,
|
|
141
|
+
streamableFees: {
|
|
142
|
+
lockDuration: 365 * 24 * 60 * 60, // 1 year
|
|
143
|
+
beneficiaries: [
|
|
144
|
+
{ address: '0x...', percentage: 5000 }, // 50%
|
|
145
|
+
{ address: '0x...', percentage: 5000 }, // 50%
|
|
146
|
+
],
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
userAddress: '0x...',
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
console.log('Hook address:', result.hookAddress);
|
|
153
|
+
console.log('Token address:', result.tokenAddress);
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Simplified Creation with Defaults
|
|
157
|
+
|
|
158
|
+
The SDK intelligently applies defaults when parameters are omitted. Here are examples with minimal configuration:
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
// Minimal static auction
|
|
162
|
+
const result = await sdk.factory.createStaticAuction({
|
|
163
|
+
token: {
|
|
164
|
+
name: 'My Token',
|
|
165
|
+
symbol: 'MTK',
|
|
166
|
+
tokenURI: 'https://example.com/metadata.json',
|
|
167
|
+
// totalSupply defaults to 1 billion
|
|
168
|
+
},
|
|
169
|
+
sale: {
|
|
170
|
+
// numTokensToSell defaults to 90% of total supply
|
|
171
|
+
numeraire: '0x...', // WETH address (required)
|
|
172
|
+
},
|
|
173
|
+
pool: {
|
|
174
|
+
// Defaults: fee=10000 (1%), numPositions=15
|
|
175
|
+
// Start/end ticks calculated from reasonable price range
|
|
176
|
+
},
|
|
177
|
+
migration: {
|
|
178
|
+
type: 'uniswapV2', // Required
|
|
179
|
+
},
|
|
180
|
+
userAddress: '0x...', // Required
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
// Minimal dynamic auction
|
|
184
|
+
const result = await sdk.factory.createDynamicAuction({
|
|
185
|
+
token: {
|
|
186
|
+
name: 'My Token',
|
|
187
|
+
symbol: 'MTK',
|
|
188
|
+
tokenURI: 'https://example.com/metadata.json',
|
|
189
|
+
},
|
|
190
|
+
sale: {
|
|
191
|
+
numeraire: '0x...', // WETH address
|
|
192
|
+
minProceeds: parseEther('100'),
|
|
193
|
+
maxProceeds: parseEther('1000'),
|
|
194
|
+
},
|
|
195
|
+
auction: {
|
|
196
|
+
// Defaults: duration=7 days, epochLength=1 hour
|
|
197
|
+
// gamma and numPdSlugs auto-calculated
|
|
198
|
+
},
|
|
199
|
+
pool: {
|
|
200
|
+
// Defaults: fee=3000 (0.3%), tickSpacing=60
|
|
201
|
+
},
|
|
202
|
+
migration: {
|
|
203
|
+
type: 'uniswapV4',
|
|
204
|
+
},
|
|
205
|
+
userAddress: '0x...',
|
|
206
|
+
});
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Interacting with Auctions
|
|
210
|
+
|
|
211
|
+
### Static Auction Interactions
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
// Get a static auction instance
|
|
215
|
+
const auction = await sdk.getStaticAuction(poolAddress);
|
|
216
|
+
|
|
217
|
+
// Get pool information
|
|
218
|
+
const poolInfo = await auction.getPoolInfo();
|
|
219
|
+
console.log('Current price:', poolInfo.sqrtPriceX96);
|
|
220
|
+
console.log('Liquidity:', poolInfo.liquidity);
|
|
221
|
+
|
|
222
|
+
// Check if ready for migration
|
|
223
|
+
const hasGraduated = await auction.hasGraduated();
|
|
224
|
+
|
|
225
|
+
// Get current price
|
|
226
|
+
const price = await auction.getCurrentPrice();
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Dynamic Auction Interactions
|
|
230
|
+
|
|
231
|
+
```typescript
|
|
232
|
+
// Get a dynamic auction instance
|
|
233
|
+
const auction = await sdk.getDynamicAuction(hookAddress);
|
|
234
|
+
|
|
235
|
+
// Get comprehensive hook information
|
|
236
|
+
const hookInfo = await auction.getHookInfo();
|
|
237
|
+
console.log('Total proceeds:', hookInfo.state.totalProceeds);
|
|
238
|
+
console.log('Tokens sold:', hookInfo.state.totalTokensSold);
|
|
239
|
+
|
|
240
|
+
// Check auction status
|
|
241
|
+
const hasEndedEarly = await auction.hasEndedEarly();
|
|
242
|
+
const currentEpoch = await auction.getCurrentEpoch();
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Token Management
|
|
246
|
+
|
|
247
|
+
### DERC20 Tokens
|
|
248
|
+
|
|
249
|
+
The SDK includes full support for DERC20 tokens with vesting functionality:
|
|
250
|
+
|
|
251
|
+
```typescript
|
|
252
|
+
import { Derc20 } from '@doppler/sdk';
|
|
253
|
+
|
|
254
|
+
const token = new Derc20(publicClient, walletClient, tokenAddress);
|
|
255
|
+
|
|
256
|
+
// Read token information
|
|
257
|
+
const name = await token.getName();
|
|
258
|
+
const symbol = await token.getSymbol();
|
|
259
|
+
const balance = await token.getBalanceOf(address);
|
|
260
|
+
|
|
261
|
+
// Vesting functionality
|
|
262
|
+
const vestingData = await token.getVestingData(address);
|
|
263
|
+
console.log('Total vested:', vestingData.totalAmount);
|
|
264
|
+
console.log('Released:', vestingData.releasedAmount);
|
|
265
|
+
|
|
266
|
+
// Release vested tokens
|
|
267
|
+
await token.release(amountToRelease);
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Native ETH
|
|
271
|
+
|
|
272
|
+
The SDK also provides an ETH wrapper with ERC20-like interface:
|
|
273
|
+
|
|
274
|
+
```typescript
|
|
275
|
+
import { Eth } from '@doppler/sdk';
|
|
276
|
+
|
|
277
|
+
const eth = new Eth(publicClient, walletClient);
|
|
278
|
+
const balance = await eth.getBalanceOf(address);
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Price Quotes
|
|
282
|
+
|
|
283
|
+
Get price quotes across Uniswap V2, V3, and V4:
|
|
284
|
+
|
|
285
|
+
```typescript
|
|
286
|
+
const quoter = sdk.quoter;
|
|
287
|
+
|
|
288
|
+
// Quote on Uniswap V3
|
|
289
|
+
const quote = await quoter.quoteV3ExactInputSingle({
|
|
290
|
+
tokenIn: tokenAddress,
|
|
291
|
+
tokenOut: wethAddress,
|
|
292
|
+
amountIn: parseEther('1000'),
|
|
293
|
+
fee: 3000,
|
|
294
|
+
sqrtPriceLimitX96: 0n,
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
console.log('Expected output:', quote.amountOut);
|
|
298
|
+
console.log('Price after swap:', quote.sqrtPriceX96After);
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
## Migration Configuration
|
|
302
|
+
|
|
303
|
+
The SDK supports flexible migration paths after auction completion:
|
|
304
|
+
|
|
305
|
+
### Migrate to Uniswap V2
|
|
306
|
+
```typescript
|
|
307
|
+
migration: {
|
|
308
|
+
type: 'uniswapV2',
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Migrate to Uniswap V3
|
|
313
|
+
```typescript
|
|
314
|
+
migration: {
|
|
315
|
+
type: 'uniswapV3',
|
|
316
|
+
fee: 3000, // 0.3%
|
|
317
|
+
tickSpacing: 60, // Standard for 0.3% pools
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Migrate to Uniswap V4
|
|
322
|
+
```typescript
|
|
323
|
+
migration: {
|
|
324
|
+
type: 'uniswapV4',
|
|
325
|
+
fee: 3000,
|
|
326
|
+
tickSpacing: 60,
|
|
327
|
+
streamableFees: {
|
|
328
|
+
lockDuration: 365 * 24 * 60 * 60, // 1 year
|
|
329
|
+
beneficiaries: [
|
|
330
|
+
{ address: '0x...', percentage: 10000 }, // 100%
|
|
331
|
+
],
|
|
332
|
+
},
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
## Supported Chains
|
|
337
|
+
|
|
338
|
+
The SDK currently supports:
|
|
339
|
+
- Base (8453)
|
|
340
|
+
- Unichain (1301)
|
|
341
|
+
- Ink Sepolia (763373)
|
|
342
|
+
|
|
343
|
+
## Advanced Usage
|
|
344
|
+
|
|
345
|
+
### Custom Vesting Configuration
|
|
346
|
+
|
|
347
|
+
```typescript
|
|
348
|
+
vesting: {
|
|
349
|
+
duration: 180 * 24 * 60 * 60, // 180 days
|
|
350
|
+
recipients: [
|
|
351
|
+
{ address: '0x...', amount: parseEther('100000') },
|
|
352
|
+
{ address: '0x...', amount: parseEther('50000') },
|
|
353
|
+
],
|
|
354
|
+
}
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### Hook Address Mining (V4)
|
|
358
|
+
|
|
359
|
+
For optimal gas efficiency with Uniswap V4, you can mine hook addresses:
|
|
360
|
+
|
|
361
|
+
```typescript
|
|
362
|
+
// This feature is coming soon
|
|
363
|
+
const minedAddress = await sdk.mineHookAddress({
|
|
364
|
+
prefix: '0x00', // Target prefix for gas optimization
|
|
365
|
+
deployer: '0x...', // Doppler deployer address
|
|
366
|
+
});
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## API Reference
|
|
370
|
+
|
|
371
|
+
### DopplerSDK
|
|
372
|
+
|
|
373
|
+
The main SDK class providing access to all functionality.
|
|
374
|
+
|
|
375
|
+
```typescript
|
|
376
|
+
class DopplerSDK {
|
|
377
|
+
constructor(config: DopplerSDKConfig)
|
|
378
|
+
|
|
379
|
+
// Properties
|
|
380
|
+
factory: DopplerFactory
|
|
381
|
+
quoter: Quoter
|
|
382
|
+
|
|
383
|
+
// Methods
|
|
384
|
+
getStaticAuction(poolAddress: Address): Promise<StaticAuction>
|
|
385
|
+
getDynamicAuction(hookAddress: Address): Promise<DynamicAuction>
|
|
386
|
+
getPoolInfo(poolAddress: Address): Promise<PoolInfo>
|
|
387
|
+
getHookInfo(hookAddress: Address): Promise<HookInfo>
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### Types
|
|
392
|
+
|
|
393
|
+
Key types are exported for use in your applications:
|
|
394
|
+
|
|
395
|
+
```typescript
|
|
396
|
+
import type {
|
|
397
|
+
CreateStaticAuctionParams,
|
|
398
|
+
CreateDynamicAuctionParams,
|
|
399
|
+
MigrationConfig,
|
|
400
|
+
PoolInfo,
|
|
401
|
+
HookInfo,
|
|
402
|
+
VestingConfig,
|
|
403
|
+
} from '@doppler/sdk';
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
## Development
|
|
407
|
+
|
|
408
|
+
```bash
|
|
409
|
+
# Install dependencies
|
|
410
|
+
pnpm install
|
|
411
|
+
|
|
412
|
+
# Build the SDK
|
|
413
|
+
pnpm build
|
|
414
|
+
|
|
415
|
+
# Run tests
|
|
416
|
+
pnpm test
|
|
417
|
+
|
|
418
|
+
# Development mode with watch
|
|
419
|
+
pnpm dev
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
## Migration from Previous SDKs
|
|
423
|
+
|
|
424
|
+
If you're migrating from `doppler-v3-sdk` or `doppler-v4-sdk`, see our [Migration Guide](./docs/migration-guide.md).
|
|
425
|
+
|
|
426
|
+
## Contributing
|
|
427
|
+
|
|
428
|
+
Contributions are welcome! Please see our [Contributing Guide](../../CONTRIBUTING.md) for details.
|
|
429
|
+
|
|
430
|
+
## License
|
|
431
|
+
|
|
432
|
+
MIT License - see [LICENSE](../../LICENSE) for details.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Address, PublicClient, WalletClient } from 'viem';
|
|
2
|
+
import { DopplerSDKConfig, PoolInfo, HookInfo } from './types.mjs';
|
|
3
|
+
import { DopplerFactory } from './entities/DopplerFactory.mjs';
|
|
4
|
+
import { StaticAuction } from './entities/auction/StaticAuction.mjs';
|
|
5
|
+
import { DynamicAuction } from './entities/auction/DynamicAuction.mjs';
|
|
6
|
+
import { Quoter } from './entities/quoter/Quoter.mjs';
|
|
7
|
+
|
|
8
|
+
declare class DopplerSDK {
|
|
9
|
+
private publicClient;
|
|
10
|
+
private walletClient?;
|
|
11
|
+
private chainId;
|
|
12
|
+
private _factory?;
|
|
13
|
+
private _quoter?;
|
|
14
|
+
constructor(config: DopplerSDKConfig);
|
|
15
|
+
/**
|
|
16
|
+
* Get the factory instance for creating auctions
|
|
17
|
+
*/
|
|
18
|
+
get factory(): DopplerFactory;
|
|
19
|
+
/**
|
|
20
|
+
* Get the quoter instance for price queries
|
|
21
|
+
*/
|
|
22
|
+
get quoter(): Quoter;
|
|
23
|
+
/**
|
|
24
|
+
* Get a StaticAuction instance for interacting with a static auction pool
|
|
25
|
+
* @param poolAddress The address of the Uniswap V3 pool
|
|
26
|
+
*/
|
|
27
|
+
getStaticAuction(poolAddress: Address): Promise<StaticAuction>;
|
|
28
|
+
/**
|
|
29
|
+
* Get a DynamicAuction instance for interacting with a dynamic auction hook
|
|
30
|
+
* @param hookAddress The address of the Uniswap V4 hook
|
|
31
|
+
*/
|
|
32
|
+
getDynamicAuction(hookAddress: Address): Promise<DynamicAuction>;
|
|
33
|
+
/**
|
|
34
|
+
* Get information about a static auction pool
|
|
35
|
+
* @param poolAddress The address of the pool
|
|
36
|
+
*/
|
|
37
|
+
getPoolInfo(poolAddress: Address): Promise<PoolInfo>;
|
|
38
|
+
/**
|
|
39
|
+
* Get information about a dynamic auction hook
|
|
40
|
+
* @param hookAddress The address of the hook
|
|
41
|
+
*/
|
|
42
|
+
getHookInfo(hookAddress: Address): Promise<HookInfo>;
|
|
43
|
+
/**
|
|
44
|
+
* Get the current chain ID
|
|
45
|
+
*/
|
|
46
|
+
getChainId(): number;
|
|
47
|
+
/**
|
|
48
|
+
* Get the underlying clients
|
|
49
|
+
*/
|
|
50
|
+
getClients(): {
|
|
51
|
+
publicClient: PublicClient;
|
|
52
|
+
walletClient?: WalletClient;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export { DopplerSDK };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Address, PublicClient, WalletClient } from 'viem';
|
|
2
|
+
import { DopplerSDKConfig, PoolInfo, HookInfo } from './types.js';
|
|
3
|
+
import { DopplerFactory } from './entities/DopplerFactory.js';
|
|
4
|
+
import { StaticAuction } from './entities/auction/StaticAuction.js';
|
|
5
|
+
import { DynamicAuction } from './entities/auction/DynamicAuction.js';
|
|
6
|
+
import { Quoter } from './entities/quoter/Quoter.js';
|
|
7
|
+
|
|
8
|
+
declare class DopplerSDK {
|
|
9
|
+
private publicClient;
|
|
10
|
+
private walletClient?;
|
|
11
|
+
private chainId;
|
|
12
|
+
private _factory?;
|
|
13
|
+
private _quoter?;
|
|
14
|
+
constructor(config: DopplerSDKConfig);
|
|
15
|
+
/**
|
|
16
|
+
* Get the factory instance for creating auctions
|
|
17
|
+
*/
|
|
18
|
+
get factory(): DopplerFactory;
|
|
19
|
+
/**
|
|
20
|
+
* Get the quoter instance for price queries
|
|
21
|
+
*/
|
|
22
|
+
get quoter(): Quoter;
|
|
23
|
+
/**
|
|
24
|
+
* Get a StaticAuction instance for interacting with a static auction pool
|
|
25
|
+
* @param poolAddress The address of the Uniswap V3 pool
|
|
26
|
+
*/
|
|
27
|
+
getStaticAuction(poolAddress: Address): Promise<StaticAuction>;
|
|
28
|
+
/**
|
|
29
|
+
* Get a DynamicAuction instance for interacting with a dynamic auction hook
|
|
30
|
+
* @param hookAddress The address of the Uniswap V4 hook
|
|
31
|
+
*/
|
|
32
|
+
getDynamicAuction(hookAddress: Address): Promise<DynamicAuction>;
|
|
33
|
+
/**
|
|
34
|
+
* Get information about a static auction pool
|
|
35
|
+
* @param poolAddress The address of the pool
|
|
36
|
+
*/
|
|
37
|
+
getPoolInfo(poolAddress: Address): Promise<PoolInfo>;
|
|
38
|
+
/**
|
|
39
|
+
* Get information about a dynamic auction hook
|
|
40
|
+
* @param hookAddress The address of the hook
|
|
41
|
+
*/
|
|
42
|
+
getHookInfo(hookAddress: Address): Promise<HookInfo>;
|
|
43
|
+
/**
|
|
44
|
+
* Get the current chain ID
|
|
45
|
+
*/
|
|
46
|
+
getChainId(): number;
|
|
47
|
+
/**
|
|
48
|
+
* Get the underlying clients
|
|
49
|
+
*/
|
|
50
|
+
getClients(): {
|
|
51
|
+
publicClient: PublicClient;
|
|
52
|
+
walletClient?: WalletClient;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export { DopplerSDK };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk5B7IYSVK_js = require('./chunk-5B7IYSVK.js');
|
|
4
|
+
require('./chunk-P7CHGWY7.js');
|
|
5
|
+
require('./chunk-SIVXK7WY.js');
|
|
6
|
+
require('./chunk-KRN3ROUE.js');
|
|
7
|
+
require('./chunk-DLL6MEJA.js');
|
|
8
|
+
require('./chunk-R3YCKIM4.js');
|
|
9
|
+
require('./chunk-IGLVXIHA.js');
|
|
10
|
+
require('./chunk-K7BWQVAX.js');
|
|
11
|
+
require('./chunk-ER42VG7H.js');
|
|
12
|
+
require('./chunk-JHKPKTCV.js');
|
|
13
|
+
require('./chunk-OMN7RXR4.js');
|
|
14
|
+
require('./chunk-KEXKKQVW.js');
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
Object.defineProperty(exports, "DopplerSDK", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () { return chunk5B7IYSVK_js.DopplerSDK; }
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=DopplerSDK.js.map
|
|
23
|
+
//# sourceMappingURL=DopplerSDK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"DopplerSDK.js"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { DopplerSDK } from './chunk-BYR4WWCZ.mjs';
|
|
2
|
+
import './chunk-QSQGLWNY.mjs';
|
|
3
|
+
import './chunk-BYK425DD.mjs';
|
|
4
|
+
import './chunk-AZLFJNTG.mjs';
|
|
5
|
+
import './chunk-6REZA4TU.mjs';
|
|
6
|
+
import './chunk-O55NMSZK.mjs';
|
|
7
|
+
import './chunk-IPW2I4JJ.mjs';
|
|
8
|
+
import './chunk-2LPOXGKT.mjs';
|
|
9
|
+
import './chunk-T644D54P.mjs';
|
|
10
|
+
import './chunk-XJGF77WN.mjs';
|
|
11
|
+
import './chunk-NDWBEGEN.mjs';
|
|
12
|
+
import './chunk-LOROXNH3.mjs';
|
|
13
|
+
//# sourceMappingURL=DopplerSDK.mjs.map
|
|
14
|
+
//# sourceMappingURL=DopplerSDK.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"DopplerSDK.mjs"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Address } from 'viem';
|
|
2
|
+
import { ChainAddresses } from '../../addresses.mjs';
|
|
3
|
+
|
|
4
|
+
declare const mockAddresses: ChainAddresses;
|
|
5
|
+
declare const mockTokenAddress: Address;
|
|
6
|
+
declare const mockPoolAddress: Address;
|
|
7
|
+
declare const mockHookAddress: Address;
|
|
8
|
+
declare const mockGovernanceAddress: Address;
|
|
9
|
+
declare const mockTimelockAddress: Address;
|
|
10
|
+
declare const mockV2PoolAddress: Address;
|
|
11
|
+
declare const mockAddressesWithExtras: {
|
|
12
|
+
token: `0x${string}`;
|
|
13
|
+
hook: `0x${string}`;
|
|
14
|
+
governance: `0x${string}`;
|
|
15
|
+
timelock: `0x${string}`;
|
|
16
|
+
v2Pool: `0x${string}`;
|
|
17
|
+
user: Address;
|
|
18
|
+
airlock: Address;
|
|
19
|
+
tokenFactory: Address;
|
|
20
|
+
v3Initializer: Address;
|
|
21
|
+
v3Quoter: Address;
|
|
22
|
+
lockableV3Initializer?: Address;
|
|
23
|
+
v4Initializer: Address;
|
|
24
|
+
doppler: Address;
|
|
25
|
+
dopplerLens: Address;
|
|
26
|
+
dopplerDeployer: Address;
|
|
27
|
+
poolManager: Address;
|
|
28
|
+
stateView: Address;
|
|
29
|
+
v4Quoter?: Address;
|
|
30
|
+
v2Migrator: Address;
|
|
31
|
+
v3Migrator: Address;
|
|
32
|
+
v4Migrator: Address;
|
|
33
|
+
v4MigratorHook?: Address;
|
|
34
|
+
governanceFactory: Address;
|
|
35
|
+
noOpGovernanceFactory?: Address;
|
|
36
|
+
streamableFeesLocker?: Address;
|
|
37
|
+
universalRouter: Address;
|
|
38
|
+
univ2Router02?: Address;
|
|
39
|
+
permit2: Address;
|
|
40
|
+
bundler?: Address;
|
|
41
|
+
weth: Address;
|
|
42
|
+
uniswapV2Factory?: Address;
|
|
43
|
+
uniswapV3Factory?: Address;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export { mockAddresses, mockAddressesWithExtras, mockGovernanceAddress, mockHookAddress, mockPoolAddress, mockTimelockAddress, mockTokenAddress, mockV2PoolAddress };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Address } from 'viem';
|
|
2
|
+
import { ChainAddresses } from '../../addresses.js';
|
|
3
|
+
|
|
4
|
+
declare const mockAddresses: ChainAddresses;
|
|
5
|
+
declare const mockTokenAddress: Address;
|
|
6
|
+
declare const mockPoolAddress: Address;
|
|
7
|
+
declare const mockHookAddress: Address;
|
|
8
|
+
declare const mockGovernanceAddress: Address;
|
|
9
|
+
declare const mockTimelockAddress: Address;
|
|
10
|
+
declare const mockV2PoolAddress: Address;
|
|
11
|
+
declare const mockAddressesWithExtras: {
|
|
12
|
+
token: `0x${string}`;
|
|
13
|
+
hook: `0x${string}`;
|
|
14
|
+
governance: `0x${string}`;
|
|
15
|
+
timelock: `0x${string}`;
|
|
16
|
+
v2Pool: `0x${string}`;
|
|
17
|
+
user: Address;
|
|
18
|
+
airlock: Address;
|
|
19
|
+
tokenFactory: Address;
|
|
20
|
+
v3Initializer: Address;
|
|
21
|
+
v3Quoter: Address;
|
|
22
|
+
lockableV3Initializer?: Address;
|
|
23
|
+
v4Initializer: Address;
|
|
24
|
+
doppler: Address;
|
|
25
|
+
dopplerLens: Address;
|
|
26
|
+
dopplerDeployer: Address;
|
|
27
|
+
poolManager: Address;
|
|
28
|
+
stateView: Address;
|
|
29
|
+
v4Quoter?: Address;
|
|
30
|
+
v2Migrator: Address;
|
|
31
|
+
v3Migrator: Address;
|
|
32
|
+
v4Migrator: Address;
|
|
33
|
+
v4MigratorHook?: Address;
|
|
34
|
+
governanceFactory: Address;
|
|
35
|
+
noOpGovernanceFactory?: Address;
|
|
36
|
+
streamableFeesLocker?: Address;
|
|
37
|
+
universalRouter: Address;
|
|
38
|
+
univ2Router02?: Address;
|
|
39
|
+
permit2: Address;
|
|
40
|
+
bundler?: Address;
|
|
41
|
+
weth: Address;
|
|
42
|
+
uniswapV2Factory?: Address;
|
|
43
|
+
uniswapV3Factory?: Address;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export { mockAddresses, mockAddressesWithExtras, mockGovernanceAddress, mockHookAddress, mockPoolAddress, mockTimelockAddress, mockTokenAddress, mockV2PoolAddress };
|