@whetstone-research/doppler-sdk 1.0.35 → 1.0.37

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/dist/evm/index.js CHANGED
@@ -1,16 +1,11 @@
1
1
  import '../chunk-PZ5AY32C.js';
2
- import { parseEther, formatEther, getAddress, encodeAbiParameters, keccak256, isAddress, zeroAddress, decodeAbiParameters, encodePacked, decodeEventLog, toHex, ContractFunctionRevertedError, ExecutionRevertedError, BaseError, encodeFunctionData, zeroHash, multicall3Abi, decodeFunctionResult, ContractFunctionZeroDataError, isHex, decodeErrorResult } from 'viem';
2
+ import { parseEther, formatEther, getAddress, encodeAbiParameters, keccak256, isAddress, zeroAddress, decodeEventLog, decodeAbiParameters, encodePacked, toHex, ContractFunctionRevertedError, ExecutionRevertedError, BaseError, encodeFunctionData, erc20Abi, zeroHash, multicall3Abi, decodeFunctionResult, ContractFunctionZeroDataError, isHex, decodeErrorResult } from 'viem';
3
3
 
4
4
  // src/evm/deployments.generated.ts
5
5
  var GENERATED_DOPPLER_DEPLOYMENTS = {
6
6
  "1": {
7
7
  Airlock: "0xDe3599a2eC440B296373a983C85C365DA55d9dFA",
8
- CloneDERC20VotesV2: "0x4BBfed1c27CDE12eF6638251D81ab4e3be7556b7",
9
- CloneDERC20VotesV2Factory: "0x16F5ACB64F4FA17296E942C51d3395aDC318f9e1",
10
- CloneERC20: "0x215b2cE3Dd8D110394e94A868580D61a77aDEc4A",
11
- CloneERC20Factory: "0xe7Df2A4520C26a2D4Dedb3a7585BFBcd30eABA6e",
12
- CloneERC20Votes: "0xA8d0E8036D3fAE21C7Af075ad41942Bc1f807CDF",
13
- CloneERC20VotesFactory: "0x5A92bFfbc01ea0396A9c7D4154d36d4EAF2e483E",
8
+ Bundler: "0xf45588E8e0B1df9dB9ae7E20eCE5726AE931357c",
14
9
  DopplerCreateXDeployer: "0x103004E50Bed65DFBa30dD9c264B6BdF5e529B83",
15
10
  DopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
16
11
  DopplerERC20V1: "0xDB7B520bb5C3a2C5d4871198081911359f93be87",
@@ -22,48 +17,19 @@ var GENERATED_DOPPLER_DEPLOYMENTS = {
22
17
  LockableUniswapV3Initializer: "0xA2E0435225D52a8B950122752978007D758056d7",
23
18
  NoOpGovernanceFactory: "0xddAE8B3eD08184682f7Bc32B74d943cEEfEab638",
24
19
  NoOpMigrator: "0x233A71A7bB928b1357A1Ebf454298320989Ca5B5",
25
- Quoter: "0x076838736F90Cd1d30dED756A3B89E576BE972F8",
26
- RehypeDopplerHook: "0x3Ec4798A9B11e8243A8Db99687f7A23597B96623",
27
- RehypeDopplerHookInitializer: "0x9982538F41f2ae29ddb9d3D9307010052984FDbB",
28
- RehypeDopplerHookMigrator: "0x975f9d1939cf6e4A3c9D99f9d41e6411CF4dA23b",
29
- StreamableFeesLocker: "0xe24FC2F7191e850e2D4514aBb4d39305b1871eC6",
20
+ Quoter: "0xce6cd4E35447E05A39A50A4bCf61f2DcD93A8f0D",
21
+ RehypeDopplerHookInitializer: "0x5F9eB5f6726Fe88D5e39867967F5b833d2fA3215",
22
+ RehypeDopplerHookMigrator: "0x660740D7d6Fb2C8998Fa3ffF459cceB9Ac12C84B",
30
23
  StreamableFeesLockerV2: "0xcE3212e6536F33cD6fbFEE265224131353Ca3D47",
31
24
  TimelockFactory: "0x9fd40af2baAfAF03513f091444e821c0d5b06ea0",
32
25
  TopUpDistributor: "0x435312320C0330B1999746753551CdFbD83aD814",
33
26
  UniswapV2Locker: "0x06731e30df4B0209ED19C39Ba8eD253e17b0E495",
34
- UniswapV2Migrator: "0x765875bff87614cE0581ee73B9fa663B71F3DfF2",
35
27
  UniswapV2MigratorSplit: "0xD7abA5f1d80a330a6fe9E96F7bA122710E0912d3",
36
- UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad",
37
- UniswapV4Migrator: "0x0820A4D0173C17Ece283f7bDaAF0f8876eB205f5",
38
- UniswapV4MigratorHook: "0x4053D4fa966cbdCC20Ec62070aC8814De8bEE500",
39
- UniswapV4MigratorSplit: "0xa1b06BE4f2fC347d194240D79EDa9F40CCAd9732",
40
- UniswapV4MigratorSplitHook: "0x103aB8804e66bC272840940CBa0ad34729c4e500",
41
- UniswapV4ScheduledMulticurveInitializer: "0xF84378C9F39e0FF267f3101c88773359c5393876",
42
- UniswapV4ScheduledMulticurveInitializerHook: "0xc6a562cb5CbFA29BCB1bDCCF903b8B8f2E4A2DC0"
43
- },
44
- "130": {
45
- Airlock: "0x77EbfBAE15AD200758E9E2E61597c0B07d731254",
46
- Bundler: "0x91231cDdD8d6C86Df602070a3081478e074b97b7",
47
- DopplerDeployer: "0x0d2f38d807bfAd5C18e430516e10ab560D300caF",
48
- DopplerLensQuoter: "0x82Ac010C67f70BACf7655cd8948a4AD92A173CAC",
49
- GovernanceFactory: "0x99C94B9Df930E1E21a4E4a2c105dBff21bF5c5aE",
50
- LockableUniswapV3Initializer: "0xA3C847eAb58eAa9cbc215C785c9cfBc19CDABD5f",
51
- NoOpGovernanceFactory: "0x3AD727ee0FBBb8Ee0920933FdB96F23fD56f1299",
52
- NoOpMigrator: "0x917da361072ce968acD810BbfC9B64079426ebf0",
53
- StreamableFeesLocker: "0x6ddfED58D238Ca3195E49d8ac3d4cEa6386E5C33",
54
- TokenFactory: "0x43d0D97EC9241A8F05A264f94B82A1d2E600f2B3",
55
- TokenFactory80: "0xf0B5141dD9096254B2ca624dff26024f46087229",
56
- UniswapV2Migrator: "0xf6023127f6E937091D5B605680056A6D27524bad",
57
- UniswapV3Initializer: "0x9F4e56be80f08ba1A2445645EFa6d231E27b43ec",
58
- UniswapV4Initializer: "0x4B0EC16Eb40318Ca5A4346f20F04A2285C19675B",
59
- UniswapV4Migrator: "0x49F3fBB2dFF7f3d03B622e3b2a6d3F2E6fdB2a5A",
60
- UniswapV4MigratorHook: "0x53C050d3B09C80024138165520Bd7c078D9e2000"
28
+ UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad"
61
29
  },
62
30
  "143": {
63
31
  Airlock: "0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12",
64
- Bundler: "0xC99b485499f78995C6F1640dbB1413c57f8BA684",
65
- CloneDERC20VotesV2: "0x4BBfed1c27CDE12eF6638251D81ab4e3be7556b7",
66
- CloneDERC20VotesV2Factory: "0x16F5ACB64F4FA17296E942C51d3395aDC318f9e1",
32
+ Bundler: "0xf45588E8e0B1df9dB9ae7E20eCE5726AE931357c",
67
33
  DopplerCreateXDeployer: "0x103004E50Bed65DFBa30dD9c264B6BdF5e529B83",
68
34
  DopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
69
35
  DopplerERC20V1: "0xDB7B520bb5C3a2C5d4871198081911359f93be87",
@@ -75,58 +41,19 @@ var GENERATED_DOPPLER_DEPLOYMENTS = {
75
41
  LockableUniswapV3Initializer: "0x8b4C7DB9121FC885689C0A50D5a1429F15AEc2a0",
76
42
  NoOpGovernanceFactory: "0xb4deE32EB70A5E55f3D2d861F49Fb3D79f7a14d9",
77
43
  NoOpMigrator: "0x5F3bA43D44375286296Cb85F1EA2EBfa25dde731",
78
- Quoter: "0x076838736F90Cd1d30dED756A3B89E576BE972F8",
79
- RehypeDopplerHook: "0x97cAD5684FB7Cc2bEd9a9b5eBfba67138F4f2503",
80
- RehypeDopplerHookInitializer: "0x9982538F41f2ae29ddb9d3D9307010052984FDbB",
81
- RehypeDopplerHookMigrator: "0x975f9d1939cf6e4A3c9D99f9d41e6411CF4dA23b",
82
- StreamableFeesLocker: "0x63f8C8F9beFaab2FaCD7Ece0b0242f78B920Ee90",
44
+ Quoter: "0xce6cd4E35447E05A39A50A4bCf61f2DcD93A8f0D",
45
+ RehypeDopplerHookInitializer: "0x5F9eB5f6726Fe88D5e39867967F5b833d2fA3215",
46
+ RehypeDopplerHookMigrator: "0x660740D7d6Fb2C8998Fa3ffF459cceB9Ac12C84B",
83
47
  StreamableFeesLockerV2: "0xcE3212e6536F33cD6fbFEE265224131353Ca3D47",
84
48
  TimelockFactory: "0x44610355465c1F5914C8B8ea0E7c887CC67459b2",
85
- TokenFactory: "0xaA47D2977d622DBdFD33eeF6a8276727c52EB4e5",
86
- TokenFactory80: "0xf0B5141dD9096254B2ca624dff26024f46087229",
87
49
  TopUpDistributor: "0x435312320C0330B1999746753551CdFbD83aD814",
88
50
  UniswapV2Locker: "0x06731e30df4B0209ED19C39Ba8eD253e17b0E495",
89
- UniswapV2Migrator: "0x136191B46478cAB023cbC01a36160C4Aad81677a",
90
51
  UniswapV2MigratorSplit: "0xD7abA5f1d80a330a6fe9E96F7bA122710E0912d3",
91
- UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad",
92
- UniswapV4Migrator: "0x44bf742e57cd8cF23ABbc8dab2c44e2a3228356E",
93
- UniswapV4MigratorHook: "0x3E4c689BBf33b37106eBC13Db8aa5BF13a25e500",
94
- UniswapV4MigratorSplit: "0xa1b06BE4f2fC347d194240D79EDa9F40CCAd9732",
95
- UniswapV4MigratorSplitHook: "0x103aB8804e66bC272840940CBa0ad34729c4e500",
96
- UniswapV4ScheduledMulticurveInitializer: "0xCe3099B2F07029b086E5e92a1573C5f5A3071783",
97
- UniswapV4ScheduledMulticurveInitializerHook: "0x580ca49389d83b019d07E17e99454f2F218e2dc0"
98
- },
99
- "1301": {
100
- Airlock: "0x0d2f38d807bfAd5C18e430516e10ab560D300caF",
101
- AirlockMultisigTestnet: "0x0abCf819FD57C9f0141628410fFC273405E44426",
102
- Bundler: "0xED344444633B965cd148F8fFCE3765938A179094",
103
- DopplerDeployer: "0x77B5F559EE9cf3bfcf2fFf5731a84332D8eECAC9",
104
- DopplerLensQuoter: "0x917da361072ce968acD810BbfC9B64079426ebf0",
105
- GovernanceFactory: "0x4225C632b62622Bd7B0A3eC9745C0a866Ff94F6F",
106
- LockableUniswapV3Initializer: "0x9dFb775dB7b005d9Dc77DA84D8b2e42C281D0344",
107
- NoOpGovernanceFactory: "0x7E5D336A6E9e453c9f02E5102CC039E015Fd8fb8",
108
- NoOpMigrator: "0x193F48A45B6025dDeD10bc4BaeEF65c833696387",
109
- StreamableFeesLocker: "0x1728E8B3282502f275949109331E070b819B38eA",
110
- TokenFactory: "0x82Ac010C67f70BACf7655cd8948a4AD92A173CAC",
111
- TokenFactory80: "0xf0B5141dD9096254B2ca624dff26024f46087229",
112
- UniswapV2Migrator: "0x620e3fec244e913d73f2163623b62d02DB69638B",
113
- UniswapV3Initializer: "0xE0dC4012AC9C868F09c6e4b20d66ED46D6F258d0",
114
- UniswapV4Initializer: "0x70d20cd48791E527036491dc464C8Dc58351Dd93",
115
- UniswapV4Migrator: "0xb6D69eAA98E657bEEFF7ca4452768e6f707aa6b1",
116
- UniswapV4MigratorHook: "0xFB0671Ec46190b09255776d2D77744fa101Ba500",
117
- UniswapV4MulticurveInitializer: "0xac7939F1B4079d55A7fA4DFA314Ac0173A77bA40",
118
- UniswapV4MulticurveInitializerHook: "0x11b55A121a38FDab8FAF16f9f1A4f124E3f42d40",
119
- UniswapV4ScheduledMulticurveInitializer: "0xF84378C9F39e0FF267f3101c88773359c5393876",
120
- UniswapV4ScheduledMulticurveInitializerHook: "0xc6a562cb5CbFA29BCB1bDCCF903b8B8f2E4A2DC0"
121
- },
122
- "4326": {
123
- Airlock: "0xDe3599a2eC440B296373a983C85C365DA55d9dFA",
124
- NoOpGovernanceFactory: "0xddAE8B3eD08184682f7Bc32B74d943cEEfEab638",
125
- NoOpMigrator: "0x233A71A7bB928b1357A1Ebf454298320989Ca5B5"
52
+ UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad"
126
53
  },
127
54
  "4663": {
128
55
  Airlock: "0xeb7C034704eF8Dcd2D32324c1545f62fB4aD0862",
129
- Bundler: "0xEdE0B5fae363232c396724Fa962250Fa197cc5a1",
56
+ Bundler: "0xf45588E8e0B1df9dB9ae7E20eCE5726AE931357c",
130
57
  DN404Factory: "0x37A9Fa204a4d3A429FDED7e3469ab076C854Bc9d",
131
58
  DopplerCreateXDeployer: "0x103004E50Bed65DFBa30dD9c264B6BdF5e529B83",
132
59
  DopplerDeployer: "0x4389AD34938B14F25cff7ED983c53f5a42A2573f",
@@ -140,9 +67,9 @@ var GENERATED_DOPPLER_DEPLOYMENTS = {
140
67
  LockableUniswapV3Initializer: "0xde8886A0019Ea060B8378Ee37b8A23b8117F29A3",
141
68
  NoOpGovernanceFactory: "0x85f37f74Ef2478A770318bc810177a9835911aD7",
142
69
  NoOpMigrator: "0xba2F330EDb16cD8056f5988d8CE19BbC63475A0e",
143
- Quoter: "0x076838736F90Cd1d30dED756A3B89E576BE972F8",
144
- RehypeDopplerHookInitializer: "0x9982538F41f2ae29ddb9d3D9307010052984FDbB",
145
- RehypeDopplerHookMigrator: "0x975f9d1939cf6e4A3c9D99f9d41e6411CF4dA23b",
70
+ Quoter: "0xce6cd4E35447E05A39A50A4bCf61f2DcD93A8f0D",
71
+ RehypeDopplerHookInitializer: "0x5F9eB5f6726Fe88D5e39867967F5b833d2fA3215",
72
+ RehypeDopplerHookMigrator: "0x660740D7d6Fb2C8998Fa3ffF459cceB9Ac12C84B",
146
73
  StreamableFeesLockerV2: "0x7B6147AC3F615bdb764e7EbD5f517dac1AD163B8",
147
74
  SwapRestrictorDopplerHook: "0xC16c826F75338A5Ea626f94f8992191B4ce5abA2",
148
75
  TimelockFactory: "0x6076fdDFCaC0dD980e0350dfF5239feC3f86C578",
@@ -151,26 +78,9 @@ var GENERATED_DOPPLER_DEPLOYMENTS = {
151
78
  UniswapV2MigratorSplit: "0xB05046cEa797c993FB5b583098B1c4682e9Da333",
152
79
  UniswapV4Initializer: "0x6cce158B6D1747617fc218592B4D60B239B957ea"
153
80
  },
154
- "4801": {
155
- Airlock: "0x5F3bA43D44375286296Cb85F1EA2EBfa25dde731",
156
- GovernanceFactory: "0x136191B46478cAB023cbC01a36160C4Aad81677a",
157
- TokenFactory: "0x5FBe931dc4B923A7abe4c47aD68d5bF9Eda5B76D",
158
- UniswapV2Migrator: "0x8b4C7DB9121FC885689C0A50D5a1429F15AEc2a0",
159
- UniswapV3Initializer: "0x9916Ec1c1E0462F6F8f7514e414F06bf001Ac82A",
160
- WETH: "0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12"
161
- },
162
- "6343": {
163
- Airlock: "0xDe3599a2eC440B296373a983C85C365DA55d9dFA",
164
- NoOpGovernanceFactory: "0xddAE8B3eD08184682f7Bc32B74d943cEEfEab638",
165
- NoOpMigrator: "0x233A71A7bB928b1357A1Ebf454298320989Ca5B5"
166
- },
167
81
  "8453": {
168
82
  Airlock: "0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12",
169
- Bundler: "0x136191B46478cAB023cbC01a36160C4Aad81677a",
170
- CloneDERC20VotesV2: "0x4BBfed1c27CDE12eF6638251D81ab4e3be7556b7",
171
- CloneDERC20VotesV2Factory: "0x16F5ACB64F4FA17296E942C51d3395aDC318f9e1",
172
- DecayMulticurveInitializer: "0xD59cE43E53D69F190E15d9822Fb4540dCcc91178",
173
- DecayMulticurveInitializerHook: "0xbB7784A4d481184283Ed89619A3e3ed143e1Adc0",
83
+ Bundler: "0xf45588E8e0B1df9dB9ae7E20eCE5726AE931357c",
174
84
  DN404Factory: "0x37A9Fa204a4d3A429FDED7e3469ab076C854Bc9d",
175
85
  DopplerCreateXDeployer: "0x103004E50Bed65DFBa30dD9c264B6BdF5e529B83",
176
86
  DopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
@@ -184,78 +94,47 @@ var GENERATED_DOPPLER_DEPLOYMENTS = {
184
94
  LockableUniswapV3Initializer: "0xE0dC4012AC9C868F09c6e4b20d66ED46D6F258d0",
185
95
  NoOpGovernanceFactory: "0xe7dfbd5b0A2C3B4464653A9beCdc489229eF090E",
186
96
  NoOpMigrator: "0x6ddfED58D238Ca3195E49d8ac3d4cEa6386E5C33",
187
- Quoter: "0x076838736F90Cd1d30dED756A3B89E576BE972F8",
188
- RehypeDopplerHook: "0x3Ec4798A9B11e8243A8Db99687f7A23597B96623",
189
- RehypeDopplerHookInitializer: "0x9982538F41f2ae29ddb9d3D9307010052984FDbB",
190
- RehypeDopplerHookMigrator: "0x975f9d1939cf6e4A3c9D99f9d41e6411CF4dA23b",
191
- StreamableFeesLocker: "0x0A00775D71a42cd33D62780003035e7F5b47bD3A",
97
+ Quoter: "0xce6cd4E35447E05A39A50A4bCf61f2DcD93A8f0D",
98
+ RehypeDopplerHookInitializer: "0x5F9eB5f6726Fe88D5e39867967F5b833d2fA3215",
99
+ RehypeDopplerHookMigrator: "0x660740D7d6Fb2C8998Fa3ffF459cceB9Ac12C84B",
192
100
  StreamableFeesLockerV2: "0xcE3212e6536F33cD6fbFEE265224131353Ca3D47",
193
101
  TimelockFactory: "0xa636bD5F9179E80e9EdB371Ed90956fA5ebdCB33",
194
- TokenFactory: "0x4225C632b62622Bd7B0A3eC9745C0a866Ff94F6F",
195
- TokenFactory80: "0xf0B5141dD9096254B2ca624dff26024f46087229",
196
102
  TopUpDistributor: "0x435312320C0330B1999746753551CdFbD83aD814",
197
103
  UniswapV2Locker: "0x06731e30df4B0209ED19C39Ba8eD253e17b0E495",
198
- UniswapV2Migrator: "0x5F3bA43D44375286296Cb85F1EA2EBfa25dde731",
199
104
  UniswapV2MigratorSplit: "0xD7abA5f1d80a330a6fe9E96F7bA122710E0912d3",
200
- UniswapV3Initializer: "0xaA47D2977d622DBdFD33eeF6a8276727c52EB4e5",
201
- UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad",
202
- UniswapV4Migrator: "0xd3B4cF7FD24381e90A4F012fC6c5976b87B9B3cE",
203
- UniswapV4MigratorHook: "0xD6FECFF347c6203A41874e8D77dE669B54e7A500",
204
- UniswapV4MigratorSplit: "0xa1b06BE4f2fC347d194240D79EDa9F40CCAd9732",
205
- UniswapV4MigratorSplitHook: "0x103aB8804e66bC272840940CBa0ad34729c4e500",
206
- UniswapV4MulticurveInitializer: "0x65dE470Da664A5be139A5D812bE5FDa0d76CC951",
207
- UniswapV4MulticurveInitializerHook: "0x892D3C2B4ABEAAF67d52A7B29783E2161B7CaD40",
208
- UniswapV4ScheduledMulticurveInitializer: "0xA36715dA46Ddf4A769f3290f49AF58bF8132ED8E",
209
- UniswapV4ScheduledMulticurveInitializerHook: "0x3e342a06f9592459D75721d6956B570F02eF2Dc0"
210
- },
211
- "10143": {
212
- Airlock: "0xDe3599a2eC440B296373a983C85C365DA55d9dFA",
213
- AirlockMultisigTestnet: "0x0abCf819FD57C9f0141628410fFC273405E44426",
214
- Bundler: "0xf6023127f6E937091D5B605680056A6D27524bad",
215
- DopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
216
- DopplerLensQuoter: "0x2F2BAcd46d3F5c9EE052Ab392b73711dB89129DB",
217
- GovernanceFactory: "0x014E1c0bd34f3B10546E554CB33B3293fECDD056",
218
- LockableUniswapV3Initializer: "0x99C94B9Df930E1E21a4E4a2c105dBff21bF5c5aE",
219
- NoOpGovernanceFactory: "0x094D926A969B3024ca46D2186BF13FD5CDBA9CE2",
220
- NoOpMigrator: "0x5CadB034267751a364dDD4d321C99E07A307f915",
221
- StreamableFeesLocker: "0x0d2f38d807bfAd5C18e430516e10ab560D300caF",
222
- TimelockFactory: "0xB544F6fFF61F601F638C3930F6Aec4bbD7DA42b9",
223
- TokenFactory: "0x8AF018e28c273826e6b2d5a99e81c8fB63729b07",
224
- TokenFactory80: "0xf0B5141dD9096254B2ca624dff26024f46087229",
225
- UniswapV2Locker: "0xfF3e891F2C1389eF638F9b0576003590aeEe1844",
226
- UniswapV2Migrator: "0x43d0D97EC9241A8F05A264f94B82A1d2E600f2B3",
227
- UniswapV3Initializer: "0x9F4e56be80f08ba1A2445645EFa6d231E27b43ec",
228
- UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad",
229
- UniswapV4Migrator: "0x4B0EC16Eb40318Ca5A4346f20F04A2285C19675B",
230
- UniswapV4MigratorHook: "0x76E1f507592d9856B48482c599732d129eD6a500",
231
- UniswapV4MulticurveInitializer: "0xA3C847eAb58eAa9cbc215C785c9cfBc19CDABD5f",
232
- UniswapV4MulticurveInitializerHook: "0xFaF16d11737E6552156DD328cD26C530e1da2D40",
233
- WETH: "0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12"
234
- },
235
- "57073": {
236
- Airlock: "0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12",
237
- Bundler: "0x136191B46478cAB023cbC01a36160C4Aad81677a",
238
- DopplerDeployer: "0xa82c66b6ddEb92089015C3565E05B5c9750b2d4B",
239
- DopplerLensQuoter: "0x8AF018e28c273826e6b2d5a99e81c8fB63729b07",
240
- GovernanceFactory: "0xb4deE32EB70A5E55f3D2d861F49Fb3D79f7a14d9",
241
- TokenFactory: "0xFAafdE6a5b658684cC5eb0C5c2c755B00A246F45",
242
- UniswapV2Migrator: "0x5F3bA43D44375286296Cb85F1EA2EBfa25dde731",
243
- UniswapV3Initializer: "0xaA47D2977d622DBdFD33eeF6a8276727c52EB4e5",
244
- UniswapV4Initializer: "0x014E1c0bd34f3B10546E554CB33B3293fECDD056"
105
+ UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad"
106
+ },
107
+ "42161": {
108
+ Airlock: "0xeb7C034704eF8Dcd2D32324c1545f62fB4aD0862",
109
+ Bundler: "0xf45588E8e0B1df9dB9ae7E20eCE5726AE931357c",
110
+ DN404Factory: "0x37A9Fa204a4d3A429FDED7e3469ab076C854Bc9d",
111
+ DopplerCreateXDeployer: "0x103004E50Bed65DFBa30dD9c264B6BdF5e529B83",
112
+ DopplerDeployer: "0x4389AD34938B14F25cff7ED983c53f5a42A2573f",
113
+ DopplerERC20V1: "0x3Be8B97Fd0e713B5aBE0649Fa830223B6B4BC599",
114
+ DopplerERC20V1Factory: "0x1B37D3a72082029c44B35B604Ea473617580b69a",
115
+ DopplerHookInitializer: "0xAa7f809BB3752f715fA2e418230667C382A56544",
116
+ DopplerHookMigrator: "0x7BF319d8e969f7596B1Bc171Da9ce322f67Ae0c4",
117
+ DopplerLensQuoter: "0xf4c22465532f64777FfcD7770831AEca38F35c04",
118
+ GovernanceFactory: "0xDeb0447DAE3EB177c4dbA8bBCCCa25c8F273B7ef",
119
+ LaunchpadGovernanceFactory: "0xdb036746D65DD52126b1915f1AdF555e6C5237Cf",
120
+ LockableUniswapV3Initializer: "0xde8886A0019Ea060B8378Ee37b8A23b8117F29A3",
121
+ NoOpGovernanceFactory: "0x85f37f74Ef2478A770318bc810177a9835911aD7",
122
+ NoOpMigrator: "0xba2F330EDb16cD8056f5988d8CE19BbC63475A0e",
123
+ Quoter: "0xc9Be59b344Ec66547A4C697aa374e959D59b0567",
124
+ RehypeDopplerHookInitializer: "0x5F9eB5f6726Fe88D5e39867967F5b833d2fA3215",
125
+ RehypeDopplerHookMigrator: "0x660740D7d6Fb2C8998Fa3ffF459cceB9Ac12C84B",
126
+ StreamableFeesLockerV2: "0xEd822828B6109d16a9D362b8146a35789E0064f5",
127
+ SwapRestrictorDopplerHook: "0xC16c826F75338A5Ea626f94f8992191B4ce5abA2",
128
+ TimelockFactory: "0x6076fdDFCaC0dD980e0350dfF5239feC3f86C578",
129
+ TopUpDistributor: "0x46adee7595d48b1Ec53090e9bc78e1E69Fa0eF06",
130
+ UniswapV2Locker: "0x63f6Efe03F25A8C6650b38d05C5a454051d642a5",
131
+ UniswapV2MigratorSplit: "0xB05046cEa797c993FB5b583098B1c4682e9Da333",
132
+ UniswapV4Initializer: "0x6cce158B6D1747617fc218592B4D60B239B957ea"
245
133
  },
246
134
  "84532": {
247
135
  Airlock: "0x3411306Ce66c9469BFF1535BA955503c4Bde1C6e",
248
136
  AirlockMultisigTestnet: "0x0abCf819FD57C9f0141628410fFC273405E44426",
249
- BasicMultisig: "0x6f645FA08B7eadAD620CEC85634204b1d7A46DC2",
250
- Bundler: "0x69DB7c20cDdA49Bed2bFb21e16Fa218330C50661",
251
- CloneDERC20VotesV2: "0x4BBfed1c27CDE12eF6638251D81ab4e3be7556b7",
252
- CloneDERC20VotesV2Factory: "0x16F5ACB64F4FA17296E942C51d3395aDC318f9e1",
253
- CloneERC20: "0xE7F1Cc50CCa68975eD6E56Ee4b0Aaf171D02732A",
254
- CloneERC20Factory: "0xbf4Ca4D527c9760A884df31292f72E9AcA503045",
255
- CloneERC20Votes: "0x52831E40151a79FE2e74549b0974d44A10Ac30aD",
256
- CloneERC20VotesFactory: "0x9a497a9fB78e49984B9d260abA1F4AD6321D4D92",
257
- DecayMulticurveInitializer: "0xD59cE43E53D69F190E15d9822Fb4540dCcc91178",
258
- DecayMulticurveInitializerHook: "0xbB7784A4d481184283Ed89619A3e3ed143e1Adc0",
137
+ Bundler: "0xDdDDDd67579B73fDdFf301DB92Fd4A01afD4613a",
259
138
  DN404Factory: "0x98b0Aa2e0f134dbB3eb157b5646D387E6D55243a",
260
139
  DopplerCreateXDeployer: "0x0000000000f13Ab5b685F03A412A26719aB6bE60",
261
140
  DopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
@@ -267,80 +146,24 @@ var GENERATED_DOPPLER_DEPLOYMENTS = {
267
146
  GovernanceFactory: "0x9dBFaaDC8c0cB2c34bA698DD9426555336992e20",
268
147
  LaunchpadGovernanceFactory: "0x0902e7C7207df8ed6303Aef4382bcab181b5fBFA",
269
148
  LockableUniswapV3Initializer: "0x16AdA5Be50C3c2D94Af5fEae6b539C40A78Ad53c",
270
- MulticurveLibrary: "0x32238a39ba5aF060EFbfAda59979B639E0945fE0",
271
149
  NoOpGovernanceFactory: "0x7bD798fafC99A3b17E261F8308A8C11B56935ea1",
272
150
  NoOpMigrator: "0xF11066abbd329ac4bBA39455340539322C222eb0",
273
- Quoter: "0x23C94d575C3e116fFDd7D5fbb50b7cA4972EdA83",
274
- RehypeDopplerHook: "0x3Ec4798A9B11e8243A8Db99687f7A23597B96623",
275
- RehypeDopplerHookInitializer: "0x78C79C95eacEb2D08f7a55cc0D31012f8aF510c3",
276
- RehypeDopplerHookMigrator: "0x9349E5A3e6458aa65E2fB7ED67e9aD08Ae7F660D",
277
- StreamableFeesLocker: "0x3345E557c5C0b474bE1eb4693264008B8562Aa9c",
151
+ Quoter: "0xc20347a97646ed6e2B45DBfEcE372f68d928ec0a",
152
+ RehypeDopplerHookInitializer: "0xAdB90eF4dc001CFB81ecADEd2CDbda7D18487606",
153
+ RehypeDopplerHookMigrator: "0x5E2A91F8eBE288e0AA76a0C1A47877Ded801e90d",
278
154
  StreamableFeesLockerV2: "0xcE3212e6536F33cD6fbFEE265224131353Ca3D47",
279
- TeamGovernanceFactory: "0x8aF3001ED75F86f4Dd910577ECa9C5dB7CEa765c",
280
155
  TimelockFactory: "0x80F42ECCc91177D39E20f1A88A54D231c1b086a2",
281
- TokenFactory: "0x9D8fd79B2a59c5d91ccBd79c3AEb4de56451Bb02",
282
- TokenFactory80: "0xf0B5141dD9096254B2ca624dff26024f46087229",
283
156
  TopUpDistributor: "0x435312320C0330B1999746753551CdFbD83aD814",
284
157
  UniswapV2Locker: "0x06731e30df4B0209ED19C39Ba8eD253e17b0E495",
285
- UniswapV2Migrator: "0x04a898f3722c38F9Def707bD17DC78920EFA977C",
286
158
  UniswapV2MigratorSplit: "0xD7abA5f1d80a330a6fe9E96F7bA122710E0912d3",
287
- UniswapV3Initializer: "0x4C3062B9ccFdbCB10353F57C1B59a29d4c5CFa47",
288
- UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad",
289
- UniswapV4Migrator: "0xEEe0eCCb54398ce371CAACBCEf076d3Ed597DDb3",
290
- UniswapV4MigratorHook: "0x127cAAAd598Ffa97577940b0a5c3b6150019E500",
291
- UniswapV4MigratorSplit: "0xa1b06BE4f2fC347d194240D79EDa9F40CCAd9732",
292
- UniswapV4MigratorSplitHook: "0x103aB8804e66bC272840940CBa0ad34729c4e500",
293
- UniswapV4MulticurveInitializer: "0x1718405E58c61425cDc0083262bC9f72198F5232",
294
- UniswapV4MulticurveInitializerHook: "0x6a1061FC558dDe1E6fD0eFd641b370d435b56d40",
295
- UniswapV4ScheduledMulticurveInitializer: "0xF84378C9F39e0FF267f3101c88773359c5393876",
296
- UniswapV4ScheduledMulticurveInitializerHook: "0xc6a562cb5CbFA29BCB1bDCCF903b8B8f2E4A2DC0",
297
- WETH: "0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12"
298
- },
299
- "763373": {
300
- Airlock: "0x5CadB034267751a364dDD4d321C99E07A307f915",
301
- GovernanceFactory: "0x9F4e56be80f08ba1A2445645EFa6d231E27b43ec",
302
- TokenFactory: "0x77EbfBAE15AD200758E9E2E61597c0B07d731254",
303
- UniswapV2Migrator: "0x99C94B9Df930E1E21a4E4a2c105dBff21bF5c5aE",
304
- UniswapV3Initializer: "0x43d0D97EC9241A8F05A264f94B82A1d2E600f2B3",
305
- WETH: "0xa82c66b6ddEb92089015C3565E05B5c9750b2d4B"
306
- },
307
- "11155111": {
308
- Airlock: "0xDe3599a2eC440B296373a983C85C365DA55d9dFA",
309
- AirlockMultisigTestnet: "0x0abCf819FD57C9f0141628410fFC273405E44426",
310
- CloneDERC20VotesV2: "0x4BBfed1c27CDE12eF6638251D81ab4e3be7556b7",
311
- CloneDERC20VotesV2Factory: "0x16F5ACB64F4FA17296E942C51d3395aDC318f9e1",
312
- CloneERC20: "0x215b2cE3Dd8D110394e94A868580D61a77aDEc4A",
313
- CloneERC20Factory: "0xe7Df2A4520C26a2D4Dedb3a7585BFBcd30eABA6e",
314
- CloneERC20Votes: "0xA8d0E8036D3fAE21C7Af075ad41942Bc1f807CDF",
315
- CloneERC20VotesFactory: "0x5A92bFfbc01ea0396A9c7D4154d36d4EAF2e483E",
316
- DecayMulticurveInitializer: "0xD59cE43E53D69F190E15d9822Fb4540dCcc91178",
317
- DecayMulticurveInitializerHook: "0xbB7784A4d481184283Ed89619A3e3ed143e1Adc0",
318
- DopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
319
- DopplerHookInitializer: "0xBDF938149ac6a781F94FAa0ed45E6A0e984c6544",
320
- DopplerHookMigrator: "0x1E40b0875DDa35f41E15cFB475403859B8c860c4",
321
- GovernanceFactory: "0x9F309D79BEe3E8b2f56FaCF74b7195Df176c8F61",
322
- NoOpGovernanceFactory: "0xddAE8B3eD08184682f7Bc32B74d943cEEfEab638",
323
- NoOpMigrator: "0x233A71A7bB928b1357A1Ebf454298320989Ca5B5",
324
- Quoter: "0xFD44B773B21AC485C95Db1Ff38554b7699f8C042",
325
- RehypeDopplerHook: "0x3Ec4798A9B11e8243A8Db99687f7A23597B96623",
326
- RehypeDopplerHookInitializer: "0xBF4195ab0B03e1eB3345dd1e83BeD7650b1ed123",
327
- RehypeDopplerHookMigrator: "0xea95DfdF69B90c65C827070852F7039D6aF6Dd7b",
328
- StreamableFeesLocker: "0xe24FC2F7191e850e2D4514aBb4d39305b1871eC6",
329
- StreamableFeesLockerV2: "0xcE3212e6536F33cD6fbFEE265224131353Ca3D47",
330
- TimelockFactory: "0x9fd40af2baAfAF03513f091444e821c0d5b06ea0",
331
- TopUpDistributor: "0x435312320C0330B1999746753551CdFbD83aD814",
332
- UniswapV2Locker: "0xA366D94eDA7abEc16bfa5619A855a6208bE3aEE9",
333
- UniswapV2Migrator: "0x765875bff87614cE0581ee73B9fa663B71F3DfF2",
334
- UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad",
335
- UniswapV4Migrator: "0x0820A4D0173C17Ece283f7bDaAF0f8876eB205f5",
336
- UniswapV4MigratorHook: "0x4053D4fa966cbdCC20Ec62070aC8814De8bEE500",
337
- UniswapV4ScheduledMulticurveInitializer: "0xF84378C9F39e0FF267f3101c88773359c5393876",
338
- UniswapV4ScheduledMulticurveInitializerHook: "0xc6a562cb5CbFA29BCB1bDCCF903b8B8f2E4A2DC0"
159
+ UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad"
339
160
  }
340
161
  };
341
162
  var WAD = 10n ** 18n;
342
163
  var DEAD_ADDRESS = "0x000000000000000000000000000000000000dEaD";
343
164
  var ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
165
+ var MAX_UINT64 = (1n << 64n) - 1n;
166
+ var MAX_UINT128 = (1n << 128n) - 1n;
344
167
  var FEE_TIERS = {
345
168
  LOWEST: 100,
346
169
  // 0.01%
@@ -369,6 +192,7 @@ var TICK_SPACINGS = {
369
192
  var DOPPLER_MAX_TICK_SPACING = 30;
370
193
  var SECONDS_PER_DAY = 86400;
371
194
  var SECONDS_PER_YEAR = 365 * SECONDS_PER_DAY;
195
+ var MIN_BUNDLER_VESTING_DURATION = BigInt(SECONDS_PER_DAY);
372
196
  var DEFAULT_EPOCH_LENGTH = 43200;
373
197
  var DEFAULT_AUCTION_DURATION = 7 * SECONDS_PER_DAY;
374
198
  var DEFAULT_LOCK_DURATION = SECONDS_PER_YEAR;
@@ -463,6 +287,7 @@ var FEE_AMOUNT_MASK = 16777215;
463
287
  var CHAIN_IDS = {
464
288
  MAINNET: 1,
465
289
  ETH_SEPOLIA: 11155111,
290
+ ARBITRUM: 42161,
466
291
  BASE: 8453,
467
292
  BASE_SEPOLIA: 84532,
468
293
  INK: 57073,
@@ -482,15 +307,9 @@ function getRehypeDopplerHookInitializerAddress(chainId) {
482
307
  var ADDRESSES = {
483
308
  [CHAIN_IDS.MAINNET]: {
484
309
  airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].Airlock,
485
- tokenFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].CloneERC20Factory,
486
- derc20V2Factory: getGeneratedAddress(
487
- CHAIN_IDS.MAINNET,
488
- "CloneDERC20VotesV2Factory"
489
- ),
490
- derc20V2Implementation: getGeneratedAddress(
491
- CHAIN_IDS.MAINNET,
492
- "CloneDERC20VotesV2"
493
- ),
310
+ tokenFactory: "0xe7Df2A4520C26a2D4Dedb3a7585BFBcd30eABA6e",
311
+ derc20V2Factory: "0x16F5ACB64F4FA17296E942C51d3395aDC318f9e1",
312
+ derc20V2Implementation: "0x4BBfed1c27CDE12eF6638251D81ab4e3be7556b7",
494
313
  dopplerERC20V1Factory: getGeneratedAddress(
495
314
  CHAIN_IDS.MAINNET,
496
315
  "DopplerERC20V1Factory"
@@ -503,7 +322,7 @@ var ADDRESSES = {
503
322
  v3Quoter: "0x61fFE014bA17989E743c5F6cB21bF9697530B21e",
504
323
  lockableV3Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].LockableUniswapV3Initializer,
505
324
  v4Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].UniswapV4Initializer,
506
- v4ScheduledMulticurveInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].UniswapV4ScheduledMulticurveInitializer,
325
+ v4ScheduledMulticurveInitializer: "0xF84378C9F39e0FF267f3101c88773359c5393876",
507
326
  dopplerHookInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].DopplerHookInitializer,
508
327
  rehypeDopplerHookInitializer: getRehypeDopplerHookInitializerAddress(
509
328
  CHAIN_IDS.MAINNET
@@ -514,18 +333,18 @@ var ADDRESSES = {
514
333
  dopplerLens: ZERO_ADDRESS,
515
334
  dopplerDeployer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].DopplerDeployer,
516
335
  poolManager: "0x000000000004444c5dc75cB358380D2e3dE08A90",
517
- v2Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].UniswapV2Migrator,
336
+ v2Migrator: "0x765875bff87614cE0581ee73B9fa663B71F3DfF2",
518
337
  v2MigratorSplit: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].UniswapV2MigratorSplit,
519
- v4Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].UniswapV4Migrator,
520
- v4MigratorSplit: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].UniswapV4MigratorSplit,
521
- v4MigratorHook: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].UniswapV4MigratorHook,
338
+ v4Migrator: "0x0820A4D0173C17Ece283f7bDaAF0f8876eB205f5",
339
+ v4MigratorSplit: "0xa1b06BE4f2fC347d194240D79EDa9F40CCAd9732",
340
+ v4MigratorHook: "0x4053D4fa966cbdCC20Ec62070aC8814De8bEE500",
522
341
  dopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].DopplerHookMigrator,
523
342
  rehypeDopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].RehypeDopplerHookMigrator,
524
343
  noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].NoOpMigrator,
525
344
  governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].GovernanceFactory,
