@zoralabs/coins 0.6.1 → 0.7.0

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 (66) hide show
  1. package/.turbo/turbo-build.log +69 -55
  2. package/CHANGELOG.md +12 -0
  3. package/abis/BaseTest.json +0 -23
  4. package/abis/Coin.json +186 -77
  5. package/abis/CoinConfigurationVersions.json +7 -0
  6. package/abis/CoinSetup.json +7 -0
  7. package/abis/CoinTest.json +5 -49
  8. package/abis/CustomRevert.json +28 -0
  9. package/abis/DopplerUniswapV3Test.json +891 -0
  10. package/abis/FactoryTest.json +7 -23
  11. package/abis/IAirlock.json +15 -0
  12. package/abis/ICoin.json +52 -34
  13. package/abis/IDopplerErrors.json +44 -0
  14. package/abis/INonfungiblePositionManager.json +13 -0
  15. package/abis/IUniswapV3Factory.json +198 -0
  16. package/abis/IUniswapV3Pool.json +135 -0
  17. package/abis/MultiOwnableTest.json +0 -23
  18. package/abis/SafeCast.json +7 -0
  19. package/abis/Simulate.json +120 -0
  20. package/abis/SqrtPriceMath.json +22 -0
  21. package/abis/TickMath.json +24 -0
  22. package/abis/ZoraFactoryImpl.json +59 -0
  23. package/addresses/8453.json +3 -3
  24. package/dist/index.cjs +160 -39
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.js +160 -39
  27. package/dist/index.js.map +1 -1
  28. package/dist/wagmiGenerated.d.ts +349 -67
  29. package/dist/wagmiGenerated.d.ts.map +1 -1
  30. package/package/wagmiGenerated.ts +161 -40
  31. package/package.json +3 -3
  32. package/script/CoinsDeployerBase.sol +1 -1
  33. package/script/Simulate.s.sol +67 -0
  34. package/src/Coin.sol +159 -90
  35. package/src/ZoraFactoryImpl.sol +47 -1
  36. package/src/interfaces/IAirlock.sol +6 -0
  37. package/src/interfaces/ICoin.sol +18 -2
  38. package/src/interfaces/IDopplerErrors.sol +14 -0
  39. package/src/interfaces/INonfungiblePositionManager.sol +2 -0
  40. package/src/interfaces/IUniswapV3Factory.sol +64 -0
  41. package/src/interfaces/IUniswapV3Pool.sol +48 -0
  42. package/src/libs/CoinConfigurationVersions.sol +9 -0
  43. package/src/libs/CoinDopplerUniV3.sol +202 -0
  44. package/src/libs/CoinLegacy.sol +48 -0
  45. package/src/libs/CoinSetup.sol +37 -0
  46. package/src/libs/MarketConstants.sol +25 -0
  47. package/src/types/LpPosition.sol +8 -0
  48. package/src/types/PoolState.sol +24 -0
  49. package/src/utils/CoinConstants.sol +5 -12
  50. package/src/utils/uniswap/BitMath.sol +55 -0
  51. package/src/utils/uniswap/CustomRevert.sol +111 -0
  52. package/src/utils/uniswap/FixedPoint96.sol +11 -0
  53. package/src/utils/uniswap/FullMath.sol +118 -0
  54. package/src/utils/uniswap/LiquidityAmounts.sol +117 -0
  55. package/src/utils/uniswap/SafeCast.sol +61 -0
  56. package/src/utils/uniswap/SqrtPriceMath.sol +249 -0
  57. package/src/utils/uniswap/TickMath.sol +244 -0
  58. package/src/utils/uniswap/UnsafeMath.sol +30 -0
  59. package/src/version/ContractVersionBase.sol +1 -1
  60. package/test/Coin.t.sol +65 -65
  61. package/test/CoinDopplerUniV3.t.sol +452 -0
  62. package/test/Factory.t.sol +49 -7
  63. package/test/utils/BaseTest.sol +26 -7
  64. package/wagmi.config.ts +1 -1
  65. package/abis/IERC721Receiver.json +0 -36
  66. package/src/utils/TickMath.sol +0 -210
