@zoralabs/coins 2.2.1 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/.turbo/turbo-build$colon$js.log +125 -106
  2. package/CHANGELOG.md +50 -5
  3. package/README.md +5 -0
  4. package/abis/AddressConstants.json +7 -0
  5. package/abis/BaseCoin.json +0 -5
  6. package/abis/BaseTest.json +62 -0
  7. package/abis/BuySupplyWithV4SwapHook.json +429 -0
  8. package/abis/ContentCoin.json +0 -5
  9. package/abis/CreatorCoin.json +0 -5
  10. package/abis/FeeEstimatorHook.json +94 -1
  11. package/abis/IUniswapV4Router04.json +484 -0
  12. package/abis/IUpgradeableDestinationV4HookWithUpdateableFee.json +95 -0
  13. package/abis/IZoraFactory.json +69 -0
  14. package/abis/MockAirlock.json +39 -0
  15. package/abis/SimpleERC20.json +326 -0
  16. package/abis/ZoraFactoryImpl.json +69 -0
  17. package/abis/ZoraV4CoinHook.json +94 -1
  18. package/addresses/8453.json +8 -10
  19. package/audits/report-cantinacode-zora-0827.pdf +3498 -4
  20. package/audits/report-cantinacode-zora-1021.pdf +0 -0
  21. package/dist/index.cjs +161 -22
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.js +160 -21
  24. package/dist/index.js.map +1 -1
  25. package/dist/wagmiGenerated.d.ts +259 -40
  26. package/dist/wagmiGenerated.d.ts.map +1 -1
  27. package/foundry.toml +3 -3
  28. package/package/wagmiGenerated.ts +160 -21
  29. package/package.json +1 -1
  30. package/script/DeployPostDeploymentHooks.s.sol +1 -3
  31. package/script/TestBackingCoinSwap.s.sol +0 -2
  32. package/script/TestV4Swap.s.sol +0 -2
  33. package/src/BaseCoin.sol +4 -12
  34. package/src/ContentCoin.sol +3 -4
  35. package/src/CreatorCoin.sol +8 -10
  36. package/src/ZoraFactoryImpl.sol +115 -83
  37. package/src/deployment/CoinsDeployerBase.sol +9 -8
  38. package/src/hook-registry/ZoraHookRegistry.sol +4 -0
  39. package/src/hooks/ZoraV4CoinHook.sol +66 -9
  40. package/src/hooks/deployment/BuySupplyWithV4SwapHook.sol +310 -0
  41. package/src/interfaces/IUpgradeableV4Hook.sol +18 -0
  42. package/src/interfaces/IZoraFactory.sol +21 -2
  43. package/src/libs/CoinConstants.sol +51 -8
  44. package/src/libs/CoinDopplerMultiCurve.sol +11 -11
  45. package/src/libs/CoinRewardsV4.sol +26 -33
  46. package/src/libs/CoinSetup.sol +2 -9
  47. package/src/libs/DopplerMath.sol +2 -2
  48. package/src/libs/V4Liquidity.sol +79 -15
  49. package/src/utils/AutoSwapper.sol +1 -1
  50. package/src/version/ContractVersionBase.sol +1 -1
  51. package/test/BuySupplyWithV4SwapHook.t.sol +509 -0
  52. package/test/Coin.t.sol +26 -14
  53. package/test/CoinRewardsV4.t.sol +33 -0
  54. package/test/CoinUniV4.t.sol +3 -5
  55. package/test/ContentCoinRewards.t.sol +44 -3
  56. package/test/CreatorCoin.t.sol +54 -33
  57. package/test/CreatorCoinRewards.t.sol +1 -3
  58. package/test/DeploymentHooks.t.sol +54 -2
  59. package/test/Factory.t.sol +3 -3
  60. package/test/LiquidityMigration.t.sol +145 -7
  61. package/test/MultiOwnable.t.sol +4 -4
  62. package/test/Upgrades.t.sol +26 -17
  63. package/test/V4Liquidity.t.sol +178 -0
  64. package/test/ZoraHookRegistry.t.sol +19 -9
  65. package/test/mocks/MockAirlock.sol +22 -0
  66. package/test/mocks/SimpleERC20.sol +8 -0
  67. package/test/utils/BaseTest.sol +155 -3
  68. package/test/utils/RewardTestHelpers.sol +4 -4
  69. package/test/utils/hookmate/README.md +50 -0
  70. package/test/utils/hookmate/artifacts/DeployHelper.sol +20 -0
  71. package/test/utils/hookmate/artifacts/Permit2.sol +16 -0
  72. package/test/utils/hookmate/artifacts/UniversalRouter.sol +29 -0
  73. package/test/utils/hookmate/artifacts/V4PoolManager.sol +17 -0
  74. package/test/utils/hookmate/artifacts/V4PositionManager.sol +23 -0
  75. package/test/utils/hookmate/artifacts/V4Quoter.sol +17 -0
  76. package/test/utils/hookmate/artifacts/V4Router.sol +18 -0
  77. package/test/utils/hookmate/constants/AddressConstants.sol +193 -0
  78. package/test/utils/hookmate/interfaces/router/IUniswapV4Router04.sol +173 -0
  79. package/test/utils/hookmate/interfaces/router/PathKey.sol +34 -0
  80. package/test/utils/hookmate/test/utils/SwapFeeEventAsserter.sol +24 -0
  81. package/wagmi.config.ts +1 -1
  82. package/abis/CoinConstants.json +0 -54
  83. package/abis/CoinRewardsV4.json +0 -67
  84. package/src/libs/CreatorCoinConstants.sol +0 -15
  85. package/src/libs/MarketConstants.sol +0 -23
  86. package/src/utils/uniswap/BytesLib.sol +0 -35
  87. package/src/utils/uniswap/Path.sol +0 -31
  88. /package/abis/{VmContractHelper227.json → VmContractHelper239.json} +0 -0