526
345
  noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].NoOpGovernanceFactory,
527
346
  launchpadGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].LaunchpadGovernanceFactory,
528
- streamableFeesLocker: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].StreamableFeesLocker,
347
+ streamableFeesLocker: "0xe24FC2F7191e850e2D4514aBb4d39305b1871eC6",
529
348
  streamableFeesLockerV2: getGeneratedAddress(
530
349
  CHAIN_IDS.MAINNET,
531
350
  "StreamableFeesLockerV2"
@@ -533,6 +352,7 @@ var ADDRESSES = {
533
352
  topUpDistributor: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].TopUpDistributor,
534
353
  universalRouter: "0x66a9893cc07d91d95644aedd05d03f95e1dba8af",
535
354
  permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
355
+ bundler: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].Bundler,
536
356
  weth: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
537
357
  univ2Router02: "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
538
358
  uniswapV2Factory: "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
@@ -540,54 +360,87 @@ var ADDRESSES = {
540
360
  uniswapV4Quoter: "0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203"
541
361
  },
542
362
  [CHAIN_IDS.ETH_SEPOLIA]: {
543
- airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].Airlock,
544
- tokenFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].CloneERC20Factory,
545
- derc20V2Factory: getGeneratedAddress(
546
- CHAIN_IDS.ETH_SEPOLIA,
547
- "CloneDERC20VotesV2Factory"
548
- ),
549
- derc20V2Implementation: getGeneratedAddress(
550
- CHAIN_IDS.ETH_SEPOLIA,
551
- "CloneDERC20VotesV2"
552
- ),
363
+ airlock: "0xDe3599a2eC440B296373a983C85C365DA55d9dFA",
364
+ tokenFactory: "0xe7Df2A4520C26a2D4Dedb3a7585BFBcd30eABA6e",
365
+ derc20V2Factory: "0x16F5ACB64F4FA17296E942C51d3395aDC318f9e1",
366
+ derc20V2Implementation: "0x4BBfed1c27CDE12eF6638251D81ab4e3be7556b7",
553
367
  v3Initializer: ZERO_ADDRESS,
554
368
  v3Quoter: ZERO_ADDRESS,
555
- v4Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].UniswapV4Initializer,
556
- v4ScheduledMulticurveInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].UniswapV4ScheduledMulticurveInitializer,
557
- dopplerHookInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].DopplerHookInitializer,
558
- rehypeDopplerHookInitializer: getRehypeDopplerHookInitializerAddress(
559
- CHAIN_IDS.ETH_SEPOLIA
560
- ),
561
- rehypeDopplerHook: getRehypeDopplerHookInitializerAddress(
562
- CHAIN_IDS.ETH_SEPOLIA
563
- ),
369
+ v4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad",
370
+ v4ScheduledMulticurveInitializer: "0xF84378C9F39e0FF267f3101c88773359c5393876",
371
+ dopplerHookInitializer: "0xBDF938149ac6a781F94FAa0ed45E6A0e984c6544",
372
+ rehypeDopplerHookInitializer: "0xBF4195ab0B03e1eB3345dd1e83BeD7650b1ed123",
373
+ rehypeDopplerHook: "0xBF4195ab0B03e1eB3345dd1e83BeD7650b1ed123",
564
374
  dopplerLens: ZERO_ADDRESS,
565
- dopplerDeployer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].DopplerDeployer,
375
+ dopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
566
376
  poolManager: "0xE03A1074c86CFeDd5C142C4F04F1a1536e203543",
567
- v2Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].UniswapV2Migrator,
568
- v4Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].UniswapV4Migrator,
569
- dopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].DopplerHookMigrator,
570
- rehypeDopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].RehypeDopplerHookMigrator,
571
- noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].NoOpMigrator,
377
+ v2Migrator: "0x765875bff87614cE0581ee73B9fa663B71F3DfF2",
378
+ v4Migrator: "0x0820A4D0173C17Ece283f7bDaAF0f8876eB205f5",
379
+ dopplerHookMigrator: "0x1E40b0875DDa35f41E15cFB475403859B8c860c4",
380
+ rehypeDopplerHookMigrator: "0xea95DfdF69B90c65C827070852F7039D6aF6Dd7b",
381
+ noOpMigrator: "0x233A71A7bB928b1357A1Ebf454298320989Ca5B5",
572
382
  governanceFactory: ZERO_ADDRESS,
573
- noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].NoOpGovernanceFactory,
574
- streamableFeesLocker: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ETH_SEPOLIA].StreamableFeesLocker,
383
+ noOpGovernanceFactory: "0xddAE8B3eD08184682f7Bc32B74d943cEEfEab638",
384
+ streamableFeesLocker: "0xe24FC2F7191e850e2D4514aBb4d39305b1871eC6",
575
385
  universalRouter: "0x3A9D48AB9751398BbFa63ad67599Bb04e4BdF98b",
576
386
  permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
577
387
  weth: "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14",
578
388
  uniswapV4Quoter: "0x61b3f2011a92d183c7dbadbda940a7555ccf9227"
579
389
  },
580
- [CHAIN_IDS.BASE]: {
581
- airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].Airlock,
582
- tokenFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].TokenFactory80,
583
- derc20V2Factory: getGeneratedAddress(
584
- CHAIN_IDS.BASE,
585
- "CloneDERC20VotesV2Factory"
390
+ [CHAIN_IDS.ARBITRUM]: {
391
+ airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].Airlock,
392
+ tokenFactory: ZERO_ADDRESS,
393
+ dopplerERC20V1Factory: getGeneratedAddress(
394
+ CHAIN_IDS.ARBITRUM,
395
+ "DopplerERC20V1Factory"
586
396
  ),
587
- derc20V2Implementation: getGeneratedAddress(
588
- CHAIN_IDS.BASE,
589
- "CloneDERC20VotesV2"
397
+ dopplerERC20V1Implementation: getGeneratedAddress(
398
+ CHAIN_IDS.ARBITRUM,
399
+ "DopplerERC20V1"
400
+ ),
401
+ doppler404Factory: getGeneratedAddress(CHAIN_IDS.ARBITRUM, "DN404Factory"),
402
+ v3Initializer: ZERO_ADDRESS,
403
+ v3Quoter: "0x61fFE014bA17989E743c5F6cB21bF9697530B21e",
404
+ lockableV3Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].LockableUniswapV3Initializer,
405
+ v4Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].UniswapV4Initializer,
406
+ dopplerHookInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].DopplerHookInitializer,
407
+ rehypeDopplerHookInitializer: getRehypeDopplerHookInitializerAddress(
408
+ CHAIN_IDS.ARBITRUM
409
+ ),
410
+ rehypeDopplerHook: getRehypeDopplerHookInitializerAddress(
411
+ CHAIN_IDS.ARBITRUM
412
+ ),
413
+ dopplerLens: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].DopplerLensQuoter,
414
+ dopplerDeployer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].DopplerDeployer,
415
+ poolManager: "0x360E68faCcca8cA495c1B759Fd9EEe466db9FB32",
416
+ v2Migrator: ZERO_ADDRESS,
417
+ v2MigratorSplit: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].UniswapV2MigratorSplit,
418
+ v4Migrator: ZERO_ADDRESS,
419
+ dopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].DopplerHookMigrator,
420
+ rehypeDopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].RehypeDopplerHookMigrator,
421
+ noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].NoOpMigrator,
422
+ governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].GovernanceFactory,
423
+ noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].NoOpGovernanceFactory,
424
+ launchpadGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].LaunchpadGovernanceFactory,
425
+ streamableFeesLocker: ZERO_ADDRESS,
426
+ streamableFeesLockerV2: getGeneratedAddress(
427
+ CHAIN_IDS.ARBITRUM,
428
+ "StreamableFeesLockerV2"
590
429
  ),
430
+ topUpDistributor: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].TopUpDistributor,
431
+ universalRouter: "0xA51afAFe0263b40EdaEf0Df8781eA9aa03E381a3",
432
+ permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
433
+ bundler: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].Bundler,
434
+ weth: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
435
+ uniswapV2Factory: "0xf1D7CC64Fb4452F05c498126312eBE29f30Fbcf9",
436
+ uniswapV3Factory: "0x1F98431c8aD98523631AE4a59f267346ea31F984",
437
+ uniswapV4Quoter: "0x3972C00f7ed4885e145823eb7C655375d275A1C5"
438
+ },
439
+ [CHAIN_IDS.BASE]: {
440
+ airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].Airlock,
441
+ tokenFactory: "0xf0B5141dD9096254B2ca624dff26024f46087229",
442
+ derc20V2Factory: "0x16F5ACB64F4FA17296E942C51d3395aDC318f9e1",
443
+ derc20V2Implementation: "0x4BBfed1c27CDE12eF6638251D81ab4e3be7556b7",
591
444
  dopplerERC20V1Factory: getGeneratedAddress(
592
445
  CHAIN_IDS.BASE,
593
446
  "DopplerERC20V1Factory"
@@ -597,15 +450,15 @@ var ADDRESSES = {
597
450
  "DopplerERC20V1"
598
451
  ),
599
452
  doppler404Factory: getGeneratedAddress(CHAIN_IDS.BASE, "DN404Factory"),
600
- v3Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].UniswapV3Initializer,
453
+ v3Initializer: "0xaA47D2977d622DBdFD33eeF6a8276727c52EB4e5",
601
454
  v3Quoter: "0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a",