@@ -1,36 +0,0 @@
1
- [
2
- {
3
- "type": "function",
4
- "name": "onERC721Received",
5
- "inputs": [
6
- {
7
- "name": "operator",
8
- "type": "address",
9
- "internalType": "address"
10
- },
11
- {
12
- "name": "from",
13
- "type": "address",
14
- "internalType": "address"
15
- },
16
- {
17
- "name": "tokenId",
18
- "type": "uint256",
19
- "internalType": "uint256"
20
- },
21
- {
22
- "name": "data",
23
- "type": "bytes",
24
- "internalType": "bytes"
25
- }
26
- ],
27
- "outputs": [
28
- {
29
- "name": "",
30
- "type": "bytes4",
31
- "internalType": "bytes4"
32
- }
33
- ],
34
- "stateMutability": "nonpayable"
35
- }
36
- ]
@@ -1,210 +0,0 @@
1
- // SPDX-License-Identifier: GPL-2.0-or-later
2
- // Source: https://github.com/Uniswap/v3-core/blob/d8b1c635c275d2a9450bd6a78f3fa2484fef73eb/contracts/libraries/TickMath.sol
3
- pragma solidity >=0.5.0;
4
-
5
- /// @title Math library for computing sqrt prices from ticks and vice versa
6
- /// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports
7
- /// prices between 2**-128 and 2**128
8
- library TickMath {
9
- /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128
10
- int24 internal constant MIN_TICK = -887272;
11
- /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128
12
- int24 internal constant MAX_TICK = -MIN_TICK;
13
-
14
- /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)
15
- uint160 internal constant MIN_SQRT_RATIO = 4295128739;
16
- /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)
17
- uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;
18
-
19
- /// @notice Calculates sqrt(1.0001^tick) * 2^96
20
- /// @dev Throws if |tick| > max tick
21
- /// @param tick The input tick for the above formula
22
- /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)
23
- /// at the given tick
24
- function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {
25
- uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));
26
- require(absTick <= uint256(int256(MAX_TICK)), "T");
27
-
28
- uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;
29
- if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;
30
- if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;
31
- if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;
32
- if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;
33
- if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;
34
- if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;
35
- if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;
36
- if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;
37
- if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;
38
- if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;
39
- if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;
40
- if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;
41
- if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;
42
- if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;
43
- if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;
44
- if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;
45
- if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;
46
- if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;
47
- if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;
48
-
49
- if (tick > 0) ratio = type(uint256).max / ratio;
50
-
51
- // this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.
52
- // we then downcast because we know the result always fits within 160 bits due to our tick input constraint
53
- // we round up in the division so getTickAtSqrtRatio of the output price is always consistent
54
- sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));
55
- }
56
-
57
- /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio
58
- /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may
59
- /// ever return.
60
- /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96
61
- /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio
62
- function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {
63
- // second inequality must be < because the price can never reach the price at the max tick
64
- require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, "R");
65
- uint256 ratio = uint256(sqrtPriceX96) << 32;
66
-
67
- uint256 r = ratio;
68
- uint256 msb = 0;
69
-
70
- assembly {
71
- let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))
72
- msb := or(msb, f)
73
- r := shr(f, r)
74
- }
75
- assembly {
76
- let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))
77
- msb := or(msb, f)
78
- r := shr(f, r)
79
- }
80
- assembly {
81
- let f := shl(5, gt(r, 0xFFFFFFFF))
82
- msb := or(msb, f)
83
- r := shr(f, r)
84
- }
85
- assembly {
86
- let f := shl(4, gt(r, 0xFFFF))
87
- msb := or(msb, f)
88
- r := shr(f, r)
89
- }
90
- assembly {
91
- let f := shl(3, gt(r, 0xFF))
92
- msb := or(msb, f)
93
- r := shr(f, r)
94
- }
95
- assembly {
96
- let f := shl(2, gt(r, 0xF))
97
- msb := or(msb, f)
98
- r := shr(f, r)
99
- }
100
- assembly {
101
- let f := shl(1, gt(r, 0x3))
102
- msb := or(msb, f)
103
- r := shr(f, r)
104
- }
105
- assembly {
106
- let f := gt(r, 0x1)
107
- msb := or(msb, f)
108
- }
109
-
110
- if (msb >= 128) r = ratio >> (msb - 127);
111
- else r = ratio << (127 - msb);
112
-
113
- int256 log_2 = (int256(msb) - 128) << 64;
114
-
115
- assembly {
116
- r := shr(127, mul(r, r))
117
- let f := shr(128, r)
118
- log_2 := or(log_2, shl(63, f))
119
- r := shr(f, r)
120
- }
121
- assembly {
122
- r := shr(127, mul(r, r))
123
- let f := shr(128, r)
124
- log_2 := or(log_2, shl(62, f))
125
- r := shr(f, r)
126
- }
127
- assembly {
128
- r := shr(127, mul(r, r))
129
- let f := shr(128, r)
130
- log_2 := or(log_2, shl(61, f))
131
- r := shr(f, r)
132
- }
133
- assembly {
134
- r := shr(127, mul(r, r))
135
- let f := shr(128, r)
136
- log_2 := or(log_2, shl(60, f))
137
- r := shr(f, r)
138
- }
139
- assembly {
140
- r := shr(127, mul(r, r))
141
- let f := shr(128, r)
142
- log_2 := or(log_2, shl(59, f))
143
- r := shr(f, r)
144
- }
145
- assembly {
146
- r := shr(127, mul(r, r))
147
- let f := shr(128, r)
148
- log_2 := or(log_2, shl(58, f))
149
- r := shr(f, r)
150
- }
151
- assembly {
152
- r := shr(127, mul(r, r))
153
- let f := shr(128, r)
154
- log_2 := or(log_2, shl(57, f))
155
- r := shr(f, r)
156
- }
157
- assembly {
158
- r := shr(127, mul(r, r))
159
- let f := shr(128, r)
160
- log_2 := or(log_2, shl(56, f))
161
- r := shr(f, r)
162
- }
163
- assembly {
164
- r := shr(127, mul(r, r))
165
- let f := shr(128, r)
166
- log_2 := or(log_2, shl(55, f))
167
- r := shr(f, r)
168
- }
169
- assembly {
170
- r := shr(127, mul(r, r))
171
- let f := shr(128, r)
172
- log_2 := or(log_2, shl(54, f))
173
- r := shr(f, r)
174
- }
175
- assembly {
176
- r := shr(127, mul(r, r))
177
- let f := shr(128, r)
178
- log_2 := or(log_2, shl(53, f))
179
- r := shr(f, r)
180
- }
181
- assembly {
182
- r := shr(127, mul(r, r))
183
- let f := shr(128, r)
184
- log_2 := or(log_2, shl(52, f))
185
- r := shr(f, r)
186
- }
187
- assembly {
188
- r := shr(127, mul(r, r))
189
- let f := shr(128, r)
190
- log_2 := or(log_2, shl(51, f))
191
- r := shr(f, r)
192
- }
193
- assembly {
194
- r := shr(127, mul(r, r))
195
- let f := shr(128, r)
196
- log_2 := or(log_2, shl(50, f))
197
- }
198
-
199
- int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number
200
-
201
- int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);
202
- int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);
203
-
204
- tick = tickLow == tickHi
205
- ? tickLow
206
- : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96
207
- ? tickHi
208
- : tickLow;
209
- }
210
- }