@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.
Files changed (228) hide show
  1. package/README.md +432 -0
  2. package/dist/DopplerSDK.d.mts +56 -0
  3. package/dist/DopplerSDK.d.ts +56 -0
  4. package/dist/DopplerSDK.js +23 -0
  5. package/dist/DopplerSDK.js.map +1 -0
  6. package/dist/DopplerSDK.mjs +14 -0
  7. package/dist/DopplerSDK.mjs.map +1 -0
  8. package/dist/__tests__/mocks/addresses.d.mts +46 -0
  9. package/dist/__tests__/mocks/addresses.d.ts +46 -0
  10. package/dist/__tests__/mocks/addresses.js +53 -0
  11. package/dist/__tests__/mocks/addresses.js.map +1 -0
  12. package/dist/__tests__/mocks/addresses.mjs +44 -0
  13. package/dist/__tests__/mocks/addresses.mjs.map +1 -0
  14. package/dist/__tests__/mocks/clients.d.mts +22 -0
  15. package/dist/__tests__/mocks/clients.d.ts +22 -0
  16. package/dist/__tests__/mocks/clients.js +17088 -0
  17. package/dist/__tests__/mocks/clients.js.map +1 -0
  18. package/dist/__tests__/mocks/clients.mjs +17084 -0
  19. package/dist/__tests__/mocks/clients.mjs.map +1 -0
  20. package/dist/abis/bytecodes.d.mts +5 -0
  21. package/dist/abis/bytecodes.d.ts +5 -0
  22. package/dist/abis/bytecodes.js +21 -0
  23. package/dist/abis/bytecodes.js.map +1 -0
  24. package/dist/abis/bytecodes.mjs +4 -0
  25. package/dist/abis/bytecodes.mjs.map +1 -0
  26. package/dist/abis/index.d.mts +1864 -0
  27. package/dist/abis/index.d.ts +1864 -0
  28. package/dist/abis/index.js +74 -0
  29. package/dist/abis/index.js.map +1 -0
  30. package/dist/abis/index.mjs +5 -0
  31. package/dist/abis/index.mjs.map +1 -0
  32. package/dist/addresses.d.mts +46 -0
  33. package/dist/addresses.d.ts +46 -0
  34. package/dist/addresses.js +21 -0
  35. package/dist/addresses.js.map +1 -0
  36. package/dist/addresses.mjs +4 -0
  37. package/dist/addresses.mjs.map +1 -0
  38. package/dist/chunk-2LPOXGKT.mjs +181 -0
  39. package/dist/chunk-2LPOXGKT.mjs.map +1 -0
  40. package/dist/chunk-4K5GBNQV.mjs +157 -0
  41. package/dist/chunk-4K5GBNQV.mjs.map +1 -0
  42. package/dist/chunk-5B7IYSVK.js +82 -0
  43. package/dist/chunk-5B7IYSVK.js.map +1 -0
  44. package/dist/chunk-6H6BP7GZ.mjs +12 -0
  45. package/dist/chunk-6H6BP7GZ.mjs.map +1 -0
  46. package/dist/chunk-6REZA4TU.mjs +268 -0
  47. package/dist/chunk-6REZA4TU.mjs.map +1 -0
  48. package/dist/chunk-AYPP5JEQ.mjs +67 -0
  49. package/dist/chunk-AYPP5JEQ.mjs.map +1 -0
  50. package/dist/chunk-AZLFJNTG.mjs +3 -0
  51. package/dist/chunk-AZLFJNTG.mjs.map +1 -0
  52. package/dist/chunk-BYK425DD.mjs +160 -0
  53. package/dist/chunk-BYK425DD.mjs.map +1 -0
  54. package/dist/chunk-BYR4WWCZ.mjs +80 -0
  55. package/dist/chunk-BYR4WWCZ.mjs.map +1 -0
  56. package/dist/chunk-CYDWEPFL.mjs +3 -0
  57. package/dist/chunk-CYDWEPFL.mjs.map +1 -0
  58. package/dist/chunk-DLL6MEJA.js +270 -0
  59. package/dist/chunk-DLL6MEJA.js.map +1 -0
  60. package/dist/chunk-DRBRT57F.js +4 -0
  61. package/dist/chunk-DRBRT57F.js.map +1 -0
  62. package/dist/chunk-ER42VG7H.js +102 -0
  63. package/dist/chunk-ER42VG7H.js.map +1 -0
  64. package/dist/chunk-FOESYJP3.mjs +3 -0
  65. package/dist/chunk-FOESYJP3.mjs.map +1 -0
  66. package/dist/chunk-IGLVXIHA.js +924 -0
  67. package/dist/chunk-IGLVXIHA.js.map +1 -0
  68. package/dist/chunk-IPW2I4JJ.mjs +922 -0
  69. package/dist/chunk-IPW2I4JJ.mjs.map +1 -0
  70. package/dist/chunk-IX32KFK3.js +14 -0
  71. package/dist/chunk-IX32KFK3.js.map +1 -0
  72. package/dist/chunk-JHKPKTCV.js +1269 -0
  73. package/dist/chunk-JHKPKTCV.js.map +1 -0
  74. package/dist/chunk-K7BWQVAX.js +185 -0
  75. package/dist/chunk-K7BWQVAX.js.map +1 -0
  76. package/dist/chunk-KEXKKQVW.js +42 -0
  77. package/dist/chunk-KEXKKQVW.js.map +1 -0
  78. package/dist/chunk-KPBCG4X2.js +76 -0
  79. package/dist/chunk-KPBCG4X2.js.map +1 -0
  80. package/dist/chunk-KRN3ROUE.js +4 -0
  81. package/dist/chunk-KRN3ROUE.js.map +1 -0
  82. package/dist/chunk-L4TKYN6R.mjs +207 -0
  83. package/dist/chunk-L4TKYN6R.mjs.map +1 -0
  84. package/dist/chunk-LOROXNH3.mjs +37 -0
  85. package/dist/chunk-LOROXNH3.mjs.map +1 -0
  86. package/dist/chunk-NDWBEGEN.mjs +8 -0
  87. package/dist/chunk-NDWBEGEN.mjs.map +1 -0
  88. package/dist/chunk-O55NMSZK.mjs +131 -0
  89. package/dist/chunk-O55NMSZK.mjs.map +1 -0
  90. package/dist/chunk-OMN7RXR4.js +12 -0
  91. package/dist/chunk-OMN7RXR4.js.map +1 -0
  92. package/dist/chunk-OPKQMN46.mjs +54 -0
  93. package/dist/chunk-OPKQMN46.mjs.map +1 -0
  94. package/dist/chunk-P7CHGWY7.js +4 -0
  95. package/dist/chunk-P7CHGWY7.js.map +1 -0
  96. package/dist/chunk-QSQGLWNY.mjs +3 -0
  97. package/dist/chunk-QSQGLWNY.mjs.map +1 -0
  98. package/dist/chunk-R3YCKIM4.js +133 -0
  99. package/dist/chunk-R3YCKIM4.js.map +1 -0
  100. package/dist/chunk-RV64M4Q6.mjs +3 -0
  101. package/dist/chunk-RV64M4Q6.mjs.map +1 -0
  102. package/dist/chunk-SIVXK7WY.js +162 -0
  103. package/dist/chunk-SIVXK7WY.js.map +1 -0
  104. package/dist/chunk-T644D54P.mjs +65 -0
  105. package/dist/chunk-T644D54P.mjs.map +1 -0
  106. package/dist/chunk-TOMVBPNZ.js +56 -0
  107. package/dist/chunk-TOMVBPNZ.js.map +1 -0
  108. package/dist/chunk-VEIVYUYF.js +4 -0
  109. package/dist/chunk-VEIVYUYF.js.map +1 -0
  110. package/dist/chunk-WQHTNL5L.js +4 -0
  111. package/dist/chunk-WQHTNL5L.js.map +1 -0
  112. package/dist/chunk-X3UMAHOJ.js +4 -0
  113. package/dist/chunk-X3UMAHOJ.js.map +1 -0
  114. package/dist/chunk-XG7K4R56.js +170 -0
  115. package/dist/chunk-XG7K4R56.js.map +1 -0
  116. package/dist/chunk-XJGF77WN.mjs +1254 -0
  117. package/dist/chunk-XJGF77WN.mjs.map +1 -0
  118. package/dist/chunk-XNMXN5SZ.mjs +3 -0
  119. package/dist/chunk-XNMXN5SZ.mjs.map +1 -0
  120. package/dist/chunk-YPNUUFAD.js +209 -0
  121. package/dist/chunk-YPNUUFAD.js.map +1 -0
  122. package/dist/constants.d.mts +50 -0
  123. package/dist/constants.d.ts +50 -0
  124. package/dist/constants.js +153 -0
  125. package/dist/constants.js.map +1 -0
  126. package/dist/constants.mjs +4 -0
  127. package/dist/constants.mjs.map +1 -0
  128. package/dist/entities/DopplerFactory.d.mts +118 -0
  129. package/dist/entities/DopplerFactory.d.ts +118 -0
  130. package/dist/entities/DopplerFactory.js +17 -0
  131. package/dist/entities/DopplerFactory.js.map +1 -0
  132. package/dist/entities/DopplerFactory.mjs +8 -0
  133. package/dist/entities/DopplerFactory.mjs.map +1 -0
  134. package/dist/entities/auction/DynamicAuction.d.mts +57 -0
  135. package/dist/entities/auction/DynamicAuction.d.ts +57 -0
  136. package/dist/entities/auction/DynamicAuction.js +16 -0
  137. package/dist/entities/auction/DynamicAuction.js.map +1 -0
  138. package/dist/entities/auction/DynamicAuction.mjs +7 -0
  139. package/dist/entities/auction/DynamicAuction.mjs.map +1 -0
  140. package/dist/entities/auction/StaticAuction.d.mts +41 -0
  141. package/dist/entities/auction/StaticAuction.d.ts +41 -0
  142. package/dist/entities/auction/StaticAuction.js +16 -0
  143. package/dist/entities/auction/StaticAuction.js.map +1 -0
  144. package/dist/entities/auction/StaticAuction.mjs +7 -0
  145. package/dist/entities/auction/StaticAuction.mjs.map +1 -0
  146. package/dist/entities/auction/index.d.mts +4 -0
  147. package/dist/entities/auction/index.d.ts +4 -0
  148. package/dist/entities/auction/index.js +22 -0
  149. package/dist/entities/auction/index.js.map +1 -0
  150. package/dist/entities/auction/index.mjs +9 -0
  151. package/dist/entities/auction/index.mjs.map +1 -0
  152. package/dist/entities/quoter/Quoter.d.mts +108 -0
  153. package/dist/entities/quoter/Quoter.d.ts +108 -0
  154. package/dist/entities/quoter/Quoter.js +16 -0
  155. package/dist/entities/quoter/Quoter.js.map +1 -0
  156. package/dist/entities/quoter/Quoter.mjs +7 -0
  157. package/dist/entities/quoter/Quoter.mjs.map +1 -0
  158. package/dist/entities/quoter/index.d.mts +2 -0
  159. package/dist/entities/quoter/index.d.ts +2 -0
  160. package/dist/entities/quoter/index.js +17 -0
  161. package/dist/entities/quoter/index.js.map +1 -0
  162. package/dist/entities/quoter/index.mjs +8 -0
  163. package/dist/entities/quoter/index.mjs.map +1 -0
  164. package/dist/entities/token/derc20/Derc20.d.mts +76 -0
  165. package/dist/entities/token/derc20/Derc20.d.ts +76 -0
  166. package/dist/entities/token/derc20/Derc20.js +15 -0
  167. package/dist/entities/token/derc20/Derc20.js.map +1 -0
  168. package/dist/entities/token/derc20/Derc20.mjs +6 -0
  169. package/dist/entities/token/derc20/Derc20.mjs.map +1 -0
  170. package/dist/entities/token/derc20/index.d.mts +2 -0
  171. package/dist/entities/token/derc20/index.d.ts +2 -0
  172. package/dist/entities/token/derc20/index.js +16 -0
  173. package/dist/entities/token/derc20/index.js.map +1 -0
  174. package/dist/entities/token/derc20/index.mjs +7 -0
  175. package/dist/entities/token/derc20/index.mjs.map +1 -0
  176. package/dist/entities/token/eth/Eth.d.mts +50 -0
  177. package/dist/entities/token/eth/Eth.d.ts +50 -0
  178. package/dist/entities/token/eth/Eth.js +13 -0
  179. package/dist/entities/token/eth/Eth.js.map +1 -0
  180. package/dist/entities/token/eth/Eth.mjs +4 -0
  181. package/dist/entities/token/eth/Eth.mjs.map +1 -0
  182. package/dist/entities/token/eth/index.d.mts +2 -0
  183. package/dist/entities/token/eth/index.d.ts +2 -0
  184. package/dist/entities/token/eth/index.js +14 -0
  185. package/dist/entities/token/eth/index.js.map +1 -0
  186. package/dist/entities/token/eth/index.mjs +5 -0
  187. package/dist/entities/token/eth/index.mjs.map +1 -0
  188. package/dist/entities/token/index.d.mts +3 -0
  189. package/dist/entities/token/index.d.ts +3 -0
  190. package/dist/entities/token/index.js +23 -0
  191. package/dist/entities/token/index.js.map +1 -0
  192. package/dist/entities/token/index.mjs +10 -0
  193. package/dist/entities/token/index.mjs.map +1 -0
  194. package/dist/index.d.mts +19 -0
  195. package/dist/index.d.ts +19 -0
  196. package/dist/index.js +338 -0
  197. package/dist/index.js.map +1 -0
  198. package/dist/index.mjs +28 -0
  199. package/dist/index.mjs.map +1 -0
  200. package/dist/magic-string.es-NMLAOY5A.js +1298 -0
  201. package/dist/magic-string.es-NMLAOY5A.js.map +1 -0
  202. package/dist/magic-string.es-QCVTE6QG.mjs +1292 -0
  203. package/dist/magic-string.es-QCVTE6QG.mjs.map +1 -0
  204. package/dist/types.d.mts +206 -0
  205. package/dist/types.d.ts +206 -0
  206. package/dist/types.js +13 -0
  207. package/dist/types.js.map +1 -0
  208. package/dist/types.mjs +4 -0
  209. package/dist/types.mjs.map +1 -0
  210. package/dist/utils/index.d.mts +2 -0
  211. package/dist/utils/index.d.ts +2 -0
  212. package/dist/utils/index.js +91 -0
  213. package/dist/utils/index.js.map +1 -0
  214. package/dist/utils/index.mjs +6 -0
  215. package/dist/utils/index.mjs.map +1 -0
  216. package/dist/utils/priceHelpers.d.mts +86 -0
  217. package/dist/utils/priceHelpers.d.ts +86 -0
  218. package/dist/utils/priceHelpers.js +42 -0
  219. package/dist/utils/priceHelpers.js.map +1 -0
  220. package/dist/utils/priceHelpers.mjs +5 -0
  221. package/dist/utils/priceHelpers.mjs.map +1 -0
  222. package/dist/utils/tickMath.d.mts +65 -0
  223. package/dist/utils/tickMath.d.ts +65 -0
  224. package/dist/utils/tickMath.js +57 -0
  225. package/dist/utils/tickMath.js.map +1 -0
  226. package/dist/utils/tickMath.mjs +4 -0
  227. package/dist/utils/tickMath.mjs.map +1 -0
  228. 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 };