602
455
  lockableV3Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].LockableUniswapV3Initializer,
603
456
  v4Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].UniswapV4Initializer,
604
- v4MulticurveInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].UniswapV4MulticurveInitializer,
457
+ v4MulticurveInitializer: "0x65dE470Da664A5be139A5D812bE5FDa0d76CC951",
605
458
  // From Doppler multicurve deployments (Base mainnet)
606
- v4ScheduledMulticurveInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].UniswapV4ScheduledMulticurveInitializer,
459
+ v4ScheduledMulticurveInitializer: "0xA36715dA46Ddf4A769f3290f49AF58bF8132ED8E",
607
460
  // From Doppler scheduled multicurve deployments (Base mainnet)
608
- v4DecayMulticurveInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].DecayMulticurveInitializer,
461
+ v4DecayMulticurveInitializer: "0xD59cE43E53D69F190E15d9822Fb4540dCcc91178",
609
462
  // From Doppler decay multicurve deployments (Base mainnet)
610
463
  // Opening auction slots reserved for phase-1 lifecycle support (not deployed on Base yet)
611
464
  openingAuctionInitializer: ZERO_ADDRESS,
@@ -618,18 +471,18 @@ var ADDRESSES = {
618
471
  ),
619
472
  rehypeDopplerHook: getRehypeDopplerHookInitializerAddress(CHAIN_IDS.BASE),
620
473
  dopplerHookInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].DopplerHookInitializer,
621
- v2Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].UniswapV2Migrator,
474
+ v2Migrator: "0x5F3bA43D44375286296Cb85F1EA2EBfa25dde731",
622
475
  v2MigratorSplit: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].UniswapV2MigratorSplit,
623
- v4Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].UniswapV4Migrator,
624
- v4MigratorSplit: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].UniswapV4MigratorSplit,
625
- v4MigratorHook: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].UniswapV4MigratorHook,
476
+ v4Migrator: "0xd3B4cF7FD24381e90A4F012fC6c5976b87B9B3cE",
477
+ v4MigratorSplit: "0xa1b06BE4f2fC347d194240D79EDa9F40CCAd9732",
478
+ v4MigratorHook: "0xD6FECFF347c6203A41874e8D77dE669B54e7A500",
626
479
  dopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].DopplerHookMigrator,
627
480
  rehypeDopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].RehypeDopplerHookMigrator,
628
481
  noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].NoOpMigrator,
629
482
  governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].GovernanceFactory,
630
483
  noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].NoOpGovernanceFactory,
631
484
  launchpadGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].LaunchpadGovernanceFactory,
632
- streamableFeesLocker: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].StreamableFeesLocker,
485
+ streamableFeesLocker: "0x0A00775D71a42cd33D62780003035e7F5b47bD3A",
633
486
  streamableFeesLockerV2: getGeneratedAddress(
634
487
  CHAIN_IDS.BASE,
635
488
  "StreamableFeesLockerV2"
@@ -646,15 +499,9 @@ var ADDRESSES = {
646
499
  },
647
500
  [CHAIN_IDS.BASE_SEPOLIA]: {
648
501
  airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].Airlock,
649
- tokenFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].TokenFactory80,
650
- derc20V2Factory: getGeneratedAddress(
651
- CHAIN_IDS.BASE_SEPOLIA,
652
- "CloneDERC20VotesV2Factory"
653
- ),
654
- derc20V2Implementation: getGeneratedAddress(
655
- CHAIN_IDS.BASE_SEPOLIA,
656
- "CloneDERC20VotesV2"
657
- ),
502
+ tokenFactory: "0xf0B5141dD9096254B2ca624dff26024f46087229",
503
+ derc20V2Factory: "0x16F5ACB64F4FA17296E942C51d3395aDC318f9e1",
504
+ derc20V2Implementation: "0x4BBfed1c27CDE12eF6638251D81ab4e3be7556b7",
658
505
  dopplerERC20V1Factory: getGeneratedAddress(
659
506
  CHAIN_IDS.BASE_SEPOLIA,
660
507
  "DopplerERC20V1Factory"
@@ -664,14 +511,14 @@ var ADDRESSES = {
664
511
  "DopplerERC20V1"
665
512
  ),
666
513
  doppler404Factory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].DN404Factory,
667
- v3Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].UniswapV3Initializer,
514
+ v3Initializer: "0x4C3062B9ccFdbCB10353F57C1B59a29d4c5CFa47",
668
515
  v3Quoter: "0xC5290058841028F1614F3A6F0F5816cAd0df5E27",
669
516
  lockableV3Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].LockableUniswapV3Initializer,
670
517
  v4Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].UniswapV4Initializer,
671
- v4MulticurveInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].UniswapV4MulticurveInitializer,
672
- v4ScheduledMulticurveInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].UniswapV4ScheduledMulticurveInitializer,
518
+ v4MulticurveInitializer: "0x1718405E58c61425cDc0083262bC9f72198F5232",
519
+ v4ScheduledMulticurveInitializer: "0xF84378C9F39e0FF267f3101c88773359c5393876",
673
520
  // From Doppler scheduled multicurve deployments (Base Sepolia)
674
- v4DecayMulticurveInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].DecayMulticurveInitializer,
521
+ v4DecayMulticurveInitializer: "0xD59cE43E53D69F190E15d9822Fb4540dCcc91178",
675
522
  // From Doppler decay multicurve deployments (Base Sepolia)
676
523
  // Opening Auction contracts (deployed Feb 2025)
677
524
  openingAuctionInitializer: "0x3dCd35945Dc86a9FaA80846B06CB4676961d0AEa",
@@ -686,18 +533,18 @@ var ADDRESSES = {
686
533
  dopplerLens: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].DopplerLensQuoter,
687
534
  dopplerDeployer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].DopplerDeployer,
688
535
  poolManager: "0x05E73354cFDd6745C338b50BcFDfA3Aa6fA03408",
689
- v2Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].UniswapV2Migrator,
536
+ v2Migrator: "0x04a898f3722c38F9Def707bD17DC78920EFA977C",
690
537
  v2MigratorSplit: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].UniswapV2MigratorSplit,
691
- v4Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].UniswapV4Migrator,
692
- v4MigratorSplit: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].UniswapV4MigratorSplit,
538
+ v4Migrator: "0xEEe0eCCb54398ce371CAACBCEf076d3Ed597DDb3",
539
+ v4MigratorSplit: "0xa1b06BE4f2fC347d194240D79EDa9F40CCAd9732",
693
540
  dopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].DopplerHookMigrator,
694
541
  rehypeDopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].RehypeDopplerHookMigrator,
695
- v4MigratorHook: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].UniswapV4MigratorHook,
542
+ v4MigratorHook: "0x127cAAAd598Ffa97577940b0a5c3b6150019E500",
696
543
  noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].NoOpMigrator,
697
544
  governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].GovernanceFactory,
698
545
  noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].NoOpGovernanceFactory,
699
546
  launchpadGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].LaunchpadGovernanceFactory,
700
- streamableFeesLocker: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].StreamableFeesLocker,
547
+ streamableFeesLocker: "0x3345E557c5C0b474bE1eb4693264008B8562Aa9c",
701
548
  streamableFeesLockerV2: getGeneratedAddress(
702
549
  CHAIN_IDS.BASE_SEPOLIA,
703
550
  "StreamableFeesLockerV2"
@@ -713,8 +560,8 @@ var ADDRESSES = {
713
560
  uniswapV4Quoter: "0x4A6513c898fe1B2d0E78d3b0e0A4a151589B1cBa"
714
561
  },
715
562
  [CHAIN_IDS.INK]: {
716
- airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.INK].Airlock,
717
- tokenFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.INK].TokenFactory,
563
+ airlock: "0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12",
564
+ tokenFactory: "0xFAafdE6a5b658684cC5eb0C5c2c755B00A246F45",
718
565
  derc20V2Factory: getGeneratedAddress(
719
566
  CHAIN_IDS.INK,
720
567
  "CloneDERC20VotesV2Factory"
@@ -723,15 +570,15 @@ var ADDRESSES = {
723
570
  CHAIN_IDS.INK,
724
571
  "CloneDERC20VotesV2"
725
572
  ),
726
- v3Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.INK].UniswapV3Initializer,
573
+ v3Initializer: "0xaA47D2977d622DBdFD33eeF6a8276727c52EB4e5",
727
574
  v3Quoter: "0x96b572D2d880cf2Fa2563651BD23ADE6f5516652",
728
575
  v4Initializer: "0xC99b485499f78995C6F1640dbB1413c57f8BA684",
729
576
  dopplerLens: "0x3972c00f7ed4885e145823eb7c655375d275a1c5",
730
- dopplerDeployer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.INK].DopplerDeployer,
577
+ dopplerDeployer: "0xa82c66b6ddEb92089015C3565E05B5c9750b2d4B",
731
578
  poolManager: "0x360e68faccca8ca495c1b759fd9eee466db9fb32",
732
- v2Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.INK].UniswapV2Migrator,
579
+ v2Migrator: "0x5F3bA43D44375286296Cb85F1EA2EBfa25dde731",
733
580
  v4Migrator: ZERO_ADDRESS,
734
- governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.INK].GovernanceFactory,
581
+ governanceFactory: "0xb4deE32EB70A5E55f3D2d861F49Fb3D79f7a14d9",
735
582
  noOpGovernanceFactory: ZERO_ADDRESS,
736
583
  // Not yet deployed
737
584
  streamableFeesLocker: ZERO_ADDRESS,
@@ -739,7 +586,6 @@ var ADDRESSES = {
739
586
  universalRouter: "0x112908dac86e20e7241b0927479ea3bf935d1fa0",
740
587
  univ2Router02: "0xB3FB126ACDd5AdCA2f50Ac644a7a2303745f18b4",
741
588
  permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
742
- bundler: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.INK].Bundler,
743
589
  weth: "0x4200000000000000000000000000000000000006",
744
590
  uniswapV4Quoter: "0x3972c00f7ed4885e145823eb7c655375d275a1c5"
745
591
  },
@@ -793,8 +639,8 @@ var ADDRESSES = {
793
639
  uniswapV4Quoter: "0x8dc178efb8111bb0973dd9d722ebeff267c98f94"
794
640
  },
795
641
  [CHAIN_IDS.UNICHAIN]: {
796
- airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN].Airlock,
797
- tokenFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN].TokenFactory,
642
+ airlock: "0x77EbfBAE15AD200758E9E2E61597c0B07d731254",
643
+ tokenFactory: "0x43d0D97EC9241A8F05A264f94B82A1d2E600f2B3",
798
644
  derc20V2Factory: getGeneratedAddress(
799
645
  CHAIN_IDS.UNICHAIN,
800
646
  "CloneDERC20VotesV2Factory"
@@ -803,30 +649,29 @@ var ADDRESSES = {
803
649
  CHAIN_IDS.UNICHAIN,
804
650
  "CloneDERC20VotesV2"
805
651
  ),
806
- v3Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN].UniswapV3Initializer,
652
+ v3Initializer: "0x9F4e56be80f08ba1A2445645EFa6d231E27b43ec",
807
653
  v3Quoter: "0x385A5cf5F83e99f7BB2852b6A19C3538b9FA7658",
808
654
  v4Initializer: "0x2F2BAcd46d3F5c9EE052Ab392b73711dB89129DB",
809
655
  dopplerLens: "0x333e3c607b141b18ff6de9f258db6e77fe7491e0",
810
656
  dopplerDeployer: "0x06FEFD02F0b6d9f57F52cfacFc113665Dfa20F0f",
811
657
  poolManager: "0x1f98400000000000000000000000000000000004",
812
- v2Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN].UniswapV2Migrator,
813
- v4Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN].UniswapV4Migrator,
814
- noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN].NoOpMigrator,
815
- governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN].GovernanceFactory,
816
- noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN].NoOpGovernanceFactory,
658
+ v2Migrator: "0xf6023127f6E937091D5B605680056A6D27524bad",
659
+ v4Migrator: "0x49F3fBB2dFF7f3d03B622e3b2a6d3F2E6fdB2a5A",
660
+ noOpMigrator: "0x917da361072ce968acD810BbfC9B64079426ebf0",
661
+ governanceFactory: "0x99C94B9Df930E1E21a4E4a2c105dBff21bF5c5aE",
662
+ noOpGovernanceFactory: "0x3AD727ee0FBBb8Ee0920933FdB96F23fD56f1299",
817
663
  streamableFeesLocker: ZERO_ADDRESS,
818
664
  // Not yet deployed
819
665
  universalRouter: "0xef740bf23acae26f6492b10de645d6b98dc8eaf3",
820
666
  univ2Router02: "0x284f11109359a7e1306c3e447ef14d38400063ff",
821
667
  uniswapV2Factory: "0x1f98400000000000000000000000000000000002",
822
668
  permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
823
- bundler: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN].Bundler,
824
669
  weth: "0x4200000000000000000000000000000000000006",
825
670
  uniswapV4Quoter: "0x333e3c607b141b18ff6de9f258db6e77fe7491e0"
826
671
  },
827
672
  [CHAIN_IDS.UNICHAIN_SEPOLIA]: {
828
673
  airlock: "0x651ab94B4777e2e4cdf96082d90C65bd947b73A4",
829
- tokenFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN_SEPOLIA].TokenFactory,
674
+ tokenFactory: "0x82Ac010C67f70BACf7655cd8948a4AD92A173CAC",
830
675
  derc20V2Factory: getGeneratedAddress(
831
676
  CHAIN_IDS.UNICHAIN_SEPOLIA,
832
677
  "CloneDERC20VotesV2Factory"
@@ -841,23 +686,22 @@ var ADDRESSES = {
841
686
  dopplerLens: "0x56dcd40a3f2d466f48e7f48bdbe5cc9b92ae4472",
842
687
  dopplerDeployer: "0x2f2bacd46d3f5c9ee052ab392b73711db89129db",
843
688
  poolManager: "0x00B036B58a818B1BC34d502D3fE730Db729e62AC",
844
- v2Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN_SEPOLIA].UniswapV2Migrator,
845
- v4Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN_SEPOLIA].UniswapV4Migrator,
846
- noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN_SEPOLIA].NoOpMigrator,
689
+ v2Migrator: "0x620e3fec244e913d73f2163623b62d02DB69638B",
690
+ v4Migrator: "0xb6D69eAA98E657bEEFF7ca4452768e6f707aa6b1",
691
+ noOpMigrator: "0x193F48A45B6025dDeD10bc4BaeEF65c833696387",
847
692
  governanceFactory: "0x1E4332EEfAE9e4967C2D186f7b2d439D778e81cC",
848
- noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.UNICHAIN_SEPOLIA].NoOpGovernanceFactory,
693
+ noOpGovernanceFactory: "0x7E5D336A6E9e453c9f02E5102CC039E015Fd8fb8",
849
694
  streamableFeesLocker: ZERO_ADDRESS,
850
695
  // Not yet deployed
851
696
  universalRouter: "0xf70536B3bcC1bD1a972dc186A2cf84cC6da6Be5D",
852
697
  univ2Router02: "0x284f11109359a7e1306c3e447ef14d38400063ff",
853
698
  permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
854
- bundler: "0x63f8C8F9beFaab2FaCD7Ece0b0242f78B920Ee90",
855
699
  weth: "0x4200000000000000000000000000000000000006",
856
700
  uniswapV4Quoter: "0x56dcd40a3f2d466f48e7f48bdbe5cc9b92ae4472"
857
701
  },
858
702
  [CHAIN_IDS.MONAD_TESTNET]: {
859
- airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_TESTNET].Airlock,
860
- tokenFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_TESTNET].TokenFactory80,
703
+ airlock: "0xDe3599a2eC440B296373a983C85C365DA55d9dFA",
704
+ tokenFactory: "0xf0B5141dD9096254B2ca624dff26024f46087229",
861
705
  derc20V2Factory: getGeneratedAddress(
862
706
  CHAIN_IDS.MONAD_TESTNET,
863
707
  "CloneDERC20VotesV2Factory"
@@ -866,38 +710,31 @@ var ADDRESSES = {
866
710
  CHAIN_IDS.MONAD_TESTNET,
867
711
  "CloneDERC20VotesV2"
868
712
  ),
869
- v3Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_TESTNET].UniswapV3Initializer,
713
+ v3Initializer: "0x9F4e56be80f08ba1A2445645EFa6d231E27b43ec",
870
714
  v3Quoter: ZERO_ADDRESS,
871
- v4Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_TESTNET].UniswapV4Initializer,
872
- dopplerLens: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_TESTNET].DopplerLensQuoter,
873
- dopplerDeployer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_TESTNET].DopplerDeployer,
715
+ v4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad",
716
+ dopplerLens: "0x2F2BAcd46d3F5c9EE052Ab392b73711dB89129DB",
717
+ dopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
874
718
  poolManager: "0xe93882f395B0b24180855c68Ab19B2d78573ceBc",
875
- v2Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_TESTNET].UniswapV2Migrator,
719
+ v2Migrator: "0x43d0D97EC9241A8F05A264f94B82A1d2E600f2B3",
876
720
  v4Migrator: "0xBEd386a1Fc62B6598c9b8d2BF634471B6Fe75EB7",
877
- noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_TESTNET].NoOpMigrator,
878
- governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_TESTNET].GovernanceFactory,
879
- noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_TESTNET].NoOpGovernanceFactory,
721
+ noOpMigrator: "0x5CadB034267751a364dDD4d321C99E07A307f915",
722
+ governanceFactory: "0x014E1c0bd34f3B10546E554CB33B3293fECDD056",
723
+ noOpGovernanceFactory: "0x094D926A969B3024ca46D2186BF13FD5CDBA9CE2",
880
724
  streamableFeesLocker: "0x91231cDdD8d6C86Df602070a3081478e074b97b7",
881
725
  // Not yet deployed
882
726
  universalRouter: ZERO_ADDRESS,
883
727
  univ2Router02: ZERO_ADDRESS,
884
728
  permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
885
- bundler: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_TESTNET].Bundler,
886
729
  weth: ZERO_ADDRESS,
887
730
  // TODO: Get Monad Testnet weth
888
731
  uniswapV4Quoter: ZERO_ADDRESS
889
732
  },
890
733
  [CHAIN_IDS.MONAD_MAINNET]: {
891
734
  airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].Airlock,
892
- tokenFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].TokenFactory80,
893
- derc20V2Factory: getGeneratedAddress(
894
- CHAIN_IDS.MONAD_MAINNET,
895
- "CloneDERC20VotesV2Factory"
896
- ),
897
- derc20V2Implementation: getGeneratedAddress(
898
- CHAIN_IDS.MONAD_MAINNET,
899
- "CloneDERC20VotesV2"
900
- ),
735
+ tokenFactory: "0xf0B5141dD9096254B2ca624dff26024f46087229",
736
+ derc20V2Factory: "0x16F5ACB64F4FA17296E942C51d3395aDC318f9e1",
737
+ derc20V2Implementation: "0x4BBfed1c27CDE12eF6638251D81ab4e3be7556b7",
901
738
  dopplerERC20V1Factory: getGeneratedAddress(
902
739
  CHAIN_IDS.MONAD_MAINNET,
903
740
  "DopplerERC20V1Factory"
@@ -913,17 +750,17 @@ var ADDRESSES = {
913
750
  dopplerLens: ZERO_ADDRESS,
914
751
  dopplerDeployer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].DopplerDeployer,
915
752
  poolManager: "0x188d586ddcf52439676ca21a244753fa19f9ea8e",
916
- v2Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].UniswapV2Migrator,
753
+ v2Migrator: "0x136191B46478cAB023cbC01a36160C4Aad81677a",
917
754
  v2MigratorSplit: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].UniswapV2MigratorSplit,
918
- v4Migrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].UniswapV4Migrator,
919
- v4MigratorSplit: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].UniswapV4MigratorSplit,
920
- v4MigratorHook: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].UniswapV4MigratorHook,
755
+ v4Migrator: "0x44bf742e57cd8cF23ABbc8dab2c44e2a3228356E",
756
+ v4MigratorSplit: "0xa1b06BE4f2fC347d194240D79EDa9F40CCAd9732",
757
+ v4MigratorHook: "0x3E4c689BBf33b37106eBC13Db8aa5BF13a25e500",
921
758
  noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].NoOpMigrator,
922
759
  governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].GovernanceFactory,
923
760
  noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].NoOpGovernanceFactory,
924
761
  launchpadGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].LaunchpadGovernanceFactory,
925
762
  topUpDistributor: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].TopUpDistributor,
926
- v4ScheduledMulticurveInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].UniswapV4ScheduledMulticurveInitializer,
763
+ v4ScheduledMulticurveInitializer: "0xCe3099B2F07029b086E5e92a1573C5f5A3071783",
927
764
  dopplerHookInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].DopplerHookInitializer,
928
765
  rehypeDopplerHookInitializer: getRehypeDopplerHookInitializerAddress(
929
766
  CHAIN_IDS.MONAD_MAINNET
@@ -931,7 +768,7 @@ var ADDRESSES = {
931
768
  rehypeDopplerHook: getRehypeDopplerHookInitializerAddress(
932
769
  CHAIN_IDS.MONAD_MAINNET
933
770
  ),
934
- streamableFeesLocker: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].StreamableFeesLocker,
771
+ streamableFeesLocker: "0x63f8C8F9beFaab2FaCD7Ece0b0242f78B920Ee90",
935
772
  streamableFeesLockerV2: getGeneratedAddress(
936
773
  CHAIN_IDS.MONAD_MAINNET,
937
774
  "StreamableFeesLockerV2"
@@ -5769,7 +5606,102 @@ var dopplerLensAbi = [
5769
5606
  stateMutability: "nonpayable"
5770
5607
  }
5771
5608
  ];
5609
+ var bundlerCreateParamsComponents = [
5610
+ { name: "initialSupply", type: "uint256", internalType: "uint256" },
5611
+ { name: "numTokensToSell", type: "uint256", internalType: "uint256" },
5612
+ { name: "numeraire", type: "address", internalType: "address" },
5613
+ {
5614
+ name: "tokenFactory",
5615
+ type: "address",
5616
+ internalType: "contract ITokenFactory"
5617
+ },
5618
+ { name: "tokenFactoryData", type: "bytes", internalType: "bytes" },
5619
+ {
5620
+ name: "governanceFactory",
5621
+ type: "address",
5622
+ internalType: "contract IGovernanceFactory"
5623
+ },
5624
+ {
5625
+ name: "governanceFactoryData",
5626
+ type: "bytes",
5627
+ internalType: "bytes"
5628
+ },
5629
+ {
5630
+ name: "poolInitializer",
5631
+ type: "address",
5632
+ internalType: "contract IPoolInitializer"
5633
+ },
5634
+ { name: "poolInitializerData", type: "bytes", internalType: "bytes" },
5635
+ {
5636
+ name: "liquidityMigrator",
5637
+ type: "address",
5638
+ internalType: "contract ILiquidityMigrator"
5639
+ },
5640
+ {
5641
+ name: "liquidityMigratorData",
5642
+ type: "bytes",
5643
+ internalType: "bytes"
5644
+ },
5645
+ { name: "integrator", type: "address", internalType: "address" },
5646
+ { name: "salt", type: "bytes32", internalType: "bytes32" }
5647
+ ];
5648
+ var bundlerPoolKeyComponents = [
5649
+ { name: "currency0", type: "address", internalType: "Currency" },
5650
+ { name: "currency1", type: "address", internalType: "Currency" },
5651
+ { name: "fee", type: "uint24", internalType: "uint24" },
5652
+ { name: "tickSpacing", type: "int24", internalType: "int24" },
5653
+ { name: "hooks", type: "address", internalType: "contract IHooks" }
5654
+ ];
5772
5655
  var bundlerAbi = [
5656
+ {
5657
+ type: "function",
5658
+ name: "airlock",
5659
+ inputs: [],
5660
+ outputs: [{ name: "", type: "address", internalType: "contract Airlock" }],
5661
+ stateMutability: "view"
5662
+ },
5663
+ {
5664
+ type: "function",
5665
+ name: "poolManager",
5666
+ inputs: [],
5667
+ outputs: [
5668
+ {
5669
+ name: "",
5670
+ type: "address",
5671
+ internalType: "contract IPoolManager"
5672
+ }
5673
+ ],
5674
+ stateMutability: "view"
5675
+ },
5676
+ {
5677
+ type: "function",
5678
+ name: "vestingOf",
5679
+ inputs: [{ name: "asset", type: "address", internalType: "address" }],
5680
+ outputs: [
5681
+ { name: "recipient", type: "address", internalType: "address" },
5682
+ { name: "permissionlessClaim", type: "bool", internalType: "bool" },
5683
+ { name: "start", type: "uint64", internalType: "uint64" },
5684
+ { name: "cliffDuration", type: "uint64", internalType: "uint64" },
5685
+ { name: "vestingDuration", type: "uint64", internalType: "uint64" },
5686
+ { name: "totalAmount", type: "uint128", internalType: "uint128" },
5687
+ { name: "claimedAmount", type: "uint128", internalType: "uint128" }
5688
+ ],
5689
+ stateMutability: "view"
5690
+ },
5691
+ {
5692
+ type: "function",
5693
+ name: "claimable",
5694
+ inputs: [{ name: "asset", type: "address", internalType: "address" }],
5695
+ outputs: [{ name: "amount", type: "uint256", internalType: "uint256" }],
5696
+ stateMutability: "view"
5697
+ },
5698
+ {
5699
+ type: "function",
5700
+ name: "claim",
5701
+ inputs: [{ name: "asset", type: "address", internalType: "address" }],
5702
+ outputs: [{ name: "amount", type: "uint256", internalType: "uint256" }],
5703
+ stateMutability: "nonpayable"
5704
+ },
5773
5705
  {
5774
5706
  type: "function",
5775
5707
  name: "bundle",
@@ -5778,331 +5710,246 @@ var bundlerAbi = [
5778
5710
  name: "createData",
5779
5711
  type: "tuple",
5780
5712
  internalType: "struct CreateParams",
5713
+ components: bundlerCreateParamsComponents
5714
+ },
5715
+ {
5716
+ name: "vestingData",
5717
+ type: "tuple",
5718
+ internalType: "struct Bundler.VestingParams",
5781
5719
  components: [
5782
- { name: "initialSupply", type: "uint256", internalType: "uint256" },
5783
- { name: "numTokensToSell", type: "uint256", internalType: "uint256" },
5784
- { name: "numeraire", type: "address", internalType: "address" },
5785
- {
5786
- name: "tokenFactory",
5787
- type: "address",
5788
- internalType: "contract ITokenFactory"
5789
- },
5790
- { name: "tokenFactoryData", type: "bytes", internalType: "bytes" },
5791
- {
5792
- name: "governanceFactory",
5793
- type: "address",
5794
- internalType: "contract IGovernanceFactory"
5795
- },
5796
- {
5797
- name: "governanceFactoryData",
5798
- type: "bytes",
5799
- internalType: "bytes"
5800
- },
5801
5720
  {
5802
- name: "poolInitializer",
5803
- type: "address",
5804
- internalType: "contract IPoolInitializer"
5721
+ name: "permissionlessClaim",
5722
+ type: "bool",
5723
+ internalType: "bool"
5805
5724
  },
5806
- { name: "poolInitializerData", type: "bytes", internalType: "bytes" },
5807
5725
  {
5808
- name: "liquidityMigrator",
5809
- type: "address",
5810
- internalType: "contract ILiquidityMigrator"
5726
+ name: "vestingDuration",
5727
+ type: "uint64",
5728
+ internalType: "uint64"
5811
5729
  },
5812
5730
  {
5813
- name: "liquidityMigratorData",
5814
- type: "bytes",
5815
- internalType: "bytes"
5816
- },
5817
- { name: "integrator", type: "address", internalType: "address" },
5818
- { name: "salt", type: "bytes32", internalType: "bytes32" }
5731
+ name: "cliffDuration",
5732
+ type: "uint64",
5733
+ internalType: "uint64"
5734
+ }
5819
5735
  ]
5820
5736
  },
5821
- { name: "commands", type: "bytes", internalType: "bytes" },
5822
- { name: "inputs", type: "bytes[]", internalType: "bytes[]" }
5737
+ { name: "exactAmountIn", type: "uint128", internalType: "uint128" },
5738
+ { name: "recipient", type: "address", internalType: "address" }
5739
+ ],
5740
+ outputs: [
5741
+ { name: "asset", type: "address", internalType: "address" },
5742
+ {
5743
+ name: "poolKey",
5744
+ type: "tuple",
5745
+ internalType: "struct PoolKey",
5746
+ components: bundlerPoolKeyComponents
5747
+ },
5748
+ { name: "governance", type: "address", internalType: "address" },
5749
+ { name: "timelock", type: "address", internalType: "address" },
5750
+ { name: "amountOut", type: "uint128", internalType: "uint128" }
5823
5751
  ],
5824
- outputs: [],
5825
5752
  stateMutability: "payable"
5826
5753
  },