@@ -0,0 +1,326 @@
1
+ [
2
+ {
3
+ "type": "constructor",
4
+ "inputs": [
5
+ {
6
+ "name": "name",
7
+ "type": "string",
8
+ "internalType": "string"
9
+ },
10
+ {
11
+ "name": "symbol",
12
+ "type": "string",
13
+ "internalType": "string"
14
+ }
15
+ ],
16
+ "stateMutability": "nonpayable"
17
+ },
18
+ {
19
+ "type": "function",
20
+ "name": "allowance",
21
+ "inputs": [
22
+ {
23
+ "name": "owner",
24
+ "type": "address",
25
+ "internalType": "address"
26
+ },
27
+ {
28
+ "name": "spender",
29
+ "type": "address",
30
+ "internalType": "address"
31
+ }
32
+ ],
33
+ "outputs": [
34
+ {
35
+ "name": "",
36
+ "type": "uint256",
37
+ "internalType": "uint256"
38
+ }
39
+ ],
40
+ "stateMutability": "view"
41
+ },
42
+ {
43
+ "type": "function",
44
+ "name": "approve",
45
+ "inputs": [
46
+ {
47
+ "name": "spender",
48
+ "type": "address",
49
+ "internalType": "address"
50
+ },
51
+ {
52
+ "name": "value",
53
+ "type": "uint256",
54
+ "internalType": "uint256"
55
+ }
56
+ ],
57
+ "outputs": [
58
+ {
59
+ "name": "",
60
+ "type": "bool",
61
+ "internalType": "bool"
62
+ }
63
+ ],
64
+ "stateMutability": "nonpayable"
65
+ },
66
+ {
67
+ "type": "function",
68
+ "name": "balanceOf",
69
+ "inputs": [
70
+ {
71
+ "name": "account",
72
+ "type": "address",
73
+ "internalType": "address"
74
+ }
75
+ ],
76
+ "outputs": [
77
+ {
78
+ "name": "",
79
+ "type": "uint256",
80
+ "internalType": "uint256"
81
+ }
82
+ ],
83
+ "stateMutability": "view"
84
+ },
85
+ {
86
+ "type": "function",
87
+ "name": "decimals",
88
+ "inputs": [],
89
+ "outputs": [
90
+ {
91
+ "name": "",
92
+ "type": "uint8",
93
+ "internalType": "uint8"
94
+ }
95
+ ],
96
+ "stateMutability": "view"
97
+ },
98
+ {
99
+ "type": "function",
100
+ "name": "name",
101
+ "inputs": [],
102
+ "outputs": [
103
+ {
104
+ "name": "",
105
+ "type": "string",
106
+ "internalType": "string"
107
+ }
108
+ ],
109
+ "stateMutability": "view"
110
+ },
111
+ {
112
+ "type": "function",
113
+ "name": "symbol",
114
+ "inputs": [],
115
+ "outputs": [
116
+ {
117
+ "name": "",
118
+ "type": "string",
119
+ "internalType": "string"
120
+ }
121
+ ],
122
+ "stateMutability": "view"
123
+ },
124
+ {
125
+ "type": "function",
126
+ "name": "totalSupply",
127
+ "inputs": [],
128
+ "outputs": [
129
+ {
130
+ "name": "",
131
+ "type": "uint256",
132
+ "internalType": "uint256"
133
+ }
134
+ ],
135
+ "stateMutability": "view"
136
+ },
137
+ {
138
+ "type": "function",
139
+ "name": "transfer",
140
+ "inputs": [
141
+ {
142
+ "name": "to",
143
+ "type": "address",
144
+ "internalType": "address"
145
+ },
146
+ {
147
+ "name": "value",
148
+ "type": "uint256",
149
+ "internalType": "uint256"
150
+ }
151
+ ],
152
+ "outputs": [
153
+ {
154
+ "name": "",
155
+ "type": "bool",
156
+ "internalType": "bool"
157
+ }
158
+ ],
159
+ "stateMutability": "nonpayable"
160
+ },
161
+ {
162
+ "type": "function",
163
+ "name": "transferFrom",
164
+ "inputs": [
165
+ {
166
+ "name": "from",
167
+ "type": "address",
168
+ "internalType": "address"
169
+ },
170
+ {
171
+ "name": "to",
172
+ "type": "address",
173
+ "internalType": "address"
174
+ },
175
+ {
176
+ "name": "value",
177
+ "type": "uint256",
178
+ "internalType": "uint256"
179
+ }
180
+ ],
181
+ "outputs": [
182
+ {
183
+ "name": "",
184
+ "type": "bool",
185
+ "internalType": "bool"
186
+ }
187
+ ],
188
+ "stateMutability": "nonpayable"
189
+ },
190
+ {
191
+ "type": "event",
192
+ "name": "Approval",
193
+ "inputs": [
194
+ {
195
+ "name": "owner",
196
+ "type": "address",
197
+ "indexed": true,
198
+ "internalType": "address"
199
+ },
200
+ {
201
+ "name": "spender",
202
+ "type": "address",
203
+ "indexed": true,
204
+ "internalType": "address"
205
+ },
206
+ {
207
+ "name": "value",
208
+ "type": "uint256",
209
+ "indexed": false,
210
+ "internalType": "uint256"
211
+ }
212
+ ],
213
+ "anonymous": false
214
+ },
215
+ {
216
+ "type": "event",
217
+ "name": "Transfer",
218
+ "inputs": [
219
+ {
220
+ "name": "from",
221
+ "type": "address",
222
+ "indexed": true,
223
+ "internalType": "address"
224
+ },
225
+ {
226
+ "name": "to",
227
+ "type": "address",
228
+ "indexed": true,
229
+ "internalType": "address"
230
+ },
231
+ {
232
+ "name": "value",
233
+ "type": "uint256",
234
+ "indexed": false,
235
+ "internalType": "uint256"
236
+ }
237
+ ],
238
+ "anonymous": false
239
+ },
240
+ {
241
+ "type": "error",
242
+ "name": "ERC20InsufficientAllowance",
243
+ "inputs": [
244
+ {
245
+ "name": "spender",
246
+ "type": "address",
247
+ "internalType": "address"
248
+ },
249
+ {
250
+ "name": "allowance",
251
+ "type": "uint256",
252
+ "internalType": "uint256"
253
+ },
254
+ {
255
+ "name": "needed",
256
+ "type": "uint256",
257
+ "internalType": "uint256"
258
+ }
259
+ ]
260
+ },
261
+ {
262
+ "type": "error",
263
+ "name": "ERC20InsufficientBalance",
264
+ "inputs": [
265
+ {
266
+ "name": "sender",
267
+ "type": "address",
268
+ "internalType": "address"
269
+ },
270
+ {
271
+ "name": "balance",
272
+ "type": "uint256",
273
+ "internalType": "uint256"
274
+ },
275
+ {
276
+ "name": "needed",
277
+ "type": "uint256",
278
+ "internalType": "uint256"
279
+ }
280
+ ]
281
+ },
282
+ {
283
+ "type": "error",
284
+ "name": "ERC20InvalidApprover",
285
+ "inputs": [
286
+ {
287
+ "name": "approver",
288
+ "type": "address",
289
+ "internalType": "address"
290
+ }
291
+ ]
292
+ },
293
+ {
294
+ "type": "error",
295
+ "name": "ERC20InvalidReceiver",
296
+ "inputs": [
297
+ {
298
+ "name": "receiver",
299
+ "type": "address",
300
+ "internalType": "address"
301
+ }
302
+ ]
303
+ },
304
+ {
305
+ "type": "error",
306
+ "name": "ERC20InvalidSender",
307
+ "inputs": [
308
+ {
309
+ "name": "sender",
310
+ "type": "address",
311
+ "internalType": "address"
312
+ }
313
+ ]
314
+ },
315
+ {
316
+ "type": "error",
317
+ "name": "ERC20InvalidSpender",
318
+ "inputs": [
319
+ {
320
+ "name": "spender",
321
+ "type": "address",
322
+ "internalType": "address"
323
+ }
324
+ ]
325
+ }
326
+ ]
@@ -413,6 +413,75 @@
413
413
  ],
