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