5827
5754
  {
5828
5755
  type: "function",
5829
- name: "simulateBundleExactIn",
5756
+ name: "simulateBundle",
5830
5757
  inputs: [
5831
5758
  {
5832
5759
  name: "createData",
5833
5760
  type: "tuple",
5834
5761
  internalType: "struct CreateParams",
5835
- components: [
5836
- { name: "initialSupply", type: "uint256", internalType: "uint256" },
5837
- { name: "numTokensToSell", type: "uint256", internalType: "uint256" },
5838
- { name: "numeraire", type: "address", internalType: "address" },
5839
- {
5840
- name: "tokenFactory",
5841
- type: "address",
5842
- internalType: "contract ITokenFactory"
5843
- },
5844
- { name: "tokenFactoryData", type: "bytes", internalType: "bytes" },
5845
- {
5846
- name: "governanceFactory",
5847
- type: "address",
5848
- internalType: "contract IGovernanceFactory"
5849
- },
5850
- {
5851
- name: "governanceFactoryData",
5852
- type: "bytes",
5853
- internalType: "bytes"
5854
- },
5855
- {
5856
- name: "poolInitializer",
5857
- type: "address",
5858
- internalType: "contract IPoolInitializer"
5859
- },
5860
- { name: "poolInitializerData", type: "bytes", internalType: "bytes" },
5861
- {
5862
- name: "liquidityMigrator",
5863
- type: "address",
5864
- internalType: "contract ILiquidityMigrator"
5865
- },
5866
- {
5867
- name: "liquidityMigratorData",
5868
- type: "bytes",
5869
- internalType: "bytes"
5870
- },
5871
- { name: "integrator", type: "address", internalType: "address" },
5872
- { name: "salt", type: "bytes32", internalType: "bytes32" }
5873
- ]
5762
+ components: bundlerCreateParamsComponents
5874
5763
  },
5764
+ { name: "exactAmountIn", type: "uint128", internalType: "uint128" }
5765
+ ],
5766
+ outputs: [
5767
+ { name: "asset", type: "address", internalType: "address" },
5875
5768
  {
5876
- name: "params",
5769
+ name: "poolKey",
5877
5770
  type: "tuple",
5878
- internalType: "struct IQuoterV2.QuoteExactInputSingleParams",
5879
- components: [
5880
- { name: "tokenIn", type: "address", internalType: "address" },
5881
- { name: "tokenOut", type: "address", internalType: "address" },
5882
- { name: "amountIn", type: "uint256", internalType: "uint256" },
5883
- { name: "fee", type: "uint24", internalType: "uint24" },
5884
- {
5885
- name: "sqrtPriceLimitX96",
5886
- type: "uint160",
5887
- internalType: "uint160"
5888
- }
5889
- ]
5890
- }
5771
+ internalType: "struct PoolKey",
5772
+ components: bundlerPoolKeyComponents
5773
+ },
5774
+ { name: "governance", type: "address", internalType: "address" },
5775
+ { name: "timelock", type: "address", internalType: "address" },
5776
+ { name: "amountOut", type: "uint128", internalType: "uint128" }
5891
5777
  ],
5892
- outputs: [{ name: "amountOut", type: "uint256", internalType: "uint256" }],
5893
5778
  stateMutability: "nonpayable"
5894
5779
  },
5895
5780
  {
5896
5781
  type: "function",
5897
- name: "simulateBundleExactOut",
5782
+ name: "_simulateBundle",
5898
5783
  inputs: [
5899
5784
  {
5900
5785
  name: "createData",
5901
5786
  type: "tuple",
5902
5787
  internalType: "struct CreateParams",
5903
- components: [
5904
- { name: "initialSupply", type: "uint256", internalType: "uint256" },
5905
- { name: "numTokensToSell", type: "uint256", internalType: "uint256" },
5906
- { name: "numeraire", type: "address", internalType: "address" },
5907
- {
5908
- name: "tokenFactory",
5909
- type: "address",
5910
- internalType: "contract ITokenFactory"
5911
- },
5912
- { name: "tokenFactoryData", type: "bytes", internalType: "bytes" },
5913
- {
5914
- name: "governanceFactory",
5915
- type: "address",
5916
- internalType: "contract IGovernanceFactory"
5917
- },
5918
- {
5919
- name: "governanceFactoryData",
5920
- type: "bytes",
5921
- internalType: "bytes"
5922
- },
5923
- {
5924
- name: "poolInitializer",
5925
- type: "address",
5926
- internalType: "contract IPoolInitializer"
5927
- },
5928
- { name: "poolInitializerData", type: "bytes", internalType: "bytes" },
5929
- {
5930
- name: "liquidityMigrator",
5931
- type: "address",
5932
- internalType: "contract ILiquidityMigrator"
5933
- },
5934
- {
5935
- name: "liquidityMigratorData",
5936
- type: "bytes",
5937
- internalType: "bytes"
5938
- },
5939
- { name: "integrator", type: "address", internalType: "address" },
5940
- { name: "salt", type: "bytes32", internalType: "bytes32" }
5941
- ]
5788
+ components: bundlerCreateParamsComponents
5942
5789
  },
5943
- {
5944
- name: "params",
5945
- type: "tuple",
5946
- internalType: "struct IQuoterV2.QuoteExactOutputSingleParams",
5947
- components: [
5948
- { name: "tokenIn", type: "address", internalType: "address" },
5949
- { name: "tokenOut", type: "address", internalType: "address" },
5950
- { name: "amount", type: "uint256", internalType: "uint256" },
5951
- { name: "fee", type: "uint24", internalType: "uint24" },
5952
- {
5953
- name: "sqrtPriceLimitX96",
5954
- type: "uint160",
5955
- internalType: "uint160"
5956
- }
5957
- ]
5958
- }
5790
+ { name: "exactAmountIn", type: "uint128", internalType: "uint128" }
5959
5791
  ],
5960
- outputs: [{ name: "amountIn", type: "uint256", internalType: "uint256" }],
5792
+ outputs: [],
5961
5793
  stateMutability: "nonpayable"
5962
5794
  },
5963
5795
  {
5964
5796
  type: "function",
5965
- name: "simulateMulticurveBundleExactOut",
5797
+ name: "unlockCallback",
5798
+ inputs: [{ name: "data", type: "bytes", internalType: "bytes" }],
5799
+ outputs: [{ name: "", type: "bytes", internalType: "bytes" }],
5800
+ stateMutability: "nonpayable"
5801
+ },
5802
+ {
5803
+ type: "event",
5804
+ name: "Bundled",
5966
5805
  inputs: [
5967
5806
  {
5968
- name: "createData",
5969
- type: "tuple",
5970
- internalType: "struct CreateParams",
5971
- components: [
5972
- { name: "initialSupply", type: "uint256", internalType: "uint256" },
5973
- { name: "numTokensToSell", type: "uint256", internalType: "uint256" },
5974
- { name: "numeraire", type: "address", internalType: "address" },
5975
- {
5976
- name: "tokenFactory",
5977
- type: "address",
5978
- internalType: "contract ITokenFactory"
5979
- },
5980
- { name: "tokenFactoryData", type: "bytes", internalType: "bytes" },
5981
- {
5982
- name: "governanceFactory",
5983
- type: "address",
5984
- internalType: "contract IGovernanceFactory"
5985
- },
5986
- {
5987
- name: "governanceFactoryData",
5988
- type: "bytes",
5989
- internalType: "bytes"
5990
- },
5991
- {
5992
- name: "poolInitializer",
5993
- type: "address",
5994
- internalType: "contract IPoolInitializer"
5995
- },
5996
- { name: "poolInitializerData", type: "bytes", internalType: "bytes" },
5997
- {
5998
- name: "liquidityMigrator",
5999
- type: "address",
6000
- internalType: "contract ILiquidityMigrator"
6001
- },
6002
- {
6003
- name: "liquidityMigratorData",
6004
- type: "bytes",
6005
- internalType: "bytes"
6006
- },
6007
- { name: "integrator", type: "address", internalType: "address" },
6008
- { name: "salt", type: "bytes32", internalType: "bytes32" }
6009
- ]
5807
+ name: "recipient",
5808
+ type: "address",
5809
+ indexed: true,
5810
+ internalType: "address"
5811
+ },
5812
+ {
5813
+ name: "amountIn",
5814
+ type: "uint128",
5815
+ indexed: false,
5816
+ internalType: "uint128"
5817
+ },
5818
+ {
5819
+ name: "amountOut",
5820
+ type: "uint128",
5821
+ indexed: false,
5822
+ internalType: "uint128"
6010
5823
  },
6011
- { name: "exactAmountOut", type: "uint128", internalType: "uint128" },
6012
- { name: "hookData", type: "bytes", internalType: "bytes" }
6013
- ],
6014
- outputs: [
6015
- { name: "asset", type: "address", internalType: "address" },
6016
5824
  {
6017
5825
  name: "poolKey",
6018
5826
  type: "tuple",
5827
+ indexed: false,
6019
5828
  internalType: "struct PoolKey",
6020
- components: [
6021
- { name: "currency0", type: "address", internalType: "Currency" },
6022
- { name: "currency1", type: "address", internalType: "Currency" },
6023
- { name: "fee", type: "uint24", internalType: "uint24" },
6024
- { name: "tickSpacing", type: "int24", internalType: "int24" },
6025
- { name: "hooks", type: "address", internalType: "contract IHooks" }
6026
- ]
5829
+ components: bundlerPoolKeyComponents
5830
+ }
5831
+ ],
5832
+ anonymous: false
5833
+ },
5834
+ {
5835
+ type: "event",
5836
+ name: "VestingCreated",
5837
+ inputs: [
5838
+ {
5839
+ name: "asset",
5840
+ type: "address",
5841
+ indexed: true,
5842
+ internalType: "address"
6027
5843
  },
6028
- { name: "amountIn", type: "uint256", internalType: "uint256" },
6029
- { name: "gasEstimate", type: "uint256", internalType: "uint256" }
5844
+ {
5845
+ name: "recipient",
5846
+ type: "address",
5847
+ indexed: true,
5848
+ internalType: "address"
5849
+ },
5850
+ {
5851
+ name: "permissionlessClaim",
5852
+ type: "bool",
5853
+ indexed: false,
5854
+ internalType: "bool"
5855
+ },
5856
+ {
5857
+ name: "totalAmount",
5858
+ type: "uint128",
5859
+ indexed: false,
5860
+ internalType: "uint128"
5861
+ },
5862
+ {
5863
+ name: "start",
5864
+ type: "uint64",
5865
+ indexed: false,
5866
+ internalType: "uint64"
5867
+ },
5868
+ {
5869
+ name: "cliffDuration",
5870
+ type: "uint64",
5871
+ indexed: false,
5872
+ internalType: "uint64"
5873
+ },
5874
+ {
5875
+ name: "vestingDuration",
5876
+ type: "uint64",
5877
+ indexed: false,
5878
+ internalType: "uint64"
5879
+ }
6030
5880
  ],
6031
- stateMutability: "nonpayable"
5881
+ anonymous: false
6032
5882
  },
6033
5883
  {
6034
- type: "function",
6035
- name: "simulateMulticurveBundleExactIn",
5884
+ type: "event",
5885
+ name: "VestingReleased",
6036
5886
  inputs: [
6037
5887
  {
6038
- name: "createData",
6039
- type: "tuple",
6040
- internalType: "struct CreateParams",
6041
- components: [
6042
- { name: "initialSupply", type: "uint256", internalType: "uint256" },
6043
- { name: "numTokensToSell", type: "uint256", internalType: "uint256" },
6044
- { name: "numeraire", type: "address", internalType: "address" },
6045
- {
6046
- name: "tokenFactory",
6047
- type: "address",
6048
- internalType: "contract ITokenFactory"
6049
- },
6050
- { name: "tokenFactoryData", type: "bytes", internalType: "bytes" },
6051
- {
6052
- name: "governanceFactory",
6053
- type: "address",
6054
- internalType: "contract IGovernanceFactory"
6055
- },
6056
- {
6057
- name: "governanceFactoryData",
6058
- type: "bytes",
6059
- internalType: "bytes"
6060
- },
6061
- {
6062
- name: "poolInitializer",
6063
- type: "address",
6064
- internalType: "contract IPoolInitializer"
6065
- },
6066
- { name: "poolInitializerData", type: "bytes", internalType: "bytes" },
6067
- {
6068
- name: "liquidityMigrator",
6069
- type: "address",
6070
- internalType: "contract ILiquidityMigrator"
6071
- },
6072
- {
6073
- name: "liquidityMigratorData",
6074
- type: "bytes",
6075
- internalType: "bytes"
6076
- },
6077
- { name: "integrator", type: "address", internalType: "address" },
6078
- { name: "salt", type: "bytes32", internalType: "bytes32" }
6079
- ]
5888
+ name: "asset",
5889
+ type: "address",
5890
+ indexed: true,
5891
+ internalType: "address"
6080
5892
  },
6081
- { name: "exactAmountIn", type: "uint128", internalType: "uint128" },
6082
- { name: "hookData", type: "bytes", internalType: "bytes" }
5893
+ {
5894
+ name: "recipient",
5895
+ type: "address",
5896
+ indexed: true,
5897
+ internalType: "address"
5898
+ },
5899
+ {
5900
+ name: "amount",
5901
+ type: "uint128",
5902
+ indexed: false,
5903
+ internalType: "uint128"
5904
+ }
6083
5905
  ],
6084
- outputs: [
5906
+ anonymous: false
5907
+ },
5908
+ {
5909
+ type: "error",
5910
+ name: "BundleQuote",
5911
+ inputs: [
6085
5912
  { name: "asset", type: "address", internalType: "address" },
6086
5913
  {
6087
5914
  name: "poolKey",
6088
5915
  type: "tuple",
6089
5916
  internalType: "struct PoolKey",
6090
- components: [
6091
- { name: "currency0", type: "address", internalType: "Currency" },
6092
- { name: "currency1", type: "address", internalType: "Currency" },
6093
- { name: "fee", type: "uint24", internalType: "uint24" },
6094
- { name: "tickSpacing", type: "int24", internalType: "int24" },
6095
- { name: "hooks", type: "address", internalType: "contract IHooks" }
6096
- ]
5917
+ components: bundlerPoolKeyComponents
6097
5918
  },
6098
- { name: "amountOut", type: "uint256", internalType: "uint256" },
6099
- { name: "gasEstimate", type: "uint256", internalType: "uint256" }
6100
- ],
6101
- stateMutability: "nonpayable"
5919
+ { name: "governance", type: "address", internalType: "address" },
5920
+ { name: "timelock", type: "address", internalType: "address" },
5921
+ { name: "amountOut", type: "uint128", internalType: "uint128" }
5922
+ ]
6102
5923
  },
6103
- { type: "error", name: "InvalidAddresses", inputs: [] },
6104
- { type: "error", name: "InvalidBundleData", inputs: [] },
6105
- { type: "error", name: "InvalidOutputToken", inputs: [] }
5924
+ {
5925
+ type: "error",
5926
+ name: "ExactInputNotFullySpent",
5927
+ inputs: [
5928
+ { name: "expected", type: "uint256", internalType: "uint256" },
5929
+ { name: "actual", type: "uint256", internalType: "uint256" }
5930
+ ]
5931
+ },
5932
+ { type: "error", name: "ExactInputAmountZero", inputs: [] },
5933
+ { type: "error", name: "InvalidAddress", inputs: [] },
5934
+ { type: "error", name: "InvalidNativeValue", inputs: [] },
5935
+ { type: "error", name: "InvalidPool", inputs: [] },
5936
+ { type: "error", name: "InvalidRecipient", inputs: [] },
5937
+ { type: "error", name: "InvalidVestingSchedule", inputs: [] },
5938
+ { type: "error", name: "NoClaimableAmount", inputs: [] },
5939
+ { type: "error", name: "SenderNotPoolManager", inputs: [] },
5940
+ { type: "error", name: "SenderNotRecipient", inputs: [] },
5941
+ { type: "error", name: "SenderNotSelf", inputs: [] },
5942
+ {
5943
+ type: "error",
5944
+ name: "SwapQuote",
5945
+ inputs: [{ name: "amountOut", type: "uint128", internalType: "uint128" }]
5946
+ },
5947
+ { type: "error", name: "UnexpectedSimulationSuccess", inputs: [] },
5948
+ {
5949
+ type: "error",
5950
+ name: "VestingAlreadyExists",
5951
+ inputs: [{ name: "asset", type: "address", internalType: "address" }]
5952
+ }
6106
5953
  ];
6107
5954
  var poolManagerAbi = [
6108
5955
  {
@@ -6313,6 +6160,13 @@ var rehypeDopplerHookInitializerAbi = [
6313
6160
  ],
6314
6161
  stateMutability: "view"
6315
6162
  },
6163
+ {
6164
+ type: "function",
6165
+ name: "bundler",
6166
+ inputs: [],
6167
+ outputs: [{ name: "", type: "address", internalType: "address" }],
6168
+ stateMutability: "view"
6169
+ },
6316
6170
  {
6317
6171
  type: "function",
6318
6172
  name: "quoter",
@@ -6407,32 +6261,77 @@ var rehypeDopplerHookInitializerAbi = [
6407
6261
  internalType: "uint24"
6408
6262
  },
6409
6263
  {
6410
- name: "durationSeconds",
6411
- type: "uint32",
6412
- indexed: false,
6413
- internalType: "uint32"
6414
- }
6415
- ],
6416
- anonymous: false
6417
- },
6418
- {
6419
- type: "event",
6420
- name: "FeeUpdated",
6421
- inputs: [
6264
+ name: "durationSeconds",
6265
+ type: "uint32",
6266
+ indexed: false,
6267
+ internalType: "uint32"
6268
+ }
6269
+ ],
6270
+ anonymous: false
6271
+ },
6272
+ {
6273
+ type: "event",
6274
+ name: "FeeUpdated",
6275
+ inputs: [
6276
+ {
6277
+ name: "poolId",
6278
+ type: "bytes32",
6279
+ indexed: true,
6280
+ internalType: "PoolId"
6281
+ },
6282
+ {
6283
+ name: "fee",
6284
+ type: "uint24",
6285
+ indexed: false,
6286
+ internalType: "uint24"
6287
+ }
6288
+ ],
6289
+ anonymous: false
6290
+ },
6291
+ {
6292
+ type: "function",
6293
+ name: "setFeeDistribution",
6294
+ inputs: [
6295
+ { name: "poolId", type: "bytes32", internalType: "PoolId" },
6296
+ {
6297
+ name: "assetFeesToAssetBuybackWad",
6298
+ type: "uint256",
6299
+ internalType: "uint256"
6300
+ },
6301
+ {
6302
+ name: "assetFeesToNumeraireBuybackWad",
6303
+ type: "uint256",
6304
+ internalType: "uint256"
6305
+ },
6306
+ {
6307
+ name: "assetFeesToBeneficiaryWad",
6308
+ type: "uint256",
6309
+ internalType: "uint256"
6310
+ },
6311
+ { name: "assetFeesToLpWad", type: "uint256", internalType: "uint256" },
6312
+ {
6313
+ name: "numeraireFeesToAssetBuybackWad",
6314
+ type: "uint256",
6315
+ internalType: "uint256"
6316
+ },
6317
+ {
6318
+ name: "numeraireFeesToNumeraireBuybackWad",
6319
+ type: "uint256",
6320
+ internalType: "uint256"
6321
+ },
6422
6322
  {
6423
- name: "poolId",
6424
- type: "bytes32",
6425
- indexed: true,
6426
- internalType: "PoolId"
6323
+ name: "numeraireFeesToBeneficiaryWad",
6324
+ type: "uint256",
6325
+ internalType: "uint256"
6427
6326
  },
6428
6327
  {
6429
- name: "fee",
6430
- type: "uint24",
6431
- indexed: false,
6432
- internalType: "uint24"
6328
+ name: "numeraireFeesToLpWad",
6329
+ type: "uint256",
6330
+ internalType: "uint256"
6433
6331
  }
6434
6332
  ],
6435
- anonymous: false
6333
+ outputs: [],
6334
+ stateMutability: "nonpayable"
6436
6335
  },
6437
6336
  { type: "error", name: "FeeBeneficiariesNotConfigured", inputs: [] },