414
414
  "stateMutability": "nonpayable"
415
415
  },
416
+ {
417
+ "type": "function",
418
+ "name": "deployCreatorCoin",
419
+ "inputs": [
420
+ {
421
+ "name": "payoutRecipient",
422
+ "type": "address",
423
+ "internalType": "address"
424
+ },
425
+ {
426
+ "name": "owners",
427
+ "type": "address[]",
428
+ "internalType": "address[]"
429
+ },
430
+ {
431
+ "name": "uri",
432
+ "type": "string",
433
+ "internalType": "string"
434
+ },
435
+ {
436
+ "name": "name",
437
+ "type": "string",
438
+ "internalType": "string"
439
+ },
440
+ {
441
+ "name": "symbol",
442
+ "type": "string",
443
+ "internalType": "string"
444
+ },
445
+ {
446
+ "name": "poolConfig",
447
+ "type": "bytes",
448
+ "internalType": "bytes"
449
+ },
450
+ {
451
+ "name": "platformReferrer",
452
+ "type": "address",
453
+ "internalType": "address"
454
+ },
455
+ {
456
+ "name": "postDeployHook",
457
+ "type": "address",
458
+ "internalType": "address"
459
+ },
460
+ {
461
+ "name": "postDeployHookData",
462
+ "type": "bytes",
463
+ "internalType": "bytes"
464
+ },
465
+ {
466
+ "name": "coinSalt",
467
+ "type": "bytes32",
468
+ "internalType": "bytes32"
469
+ }
470
+ ],
471
+ "outputs": [
472
+ {
473
+ "name": "coin",
474
+ "type": "address",
475
+ "internalType": "address"
476
+ },
477
+ {
478
+ "name": "postDeployHookDataOut",
479
+ "type": "bytes",
480
+ "internalType": "bytes"
481
+ }
482
+ ],
483
+ "stateMutability": "payable"
484
+ },
416
485
  {
417
486
  "type": "function",
418
487
  "name": "deployWithHook",
@@ -1111,7 +1111,7 @@
1111
1111
  ]
1112
1112
  },
1113
1113
  {
1114
- "name": "",
1114
+ "name": "additionalData",
1115
1115
  "type": "bytes",
1116
1116
  "internalType": "bytes"
1117
1117
  }
@@ -1119,6 +1119,99 @@
1119
1119
  "outputs": [],
1120
1120
  "stateMutability": "nonpayable"
1121
1121
  },
1122
+ {
1123
+ "type": "function",
1124
+ "name": "initializeFromMigrationWithUpdateableFee",
1125
+ "inputs": [
1126
+ {
1127
+ "name": "poolKey",
1128
+ "type": "tuple",
1129
+ "internalType": "struct PoolKey",
1130
+ "components": [
1131
+ {
1132
+ "name": "currency0",
1133
+ "type": "address",
1134
+ "internalType": "Currency"
1135
+ },
1136
+ {
1137
+ "name": "currency1",
1138
+ "type": "address",
1139
+ "internalType": "Currency"
1140
+ },
1141
+ {
1142
+ "name": "fee",
1143
+ "type": "uint24",
1144
+ "internalType": "uint24"
1145
+ },
1146
+ {
1147
+ "name": "tickSpacing",
1148
+ "type": "int24",
1149
+ "internalType": "int24"
1150
+ },
1151
+ {
1152
+ "name": "hooks",
1153
+ "type": "address",
1154
+ "internalType": "contract IHooks"
1155
+ }
1156
+ ]
1157
+ },
1158
+ {
1159
+ "name": "coin",
1160
+ "type": "address",
1161
+ "internalType": "address"
1162
+ },
1163
+ {
1164
+ "name": "sqrtPriceX96",
1165
+ "type": "uint160",
1166
+ "internalType": "uint160"
1167
+ },
1168
+ {
1169
+ "name": "migratedLiquidity",
1170
+ "type": "tuple[]",
1171
+ "internalType": "struct BurnedPosition[]",
1172
+ "components": [
1173
+ {
1174
+ "name": "tickLower",
1175
+ "type": "int24",
1176
+ "internalType": "int24"
1177
+ },
1178
+ {
1179
+ "name": "tickUpper",
1180
+ "type": "int24",
1181
+ "internalType": "int24"
1182
+ },
1183
+ {
1184
+ "name": "amount0Received",
1185
+ "type": "uint128",
1186
+ "internalType": "uint128"
1187
+ },
1188
+ {
1189
+ "name": "amount1Received",
1190
+ "type": "uint128",
1191
+ "internalType": "uint128"
1192
+ }
1193
+ ]
1194
+ },
1195
+ {
1196
+ "name": "additionalData",
1197
+ "type": "bytes",
1198
+ "internalType": "bytes"
1199
+ }
1200
+ ],
1201
+ "outputs": [
1202
+ {
1203
+ "name": "fee",
1204
+ "type": "uint24",
1205
+ "internalType": "uint24"
1206
+ },
1207
+ {
1208
+ "name": "tickSpacing",
1209
+ "type": "int24",
1210
+ "internalType": "int24"
1211
+ }
1212
+ ],
1213
+ "stateMutability": "nonpayable"
1214
+ },
1122
1215
  {
1123
1216
  "type": "function",
1124
1217
  "name": "isTrustedMessageSender",
@@ -1,15 +1,13 @@
1
1
  {
2
- "BUY_SUPPLY_WITH_SWAP_ROUTER_HOOK": "0xc90e349360C43a0217CEF289f231C66D4748960F",
2
+ "BUY_SUPPLY_WITH_SWAP_ROUTER_HOOK": "0xd8CC7bCA1dE52eA788829B16E375e9B96C18D433",
3
3
  "COIN_V3_IMPL": "0x45Bf86430af7CD071Ea23aE52325A78C8d12aD5a",
4
- "COIN_V4_IMPL": "0xca72309AaF706d290E08608b1Af47943902f69b2",
5
- "COIN_VERSION": "1.1.0",
6
- "CREATOR_COIN_HOOK": "0xd61A675F8a0c67A73DC3B54FB7318B4D91409040",
7
- "CREATOR_COIN_HOOK_SALT": "0x0000000000000000000000000000000000000000000000000000000000000ae8",
8
- "CREATOR_COIN_IMPL": "0x88CC4E08C7608723f3E44e17aC669Fb43b6A8313",
4
+ "COIN_V4_IMPL": "0x7Cad62748DDf516CF85bC2C05C14786D84Cf861c",
5
+ "COIN_VERSION": "2.3.0",
6
+ "CREATOR_COIN_IMPL": "0x36853f9f48fAEe51Bd3db15db21EB4B9038bB795",
9
7
  "HOOK_UPGRADE_GATE": "0xD88f6BdD765313CaFA5888C177c325E2C3AbF2D2",
10
8
  "ZORA_FACTORY": "0x777777751622c0d3258f214F9DF38E35BF45baF3",
11
- "ZORA_FACTORY_IMPL": "0x0e2ea62E5377D46FeF114A60AfBE3d5eA7490577",
12
- "ZORA_V4_COIN_HOOK": "0x9ea932730A7787000042e34390B8E435dD839040",
13
- "ZORA_V4_COIN_HOOK_SALT": "0x0000000000000000000000000000000000000000000000000000000000002fa2",
14
- "ZORA_HOOK_REGISTRY": "0x777777C4c14b133858c3982D41Dbf02509fc18d7"
9
+ "ZORA_FACTORY_IMPL": "0x8Ec7f068A77fa5FC1925110f82381374BA054Ff2",
10
+ "ZORA_HOOK_REGISTRY": "0x777777C4c14b133858c3982D41Dbf02509fc18d7",
11
+ "ZORA_V4_COIN_HOOK": "0xC8d077444625eB300A427a6dfB2b1DBf9b159040",
12
+ "ZORA_V4_COIN_HOOK_SALT": "0x0000000000000000000000000000000000000000000000000000000000001624"
15
13
  }