6438
6337
  {
@@ -6441,6 +6340,7 @@ var rehypeDopplerHookInitializerAbi = [
6441
6340
  inputs: []
6442
6341
  },
6443
6342
  { type: "error", name: "FeeDistributionMustAddUpToWAD", inputs: [] },
6343
+ { type: "error", name: "SenderNotAuthorized", inputs: [] },
6444
6344
  {
6445
6345
  type: "error",
6446
6346
  name: "FeeTooHigh",
@@ -7090,7 +6990,6 @@ function getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1) {
7090
6990
  }
7091
6991
 
7092
6992
  // src/evm/utils/multicurveLiquidity.ts
7093
- var MAX_UINT128 = (1n << 128n) - 1n;
7094
6993
  function getMaxLiquiditySafeMulticurveTickUpper(params) {
7095
6994
  if (params.tickUpper <= params.tickLower) {
7096
6995
  throw new Error(
@@ -7262,6 +7161,7 @@ function isNonEmpty(values) {
7262
7161
  var NO_OP_ENABLED_CHAIN_IDS = [
7263
7162
  CHAIN_IDS.MAINNET,
7264
7163
  CHAIN_IDS.ETH_SEPOLIA,
7164
+ CHAIN_IDS.ARBITRUM,
7265
7165
  CHAIN_IDS.BASE,
7266
7166
  CHAIN_IDS.BASE_SEPOLIA,
7267
7167
  CHAIN_IDS.UNICHAIN,
@@ -7275,6 +7175,7 @@ function isNoOpEnabledChain(chainId) {
7275
7175
  }
7276
7176
  var LAUNCHPAD_ENABLED_CHAIN_IDS = [
7277
7177
  CHAIN_IDS.MAINNET,
7178
+ CHAIN_IDS.ARBITRUM,
7278
7179
  CHAIN_IDS.BASE,
7279
7180
  CHAIN_IDS.BASE_SEPOLIA,
7280
7181
  CHAIN_IDS.ROBINHOOD,
@@ -7363,14 +7264,21 @@ function validateFeeDistributionInfo(feeDistributionInfo) {
7363
7264
  }
7364
7265
 
7365
7266
  // src/evm/utils/rehypeDopplerHookInitializer.ts
7366
- function normalizeRehypeDopplerHookInitializerConfig(config) {
7267
+ function normalizeRehypeDopplerHookInitializerConfig(config, controllerOverride) {
7367
7268
  assertNonZeroAddress(config.hookAddress, "Rehype hookAddress");
7368
- const feeBeneficiaries = config.feeBeneficiaries;
7369
- if (feeBeneficiaries !== void 0 && config.buybackDestination !== void 0) {
7269
+ if (config.buybackDestination !== void 0 && controllerOverride !== void 0) {
7270
+ throw new Error(
7271
+ "Rehype buybackDestination and withFeeDistributionController are mutually exclusive"
7272
+ );
7273
+ }
7274
+ const buybackDestination = config.buybackDestination ?? controllerOverride;
7275
+ if (buybackDestination === void 0) {
7370
7276
  throw new Error(
7371
- "Rehype buybackDestination and feeBeneficiaries are mutually exclusive"
7277
+ "Rehype requires buybackDestination or withFeeDistributionController"
7372
7278
  );
7373
7279
  }
7280
+ assertNonZeroAddress(buybackDestination, "Rehype buybackDestination");
7281
+ const feeBeneficiaries = config.feeBeneficiaries;
7374
7282
  const feeDistributionInfo = resolveRehypeFeeDistributionInfo(config);
7375
7283
  const { startFee, endFee, durationSeconds, startingTime } = normalizeFeeSchedule(config);
7376
7284
  const feeRoutingMode = feeBeneficiaries !== void 0 ? normalizeBeneficiaryFeeRoutingMode(config.feeRoutingMode) : normalizeFeeRoutingMode(config.feeRoutingMode);
@@ -7393,19 +7301,14 @@ function normalizeRehypeDopplerHookInitializerConfig(config) {
7393
7301
  );
7394
7302
  return {
7395
7303
  ...common,
7304
+ buybackDestination,
7396
7305
  feeBeneficiaries: normalizedBeneficiaries,
7397
7306
  feeRoutingMode: 1 /* RouteToBeneficiaryFees */
7398
7307
  };
7399
7308
  }
7400
- if (config.buybackDestination === void 0) {
7401
- throw new Error(
7402
- "Rehype requires either buybackDestination or feeBeneficiaries"
7403
- );
7404
- }
7405
- assertNonZeroAddress(config.buybackDestination, "Rehype buybackDestination");
7406
7309
  return {
7407
7310
  ...common,
7408
- buybackDestination: config.buybackDestination,
7311
+ buybackDestination,
7409
7312
  feeRoutingMode
7410
7313
  };
7411
7314
  }
@@ -7723,6 +7626,44 @@ function assertAddressMatch(code, expected, actual) {
7723
7626
  throw new AirlockCreateReceiptError(code, { expected, actual });
7724
7627
  }
7725
7628
  }
7629
+ function normalizePoolKey2(value) {
7630
+ if (Array.isArray(value)) {
7631
+ return {
7632
+ currency0: value[0],
7633
+ currency1: value[1],
7634
+ fee: Number(value[2]),
7635
+ tickSpacing: Number(value[3]),
7636
+ hooks: value[4]
7637
+ };
7638
+ }
7639
+ const poolKey = value;
7640
+ return {
7641
+ currency0: poolKey.currency0,
7642
+ currency1: poolKey.currency1,
7643
+ fee: Number(poolKey.fee),
7644
+ tickSpacing: Number(poolKey.tickSpacing),
7645
+ hooks: poolKey.hooks
7646
+ };
7647
+ }
7648
+ function poolId(poolKey) {
7649
+ return keccak256(
7650
+ encodeAbiParameters(
7651
+ [
7652
+ {
7653
+ type: "tuple",
7654
+ components: [
7655
+ { name: "currency0", type: "address" },
7656
+ { name: "currency1", type: "address" },
7657
+ { name: "fee", type: "uint24" },
7658
+ { name: "tickSpacing", type: "int24" },
7659
+ { name: "hooks", type: "address" }
7660
+ ]
7661
+ }
7662
+ ],
7663
+ [poolKey]
7664
+ )
7665
+ );
7666
+ }
7726
7667
  function verifyPreparedCreateReceipt({
7727
7668
  prepared,
7728
7669
  receipt
@@ -7773,6 +7714,86 @@ function verifyPreparedCreateReceipt({
7773
7714
  prepared.prediction.poolOrHookAddress,
7774
7715
  receiptIdentity.poolOrHookAddress
7775
7716
  );
7717
+ let verifiedDevBuy;
7718
+ if (prepared.devBuy) {
7719
+ const bundledEvents = [];
7720
+ const vestingEvents = [];
7721
+ for (const log of receipt.logs) {
7722
+ if (!addressesEqual(log.address, prepared.devBuy.bundler)) continue;
7723
+ try {
7724
+ const decoded = decodeEventLog({
7725
+ abi: bundlerAbi,
7726
+ data: log.data,
7727
+ topics: log.topics
7728
+ });
7729
+ if (decoded.eventName === "Bundled") {
7730
+ const args = decoded.args;
7731
+ bundledEvents.push({
7732
+ recipient: args.recipient,
7733
+ amountIn: args.amountIn,
7734
+ amountOut: args.amountOut,
7735
+ poolKey: normalizePoolKey2(args.poolKey)
7736
+ });
7737
+ } else if (decoded.eventName === "VestingCreated") {
7738
+ const args = decoded.args;
7739
+ vestingEvents.push(args);
7740
+ }
7741
+ } catch {
7742
+ }
7743
+ }
7744
+ if (bundledEvents.length === 0) {
7745
+ throw new AirlockCreateReceiptError("MISSING_BUNDLED_EVENT");
7746
+ }
7747
+ if (bundledEvents.length > 1) {
7748
+ throw new AirlockCreateReceiptError("MULTIPLE_BUNDLED_EVENTS", {
7749
+ expected: 1,
7750
+ actual: bundledEvents.length
7751
+ });
7752
+ }
7753
+ const bundled = bundledEvents[0];
7754
+ if (!addressesEqual(bundled.recipient, prepared.devBuy.recipient)) {
7755
+ throw new AirlockCreateReceiptError("BUNDLED_RECIPIENT_MISMATCH", {
7756
+ expected: prepared.devBuy.recipient,
7757
+ actual: bundled.recipient
7758
+ });
7759
+ }
7760
+ if (bundled.amountIn !== prepared.devBuy.exactAmountIn) {
7761
+ throw new AirlockCreateReceiptError("BUNDLED_INPUT_MISMATCH", {
7762
+ expected: prepared.devBuy.exactAmountIn.toString(),
7763
+ actual: bundled.amountIn.toString()
7764
+ });
7765
+ }
7766
+ const bundledPoolId = poolId(bundled.poolKey);
7767
+ if (bundledPoolId.toLowerCase() !== prepared.prediction.poolId.toLowerCase()) {
7768
+ throw new AirlockCreateReceiptError("BUNDLED_POOL_KEY_MISMATCH", {
7769
+ expected: prepared.prediction.poolId,
7770
+ actual: bundledPoolId
7771
+ });
7772
+ }
7773
+ if (prepared.devBuy.vesting.vestingDuration === 0n) {
7774
+ if (vestingEvents.length !== 0) {
7775
+ throw new AirlockCreateReceiptError("UNEXPECTED_VESTING_EVENT", {
7776
+ expected: 0,
7777
+ actual: vestingEvents.length
7778
+ });
7779
+ }
7780
+ } else {
7781
+ if (vestingEvents.length === 0) {
7782
+ throw new AirlockCreateReceiptError("MISSING_VESTING_EVENT");
7783
+ }
7784
+ if (vestingEvents.length > 1) {
7785
+ throw new AirlockCreateReceiptError("MULTIPLE_VESTING_EVENTS", {
7786
+ expected: 1,
7787
+ actual: vestingEvents.length
7788
+ });
7789
+ }
7790
+ const vesting = vestingEvents[0];
7791
+ if (!addressesEqual(vesting.asset, prepared.prediction.tokenAddress) || !addressesEqual(vesting.recipient, prepared.devBuy.recipient) || vesting.totalAmount !== bundled.amountOut || vesting.permissionlessClaim !== prepared.devBuy.vesting.permissionlessClaim || vesting.cliffDuration !== prepared.devBuy.vesting.cliffDuration || vesting.vestingDuration !== prepared.devBuy.vesting.vestingDuration) {
7792
+ throw new AirlockCreateReceiptError("VESTING_MISMATCH");
7793
+ }
7794
+ }
7795
+ verifiedDevBuy = { amountOut: bundled.amountOut };
7796
+ }
7776
7797
  return {
7777
7798
  receiptIdentity,
7778
7799
  preparedIdentity: {
@@ -7785,7 +7806,8 @@ function verifyPreparedCreateReceipt({
7785
7806
  poolKey: prepared.prediction.poolKey,
7786
7807
  poolId: prepared.prediction.poolId,
7787
7808
  tokenIsCurrency0: prepared.prediction.tokenIsCurrency0
7788
- }
7809
+ },
7810
+ devBuy: verifiedDevBuy
7789
7811
  };
7790
7812
  }
7791
7813
  async function verifyPreparedCreateExecution({
@@ -8101,6 +8123,42 @@ function tickToMarketCap(params) {
8101
8123
  }
8102
8124
 
8103
8125
  // src/evm/builders/shared.ts
8126
+ function normalizeBuilderDevBuy(params) {
8127
+ if (params.exactAmountIn <= 0n || params.exactAmountIn > MAX_UINT128) {
8128
+ throw new Error("Dev buy exactAmountIn must be in the uint128 range");
8129
+ }
8130
+ if (params.recipient.toLowerCase() === ZERO_ADDRESS) {
8131
+ throw new Error("Dev buy recipient must not be the zero address");
8132
+ }
8133
+ const vestingDuration = params.vesting?.vestingDuration ?? 0n;
8134
+ const cliffDuration = params.vesting?.cliffDuration ?? 0n;
8135
+ if (vestingDuration < 0n || vestingDuration > MAX_UINT64) {
8136
+ throw new Error("Dev buy vestingDuration must be in the uint64 range");
8137
+ }
8138
+ if (cliffDuration < 0n || cliffDuration > MAX_UINT64) {
8139
+ throw new Error("Dev buy cliffDuration must be in the uint64 range");
8140
+ }
8141
+ if (params.vesting && vestingDuration === 0n) {
8142
+ throw new Error(
8143
+ "Dev buy vestingDuration must be greater than zero when vesting is configured"
8144
+ );
8145
+ }
8146
+ if (vestingDuration !== 0n && vestingDuration < MIN_BUNDLER_VESTING_DURATION) {
8147
+ throw new Error("Dev buy vestingDuration must be at least 86400 seconds");
8148
+ }
8149
+ if (cliffDuration > vestingDuration) {
8150
+ throw new Error("Dev buy cliffDuration must not exceed vestingDuration");
8151
+ }
8152
+ return {
8153
+ exactAmountIn: params.exactAmountIn,
8154
+ recipient: params.recipient,
8155
+ vesting: {
8156
+ permissionlessClaim: params.vesting?.permissionlessClaim ?? false,
8157
+ vestingDuration,
8158
+ cliffDuration
8159
+ }
8160
+ };
8161
+ }
8104
8162
  function assertTokenConfigSupportsYearlyMintRate(params) {
8105
8163
  if ("yearlyMintRate" in params && params.type !== "standard") {
8106
8164
  throw new Error(
@@ -8270,7 +8328,6 @@ function buildCurvesFromPresets(params) {
8270
8328
  }
8271
8329
 
8272
8330
  // src/evm/entities/DopplerFactory.ts
8273
- var MAX_UINT1282 = (1n << 128n) - 1n;
8274
8331
  var MAX_PROCEEDS_SPLIT_SHARE = WAD / 2n;
8275
8332
  function isDopplerHookMigratorConfig(config) {
8276
8333
  return config.type === "dopplerHookMigrator" || config.type === "dopplerHook";
@@ -8291,14 +8348,12 @@ var erc20BalanceOfAbi = [
8291
8348
  ];
8292
8349
  var TOKEN_FACTORY_80_ADDRESS2 = "0xf0b5141dd9096254b2ca624dff26024f46087229";
8293
8350
  var DERC20_V2_MIN_VESTING_DURATION = 24 * 60 * 60;
8294
- var MAX_UINT64 = (1n << 64n) - 1n;
8295
8351
  var MAX_UINT48 = (1n << 48n) - 1n;
8296
8352
  var DopplerFactory = class {
8297
8353
  publicClient;
8298
8354
  walletClient;
8299
8355
  chainId;
8300
8356
  customMigrationEncoder;
8301
- multicurveBundlerSupport = /* @__PURE__ */ new Map();
8302
8357
  constructor(publicClient, walletClient, chainId) {
8303
8358
  this.publicClient = publicClient;
8304
8359
  this.walletClient = walletClient;
@@ -9199,7 +9254,6 @@ var DopplerFactory = class {
9199
9254
  }
9200
9255
  /**
9201
9256
  * Simulate a static auction creation and return predicted addresses.
9202
- * Useful for pre-buy flows (bundle) to know the token/pool before sending.
9203
9257
  */
9204
9258
  async simulateCreateStaticAuction(params) {
9205
9259
  const createParams = await this.encodeCreateStaticAuctionParams(params);
@@ -9675,7 +9729,7 @@ var DopplerFactory = class {
9675
9729
  );
9676
9730
  }
9677
9731
  }
9678
- const poolId = this.computePoolId({
9732
+ const poolId2 = this.computePoolId({
9679
9733
  currency0: actualTokenAddress < params.sale.numeraire ? actualTokenAddress : params.sale.numeraire,
9680
9734
  currency1: actualTokenAddress < params.sale.numeraire ? params.sale.numeraire : actualTokenAddress,
9681
9735
  fee: params.pool.fee,
@@ -9685,7 +9739,7 @@ var DopplerFactory = class {
9685
9739
  return {
9686
9740
  hookAddress: actualHookAddress,
9687
9741
  tokenAddress: actualTokenAddress,
9688
- poolId,
9742
+ poolId: poolId2,
9689
9743
  transactionHash: hash
9690
9744
  };
9691
9745
  }
@@ -9716,7 +9770,7 @@ var DopplerFactory = class {
9716
9770
  }
9717
9771
  const tokenAddress = simResult[0];
9718
9772
  const hookAddress = simResult[1];
9719
- const poolId = this.computePoolId({
9773
+ const poolId2 = this.computePoolId({
9720
9774
  currency0: tokenAddress < params.sale.numeraire ? tokenAddress : params.sale.numeraire,
9721
9775
  currency1: tokenAddress < params.sale.numeraire ? params.sale.numeraire : tokenAddress,
9722
9776
  fee: params.pool.fee,
@@ -9735,7 +9789,7 @@ var DopplerFactory = class {
9735
9789
  createParams: createParamsWithTimelock,
9736
9790
  hookAddress,
9737
9791
  tokenAddress,
9738
- poolId,
9792
+ poolId: poolId2,
9739
9793
  gasEstimate,
9740
9794
  execute: () => this.createDynamicAuction(params, {
9741
9795
  _createParams: createParamsWithTimelock
@@ -11078,12 +11132,9 @@ var DopplerFactory = class {
11078
11132
  )
11079
11133
  };
11080
11134
  } else if (hasLegacyHook) {
11081
- mode = {
11082
- type: "rehype",
11083
- hookConfig: legacyHook
11084
- };
11135
+ mode = { type: "dopplerHook", hookConfig: legacyHook };
11085
11136
  } else {
11086
- mode = { type: "rehype" };
11137
+ mode = { type: "dopplerHook" };
11087
11138
  }
11088
11139
  } else {
11089
11140
  switch (initializer.type) {
@@ -11094,7 +11145,7 @@ var DopplerFactory = class {
11094
11145
  "Initializer type 'dopplerHookInitializer' cannot be combined with legacy schedule or RehypeDopplerHookInitializer configuration"
11095
11146
  );
11096
11147
  }
11097
- mode = { type: "rehype" };
11148
+ mode = { type: "dopplerHook" };
11098
11149
  break;
11099
11150
  }
11100
11151
  case "standard": {
@@ -11183,7 +11234,7 @@ var DopplerFactory = class {
11183
11234
  "Initializer type 'rehype' cannot be combined with schedule"
11184
11235
  );
11185
11236
  }
11186
- mode = { type: "rehype", hookConfig: initializer.config };
11237
+ mode = { type: "dopplerHook", hookConfig: initializer.config };
11187
11238
  break;
11188
11239
  }
11189
11240
  default: {
@@ -11196,8 +11247,8 @@ var DopplerFactory = class {
11196
11247
  }
11197
11248
  if (params.modules?.dopplerHookInitializer !== void 0) {
11198
11249
  if (mode.type === "standard") {
11199
- mode = { type: "rehype" };
11200
- } else if (mode.type !== "rehype") {
11250
+ mode = { type: "dopplerHook" };
11251
+ } else if (mode.type !== "dopplerHook") {
11201
11252
  throw new Error(
11202
11253
  "modules.dopplerHookInitializer can only be used with the dopplerHookInitializer, rehype, or standard multicurve initializer mode"
11203
11254
  );
@@ -11216,14 +11267,20 @@ var DopplerFactory = class {
11216
11267
  params.sale.numTokensToSell
11217
11268
  );
11218
11269
  const addresses = getAddresses(this.chainId);
11270
+ const resolvedBundler = params.devBuy ? params.modules?.bundler ?? addresses.bundler : void 0;
11271
+ if (params.devBuy && (!resolvedBundler || resolvedBundler === ZERO_ADDRESS)) {
11272
+ throw new Error(
11273
+ "Bundler address not configured on this chain. Override via builder.withBundler() or modules.bundler."
11274
+ );
11275
+ }
11219
11276
  const sortedBeneficiaries = sortBeneficiaries(
11220
11277
  params.pool.beneficiaries ?? []
11221
11278
  );
11222
11279
  const initializerMode = this.resolveMulticurveInitializerMode(params);
11223
11280
  const useScheduledInitializer = initializerMode.type === "scheduled";
11224
11281
  const useDecayInitializer = initializerMode.type === "decay";
11225
- const useDopplerHookInitializer = initializerMode.type === "rehype";
11226
- const normalizedRehypeHookConfig = initializerMode.type === "rehype" && initializerMode.hookConfig ? normalizeRehypeDopplerHookInitializerConfig(
11282
+ const useDopplerHookInitializer = initializerMode.type === "dopplerHook";
11283
+ const normalizedRehypeHookConfig = initializerMode.type === "dopplerHook" && initializerMode.hookConfig ? normalizeRehypeDopplerHookInitializerConfig(
11227
11284
  initializerMode.hookConfig
11228
11285
  ) : void 0;
11229
11286
  const curveComponents = [
@@ -11525,7 +11582,11 @@ var DopplerFactory = class {
11525
11582
  ),
11526
11583
  ...this.resolveGovernanceBalanceLimitExclusions(
11527
11584
  params.governance
11528
- )
11585
+ ),
11586
+ ...params.devBuy ? [
11587
+ params.devBuy.recipient,
11588
+ ...params.devBuy.vesting.vestingDuration !== 0n && resolvedBundler ? [resolvedBundler] : []
11589
+ ] : []
11529
11590
  ] : void 0
11530
11591
  });
11531
11592
  const predictedTokenAddress = this.predictDopplerERC20V1TokenAddress({
@@ -11576,29 +11637,136 @@ var DopplerFactory = class {
11576
11637
  };
11577
11638
  return createParams;
11578
11639
  }
11640
+ resolveBundlerAddress(params) {
11641
+ const bundler = params.modules?.bundler ?? getAddresses(this.chainId).bundler;
11642
+ if (!bundler || bundler === ZERO_ADDRESS) {
11643
+ throw new Error(
11644
+ "Bundler address not configured on this chain. Override via builder.withBundler() or modules.bundler."
11645
+ );
11646
+ }
11647
+ return bundler;
11648
+ }
11649
+ async ensureDevBuyInitializerCompatibility(args) {
11650
+ const initializerMode = this.resolveMulticurveInitializerMode(args.params);
11651
+ if (initializerMode.type !== "dopplerHook") {
11652
+ throw new Error(
11653
+ "Dev buys require a DopplerHookInitializer or Rehype initializer"
11654
+ );
11655
+ }
11656
+ const rehypeInitializer = initializerMode.hookConfig?.hookAddress;
11657
+ if (!rehypeInitializer) return;
11658
+ const configuredBundler = await this.publicClient.readContract({
11659
+ address: rehypeInitializer,
11660
+ abi: rehypeDopplerHookInitializerAbi,
11661
+ functionName: "bundler"
11662
+ });
11663
+ if (configuredBundler.toLowerCase() !== args.bundler.toLowerCase()) {
11664
+ throw new Error(
11665
+ `Rehype initializer ${rehypeInitializer} is configured for Bundler ${configuredBundler}, not ${args.bundler}`
11666
+ );
11667
+ }
11668
+ }
11669
+ parseBundleSimulation(result) {
11670
+ const values = Array.isArray(result) ? result : result && typeof result === "object" ? [
11671
+ result.asset,
11672
+ result.poolKey,
11673
+ result.governance,
11674
+ result.timelock,
11675
+ result.amountOut
11676
+ ] : [];
11677
+ if (values.length < 5) {
11678
+ throw new Error("Failed to simulate multicurve dev buy");
11679
+ }
11680
+ return {
11681
+ asset: values[0],
11682
+ poolKey: this.normalizePoolKey(values[1]),
11683
+ governance: values[2],
11684
+ timelock: values[3],
11685
+ amountOut: values[4]
11686
+ };
11687
+ }
11579
11688
  async resolveFinalMulticurveCreate(args) {
11580
11689
  const { params, simulationAccount } = args;
11581
11690
  const addresses = getAddresses(this.chainId);
11582
11691
  const airlock = params.modules?.airlock ?? addresses.airlock;
11583
11692
  const initialCreateParams = args.createParams ?? this.encodeCreateMulticurveParams(params);
11584
- const initialSimulation = await this.publicClient.simulateContract({
11585
- address: airlock,
11586
- abi: airlockAbi,
11587
- functionName: "create",
11588
- args: [{ ...initialCreateParams }],
11589
- account: simulationAccount
11590
- });
11591
- const initialResult = initialSimulation.result;
11592
- if (!initialResult || !Array.isArray(initialResult) || initialResult.length < 5) {
11593
- throw new Error("Failed to simulate multicurve create");
11693
+ if (!params.devBuy) {
11694
+ const initialSimulation = await this.publicClient.simulateContract({
11695
+ address: airlock,
11696
+ abi: airlockAbi,
11697
+ functionName: "create",
11698
+ args: [{ ...initialCreateParams }],
11699
+ account: simulationAccount
11700
+ });
11701
+ const initialResult = initialSimulation.result;
11702
+ if (!initialResult || !Array.isArray(initialResult) || initialResult.length < 5) {
11703
+ throw new Error("Failed to simulate multicurve create");
11704
+ }
11705
+ let createParams2 = initialCreateParams;
11706
+ let request = initialSimulation.request;
11707
+ let result2 = initialResult;
11708
+ if (!args.createParams) {
11709
+ const enrichedCreateParams = this.withSimulationGovernanceTimelockExclusion({
11710
+ createParams: createParams2,
11711
+ simResult: initialResult,
11712
+ token: params.token,
11713
+ governance: params.governance,
11714
+ modules: params.modules,
11715
+ addresses
11716
+ });
11717
+ if (enrichedCreateParams.tokenFactoryData !== createParams2.tokenFactoryData) {
11718
+ createParams2 = enrichedCreateParams;
11719
+ const finalSimulation = await this.publicClient.simulateContract({
11720
+ address: airlock,
11721
+ abi: airlockAbi,
11722
+ functionName: "create",
11723
+ args: [{ ...createParams2 }],
11724
+ account: simulationAccount
11725
+ });
11726
+ const finalResult = finalSimulation.result;
11727
+ if (!finalResult || !Array.isArray(finalResult) || finalResult.length < 5) {
11728
+ throw new Error("Failed to simulate enriched multicurve create");
11729
+ }
11730
+ request = finalSimulation.request;
11731
+ result2 = finalResult;
11732
+ }
11733
+ }
11734
+ const tokenAddress = result2[0];
11735
+ const poolIdentity = await this.computeMulticurvePoolIdentity(
11736
+ params,
11737
+ tokenAddress
11738
+ );
11739
+ const prediction2 = {
11740
+ tokenAddress,
11741
+ poolOrHookAddress: result2[1],
11742
+ governanceAddress: result2[2],
11743
+ timelockAddress: result2[3],
11744
+ migrationPoolAddress: result2[4],
11745
+ ...poolIdentity
11746
+ };
11747
+ return { airlock, createParams: createParams2, prediction: prediction2, request };
11594
11748
  }
11749
+ this.validateMulticurveDevBuy(params.devBuy);
11750
+ const bundler = this.resolveBundlerAddress(params);
11751
+ await this.ensureDevBuyInitializerCompatibility({ params, bundler });
11595
11752
  let createParams = initialCreateParams;
11596
- let request = initialSimulation.request;
11597
- let result = initialResult;
11753
+ const initialBundleSimulation = await this.publicClient.simulateContract({
11754
+ address: bundler,
11755
+ abi: bundlerAbi,
11756
+ functionName: "simulateBundle",
11757
+ args: [{ ...createParams }, params.devBuy.exactAmountIn]
11758
+ });
11759
+ let result = this.parseBundleSimulation(initialBundleSimulation.result);
11598
11760
  if (!args.createParams) {
11599
11761
  const enrichedCreateParams = this.withSimulationGovernanceTimelockExclusion({
11600
11762
  createParams,
11601
- simResult: initialResult,
11763
+ simResult: [
11764
+ result.asset,
11765
+ result.poolKey.hooks,
11766
+ result.governance,
11767
+ result.timelock,
11768
+ ZERO_ADDRESS
11769
+ ],
11602
11770
  token: params.token,
11603
11771
  governance: params.governance,
11604
11772
  modules: params.modules,
@@ -11606,87 +11774,202 @@ var DopplerFactory = class {
11606
11774
  });
11607
11775
  if (enrichedCreateParams.tokenFactoryData !== createParams.tokenFactoryData) {
11608
11776
  createParams = enrichedCreateParams;
11609
- const finalSimulation = await this.publicClient.simulateContract({
11610
- address: airlock,
11611
- abi: airlockAbi,
11612
- functionName: "create",
11613
- args: [{ ...createParams }],
11614
- account: simulationAccount
11777
+ const finalBundleSimulation = await this.publicClient.simulateContract({
11778
+ address: bundler,
11779
+ abi: bundlerAbi,
11780
+ functionName: "simulateBundle",
11781
+ args: [{ ...createParams }, params.devBuy.exactAmountIn]
11615
11782
  });
11616
- const finalResult = finalSimulation.result;
11617
- if (!finalResult || !Array.isArray(finalResult) || finalResult.length < 5) {
11618
- throw new Error("Failed to simulate enriched multicurve create");
11619
- }
11620
- request = finalSimulation.request;
11621
- result = finalResult;
11783
+ result = this.parseBundleSimulation(finalBundleSimulation.result);
11622
11784
  }
11623
11785
  }
11624
- const tokenAddress = result[0];
11625
- const poolIdentity = await this.computeMulticurvePoolIdentity(
11626
- params,
11627
- tokenAddress
11628
- );
11786
+ const currency0 = result.poolKey.currency0.toLowerCase();
11787
+ const currency1 = result.poolKey.currency1.toLowerCase();
11788
+ const asset = result.asset.toLowerCase();
11789
+ const numeraire = createParams.numeraire.toLowerCase();
11790
+ if (!(currency0 === asset && currency1 === numeraire || currency1 === asset && currency0 === numeraire)) {
11791
+ throw new Error(
11792
+ "Bundler simulation returned a pool key that does not contain the created asset and numeraire"
11793
+ );
11794
+ }
11795
+ if (result.poolKey.hooks.toLowerCase() !== createParams.poolInitializer.toLowerCase()) {
11796
+ throw new Error(
11797
+ "Bundler simulation returned an unexpected pool initializer"
11798
+ );
11799
+ }
11629
11800
  const prediction = {
11630
- tokenAddress,
11631
- poolOrHookAddress: result[1],
11632
- governanceAddress: result[2],
11633
- timelockAddress: result[3],
11634
- migrationPoolAddress: result[4],
11635
- ...poolIdentity
11801
+ tokenAddress: result.asset,
11802
+ poolOrHookAddress: result.asset,
11803
+ governanceAddress: result.governance,
11804
+ timelockAddress: result.timelock,
11805
+ poolKey: result.poolKey,
11806
+ poolId: this.computePoolId(result.poolKey),
11807
+ tokenIsCurrency0: currency0 === asset
11808
+ };
11809
+ const devBuy = {
11810
+ ...params.devBuy,
11811
+ vesting: { ...params.devBuy.vesting },
11812
+ bundler,
11813
+ simulatedAmountOut: result.amountOut
11814
+ };
11815
+ return { airlock, bundler, createParams, prediction, devBuy };
11816
+ }
11817
+ buildDevBuyTransaction(args) {
11818
+ return {
11819
+ to: args.devBuy.bundler,
11820
+ data: encodeFunctionData({
11821
+ abi: bundlerAbi,
11822
+ functionName: "bundle",
11823
+ args: [
11824
+ { ...args.createParams },
11825
+ { ...args.devBuy.vesting },
11826
+ args.devBuy.exactAmountIn,
11827
+ args.devBuy.recipient
11828
+ ]
11829
+ }),
11830
+ value: args.createParams.numeraire === ZERO_ADDRESS ? args.devBuy.exactAmountIn : 0n
11636
11831
  };
11637
- return { airlock, createParams, prediction, request };
11832
+ }
11833
+ async readDevBuyAllowance(args) {
11834
+ if (args.createParams.numeraire === ZERO_ADDRESS) {
11835
+ return void 0;
11836
+ }
11837
+ return await this.publicClient.readContract({
11838
+ address: args.createParams.numeraire,
11839
+ abi: erc20Abi,
11840
+ functionName: "allowance",
11841
+ args: [args.account, args.bundler]
11842
+ });
11843
+ }
11844
+ async estimateDevBuyGas(args) {
11845
+ try {
11846
+ const gas = await this.publicClient.estimateContractGas(
11847
+ {
11848
+ address: args.devBuy.bundler,
11849
+ abi: bundlerAbi,
11850
+ functionName: "bundle",
11851
+ args: [
11852
+ { ...args.createParams },
11853
+ { ...args.devBuy.vesting },
11854
+ args.devBuy.exactAmountIn,
11855
+ args.devBuy.recipient
11856
+ ],
11857
+ account: args.account,
11858
+ value: args.createParams.numeraire === ZERO_ADDRESS ? args.devBuy.exactAmountIn : 0n
11859
+ }
11860
+ );
11861
+ return { status: "estimated", gas };
11862
+ } catch {
11863
+ return { status: "unavailable" };
11864
+ }
11638
11865
  }
11639
11866
  async prepareCreateMulticurve(params, options) {
11640
11867
  const resolved = await this.resolveFinalMulticurveCreate({
11641
11868
  params,
11642
11869
  simulationAccount: options.account
11643
11870
  });
11644
- const internalGasEstimate = await this.resolveInternalCreateGasEstimate({
11645
- request: resolved.request,
11646
- address: resolved.airlock,
11871
+ if (!resolved.devBuy) {
11872
+ const internalGasEstimate = await this.resolveInternalCreateGasEstimate({
11873
+ request: resolved.request,
11874
+ address: resolved.airlock,
11875
+ createParams: resolved.createParams,
11876
+ account: options.account
11877
+ });
11878
+ if (internalGasEstimate.status === "reverted") {
11879
+ throw internalGasEstimate.error;
11880
+ }
11881
+ return {
11882
+ chainId: this.chainId,
11883
+ account: options.account,
11884
+ airlock: resolved.airlock,
11885
+ createParams: resolved.createParams,
11886
+ prediction: resolved.prediction,
11887
+ transaction: {
11888
+ to: resolved.airlock,
11889
+ data: encodeFunctionData({
11890
+ abi: airlockAbi,
11891
+ functionName: "create",
11892
+ args: [{ ...resolved.createParams }]
11893
+ }),
11894
+ value: 0n
11895
+ },
11896
+ gasEstimate: internalGasEstimate
11897
+ };
11898
+ }
11899
+ const allowance = await this.readDevBuyAllowance({
11900
+ createParams: resolved.createParams,
11901
+ account: options.account,
11902
+ bundler: resolved.devBuy.bundler
11903
+ });
11904
+ const approvalRequired = allowance !== void 0 && allowance < resolved.devBuy.exactAmountIn;
11905
+ const approvalTransaction = approvalRequired ? {
11906
+ to: resolved.createParams.numeraire,
11907
+ data: encodeFunctionData({
11908
+ abi: erc20Abi,
11909
+ functionName: "approve",
11910
+ args: [resolved.devBuy.bundler, resolved.devBuy.exactAmountIn]
11911
+ }),
11912
+ value: 0n
11913
+ } : void 0;
11914
+ const gasEstimate = approvalRequired ? { status: "unavailable" } : await this.estimateDevBuyGas({
11647
11915
  createParams: resolved.createParams,
11916
+ devBuy: resolved.devBuy,
11648
11917
  account: options.account
11649
11918
  });
11650
- if (internalGasEstimate.status === "reverted") {
11651
- throw internalGasEstimate.error;
11652
- }
11653
- const gasEstimate = internalGasEstimate;
11654
11919
  return {
11655
11920
  chainId: this.chainId,
11656
11921
  account: options.account,
11657
11922
  airlock: resolved.airlock,
11658
11923
  createParams: resolved.createParams,
11659
11924
  prediction: resolved.prediction,
11660
- transaction: {
11661
- to: resolved.airlock,
11662
- data: encodeFunctionData({
11663
- abi: airlockAbi,
11664
- functionName: "create",
11665
- args: [{ ...resolved.createParams }]
11666
- }),
11667
- value: 0n
11668
- },
11925
+ transaction: this.buildDevBuyTransaction({
11926
+ createParams: resolved.createParams,
11927
+ devBuy: resolved.devBuy
11928
+ }),
11929
+ approvalTransaction,
11930
+ devBuy: resolved.devBuy,
11669
11931
  gasEstimate
11670
11932
  };
11671
11933
  }
11672
11934
  async simulateCreateMulticurve(params) {
11935
+ const paramsSnapshot = structuredClone(params);
11673
11936
  const resolved = await this.resolveFinalMulticurveCreate({
11674
- params,
11937
+ params: paramsSnapshot,
11675
11938
  simulationAccount: this.walletClient?.account
11676
11939
  });
11677
- const gasEstimate = await this.resolveCreateGasEstimate({
11678
- request: resolved.request,
11679
- address: resolved.airlock,
11680
- createParams: resolved.createParams,
11681
- account: this.walletClient?.account ?? params.userAddress
11682
- });
11940
+ const createParamsSnapshot = structuredClone(resolved.createParams);
11941
+ let gasEstimate;
11942
+ if (resolved.devBuy) {
11943
+ const account = this.walletClient?.account ?? paramsSnapshot.userAddress;
11944
+ const allowance = await this.readDevBuyAllowance({
11945
+ createParams: resolved.createParams,
11946
+ account: typeof account === "string" ? account : account.address,
11947
+ bundler: resolved.devBuy.bundler
11948
+ });
11949
+ if (allowance === void 0 || allowance >= resolved.devBuy.exactAmountIn) {
11950
+ const estimate = await this.estimateDevBuyGas({
11951
+ createParams: resolved.createParams,
11952
+ devBuy: resolved.devBuy,
11953
+ account
11954
+ });
11955
+ gasEstimate = estimate.status === "estimated" ? estimate.gas : void 0;
11956
+ }
11957
+ } else {
11958
+ gasEstimate = await this.resolveCreateGasEstimate({
11959
+ request: resolved.request,
11960
+ address: resolved.airlock,
11961
+ createParams: resolved.createParams,
11962
+ account: this.walletClient?.account ?? paramsSnapshot.userAddress
11963
+ });
11964
+ }
11683
11965
  return {
11684
11966
  createParams: resolved.createParams,
11685
11967
  tokenAddress: resolved.prediction.tokenAddress,
11686
11968
  poolId: resolved.prediction.poolId,
11687
11969
  gasEstimate,
11688
- execute: () => this.createMulticurve(params, {
11689
- _createParams: resolved.createParams
11970
+ devBuy: resolved.devBuy,
11971
+ execute: () => this.createMulticurve(paramsSnapshot, {
11972
+ _createParams: createParamsSnapshot
11690
11973
  })
11691
11974
  };
11692
11975
  }
@@ -11699,38 +11982,142 @@ var DopplerFactory = class {
11699
11982
  simulationAccount: this.walletClient.account,
11700
11983
  createParams: options?._createParams
11701
11984
  });
11702
- const gasEstimate = await this.resolveCreateGasEstimate({
11703
- request: resolved.request,
11704
- address: resolved.airlock,
11985
+ let approvalTransactionHash;
11986
+ let hash;
11987
+ if (resolved.devBuy) {
11988
+ const account2 = this.walletClient.account;
11989
+ if (!account2) {
11990
+ throw new Error("Wallet account required for write operations");
11991
+ }
11992
+ const accountAddress2 = typeof account2 === "string" ? account2 : account2.address;
11993
+ const [allowance, balance] = await Promise.all([
11994
+ this.readDevBuyAllowance({
11995
+ createParams: resolved.createParams,
11996
+ account: accountAddress2,
11997
+ bundler: resolved.devBuy.bundler
11998
+ }),
11999
+ resolved.createParams.numeraire === ZERO_ADDRESS ? void 0 : this.publicClient.readContract({
12000
+ address: resolved.createParams.numeraire,
12001
+ abi: erc20Abi,
12002
+ functionName: "balanceOf",
12003
+ args: [accountAddress2]
12004
+ })
12005
+ ]);
12006
+ if (balance !== void 0 && balance < resolved.devBuy.exactAmountIn) {
12007
+ throw new Error(
12008
+ `Insufficient ERC20 balance for dev buy: required ${resolved.devBuy.exactAmountIn}, available ${balance}`
12009
+ );
12010
+ }
12011
+ if (allowance !== void 0 && allowance < resolved.devBuy.exactAmountIn) {
12012
+ const { request: approvalRequest, result: approvalSucceeded } = await this.publicClient.simulateContract({
12013
+ address: resolved.createParams.numeraire,
12014
+ abi: erc20Abi,
12015
+ functionName: "approve",
12016
+ args: [resolved.devBuy.bundler, resolved.devBuy.exactAmountIn],
12017
+ account: account2
12018
+ });
12019
+ if (approvalSucceeded !== true) {
12020
+ throw new Error("Bundler approval simulation returned false");
12021
+ }
12022
+ approvalTransactionHash = await this.walletClient.writeContract(approvalRequest);
12023
+ const approvalReceipt = await this.publicClient.waitForTransactionReceipt({
12024
+ hash: approvalTransactionHash,
12025
+ confirmations: 2
12026
+ });
12027
+ if (approvalReceipt.status !== "success") {
12028
+ throw new Error("Bundler approval transaction reverted");
12029
+ }
12030
+ const approvedAllowance = await this.readDevBuyAllowance({
12031
+ createParams: resolved.createParams,
12032
+ account: accountAddress2,
12033
+ bundler: resolved.devBuy.bundler
12034
+ });
12035
+ if (approvedAllowance === void 0 || approvedAllowance < resolved.devBuy.exactAmountIn) {
12036
+ throw new Error(
12037
+ "Bundler approval transaction did not provide the required allowance"
12038
+ );
12039
+ }
12040
+ }
12041
+ const { request } = await this.publicClient.simulateContract({
12042
+ address: resolved.devBuy.bundler,
12043
+ abi: bundlerAbi,
12044
+ functionName: "bundle",
12045
+ args: [
12046
+ { ...resolved.createParams },
12047
+ { ...resolved.devBuy.vesting },
12048
+ resolved.devBuy.exactAmountIn,
12049
+ resolved.devBuy.recipient
12050
+ ],
12051
+ account: account2,
12052
+ value: resolved.createParams.numeraire === ZERO_ADDRESS ? resolved.devBuy.exactAmountIn : 0n
12053
+ });
12054
+ hash = await this.walletClient.writeContract(
12055
+ params.gas === void 0 ? request : { ...request, gas: params.gas }
12056
+ );
12057
+ } else {
12058
+ const gasEstimate = await this.resolveCreateGasEstimate({
12059
+ request: resolved.request,
12060
+ address: resolved.airlock,
12061
+ createParams: resolved.createParams,
12062
+ account: this.walletClient.account
12063
+ });
12064
+ const gas = params.gas ?? gasEstimate ?? DEFAULT_CREATE_GAS_LIMIT;
12065
+ hash = await this.walletClient.writeContract({
12066
+ ...resolved.request,
12067
+ gas
12068
+ });
12069
+ }
12070
+ const receipt = await this.publicClient.waitForTransactionReceipt({ hash, confirmations: 2 });
12071
+ const account = this.walletClient.account;
12072
+ if (!account) {
12073
+ throw new Error("Wallet account required for receipt verification");
12074
+ }
12075
+ const accountAddress = typeof account === "string" ? account : account.address;
12076
+ const transaction = resolved.devBuy ? this.buildDevBuyTransaction({
12077
+ createParams: resolved.createParams,
12078
+ devBuy: resolved.devBuy
12079
+ }) : {
12080
+ to: resolved.airlock,
12081
+ data: encodeFunctionData({
12082
+ abi: airlockAbi,
12083
+ functionName: "create",
12084
+ args: [{ ...resolved.createParams }]
12085
+ }),
12086
+ value: 0n
12087
+ };
12088
+ const prepared = {
12089
+ chainId: this.chainId,
12090
+ account: accountAddress,
12091
+ airlock: resolved.airlock,
11705
12092
  createParams: resolved.createParams,
11706
- account: this.walletClient.account
11707
- });
11708
- const gas = params.gas ?? gasEstimate ?? DEFAULT_CREATE_GAS_LIMIT;
11709
- const hash = await this.walletClient.writeContract({
11710
- ...resolved.request,
11711
- gas
11712
- });
11713
- const receipt = await this.publicClient.waitForTransactionReceipt({ hash, confirmations: 2 });
11714
- const createResult = parseAirlockCreateReceipt({
11715
- receipt,
11716
- expectedAirlock: resolved.airlock
11717
- });
11718
- if (!createResult) {
11719
- throw new Error(
11720
- "Failed to extract token address from Create event in transaction logs"
11721
- );
12093
+ prediction: resolved.prediction,
12094
+ transaction,
12095
+ devBuy: resolved.devBuy};
12096
+ const verified = verifyPreparedCreateReceipt({ prepared, receipt });
12097
+ const baseResult = {
12098
+ tokenAddress: verified.receiptIdentity.tokenAddress,
12099
+ poolId: resolved.prediction.poolId,
12100
+ transactionHash: hash,
12101
+ approvalTransactionHash
12102
+ };
12103
+ if (!resolved.devBuy) {
12104
+ return baseResult;
11722
12105
  }
11723
- const actualTokenAddress = createResult.tokenAddress;
11724
- if (resolved.prediction.tokenAddress.toLowerCase() !== actualTokenAddress.toLowerCase()) {
11725
- console.warn(
11726
- `[DopplerSDK] Simulation predicted token ${resolved.prediction.tokenAddress} but actual is ${actualTokenAddress}. This may indicate state divergence between simulation and execution.`
12106
+ if (!verified.devBuy) {
12107
+ throw new Error(
12108
+ "Bundler receipt verification did not return dev-buy data"
11727
12109
  );
11728
12110
  }
11729
- const { poolId } = await this.computeMulticurvePoolIdentity(
11730
- params,
11731
- actualTokenAddress
11732
- );
11733
- return { tokenAddress: actualTokenAddress, poolId, transactionHash: hash };
12111
+ return {
12112
+ ...baseResult,
12113
+ devBuy: {
12114
+ exactAmountIn: resolved.devBuy.exactAmountIn,
12115
+ recipient: resolved.devBuy.recipient,
12116
+ vesting: { ...resolved.devBuy.vesting },
12117
+ bundler: resolved.devBuy.bundler,
12118
+ amountOut: verified.devBuy.amountOut
12119
+ }
12120
+ };
11734
12121
  }
11735
12122
  /**
11736
12123
  * Normalize user-provided multicurve positions and ensure they satisfy SDK constraints
@@ -12231,6 +12618,24 @@ var DopplerFactory = class {
12231
12618
  );
12232
12619
  }
12233
12620
  }
12621
+ validateMulticurveDevBuy(devBuy) {
12622
+ if (devBuy.exactAmountIn <= 0n || devBuy.exactAmountIn > MAX_UINT128) {
12623
+ throw new Error("Dev buy exactAmountIn must be in the uint128 range");
12624
+ }
12625
+ if (devBuy.recipient.toLowerCase() === ZERO_ADDRESS) {
12626
+ throw new Error("Dev buy recipient must not be the zero address");
12627
+ }
12628
+ const { vestingDuration, cliffDuration } = devBuy.vesting;
12629
+ if (vestingDuration < 0n || vestingDuration > MAX_UINT64 || cliffDuration < 0n || cliffDuration > MAX_UINT64) {
12630
+ throw new Error("Dev buy vesting durations must be in the uint64 range");
12631
+ }
12632
+ if (vestingDuration !== 0n && vestingDuration < MIN_BUNDLER_VESTING_DURATION) {
12633
+ throw new Error("Dev buy vestingDuration must be at least 86400 seconds");
12634
+ }
12635
+ if (cliffDuration > vestingDuration) {
12636
+ throw new Error("Dev buy cliffDuration must not exceed vestingDuration");
12637
+ }
12638
+ }
12234
12639
  /**
12235
12640
  * Validate multicurve auction parameters
12236
12641
  */
@@ -12254,6 +12659,14 @@ var DopplerFactory = class {
12254
12659
  throw new Error("Cannot sell more tokens than initial supply");
12255
12660
  }
12256
12661
  this.resolveMulticurveInitializerMode(params);
12662
+ if (params.devBuy) {
12663
+ this.validateMulticurveDevBuy(params.devBuy);
12664
+ if (this.resolveMulticurveInitializerMode(params).type !== "dopplerHook") {
12665
+ throw new Error(
12666
+ "Dev buys require a DopplerHookInitializer or Rehype initializer"
12667
+ );
12668
+ }
12669
+ }
12257
12670
  this.validateVestingConfig(params.sale, params.vesting);
12258
12671
  if (params.pool.beneficiaries && params.pool.beneficiaries.length > 0) {
12259
12672
  const beneficiaries = params.pool.beneficiaries;
@@ -12298,18 +12711,6 @@ var DopplerFactory = class {
12298
12711
  );
12299
12712
  }
12300
12713
  }
12301
- /**
12302
- * Get the Bundler contract address for the current chain
12303
- * Used to perform atomic create + swap ("bundle") flows for static auctions
12304
- */
12305
- getBundlerAddress() {
12306
- const addresses = getAddresses(this.chainId);
12307
- const addr = addresses.bundler;
12308
- if (!addr || addr === ZERO_ADDRESS) {
12309
- throw new Error("Bundler address not configured for this chain");
12310
- }
12311
- return addr;
12312
- }
12313
12714
  /**
12314
12715
  * Get the appropriate migrator address based on migration config
12315
12716
  * Allows override via ModuleAddressOverrides when provided in params.
@@ -12385,168 +12786,6 @@ var DopplerFactory = class {
12385
12786
  }
12386
12787
  // computeTicks moved to builders. No longer needed here.
12387
12788
  // computeOptimalGamma moved to utils.
12388
- // -----------------------------
12389
- // Bundler helpers (Static/V3)
12390
- // -----------------------------
12391
- /**
12392
- * Simulate a bundle with exact input on Uniswap V3 as part of create
12393
- * Returns the expected output amount for the provided exact input.
12394
- */
12395
- async simulateBundleExactInput(createParams, params) {
12396
- const bundler = this.getBundlerAddress();
12397
- const { result } = await this.publicClient.simulateContract({
12398
- address: bundler,
12399
- abi: bundlerAbi,
12400
- functionName: "simulateBundleExactIn",
12401
- args: [
12402
- { ...createParams },
12403
- {
12404
- tokenIn: params.tokenIn,
12405
- tokenOut: params.tokenOut,
12406
- amountIn: params.amountIn,
12407
- fee: params.fee,
12408
- sqrtPriceLimitX96: params.sqrtPriceLimitX96
12409
- }
12410
- ]
12411
- });
12412
- return result;
12413
- }
12414
- /**
12415
- * Simulate a bundle with exact output on Uniswap V3 as part of create
12416
- * Returns the required input amount for the provided exact output.
12417
- */
12418
- async simulateBundleExactOutput(createParams, params) {
12419
- const bundler = this.getBundlerAddress();
12420
- const { result } = await this.publicClient.simulateContract({
12421
- address: bundler,
12422
- abi: bundlerAbi,
12423
- functionName: "simulateBundleExactOut",
12424
- args: [
12425
- { ...createParams },
12426
- {
12427
- tokenIn: params.tokenIn,
12428
- tokenOut: params.tokenOut,
12429
- amount: params.amount,
12430
- fee: params.fee,
12431
- sqrtPriceLimitX96: params.sqrtPriceLimitX96
12432
- }
12433
- ]
12434
- });
12435
- return result;
12436
- }
12437
- // Bundler helpers (Multicurve/V4)
12438
- async simulateMulticurveBundleExactOut(createParams, params) {
12439
- const bundler = this.getBundlerAddress();
12440
- await this.ensureMulticurveBundlerSupport(bundler);
12441
- const exactAmountOut = params?.exactAmountOut ?? 0n;
12442
- this.ensureUint128(exactAmountOut, "exactAmountOut", { allowZero: true });
12443
- const hookData = "0x";
12444
- const { result } = await this.publicClient.simulateContract({
12445
- address: bundler,
12446
- abi: bundlerAbi,
12447
- functionName: "simulateMulticurveBundleExactOut",
12448
- args: [{ ...createParams }, exactAmountOut, hookData]
12449
- });
12450
- const { asset, poolKey, amount, gasEstimate } = this.parseMulticurveBundleResult(result);
12451
- return {
12452
- asset,
12453
- poolKey,
12454
- amountIn: amount,
12455
- gasEstimate
12456
- };
12457
- }
12458
- async simulateMulticurveBundleExactIn(createParams, params) {
12459
- const bundler = this.getBundlerAddress();
12460
- await this.ensureMulticurveBundlerSupport(bundler);
12461
- if (params.exactAmountIn === void 0) {
12462
- throw new Error(
12463
- "exactAmountIn is required for multicurve bundle simulations"
12464
- );
12465
- }
12466
- const exactAmountIn = params.exactAmountIn;
12467
- this.ensureUint128(exactAmountIn, "exactAmountIn");
12468
- const hookData = "0x";
12469
- const { result } = await this.publicClient.simulateContract({
12470
- address: bundler,
12471
- abi: bundlerAbi,
12472
- functionName: "simulateMulticurveBundleExactIn",
12473
- args: [{ ...createParams }, exactAmountIn, hookData]
12474
- });
12475
- const { asset, poolKey, amount, gasEstimate } = this.parseMulticurveBundleResult(result);
12476
- return {
12477
- asset,
12478
- poolKey,
12479
- amountOut: amount,
12480
- gasEstimate
12481
- };
12482
- }
12483
- /**
12484
- * Execute an atomic create + swap bundle through the Bundler
12485
- * commands/inputs are Universal Router encoded values (e.g., from doppler-router)
12486
- */
12487
- async bundle(createParams, commands, inputs, options) {
12488
- if (!this.walletClient) {
12489
- throw new Error("Wallet client required for write operations");
12490
- }
12491
- const bundler = this.getBundlerAddress();
12492
- const { request } = await this.publicClient.simulateContract({
12493
- address: bundler,
12494
- abi: bundlerAbi,
12495
- functionName: "bundle",
12496
- args: [{ ...createParams }, commands, inputs],
12497
- account: this.walletClient.account,
12498
- value: options?.value ?? 0n
12499
- });
12500
- const gas = options?.gas ?? void 0;
12501
- const tx = await this.walletClient.writeContract(
12502
- gas ? { ...request, gas } : request
12503
- );
12504
- return tx;
12505
- }
12506
- ensureUint128(value, paramName, options = {}) {
12507
- const { allowZero = false } = options;
12508
- if (value < 0n) {
12509
- throw new Error(`${paramName} cannot be negative`);
12510
- }
12511
- if (!allowZero && value === 0n) {
12512
- throw new Error(`${paramName} must be greater than zero`);
12513
- }
12514
- if (value > MAX_UINT1282) {
12515
- throw new Error(`${paramName} exceeds uint128 range`);
12516
- }
12517
- }
12518
- parseMulticurveBundleResult(result) {
12519
- let asset;
12520
- let poolKeyRaw;
12521
- let amount;
12522
- let gasEstimate;
12523
- if (Array.isArray(result)) {
12524
- if (result.length < 4) {
12525
- throw new Error("Unexpected multicurve bundle simulation result shape");
12526
- }
12527
- asset = result[0];
12528
- poolKeyRaw = result[1];
12529
- amount = result[2];
12530
- gasEstimate = result[3];
12531
- } else if (result && typeof result === "object") {
12532
- const obj = result;
12533
- asset = obj.asset;
12534
- poolKeyRaw = obj.poolKey;
12535
- amount = obj.amountIn ?? obj.amountOut ?? obj.amount;
12536
- gasEstimate = obj.gasEstimate;
12537
- } else {
12538
- throw new Error("Unexpected multicurve bundle simulation result format");
12539
- }
12540
- if (asset === void 0 || poolKeyRaw === void 0 || amount === void 0 || gasEstimate === void 0) {
12541
- throw new Error("Incomplete multicurve bundle simulation result");
12542
- }
12543
- return {
12544
- asset,
12545
- poolKey: this.normalizePoolKey(poolKeyRaw),
12546
- amount,
12547
- gasEstimate
12548
- };
12549
- }
12550
12789
  normalizePoolKey(value) {
12551
12790
  if (Array.isArray(value)) {
12552
12791
  const [currency0, currency1, feeRaw, tickSpacingRaw, hooks] = value;
@@ -12916,7 +13155,7 @@ var DopplerFactory = class {
12916
13155
  const addresses = getAddresses(this.chainId);
12917
13156
  const initializerMode = this.resolveMulticurveInitializerMode(params);
12918
13157
  let hookAddress;
12919
- if (initializerMode.type === "rehype") {
13158
+ if (initializerMode.type === "dopplerHook") {
12920
13159
  hookAddress = params.modules?.dopplerHookInitializer ?? addresses.dopplerHookInitializer ?? ZERO_ADDRESS;
12921
13160
  if (hookAddress === ZERO_ADDRESS) {
12922
13161
  throw new Error("DopplerHookInitializer address not configured");
@@ -12945,7 +13184,7 @@ var DopplerFactory = class {
12945
13184
  const poolKey = {
12946
13185
  currency0: tokenIsCurrency0 ? tokenAddress : numeraire,
12947
13186
  currency1: tokenIsCurrency0 ? numeraire : tokenAddress,
12948
- fee: initializerMode.type === "decay" || initializerMode.type === "rehype" && initializerMode.hookConfig ? DYNAMIC_FEE_FLAG : params.pool.fee,
13187
+ fee: initializerMode.type === "decay" || initializerMode.type === "dopplerHook" && initializerMode.hookConfig ? DYNAMIC_FEE_FLAG : params.pool.fee,
12949
13188
  tickSpacing: params.pool.tickSpacing,
12950
13189
  hooks: hookAddress
12951
13190
  };
@@ -12955,30 +13194,7 @@ var DopplerFactory = class {
12955
13194
  tokenIsCurrency0
12956
13195
  };
12957
13196
  }
12958
- async ensureMulticurveBundlerSupport(bundler) {
12959
- if (this.multicurveBundlerSupport.get(bundler)) {
12960
- return;
12961
- }
12962
- const client = this.publicClient;
12963
- if (!client || typeof client.getBytecode !== "function") {
12964
- this.multicurveBundlerSupport.set(bundler, true);
12965
- return;
12966
- }
12967
- const bytecode = await client.getBytecode({ address: bundler });
12968
- const supports = Boolean(
12969
- bytecode && MULTICURVE_BUNDLER_SELECTORS.every(
12970
- (selector) => bytecode.includes(selector.slice(2))
12971
- )
12972
- );
12973
- if (!supports) {
12974
- throw new Error(
12975
- `Bundler at ${bundler} does not support multicurve bundling. Ensure the Doppler Bundler has been upgraded and update chain addresses.`
12976
- );
12977
- }
12978
- this.multicurveBundlerSupport.set(bundler, true);
12979
- }
12980
13197
  };
12981
- var MULTICURVE_BUNDLER_SELECTORS = ["0xe2e9faa1", "0x07087b06"];
12982
13198
  function parseAirlockPoolOrHook(rawAssetData, context = "Airlock getAssetData") {
12983
13199
  const rawPoolOrHook = readContractResultField(
12984
13200
  rawAssetData,
@@ -13404,12 +13620,12 @@ var DynamicAuction = class {
13404
13620
  const isToken0 = poolKey.currency0 !== zeroAddress;
13405
13621
  const tokenAddress = isToken0 ? poolKey.currency0 : poolKey.currency1;
13406
13622
  const numeraireAddress = isToken0 ? poolKey.currency1 : poolKey.currency0;
13407
- const poolId = computePoolId(poolKey);
13623
+ const poolId2 = computePoolId(poolKey);
13408
13624
  return {
13409
13625
  hookAddress: this.hookAddress,
13410
13626
  tokenAddress,
13411
13627
  numeraireAddress,
13412
- poolId,
13628
+ poolId: poolId2,
13413
13629
  currentEpoch,
13414
13630
  totalProceeds: state.totalProceeds,
13415
13631
  totalTokensSold: state.totalTokensSold,
@@ -13732,14 +13948,14 @@ async function collectMulticurveFees({
13732
13948
  addresses
13733
13949
  }) {
13734
13950
  if (state.status === 2 /* Locked */) {
13735
- const poolId = computePoolId(state.poolKey);
13951
+ const poolId2 = computePoolId(state.poolKey);
13736
13952
  const collectFeesAbi = initializerAddress === addresses.dopplerHookInitializer ? dopplerHookInitializerAbi : v4MulticurveInitializerAbi;
13737
13953
  return collectFeesFromContract({
13738
13954
  client,
13739
13955
  walletClient,
13740
13956
  contractAddress: initializerAddress,
13741
13957
  abi: collectFeesAbi,
13742
- poolId
13958
+ poolId: poolId2
13743
13959
  });
13744
13960
  }
13745
13961
  throw new Error("Multicurve pool is not locked or was migrated");
@@ -13749,13 +13965,13 @@ async function collectFeesFromContract({
13749
13965
  walletClient,
13750
13966
  contractAddress,
13751
13967
  abi,
13752
- poolId
13968
+ poolId: poolId2
13753
13969
  }) {
13754
13970
  const { request, result } = await client.simulateContract({
13755
13971
  address: contractAddress,
13756
13972
  abi,
13757
13973
  functionName: "collectFees",
13758
- args: [poolId],
13974
+ args: [poolId2],
13759
13975
  account: walletClient.account
13760
13976
  });
13761
13977
  const hash = await walletClient.writeContract(request);
@@ -13771,13 +13987,13 @@ async function getMulticurveFeeSchedule(client, state) {
13771
13987
  if (state.poolKey.fee !== DYNAMIC_FEE_FLAG) {
13772
13988
  return null;
13773
13989
  }
13774
- const poolId = computePoolId(state.poolKey);
13990
+ const poolId2 = computePoolId(state.poolKey);
13775
13991
  try {
13776
13992
  const scheduleData = await client.readContract({
13777
13993
  address: state.poolKey.hooks,
13778
13994
  abi: decayMulticurveInitializerHookAbi,
13779
13995
  functionName: "getFeeScheduleOf",
13780
- args: [poolId]
13996
+ args: [poolId2]
13781
13997
  });
13782
13998
  return {
13783
13999
  startingTime: Number(readStructField(scheduleData, "startingTime", 0)),
@@ -13853,14 +14069,14 @@ var PENDING_FEE_CALL_ORDER = [
13853
14069
  "getLastCumulatedFees1"
13854
14070
  ];
13855
14071
  var PENDING_FEE_PREVIEW_CALL_COUNT = PENDING_FEE_CALL_ORDER.length;
13856
- function createPendingFeePreviewCalls(target, poolId, beneficiary) {
14072
+ function createPendingFeePreviewCalls(target, poolId2, beneficiary) {
13857
14073
  return PENDING_FEE_CALL_ORDER.map((functionName) => ({
13858
14074
  target,
13859
14075
  allowFailure: true,
13860
14076
  callData: encodeFunctionData({
13861
14077
  abi: feeClaimsInitializerAbi,
13862
14078
  functionName,
13863
- args: functionName === "collectFees" || functionName === "getCumulatedFees0" || functionName === "getCumulatedFees1" ? [poolId] : [poolId, beneficiary]
14079
+ args: functionName === "collectFees" || functionName === "getCumulatedFees0" || functionName === "getCumulatedFees1" ? [poolId2] : [poolId2, beneficiary]
13864
14080
  })
13865
14081
  }));
13866
14082
  }
@@ -14244,10 +14460,10 @@ async function getPendingFeeBreakdownForMulticurveTokens({
14244
14460
  });
14245
14461
  }
14246
14462
  function createPendingFeeBreakdownPreviewPlan(poolContext, beneficiary) {
14247
- const poolId = computePoolId(poolContext.state.poolKey);
14463
+ const poolId2 = computePoolId(poolContext.state.poolKey);
14248
14464
  const poolCalls = createPendingFeePreviewCalls(
14249
14465
  poolContext.initializerAddress,
14250
- poolId,
14466
+ poolId2,
14251
14467
  beneficiary
14252
14468
  );
14253
14469
  if (poolContext.initializerKind !== "dopplerHook" || poolContext.dopplerHookAddress === zeroAddress) {
@@ -14260,26 +14476,26 @@ function createPendingFeeBreakdownPreviewPlan(poolContext, beneficiary) {
14260
14476
  return {
14261
14477
  kind: "rehype",
14262
14478
  poolContext,
14263
- poolId,
14479
+ poolId: poolId2,
14264
14480
  calls: [
14265
14481
  ...poolCalls,
14266
- createRehypeCapabilityProbe(poolContext.dopplerHookAddress, poolId),
14482
+ createRehypeCapabilityProbe(poolContext.dopplerHookAddress, poolId2),
14267
14483
  ...createPendingFeePreviewCalls(
14268
14484
  poolContext.dopplerHookAddress,
14269
- poolId,
14485
+ poolId2,
14270
14486
  beneficiary
14271
14487
  )
14272
14488
  ]
14273
14489
  };
14274
14490
  }
14275
- function createRehypeCapabilityProbe(target, poolId) {
14491
+ function createRehypeCapabilityProbe(target, poolId2) {
14276
14492
  return {
14277
14493
  target,
14278
14494
  allowFailure: true,
14279
14495
  callData: encodeFunctionData({
14280
14496
  abi: feesManagerAbi,
14281
14497
  functionName: "getPoolKey",
14282
- args: [poolId]
14498
+ args: [poolId2]
14283
14499
  })
14284
14500
  };
14285
14501
  }
@@ -14441,7 +14657,7 @@ var RehypeDopplerHookInitializer = class {
14441
14657
  * The fee amounts are newly collected pool fees, not necessarily the caller's
14442
14658
  * beneficiary payout.
14443
14659
  */
14444
- async claimFees(poolId) {
14660
+ async claimFees(poolId2, options) {
14445
14661
  const walletClient = this.requireWalletClient(
14446
14662
  "Wallet client required to claim rehype beneficiary fees"
14447
14663
  );
@@ -14449,23 +14665,25 @@ var RehypeDopplerHookInitializer = class {
14449
14665
  address: this.hookAddress,
14450
14666
  abi: rehypeFeesManagerAbi,
14451
14667
  functionName: "collectFees",
14452
- args: [poolId],
14668
+ args: [poolId2],
14453
14669
  account: walletClient.account
14454
14670
  });
14455
- const hash = await walletClient.writeContract(request);
14671
+ const hash = await walletClient.writeContract(
14672
+ options?.gas === void 0 ? request : { ...request, gas: options.gas }
14673
+ );
14456
14674
  await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });
14457
14675
  const [fees0, fees1] = result;
14458
14676
  return { fees0, fees1, transactionHash: hash };
14459
14677
  }
14460
- async getPendingFees(poolId, beneficiary) {
14678
+ async getPendingFees(poolId2, beneficiary) {
14461
14679
  const calls = createPendingFeePreviewCalls(
14462
14680
  this.hookAddress,
14463
- poolId,
14681
+ poolId2,
14464
14682
  beneficiary
14465
14683
  );
14466
14684
  return calculatePendingFees(await callAggregate3(this.rpc, calls));
14467
14685
  }
14468
- async updateBeneficiary(poolId, newBeneficiary) {
14686
+ async updateBeneficiary(poolId2, newBeneficiary) {
14469
14687
  if (newBeneficiary.toLowerCase() === ZERO_ADDRESS) {
14470
14688
  throw new Error(
14471
14689
  "Rehype beneficiary cannot be updated to the zero address"
@@ -14478,7 +14696,7 @@ var RehypeDopplerHookInitializer = class {
14478
14696
  address: this.hookAddress,
14479
14697
  abi: feesManagerAbi,
14480
14698
  functionName: "updateBeneficiary",
14481
- args: [poolId, newBeneficiary],
14699
+ args: [poolId2, newBeneficiary],
14482
14700
  account: walletClient.account
14483
14701
  });
14484
14702
  const hash = await walletClient.writeContract(request);
@@ -14501,48 +14719,82 @@ var RehypeDopplerHookInitializer = class {
14501
14719
  const [fees0, fees1] = result;
14502
14720
  return { fees0, fees1, transactionHash: hash };
14503
14721
  }
14504
- async getFeeDistributionInfo(poolId) {
14722
+ /**
14723
+ * Replace a pool's complete fee distribution matrix.
14724
+ *
14725
+ * The connected wallet must be the pool's configured fee distribution
14726
+ * controller (`buybackDst`). The asset-fee allocations and numeraire-fee
14727
+ * allocations must each sum to WAD.
14728
+ *
14729
+ * @returns The confirmed transaction hash.
14730
+ */
14731
+ async setFeeDistribution(poolId2, feeDistributionInfo) {
14732
+ const walletClient = this.requireWalletClient(
14733
+ "Wallet client required to set rehype fee distribution"
14734
+ );
14735
+ const { request } = await this.rpc.simulateContract({
14736
+ address: this.hookAddress,
14737
+ abi: rehypeDopplerHookInitializerAbi,
14738
+ functionName: "setFeeDistribution",
14739
+ args: [
14740
+ poolId2,
14741
+ feeDistributionInfo.assetFeesToAssetBuybackWad,
14742
+ feeDistributionInfo.assetFeesToNumeraireBuybackWad,
14743
+ feeDistributionInfo.assetFeesToBeneficiaryWad,
14744
+ feeDistributionInfo.assetFeesToLpWad,
14745
+ feeDistributionInfo.numeraireFeesToAssetBuybackWad,
14746
+ feeDistributionInfo.numeraireFeesToNumeraireBuybackWad,
14747
+ feeDistributionInfo.numeraireFeesToBeneficiaryWad,
14748
+ feeDistributionInfo.numeraireFeesToLpWad
14749
+ ],
14750
+ account: walletClient.account
14751
+ });
14752
+ const hash = await walletClient.writeContract(request);
14753
+ await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });
14754
+ return { transactionHash: hash };
14755
+ }
14756
+ async getFeeDistributionInfo(poolId2) {
14505
14757
  const result = await this.rpc.readContract({
14506
14758
  address: this.hookAddress,
14507
14759
  abi: rehypeDopplerHookInitializerAbi,
14508
14760
  functionName: "getFeeDistributionInfo",
14509
- args: [poolId]
14761
+ args: [poolId2]
14510
14762
  });
14511
14763
  return normalizeRehypeFeeDistributionInfo(result);
14512
14764
  }
14513
- async getFeeRoutingMode(poolId) {
14765
+ async getFeeRoutingMode(poolId2) {
14514
14766
  const mode = await this.rpc.readContract({
14515
14767
  address: this.hookAddress,
14516
14768
  abi: rehypeDopplerHookInitializerAbi,
14517
14769
  functionName: "getFeeRoutingMode",
14518
- args: [poolId]
14770
+ args: [poolId2]
14519
14771
  });
14520
14772
  return Number(mode);
14521
14773
  }
14522
- async getFeeSchedule(poolId) {
14774
+ async getFeeSchedule(poolId2) {
14523
14775
  const result = await this.rpc.readContract({
14524
14776
  address: this.hookAddress,
14525
14777
  abi: rehypeDopplerHookInitializerAbi,
14526
14778
  functionName: "getFeeSchedule",
14527
- args: [poolId]
14779
+ args: [poolId2]
14528
14780
  });
14529
14781
  return normalizeRehypeFeeSchedule(result);
14530
14782
  }
14531
- async getHookFees(poolId) {
14783
+ async getHookFees(poolId2) {
14532
14784
  const result = await this.rpc.readContract({
14533
14785
  address: this.hookAddress,
14534
14786
  abi: rehypeDopplerHookInitializerAbi,
14535
14787
  functionName: "getHookFees",
14536
- args: [poolId]
14788
+ args: [poolId2]
14537
14789
  });
14538
14790
  return normalizeRehypeHookFees(result);
14539
14791
  }
14540
- async getPoolInfo(poolId) {
14792
+ async getPoolInfo(poolId2) {
14541
14793
  const result = await this.rpc.readContract({
14542
14794
  address: this.hookAddress,
14543
14795
  abi: rehypeDopplerHookInitializerAbi,
14544
14796
  functionName: "getPoolInfo",
14545
- args: [poolId]
14797
+ args: [poolId2]
14546
14798
  });
14547
14799
  return normalizeRehypePoolInfo(result);
14548
14800
  }
@@ -14609,7 +14861,7 @@ var RehypeDopplerHookMigrator = class {
14609
14861
  const [fees0, fees1] = result;
14610
14862
  return { fees0, fees1, transactionHash: hash };
14611
14863
  }
14612
- async setFeeDistribution(poolId, feeDistributionInfo) {
14864
+ async setFeeDistribution(poolId2, feeDistributionInfo) {
14613
14865
  if (!this.walletClient) {
14614
14866
  throw new Error("Wallet client required to set rehype fee distribution");
14615
14867
  }
@@ -14618,7 +14870,7 @@ var RehypeDopplerHookMigrator = class {
14618
14870
  abi: rehypeDopplerHookMigratorAbi,
14619
14871
  functionName: "setFeeDistribution",
14620
14872
  args: [
14621
- poolId,
14873
+ poolId2,
14622
14874
  feeDistributionInfo.assetFeesToAssetBuybackWad,
14623
14875
  feeDistributionInfo.assetFeesToNumeraireBuybackWad,
14624
14876
  feeDistributionInfo.assetFeesToBeneficiaryWad,
@@ -14634,48 +14886,48 @@ var RehypeDopplerHookMigrator = class {
14634
14886
  await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });
14635
14887
  return hash;
14636
14888
  }
14637
- async getFeeDistributionInfo(poolId) {
14889
+ async getFeeDistributionInfo(poolId2) {
14638
14890
  const result = await this.rpc.readContract({
14639
14891
  address: this.hookAddress,
14640
14892
  abi: rehypeDopplerHookMigratorAbi,
14641
14893
  functionName: "getFeeDistributionInfo",
14642
- args: [poolId]
14894
+ args: [poolId2]
14643
14895
  });
14644
14896
  return normalizeRehypeFeeDistributionInfo(result);
14645
14897
  }
14646
- async getFeeRoutingMode(poolId) {
14898
+ async getFeeRoutingMode(poolId2) {
14647
14899
  const mode = await this.rpc.readContract({
14648
14900
  address: this.hookAddress,
14649
14901
  abi: rehypeDopplerHookMigratorAbi,
14650
14902
  functionName: "getFeeRoutingMode",
14651
- args: [poolId]
14903
+ args: [poolId2]
14652
14904
  });
14653
14905
  return Number(mode);
14654
14906
  }
14655
- async getHookFees(poolId) {
14907
+ async getHookFees(poolId2) {
14656
14908
  const result = await this.rpc.readContract({
14657
14909
  address: this.hookAddress,
14658
14910
  abi: rehypeDopplerHookMigratorAbi,
14659
14911
  functionName: "getHookFees",
14660
- args: [poolId]
14912
+ args: [poolId2]
14661
14913
  });
14662
14914
  return normalizeRehypeHookFees(result);
14663
14915
  }
14664
- async getPoolInfo(poolId) {
14916
+ async getPoolInfo(poolId2) {
14665
14917
  const result = await this.rpc.readContract({
14666
14918
  address: this.hookAddress,
14667
14919
  abi: rehypeDopplerHookMigratorAbi,
14668
14920
  functionName: "getPoolInfo",
14669
- args: [poolId]
14921
+ args: [poolId2]
14670
14922
  });
14671
14923
  return normalizeRehypePoolInfo(result);
14672
14924
  }
14673
- async getPosition(poolId) {
14925
+ async getPosition(poolId2) {
14674
14926
  const result = await this.rpc.readContract({
14675
14927
  address: this.hookAddress,
14676
14928
  abi: rehypeDopplerHookMigratorAbi,
14677
14929
  functionName: "getPosition",
14678
- args: [poolId]
14930
+ args: [poolId2]
14679
14931
  });
14680
14932
  return normalizeRehypePosition(result);
14681
14933
  }
@@ -18597,6 +18849,112 @@ var TopUpDistributor = class {
18597
18849
  }
18598
18850
  };
18599
18851
 
18852
+ // src/evm/entities/Bundler.ts
18853
+ var Bundler = class {
18854
+ publicClient;
18855
+ walletClient;
18856
+ bundlerAddress;
18857
+ constructor(publicClient, walletClient, bundlerAddress) {
18858
+ this.publicClient = publicClient;
18859
+ this.walletClient = walletClient;
18860
+ this.bundlerAddress = bundlerAddress;
18861
+ }
18862
+ get rpc() {
18863
+ return this.publicClient;
18864
+ }
18865
+ /** Returns the Bundler contract address used by this client. */
18866
+ getAddress() {
18867
+ return this.bundlerAddress;
18868
+ }
18869
+ /**
18870
+ * Reads the vesting position for an asset.
18871
+ *
18872
+ * @param asset Token whose Bundler position should be read.
18873
+ */
18874
+ async getVesting(asset) {
18875
+ const result = await this.rpc.readContract({
18876
+ address: this.bundlerAddress,
18877
+ abi: bundlerAbi,
18878
+ functionName: "vestingOf",
18879
+ args: [asset]
18880
+ });
18881
+ const values = result;
18882
+ return {
18883
+ recipient: values[0],
18884
+ permissionlessClaim: values[1],
18885
+ start: values[2],
18886
+ cliffDuration: values[3],
18887
+ vestingDuration: values[4],
18888
+ totalAmount: values[5],
18889
+ claimedAmount: values[6]
18890
+ };
18891
+ }
18892
+ /**
18893
+ * Returns the amount currently claimable for an asset.
18894
+ *
18895
+ * @param asset Token whose claimable amount should be read.
18896
+ */
18897
+ async getClaimable(asset) {
18898
+ return await this.rpc.readContract({
18899
+ address: this.bundlerAddress,
18900
+ abi: bundlerAbi,
18901
+ functionName: "claimable",
18902
+ args: [asset]
18903
+ });
18904
+ }
18905
+ /**
18906
+ * Simulates a claim and returns both the claimable amount and write request.
18907
+ *
18908
+ * The caller defaults to the configured wallet account. Pass `account` when
18909
+ * using a read-only SDK instance. For restricted positions, the caller must
18910
+ * be the recorded recipient.
18911
+ *
18912
+ * @param asset Token to claim.
18913
+ * @param account Account that will trigger the claim.
18914
+ */
18915
+ async simulateClaim(asset, account) {
18916
+ const resolvedAccount = account ?? this.walletClient?.account;
18917
+ if (!resolvedAccount) {
18918
+ throw new Error(
18919
+ "An account is required to simulate a Bundler vesting claim"
18920
+ );
18921
+ }
18922
+ const { request, result } = await this.rpc.simulateContract({
18923
+ address: this.bundlerAddress,
18924
+ abi: bundlerAbi,
18925
+ functionName: "claim",
18926
+ args: [asset],
18927
+ account: resolvedAccount
18928
+ });
18929
+ return {
18930
+ amount: result,
18931
+ request
18932
+ };
18933
+ }
18934
+ /**
18935
+ * Claims the currently vested amount to the position's recorded recipient.
18936
+ *
18937
+ * Requires a configured wallet client. Permissionless callers may trigger a
18938
+ * claim but cannot redirect its proceeds.
18939
+ *
18940
+ * @param asset Token to claim.
18941
+ * @param options Optional transaction gas override.
18942
+ * @returns Submitted transaction hash.
18943
+ */
18944
+ async claim(asset, options) {
18945
+ if (!this.walletClient) {
18946
+ throw new Error("Wallet client required for write operations");
18947
+ }
18948
+ const { request } = await this.simulateClaim(
18949
+ asset,
18950
+ this.walletClient.account
18951
+ );
18952
+ return await this.walletClient.writeContract(
18953
+ options?.gas === void 0 ? request : { ...request, gas: options.gas }
18954
+ );
18955
+ }
18956
+ };
18957
+
18600
18958
  // src/evm/builders/StaticAuctionBuilder.ts
18601
18959
  var StaticAuctionBuilder = class _StaticAuctionBuilder {
18602
18960
  token;
@@ -19324,6 +19682,7 @@ var MulticurveBuilder = class _MulticurveBuilder {
19324
19682
  schedule;
19325
19683
  dopplerHook;
19326
19684
  vesting;
19685
+ devBuy;
19327
19686
  governance;
19328
19687
  migration;
19329
19688
  integrator;
@@ -19331,6 +19690,7 @@ var MulticurveBuilder = class _MulticurveBuilder {
19331
19690
  salt;
19332
19691
  moduleAddresses;
19333
19692
  gasLimit;
19693
+ feeDistributionControllerAddress;
19334
19694
  // Stored from withCurves() for graduationMarketCap conversion in build()
19335
19695
  numerairePrice;
19336
19696
  tokenDecimals;
@@ -19576,9 +19936,19 @@ var MulticurveBuilder = class _MulticurveBuilder {
19576
19936
  "Cannot specify both graduationMarketCap and farTick. Use one or the other."
19577
19937
  );
19578
19938
  }
19579
- const normalizedParams = normalizeRehypeDopplerHookInitializerConfig(params);
19580
- this.dopplerHook = normalizedParams;
19581
- this.initializer = { type: "rehype", config: normalizedParams };
19939
+ if (params.buybackDestination !== void 0 && this.feeDistributionControllerAddress !== void 0) {
19940
+ throw new Error(
19941
+ "Rehype buybackDestination and withFeeDistributionController are mutually exclusive"
19942
+ );
19943
+ }
19944
+ if (params.buybackDestination !== void 0 || this.feeDistributionControllerAddress !== void 0) {
19945
+ normalizeRehypeDopplerHookInitializerConfig(
19946
+ params,
19947
+ this.feeDistributionControllerAddress
19948
+ );
19949
+ }
19950
+ this.dopplerHook = params;
19951
+ this.initializer = { type: "rehype", config: params };
19582
19952
  return this;
19583
19953
  }
19584
19954
  /** @deprecated Use withRehypeDopplerHookInitializer instead. */
@@ -19611,6 +19981,18 @@ var MulticurveBuilder = class _MulticurveBuilder {
19611
19981
  };
19612
19982
  return this;
19613
19983
  }
19984
+ /**
19985
+ * Configures an exact-input purchase executed atomically with market creation.
19986
+ *
19987
+ * Omit `vesting` for direct delivery to `recipient`; when present, Bundler
19988
+ * holds the output and releases it under that schedule. This is independent
19989
+ * from `withVesting`, which configures token allocation vesting. Passing
19990
+ * `undefined` clears the dev buy.
19991
+ */
19992
+ withDevBuy(params) {
19993
+ this.devBuy = params ? normalizeBuilderDevBuy(params) : void 0;
19994
+ return this;
19995
+ }
19614
19996
  parseStartTimeSeconds(value, label) {
19615
19997
  let startTimeSeconds;
19616
19998
  if (value instanceof Date) {
@@ -19711,6 +20093,24 @@ var MulticurveBuilder = class _MulticurveBuilder {
19711
20093
  this.governance = params;
19712
20094
  return this;
19713
20095
  }
20096
+ /**
20097
+ * Configure the address authorized to update a Rehype pool's fee
20098
+ * distribution matrix.
20099
+ *
20100
+ * This sets the on-chain `buybackDst`, which also receives direct-buyback
20101
+ * proceeds and legacy empty-beneficiary fees. Every Rehype initializer
20102
+ * requires either this method or `buybackDestination`; they configure the
20103
+ * same field and cannot be used together.
20104
+ */
20105
+ withFeeDistributionController(address) {
20106
+ if (this.dopplerHook?.buybackDestination !== void 0) {
20107
+ throw new Error(
20108
+ "Rehype buybackDestination and withFeeDistributionController are mutually exclusive"
20109
+ );
20110
+ }
20111
+ this.feeDistributionControllerAddress = address;
20112
+ return this;
20113
+ }
19714
20114
  withMigration(migration) {
19715
20115
  this.migration = migration;
19716
20116
  return this;
@@ -19744,6 +20144,9 @@ var MulticurveBuilder = class _MulticurveBuilder {
19744
20144
  withAirlock(address) {
19745
20145
  return this.overrideModule("airlock", address);
19746
20146
  }
20147
+ withBundler(address) {
20148
+ return this.overrideModule("bundler", address);
20149
+ }
19747
20150
  withV4MulticurveInitializer(address) {
19748
20151
  this.assertCanSetInitializer("standard");
19749
20152
  this.initializer = { type: "standard" };
@@ -19865,7 +20268,24 @@ var MulticurveBuilder = class _MulticurveBuilder {
19865
20268
  );
19866
20269
  }
19867
20270
  }
20271
+ if (this.feeDistributionControllerAddress !== void 0 && this.dopplerHook === void 0) {
20272
+ throw new Error(
20273
+ "withFeeDistributionController requires a Rehype initializer configuration"
20274
+ );
20275
+ }
20276
+ const governance = this.governance ?? (isNoOpEnabledChain(this.chainId) ? { type: "noOp" } : { type: "default" });
20277
+ if (governance.type === "launchpad" && !isLaunchpadEnabledChain(this.chainId)) {
20278
+ throw new Error(
20279
+ `Launchpad governance is not supported on chain ${this.chainId}. Use a supported chain or a different governance type.`
20280
+ );
20281
+ }
19868
20282
  let dopplerHook = this.dopplerHook;
20283
+ if (dopplerHook) {
20284
+ dopplerHook = normalizeRehypeDopplerHookInitializerConfig(
20285
+ dopplerHook,
20286
+ this.feeDistributionControllerAddress
20287
+ );
20288
+ }
19869
20289
  if (dopplerHook?.graduationMarketCap !== void 0) {
19870
20290
  const numerairePrice = dopplerHook.numerairePrice ?? this.numerairePrice;
19871
20291
  if (!numerairePrice) {
@@ -19925,14 +20345,13 @@ var MulticurveBuilder = class _MulticurveBuilder {
19925
20345
  );
19926
20346
  }
19927
20347
  }
19928
- const schedule = initializer.type === "scheduled" ? { startTime: initializer.startTime } : void 0;
19929
- dopplerHook = initializer.type === "rehype" ? initializer.config : void 0;
19930
- const governance = this.governance ?? (isNoOpEnabledChain(this.chainId) ? { type: "noOp" } : { type: "default" });
19931
- if (governance.type === "launchpad" && !isLaunchpadEnabledChain(this.chainId)) {
20348
+ if (this.devBuy && initializer.type !== "dopplerHookInitializer" && initializer.type !== "dopplerHook" && initializer.type !== "rehype") {
19932
20349
  throw new Error(
19933
- `Launchpad governance is not supported on chain ${this.chainId}. Use a supported chain or a different governance type.`
20350
+ `Dev buys require a DopplerHookInitializer or Rehype initializer; '${initializer.type}' is not supported`
19934
20351
  );
19935
20352
  }
20353
+ const schedule = initializer.type === "scheduled" ? { startTime: initializer.startTime } : void 0;
20354
+ dopplerHook = initializer.type === "rehype" ? initializer.config : void 0;
19936
20355
  return {
19937
20356
  token: this.token,
19938
20357
  sale: this.sale,
@@ -19941,6 +20360,10 @@ var MulticurveBuilder = class _MulticurveBuilder {
19941
20360
  schedule,
19942
20361
  dopplerHook,
19943
20362
  vesting: this.vesting,
20363
+ devBuy: this.devBuy ? {
20364
+ ...this.devBuy,
20365
+ vesting: { ...this.devBuy.vesting }
20366
+ } : void 0,
19944
20367
  governance,
19945
20368
  migration: this.migration,
19946
20369
  integrator: this.integrator ?? ZERO_ADDRESS,
@@ -20329,6 +20752,7 @@ var DopplerSDK = class {
20329
20752
  _factory;
20330
20753
  _quoter;
20331
20754
  _topUpDistributor;
20755
+ _bundler;
20332
20756
  constructor(config) {
20333
20757
  this.publicClient = config.publicClient;
20334
20758
  this.walletClient = config.walletClient;
@@ -20381,6 +20805,34 @@ var DopplerSDK = class {
20381
20805
  resolvedTopUpDistributor
20382
20806
  );
20383
20807
  }
20808
+ /**
20809
+ * Gets the Bundler client configured for this chain.
20810
+ *
20811
+ * Throws when the chain has no Bundler deployment. Use `getBundler(address)`
20812
+ * for custom deployments.
20813
+ */
20814
+ get bundler() {
20815
+ if (!this._bundler) {
20816
+ this._bundler = this.getBundler();
20817
+ }
20818
+ return this._bundler;
20819
+ }
20820
+ /**
20821
+ * Creates a Bundler client using the chain default or an explicit address.
20822
+ *
20823
+ * Read methods work without a wallet client; claims require one.
20824
+ *
20825
+ * @param bundlerAddress Optional custom Bundler deployment.
20826
+ */
20827
+ getBundler(bundlerAddress) {
20828
+ const resolvedBundler = bundlerAddress ?? getAddresses(this.chainId).bundler;
20829
+ if (!resolvedBundler || resolvedBundler === ZERO_ADDRESS) {
20830
+ throw new Error(
20831
+ "Bundler address is not configured on this chain. Pass bundlerAddress to getBundler()."
20832
+ );
20833
+ }
20834
+ return new Bundler(this.publicClient, this.walletClient, resolvedBundler);
20835
+ }
20384
20836
  /**
20385
20837
  * Get a StaticAuction instance for interacting with a static auction pool
20386
20838
  * @param poolAddress The address of the Uniswap V3 pool
@@ -20599,6 +21051,6 @@ var DopplerSDK = class {
20599
21051
  // src/evm/index.ts
20600
21052
  var VERSION = "1.0.0";
20601
21053
 
20602
- export { ADDRESSES, AirlockCreateReceiptError, BASIS_POINTS, CHAIN_IDS, DAY_SECONDS, DEAD_ADDRESS, DECAY_MAX_START_FEE, DEFAULT_AIRLOCK_BENEFICIARY_SHARES, DEFAULT_AUCTION_DURATION, DEFAULT_EPOCH_LENGTH, DEFAULT_LOCK_DURATION, DEFAULT_MULTICURVE_LOWER_TICKS, DEFAULT_MULTICURVE_MAX_SUPPLY_SHARES, DEFAULT_MULTICURVE_NUM_POSITIONS, DEFAULT_MULTICURVE_UPPER_TICKS, DEFAULT_OPENING_AUCTION_DURATION, DEFAULT_OPENING_AUCTION_FEE, DEFAULT_OPENING_AUCTION_INCENTIVE_SHARE_BPS, DEFAULT_OPENING_AUCTION_MIN_ACCEPTABLE_TICK_TOKEN0, DEFAULT_OPENING_AUCTION_MIN_ACCEPTABLE_TICK_TOKEN1, DEFAULT_OPENING_AUCTION_MIN_LIQUIDITY, DEFAULT_OPENING_AUCTION_SHARE_TO_AUCTION_BPS, DEFAULT_OPENING_DOPPLER_DURATION, DEFAULT_OPENING_DOPPLER_EPOCH_LENGTH, DEFAULT_OPENING_DOPPLER_FEE, DEFAULT_OPENING_DOPPLER_NUM_PD_SLUGS, DEFAULT_OPENING_DOPPLER_TICK_SPACING, DEFAULT_PD_SLUGS, DEFAULT_V3_END_TICK, DEFAULT_V3_FEE, DEFAULT_V3_INITIAL_PROPOSAL_THRESHOLD, DEFAULT_V3_INITIAL_SUPPLY, DEFAULT_V3_INITIAL_VOTING_DELAY, DEFAULT_V3_INITIAL_VOTING_PERIOD, DEFAULT_V3_MAX_SHARE_TO_BE_SOLD, DEFAULT_V3_NUM_POSITIONS, DEFAULT_V3_NUM_TOKENS_TO_SELL, DEFAULT_V3_PRE_MINT, DEFAULT_V3_START_TICK, DEFAULT_V3_VESTING_DURATION, DEFAULT_V3_YEARLY_MINT_RATE, DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD, DEFAULT_V4_INITIAL_VOTING_DELAY, DEFAULT_V4_INITIAL_VOTING_PERIOD, DEFAULT_V4_YEARLY_MINT_RATE, derc2080_default as DERC2080Bytecode, derc20_default as DERC20Bytecode, DOPPLER_FLAGS, DOPPLER_MAX_TICK_SPACING, DYNAMIC_FEE_FLAG, Derc20, Derc20V2, doppler_default as DopplerBytecode, DopplerDN404, dopplerDN404BaseSepolia_default as DopplerDN404BaseSepoliaBytecode, dopplerDN404_default as DopplerDN404Bytecode, DopplerERC20V1, DopplerFactory, DopplerSDK, DynamicAuction, DynamicAuctionBuilder, Eth, FEE_AMOUNT_MASK, FEE_TIERS, FLAG_MASK, INT24_MAX, INT24_MIN, LAUNCHPAD_ENABLED_CHAIN_IDS, LockablePoolStatus, MAX_SQRT_RATIO, MAX_TICK, MIN_SQRT_RATIO, MIN_TICK, MulticurveBuilder, MulticurveFees, MulticurvePool, NO_OP_ENABLED_CHAIN_IDS, OPENING_AUCTION_FLAGS, OPENING_AUCTION_PHASE_ACTIVE, OPENING_AUCTION_PHASE_CLOSED, OPENING_AUCTION_PHASE_NOT_STARTED, OPENING_AUCTION_PHASE_SETTLED, OPENING_AUCTION_STATUS_ACTIVE, OPENING_AUCTION_STATUS_DOPPLER_ACTIVE, OPENING_AUCTION_STATUS_EXITED, OPENING_AUCTION_STATUS_UNINITIALIZED, OpeningAuction, OpeningAuctionBidManager, OpeningAuctionBuilder, openingAuction_default as OpeningAuctionBytecode, OpeningAuctionLifecycle, OpeningAuctionPhase, OpeningAuctionPositionManager, OpeningAuctionStatus, Q96, Quoter, RehypeDopplerHook, RehypeDopplerHookInitializer, RehypeDopplerHookMigrator, RehypeFeeRoutingMode, SECONDS_PER_DAY, SECONDS_PER_YEAR, SUPPORTED_CHAIN_IDS, stateView_default as StateViewBytecode, StaticAuction, StaticAuctionBuilder, TICK_SPACINGS, TopUpDistributor, V3_FEE_TIERS, V4_MAX_FEE, VALID_FEE_TIERS, VERSION, WAD, ZERO_ADDRESS, airlockAbi, applyTickOffsets, bundlerAbi, calculateFDV, calculateGamma, calculateMarketCap, calculateTickRange, calculateTokensToSell, computeOptimalGamma, computePoolId, createAirlockBeneficiary, decayMulticurveInitializerHookAbi, decodeBalanceDelta, derc20Abi, derc20V2Abi, dopplerDN404Abi, dopplerERC20V1Abi, dopplerHookAbi, dopplerHookInitializerAbi, dopplerLensAbi, encodeRehypeDopplerHookInitializerData, encodeRehypeDopplerHookMigratorCalldata, estimatePriceAtEpoch, estimateSlippage, feeClaimsInitializerAbi, feesManagerAbi, formatTickAsPrice, getAddresses, getAirlockBeneficiary, getAirlockOwner, getAmount0ForLiquidity, getAmount1ForLiquidity, getLiquidityForAmount0, getLiquidityForAmount1, getMaxLiquiditySafeMulticurveTickUpper, getMaxTickRounded, getNearestUsableTick, getSqrtRatioAtTick, getTickAtSqrtRatio, isLaunchpadEnabledChain, isNoOpEnabledChain, isSupportedChainId, isToken0Expected, isToken1, lockableUniswapV3InitializerAbi, marketCapToTickForMulticurve, marketCapToTicksForDynamicAuction, marketCapToTicksForMulticurve, marketCapToTicksForStaticAuction, marketCapToTokenPrice, mineTokenAddress, normalizeBeneficiaries, normalizePoolKey, normalizeRehypeDopplerHookInitializerConfig, openingAuctionAbi, openingAuctionInitializerAbi, openingAuctionPositionManagerAbi, parseAirlockCreateReceipt, poolManagerAbi, priceToSqrtPriceX96, priceToTick, quoterV2Abi, ratioToTick, rehypeDopplerHookAbi, rehypeDopplerHookInitializerAbi, rehypeDopplerHookMigratorAbi, resolveGasEstimate, sortBeneficiaries, sqrtPriceX96ToPrice, streamableFeesLockerAbi, streamableFeesLockerV2Abi, tickToMarketCap, tickToPrice, tokenPriceToRatio, topUpDistributorAbi, uniswapV2Router02Abi, uniswapV3InitializerAbi, uniswapV3PoolAbi, uniswapV4InitializerAbi, v2MigratorAbi, v3MigratorAbi, v4MigratorAbi, v4MulticurveInitializerAbi, v4MulticurveMigratorAbi, v4QuoterAbi, validateMarketCapParameters, verifyPreparedCreateExecution, verifyPreparedCreateReceipt, weth9Abi };
21054
+ export { ADDRESSES, AirlockCreateReceiptError, BASIS_POINTS, Bundler, CHAIN_IDS, DAY_SECONDS, DEAD_ADDRESS, DECAY_MAX_START_FEE, DEFAULT_AIRLOCK_BENEFICIARY_SHARES, DEFAULT_AUCTION_DURATION, DEFAULT_EPOCH_LENGTH, DEFAULT_LOCK_DURATION, DEFAULT_MULTICURVE_LOWER_TICKS, DEFAULT_MULTICURVE_MAX_SUPPLY_SHARES, DEFAULT_MULTICURVE_NUM_POSITIONS, DEFAULT_MULTICURVE_UPPER_TICKS, DEFAULT_OPENING_AUCTION_DURATION, DEFAULT_OPENING_AUCTION_FEE, DEFAULT_OPENING_AUCTION_INCENTIVE_SHARE_BPS, DEFAULT_OPENING_AUCTION_MIN_ACCEPTABLE_TICK_TOKEN0, DEFAULT_OPENING_AUCTION_MIN_ACCEPTABLE_TICK_TOKEN1, DEFAULT_OPENING_AUCTION_MIN_LIQUIDITY, DEFAULT_OPENING_AUCTION_SHARE_TO_AUCTION_BPS, DEFAULT_OPENING_DOPPLER_DURATION, DEFAULT_OPENING_DOPPLER_EPOCH_LENGTH, DEFAULT_OPENING_DOPPLER_FEE, DEFAULT_OPENING_DOPPLER_NUM_PD_SLUGS, DEFAULT_OPENING_DOPPLER_TICK_SPACING, DEFAULT_PD_SLUGS, DEFAULT_V3_END_TICK, DEFAULT_V3_FEE, DEFAULT_V3_INITIAL_PROPOSAL_THRESHOLD, DEFAULT_V3_INITIAL_SUPPLY, DEFAULT_V3_INITIAL_VOTING_DELAY, DEFAULT_V3_INITIAL_VOTING_PERIOD, DEFAULT_V3_MAX_SHARE_TO_BE_SOLD, DEFAULT_V3_NUM_POSITIONS, DEFAULT_V3_NUM_TOKENS_TO_SELL, DEFAULT_V3_PRE_MINT, DEFAULT_V3_START_TICK, DEFAULT_V3_VESTING_DURATION, DEFAULT_V3_YEARLY_MINT_RATE, DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD, DEFAULT_V4_INITIAL_VOTING_DELAY, DEFAULT_V4_INITIAL_VOTING_PERIOD, DEFAULT_V4_YEARLY_MINT_RATE, derc2080_default as DERC2080Bytecode, derc20_default as DERC20Bytecode, DOPPLER_FLAGS, DOPPLER_MAX_TICK_SPACING, DYNAMIC_FEE_FLAG, Derc20, Derc20V2, doppler_default as DopplerBytecode, DopplerDN404, dopplerDN404BaseSepolia_default as DopplerDN404BaseSepoliaBytecode, dopplerDN404_default as DopplerDN404Bytecode, DopplerERC20V1, DopplerFactory, DopplerSDK, DynamicAuction, DynamicAuctionBuilder, Eth, FEE_AMOUNT_MASK, FEE_TIERS, FLAG_MASK, INT24_MAX, INT24_MIN, LAUNCHPAD_ENABLED_CHAIN_IDS, LockablePoolStatus, MAX_SQRT_RATIO, MAX_TICK, MIN_SQRT_RATIO, MIN_TICK, MulticurveBuilder, MulticurveFees, MulticurvePool, NO_OP_ENABLED_CHAIN_IDS, OPENING_AUCTION_FLAGS, OPENING_AUCTION_PHASE_ACTIVE, OPENING_AUCTION_PHASE_CLOSED, OPENING_AUCTION_PHASE_NOT_STARTED, OPENING_AUCTION_PHASE_SETTLED, OPENING_AUCTION_STATUS_ACTIVE, OPENING_AUCTION_STATUS_DOPPLER_ACTIVE, OPENING_AUCTION_STATUS_EXITED, OPENING_AUCTION_STATUS_UNINITIALIZED, OpeningAuction, OpeningAuctionBidManager, OpeningAuctionBuilder, openingAuction_default as OpeningAuctionBytecode, OpeningAuctionLifecycle, OpeningAuctionPhase, OpeningAuctionPositionManager, OpeningAuctionStatus, Q96, Quoter, RehypeDopplerHook, RehypeDopplerHookInitializer, RehypeDopplerHookMigrator, RehypeFeeRoutingMode, SECONDS_PER_DAY, SECONDS_PER_YEAR, SUPPORTED_CHAIN_IDS, stateView_default as StateViewBytecode, StaticAuction, StaticAuctionBuilder, TICK_SPACINGS, TopUpDistributor, V3_FEE_TIERS, V4_MAX_FEE, VALID_FEE_TIERS, VERSION, WAD, ZERO_ADDRESS, airlockAbi, applyTickOffsets, bundlerAbi, calculateFDV, calculateGamma, calculateMarketCap, calculateTickRange, calculateTokensToSell, computeOptimalGamma, computePoolId, createAirlockBeneficiary, decayMulticurveInitializerHookAbi, decodeBalanceDelta, derc20Abi, derc20V2Abi, dopplerDN404Abi, dopplerERC20V1Abi, dopplerHookAbi, dopplerHookInitializerAbi, dopplerLensAbi, encodeRehypeDopplerHookInitializerData, encodeRehypeDopplerHookMigratorCalldata, estimatePriceAtEpoch, estimateSlippage, feeClaimsInitializerAbi, feesManagerAbi, formatTickAsPrice, getAddresses, getAirlockBeneficiary, getAirlockOwner, getAmount0ForLiquidity, getAmount1ForLiquidity, getLiquidityForAmount0, getLiquidityForAmount1, getMaxLiquiditySafeMulticurveTickUpper, getMaxTickRounded, getNearestUsableTick, getSqrtRatioAtTick, getTickAtSqrtRatio, isLaunchpadEnabledChain, isNoOpEnabledChain, isSupportedChainId, isToken0Expected, isToken1, lockableUniswapV3InitializerAbi, marketCapToTickForMulticurve, marketCapToTicksForDynamicAuction, marketCapToTicksForMulticurve, marketCapToTicksForStaticAuction, marketCapToTokenPrice, mineTokenAddress, normalizeBeneficiaries, normalizePoolKey, normalizeRehypeDopplerHookInitializerConfig, openingAuctionAbi, openingAuctionInitializerAbi, openingAuctionPositionManagerAbi, parseAirlockCreateReceipt, poolManagerAbi, priceToSqrtPriceX96, priceToTick, quoterV2Abi, ratioToTick, rehypeDopplerHookAbi, rehypeDopplerHookInitializerAbi, rehypeDopplerHookMigratorAbi, resolveGasEstimate, sortBeneficiaries, sqrtPriceX96ToPrice, streamableFeesLockerAbi, streamableFeesLockerV2Abi, tickToMarketCap, tickToPrice, tokenPriceToRatio, topUpDistributorAbi, uniswapV2Router02Abi, uniswapV3InitializerAbi, uniswapV3PoolAbi, uniswapV4InitializerAbi, v2MigratorAbi, v3MigratorAbi, v4MigratorAbi, v4MulticurveInitializerAbi, v4MulticurveMigratorAbi, v4QuoterAbi, validateMarketCapParameters, verifyPreparedCreateExecution, verifyPreparedCreateReceipt, weth9Abi };
20603
21055
  //# sourceMappingURL=index.js.map
20604
21056
  //# sourceMappingURL=index.js.map