@nradko/metric-omm-sdk-v1 0.0.16

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 (137) hide show
  1. package/README.md +111 -0
  2. package/dist/abis/MetricOmmPool.d.ts +784 -0
  3. package/dist/abis/MetricOmmPool.d.ts.map +1 -0
  4. package/dist/abis/MetricOmmPool.js +1008 -0
  5. package/dist/abis/MetricOmmPool.js.map +1 -0
  6. package/dist/abis/MetricOmmPoolFactory.d.ts +1365 -0
  7. package/dist/abis/MetricOmmPoolFactory.d.ts.map +1 -0
  8. package/dist/abis/MetricOmmPoolFactory.js +1754 -0
  9. package/dist/abis/MetricOmmPoolFactory.js.map +1 -0
  10. package/dist/abis/MetricOmmPoolLiquidityAdder.d.ts +308 -0
  11. package/dist/abis/MetricOmmPoolLiquidityAdder.d.ts.map +1 -0
  12. package/dist/abis/MetricOmmPoolLiquidityAdder.js +401 -0
  13. package/dist/abis/MetricOmmPoolLiquidityAdder.js.map +1 -0
  14. package/dist/abis/MetricOmmPoolStateView.d.ts +538 -0
  15. package/dist/abis/MetricOmmPoolStateView.d.ts.map +1 -0
  16. package/dist/abis/MetricOmmPoolStateView.js +717 -0
  17. package/dist/abis/MetricOmmPoolStateView.js.map +1 -0
  18. package/dist/abis/MetricOmmPoolSwapper.d.ts +557 -0
  19. package/dist/abis/MetricOmmPoolSwapper.d.ts.map +1 -0
  20. package/dist/abis/MetricOmmPoolSwapper.js +723 -0
  21. package/dist/abis/MetricOmmPoolSwapper.js.map +1 -0
  22. package/dist/abis/Multicall3.d.ts +333 -0
  23. package/dist/abis/Multicall3.d.ts.map +1 -0
  24. package/dist/abis/Multicall3.js +441 -0
  25. package/dist/abis/Multicall3.js.map +1 -0
  26. package/dist/abis/PriceProvider.d.ts +142 -0
  27. package/dist/abis/PriceProvider.d.ts.map +1 -0
  28. package/dist/abis/PriceProvider.js +184 -0
  29. package/dist/abis/PriceProvider.js.map +1 -0
  30. package/dist/abis/PriceProviderUi.d.ts +433 -0
  31. package/dist/abis/PriceProviderUi.d.ts.map +1 -0
  32. package/dist/abis/PriceProviderUi.js +318 -0
  33. package/dist/abis/PriceProviderUi.js.map +1 -0
  34. package/dist/abis/index.d.ts +11 -0
  35. package/dist/abis/index.d.ts.map +1 -0
  36. package/dist/abis/index.js +11 -0
  37. package/dist/abis/index.js.map +1 -0
  38. package/dist/addresses.d.ts +52 -0
  39. package/dist/addresses.d.ts.map +1 -0
  40. package/dist/addresses.js +58 -0
  41. package/dist/addresses.js.map +1 -0
  42. package/dist/constants.d.ts +20 -0
  43. package/dist/constants.d.ts.map +1 -0
  44. package/dist/constants.js +26 -0
  45. package/dist/constants.js.map +1 -0
  46. package/dist/factory/collectFees.d.ts +41 -0
  47. package/dist/factory/collectFees.d.ts.map +1 -0
  48. package/dist/factory/collectFees.js +120 -0
  49. package/dist/factory/collectFees.js.map +1 -0
  50. package/dist/factory/index.d.ts +5 -0
  51. package/dist/factory/index.d.ts.map +1 -0
  52. package/dist/factory/index.js +5 -0
  53. package/dist/factory/index.js.map +1 -0
  54. package/dist/index.d.ts +16 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +24 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/pool/create.d.ts +80 -0
  59. package/dist/pool/create.d.ts.map +1 -0
  60. package/dist/pool/create.js +80 -0
  61. package/dist/pool/create.js.map +1 -0
  62. package/dist/pool/index.d.ts +7 -0
  63. package/dist/pool/index.d.ts.map +1 -0
  64. package/dist/pool/index.js +10 -0
  65. package/dist/pool/index.js.map +1 -0
  66. package/dist/pool/liquidity.d.ts +165 -0
  67. package/dist/pool/liquidity.d.ts.map +1 -0
  68. package/dist/pool/liquidity.js +508 -0
  69. package/dist/pool/liquidity.js.map +1 -0
  70. package/dist/pool/read.d.ts +22 -0
  71. package/dist/pool/read.d.ts.map +1 -0
  72. package/dist/pool/read.js +88 -0
  73. package/dist/pool/read.js.map +1 -0
  74. package/dist/router/index.d.ts +5 -0
  75. package/dist/router/index.d.ts.map +1 -0
  76. package/dist/router/index.js +5 -0
  77. package/dist/router/index.js.map +1 -0
  78. package/dist/router/swap.d.ts +117 -0
  79. package/dist/router/swap.d.ts.map +1 -0
  80. package/dist/router/swap.js +298 -0
  81. package/dist/router/swap.js.map +1 -0
  82. package/dist/stateView/index.d.ts +5 -0
  83. package/dist/stateView/index.d.ts.map +1 -0
  84. package/dist/stateView/index.js +5 -0
  85. package/dist/stateView/index.js.map +1 -0
  86. package/dist/stateView/read.d.ts +80 -0
  87. package/dist/stateView/read.d.ts.map +1 -0
  88. package/dist/stateView/read.js +249 -0
  89. package/dist/stateView/read.js.map +1 -0
  90. package/dist/types.d.ts +134 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +6 -0
  93. package/dist/types.js.map +1 -0
  94. package/dist/utils/binData.d.ts +65 -0
  95. package/dist/utils/binData.d.ts.map +1 -0
  96. package/dist/utils/binData.js +109 -0
  97. package/dist/utils/binData.js.map +1 -0
  98. package/dist/utils/index.d.ts +7 -0
  99. package/dist/utils/index.d.ts.map +1 -0
  100. package/dist/utils/index.js +10 -0
  101. package/dist/utils/index.js.map +1 -0
  102. package/dist/utils/liquidityMath.d.ts +10 -0
  103. package/dist/utils/liquidityMath.d.ts.map +1 -0
  104. package/dist/utils/liquidityMath.js +31 -0
  105. package/dist/utils/liquidityMath.js.map +1 -0
  106. package/dist/utils/price.d.ts +13 -0
  107. package/dist/utils/price.d.ts.map +1 -0
  108. package/dist/utils/price.js +21 -0
  109. package/dist/utils/price.js.map +1 -0
  110. package/package.json +74 -0
  111. package/src/abis/MetricOmmPool.ts +1007 -0
  112. package/src/abis/MetricOmmPoolFactory.ts +1753 -0
  113. package/src/abis/MetricOmmPoolLiquidityAdder.ts +400 -0
  114. package/src/abis/MetricOmmPoolStateView.ts +716 -0
  115. package/src/abis/MetricOmmPoolSwapper.ts +722 -0
  116. package/src/abis/Multicall3.ts +440 -0
  117. package/src/abis/PriceProvider.ts +183 -0
  118. package/src/abis/PriceProviderUi.ts +317 -0
  119. package/src/abis/index.ts +11 -0
  120. package/src/addresses.ts +100 -0
  121. package/src/constants.ts +35 -0
  122. package/src/factory/collectFees.ts +197 -0
  123. package/src/factory/index.ts +12 -0
  124. package/src/index.ts +157 -0
  125. package/src/pool/create.ts +158 -0
  126. package/src/pool/index.ts +47 -0
  127. package/src/pool/liquidity.ts +839 -0
  128. package/src/pool/read.ts +131 -0
  129. package/src/router/index.ts +27 -0
  130. package/src/router/swap.ts +507 -0
  131. package/src/stateView/index.ts +18 -0
  132. package/src/stateView/read.ts +355 -0
  133. package/src/types.ts +162 -0
  134. package/src/utils/binData.ts +127 -0
  135. package/src/utils/index.ts +26 -0
  136. package/src/utils/liquidityMath.ts +47 -0
  137. package/src/utils/price.ts +23 -0
@@ -0,0 +1,249 @@
1
+ /**
2
+ * MetricAMM SDK - StateView Read Functions
3
+ * Efficient batch read functions using the StateView contract
4
+ */
5
+ import { STATE_VIEW_ABI } from "../constants.js";
6
+ /**
7
+ * Get slot0 data efficiently (all in one call)
8
+ */
9
+ export async function getSlot0(publicClient, stateViewAddress, poolAddress) {
10
+ const result = (await publicClient.readContract({
11
+ address: stateViewAddress,
12
+ abi: STATE_VIEW_ABI,
13
+ functionName: "slot0",
14
+ args: [poolAddress],
15
+ }));
16
+ return {
17
+ pauseLevel: Number(result[0]),
18
+ curBinIdx: Number(result[1]),
19
+ curPosInBin: result[2],
20
+ curBinDistFromProvidedPrice: Number(result[3]),
21
+ spreadFeeE6: Number(result[4]),
22
+ notionalFeeE8: Number(result[5]),
23
+ };
24
+ }
25
+ /**
26
+ * Get slot1 data (total scaled token amounts in bins)
27
+ */
28
+ export async function getSlot1(publicClient, stateViewAddress, poolAddress) {
29
+ const result = (await publicClient.readContract({
30
+ address: stateViewAddress,
31
+ abi: STATE_VIEW_ABI,
32
+ functionName: "slot1",
33
+ args: [poolAddress],
34
+ }));
35
+ return {
36
+ totalScaledToken0InBins: result[0],
37
+ totalScaledToken1InBins: result[1],
38
+ };
39
+ }
40
+ /**
41
+ * Get bin state with balances in external (native token decimal) units
42
+ */
43
+ export async function getBinStateExternal(publicClient, stateViewAddress, poolAddress, binIdx) {
44
+ const result = (await publicClient.readContract({
45
+ address: stateViewAddress,
46
+ abi: STATE_VIEW_ABI,
47
+ functionName: "binState",
48
+ args: [poolAddress, binIdx],
49
+ }));
50
+ return {
51
+ token0Balance: result[0],
52
+ token1Balance: result[1],
53
+ lengthE6: result[2],
54
+ addFeeBuyE6: result[3],
55
+ addFeeSellE6: result[4],
56
+ };
57
+ }
58
+ /**
59
+ * Get multiple bin states efficiently (batch read)
60
+ */
61
+ export async function getBinStatesExternal(publicClient, stateViewAddress, poolAddress, binIndices) {
62
+ const result = (await publicClient.readContract({
63
+ address: stateViewAddress,
64
+ abi: STATE_VIEW_ABI,
65
+ functionName: "binStates",
66
+ args: [poolAddress, binIndices],
67
+ }));
68
+ return {
69
+ token0Balances: result[0],
70
+ token1Balances: result[1],
71
+ lengthsInUnits: result[2],
72
+ addFeeBuysE6: result[3],
73
+ addFeeSellsE6: result[4],
74
+ totalShares: result[5],
75
+ };
76
+ }
77
+ /**
78
+ * Get multiple bin states in scaled (internal) units (parallel reads).
79
+ */
80
+ export async function getBinStatesScaled(publicClient, stateViewAddress, poolAddress, binIndices) {
81
+ const scaledReads = binIndices.map((binIdx) => publicClient.readContract({
82
+ address: stateViewAddress,
83
+ abi: STATE_VIEW_ABI,
84
+ functionName: "binStateScaled",
85
+ args: [poolAddress, binIdx],
86
+ }));
87
+ const shareReads = binIndices.map((binIdx) => publicClient.readContract({
88
+ address: stateViewAddress,
89
+ abi: STATE_VIEW_ABI,
90
+ functionName: "binTotalShares",
91
+ args: [poolAddress, binIdx],
92
+ }));
93
+ const [scaled, shares] = await Promise.all([Promise.all(scaledReads), Promise.all(shareReads)]);
94
+ return {
95
+ token0BalancesScaled: scaled.map((r) => r[0]),
96
+ token1BalancesScaled: scaled.map((r) => r[1]),
97
+ lengthsInUnits: scaled.map((r) => r[2]),
98
+ addFeeBuysE6: scaled.map((r) => r[3]),
99
+ addFeeSellsE6: scaled.map((r) => r[4]),
100
+ totalShares: shares,
101
+ };
102
+ }
103
+ /**
104
+ * Get bin total shares
105
+ */
106
+ export async function getBinTotalShares(publicClient, stateViewAddress, poolAddress, binIdx) {
107
+ return (await publicClient.readContract({
108
+ address: stateViewAddress,
109
+ abi: STATE_VIEW_ABI,
110
+ functionName: "binTotalShares",
111
+ args: [poolAddress, binIdx],
112
+ }));
113
+ }
114
+ /**
115
+ * Get user position shares via StateView
116
+ */
117
+ export async function getPositionBinSharesFromStateView(publicClient, stateViewAddress, poolAddress, owner, salt, binIdx) {
118
+ return (await publicClient.readContract({
119
+ address: stateViewAddress,
120
+ abi: STATE_VIEW_ABI,
121
+ functionName: "positionBinShares",
122
+ args: [poolAddress, owner, salt, binIdx],
123
+ }));
124
+ }
125
+ /**
126
+ * Create a position bin key (matches Solidity's toPositionBinKey)
127
+ * Layout: [address(160)] | [salt(80)] | [bin(16)] = 256 bits
128
+ */
129
+ export function toPositionBinKey(owner, salt, bin) {
130
+ // Convert owner address to bigint (160 bits)
131
+ const ownerBigInt = BigInt(owner);
132
+ // Salt is 80 bits, bin is 16 bits (signed, convert to uint16)
133
+ const binUint16 = bin < 0 ? BigInt(bin + 0x10000) : BigInt(bin);
134
+ // Pack: owner << 96 | salt << 16 | bin
135
+ const packed = (ownerBigInt << 96n) | ((salt & 0xffffffffffffffffffffn) << 16n) | (binUint16 & 0xffffn);
136
+ return `0x${packed.toString(16).padStart(64, "0")}`;
137
+ }
138
+ /**
139
+ * Get user position shares for a range of bins via StateView batch call
140
+ *
141
+ * @param publicClient - Viem public client
142
+ * @param stateViewAddress - StateView contract address
143
+ * @param poolAddress - Pool address
144
+ * @param owner - Position owner (e.g., NFTPositionManager address)
145
+ * @param salt - Position salt (e.g., NFT token ID)
146
+ * @param lowerBin - Lower bin index (inclusive)
147
+ * @param upperBin - Upper bin index (inclusive)
148
+ * @returns Array of { binIdx, shares } for bins with non-zero shares
149
+ */
150
+ export async function getPositionBinSharesRange(publicClient, stateViewAddress, poolAddress, owner, salt, lowerBin, upperBin) {
151
+ const binIndices = [];
152
+ const positionBinKeys = [];
153
+ for (let bin = lowerBin; bin <= upperBin; bin++) {
154
+ binIndices.push(bin);
155
+ positionBinKeys.push(toPositionBinKey(owner, salt, bin));
156
+ }
157
+ // Batch read all bin shares using the new positionBinSharesBatch function
158
+ const results = (await publicClient.readContract({
159
+ address: stateViewAddress,
160
+ abi: STATE_VIEW_ABI,
161
+ functionName: "positionBinSharesBatch",
162
+ args: [poolAddress, positionBinKeys],
163
+ }));
164
+ const positionShares = [];
165
+ for (let i = 0; i < binIndices.length; i++) {
166
+ const shares = results[i];
167
+ if (shares > 0n) {
168
+ positionShares.push({
169
+ binIdx: binIndices[i],
170
+ shares,
171
+ });
172
+ }
173
+ }
174
+ return positionShares;
175
+ }
176
+ /**
177
+ * Get user position shares for specific (possibly non-contiguous) bins via StateView batch call.
178
+ *
179
+ * Unlike getPositionBinSharesRange which scans a contiguous range,
180
+ * this function queries exact bin indices you specify.
181
+ *
182
+ * @param publicClient - Viem public client
183
+ * @param stateViewAddress - StateView contract address
184
+ * @param poolAddress - Pool address
185
+ * @param owner - Position owner address
186
+ * @param salt - Position salt
187
+ * @param bins - Array of specific bin indices to query (e.g., [-3, 1, 2])
188
+ * @returns Array of { binIdx, shares } for bins with non-zero shares
189
+ */
190
+ export async function getPositionBinSharesForBins(publicClient, stateViewAddress, poolAddress, owner, salt, bins) {
191
+ const positionBinKeys = bins.map((bin) => toPositionBinKey(owner, salt, bin));
192
+ const results = (await publicClient.readContract({
193
+ address: stateViewAddress,
194
+ abi: STATE_VIEW_ABI,
195
+ functionName: "positionBinSharesBatch",
196
+ args: [poolAddress, positionBinKeys],
197
+ }));
198
+ const positionShares = [];
199
+ for (let i = 0; i < bins.length; i++) {
200
+ const shares = results[i];
201
+ if (shares > 0n) {
202
+ positionShares.push({
203
+ binIdx: bins[i],
204
+ shares,
205
+ });
206
+ }
207
+ }
208
+ return positionShares;
209
+ }
210
+ /**
211
+ * Get fee configuration
212
+ */
213
+ export async function getFeeConfig(publicClient, stateViewAddress, poolAddress) {
214
+ const result = (await publicClient.readContract({
215
+ address: stateViewAddress,
216
+ abi: STATE_VIEW_ABI,
217
+ functionName: "feeConfig",
218
+ args: [poolAddress],
219
+ }));
220
+ return {
221
+ adminAddr: result[0],
222
+ protocolFee: result[1],
223
+ adminFee: result[2],
224
+ adminFeeDest: result[3],
225
+ };
226
+ }
227
+ /**
228
+ * Get price provider address
229
+ */
230
+ export async function getPriceProvider(publicClient, stateViewAddress, poolAddress) {
231
+ return (await publicClient.readContract({
232
+ address: stateViewAddress,
233
+ abi: STATE_VIEW_ABI,
234
+ functionName: "priceProvider",
235
+ args: [poolAddress],
236
+ }));
237
+ }
238
+ /**
239
+ * Get last trade timestamp
240
+ */
241
+ export async function getLastTradeTimestamp(publicClient, stateViewAddress, poolAddress) {
242
+ return (await publicClient.readContract({
243
+ address: stateViewAddress,
244
+ abi: STATE_VIEW_ABI,
245
+ functionName: "lastTradeTimestamp",
246
+ args: [poolAddress],
247
+ }));
248
+ }
249
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/stateView/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * MetricAMM SDK Types
3
+ * All interfaces and type definitions
4
+ */
5
+ import type { Address } from "viem";
6
+ export interface LiquidityDelta {
7
+ bin: number;
8
+ deltaShares: bigint;
9
+ }
10
+ /**
11
+ * v1 pool and LiquidityAdder payload: parallel arrays of bin indices and share magnitudes (add or remove).
12
+ */
13
+ export interface PoolLiquidityDelta {
14
+ binIdxs: readonly bigint[];
15
+ shares: readonly bigint[];
16
+ }
17
+ /**
18
+ * Bin configuration for pool creation.
19
+ * All values are in E6 format (1e6 = 100%).
20
+ *
21
+ * @example
22
+ * // Bin with 1% length, 0.3% buy fee, 0.1% sell fee
23
+ * { lengthE6: 10000, addFeeBuyE6: 3000, addFeeSellE6: 1000 }
24
+ */
25
+ export interface BinData {
26
+ /** Bin length in E6 format (10000 = 1%, 1000000 = 100%) */
27
+ lengthE6: number;
28
+ /** Additional buy fee in E6 format */
29
+ addFeeBuyE6: number;
30
+ /** Additional sell fee in E6 format */
31
+ addFeeSellE6: number;
32
+ }
33
+ export interface PoolImmutables {
34
+ factory: Address;
35
+ token0: Address;
36
+ token1: Address;
37
+ token0ScaleMultiplier: bigint;
38
+ token1ScaleMultiplier: bigint;
39
+ initialScaledToken0PerShareE18: bigint;
40
+ initialScaledToken1PerShareE18: bigint;
41
+ minimalMintableLiquidity: bigint;
42
+ maxDriftE8: bigint;
43
+ maxDriftDecayPerSecondE8: bigint;
44
+ lowestBin: number;
45
+ highestBin: number;
46
+ }
47
+ export interface PoolState {
48
+ pauseLevel: number;
49
+ curBinIdx: number;
50
+ curPosInBin: bigint;
51
+ curBinDistFromProvidedPrice: number;
52
+ spreadFeeE6: number;
53
+ notionalFeeE8: number;
54
+ totalScaledToken0InBins: bigint;
55
+ totalScaledToken1InBins: bigint;
56
+ }
57
+ export interface BinState {
58
+ token0BalanceScaled: bigint;
59
+ token1BalanceScaled: bigint;
60
+ lengthE6: number;
61
+ addFeeBuyE6: number;
62
+ addFeeSellE6: number;
63
+ }
64
+ export interface BinStateExternal {
65
+ token0Balance: bigint;
66
+ token1Balance: bigint;
67
+ lengthE6: number;
68
+ addFeeBuyE6: number;
69
+ addFeeSellE6: number;
70
+ }
71
+ export interface BinStatesExternal {
72
+ token0Balances: bigint[];
73
+ token1Balances: bigint[];
74
+ lengthsInUnits: number[];
75
+ addFeeBuysE6: number[];
76
+ addFeeSellsE6: number[];
77
+ totalShares: bigint[];
78
+ }
79
+ export interface BinStatesScaled {
80
+ token0BalancesScaled: bigint[];
81
+ token1BalancesScaled: bigint[];
82
+ lengthsInUnits: number[];
83
+ addFeeBuysE6: number[];
84
+ addFeeSellsE6: number[];
85
+ totalShares: bigint[];
86
+ }
87
+ export interface Slot0 {
88
+ pauseLevel: number;
89
+ curBinIdx: number;
90
+ curPosInBin: bigint;
91
+ curBinDistFromProvidedPrice: number;
92
+ spreadFeeE6: number;
93
+ notionalFeeE8: number;
94
+ }
95
+ export interface Slot1 {
96
+ totalScaledToken0InBins: bigint;
97
+ totalScaledToken1InBins: bigint;
98
+ }
99
+ export interface FeeConfig {
100
+ adminAddr: Address;
101
+ protocolFee: number;
102
+ adminFee: number;
103
+ adminFeeDest: Address;
104
+ }
105
+ /**
106
+ * Result type for getPositionBinSharesRange
107
+ */
108
+ export interface PositionBinSharesResult {
109
+ binIdx: number;
110
+ shares: bigint;
111
+ }
112
+ export interface CalculateUniformLiquidityParams {
113
+ valuePerBinInToken: bigint;
114
+ valueIsInToken0: boolean;
115
+ currentPrice: number;
116
+ lowerBin: number;
117
+ upperBin: number;
118
+ }
119
+ export interface LiquidityBinValueInput {
120
+ bin: number;
121
+ targetValueInToken: bigint;
122
+ targetValueInToken0: boolean;
123
+ }
124
+ export interface CalculateAnyLiquidityParams {
125
+ bins: LiquidityBinValueInput[];
126
+ currentPrice: number;
127
+ }
128
+ export interface PreparedLiquidityDistribution {
129
+ deltas: LiquidityDelta[];
130
+ specAmount0: bigint;
131
+ specAmount1: bigint;
132
+ }
133
+ export type CalculatedLiquidityDistribution = PreparedLiquidityDistribution;
134
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * MetricAMM SDK Types
3
+ * All interfaces and type definitions
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * MetricAMM SDK - Bin Data Utilities
3
+ * Functions for packing/unpacking bin data
4
+ */
5
+ import type { BinData } from "../types.js";
6
+ /**
7
+ * Pack bin data into 48-bit representation
8
+ * Layout: [lengthE6: 16 bits][addFeeBuyE6: 16 bits][addFeeSellE6: 16 bits]
9
+ */
10
+ export declare function packBinData(binData: BinData): bigint;
11
+ /**
12
+ * Pack 5 bins into a single uint256
13
+ * Each bin takes 48 bits, total 240 bits used, 16 bits unused
14
+ */
15
+ export declare function packBins5(bins: BinData[]): bigint;
16
+ /**
17
+ * Pack an array of bin data into uint256 array (5 bins per uint256)
18
+ * Pads with zero bins if length is not divisible by 5
19
+ */
20
+ export declare function packBinDataArray(bins: BinData[]): bigint[];
21
+ /**
22
+ * Unpack 48-bit bin data
23
+ */
24
+ export declare function unpackBinData(packed: bigint): BinData;
25
+ /**
26
+ * Pack bin data array into uint256 array ready for contract calls.
27
+ *
28
+ * @param bins Array of bin configurations
29
+ * @returns Packed uint256 array ready for contract calls
30
+ *
31
+ * @example
32
+ * // Create 3 bins: 1% length with default fees
33
+ * const bins = createBins([
34
+ * { lengthE6: 10000, addFeeBuyE6: 0, addFeeSellE6: 0 },
35
+ * { lengthE6: 10000, addFeeBuyE6: 0, addFeeSellE6: 0 },
36
+ * { lengthE6: 10000, addFeeBuyE6: 0, addFeeSellE6: 0 },
37
+ * ]);
38
+ *
39
+ * @example
40
+ * // Create bins with custom fees
41
+ * const bins = createBins([
42
+ * { lengthE6: 10000, addFeeBuyE6: 500, addFeeSellE6: 200 }, // 1% length, +0.05% buy, +0.02% sell
43
+ * { lengthE6: 20000, addFeeBuyE6: 0, addFeeSellE6: 0 }, // 2% length, no extra fees
44
+ * ]);
45
+ */
46
+ export declare function createBins(bins: BinData[]): bigint[];
47
+ /**
48
+ * Create uniform bins with the same configuration.
49
+ *
50
+ * @param count Number of bins to create
51
+ * @param lengthE6 Bin length in E6 format (10000 = 1%)
52
+ * @param addFeeBuyE6 Additional buy fee in E6 format (default: 0)
53
+ * @param addFeeSellE6 Additional sell fee in E6 format (default: 0)
54
+ * @returns Packed uint256 array ready for contract calls
55
+ *
56
+ * @example
57
+ * // Create 20 uniform bins, each 1% length
58
+ * const bins = createUniformBins(20, 10000);
59
+ *
60
+ * @example
61
+ * // Create 10 bins with 0.5% length and +0.1% buy fee
62
+ * const bins = createUniformBins(10, 5000, 1000);
63
+ */
64
+ export declare function createUniformBins(count: number, lengthE6: number, addFeeBuyE6?: number, addFeeSellE6?: number): bigint[];
65
+ //# sourceMappingURL=binData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binData.d.ts","sourceRoot":"","sources":["../../src/utils/binData.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAMpD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAYjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAc1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAUrD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAEpD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,MAAU,EACvB,YAAY,GAAE,MAAU,GACvB,MAAM,EAAE,CAOV"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * MetricAMM SDK - Bin Data Utilities
3
+ * Functions for packing/unpacking bin data
4
+ */
5
+ /**
6
+ * Pack bin data into 48-bit representation
7
+ * Layout: [lengthE6: 16 bits][addFeeBuyE6: 16 bits][addFeeSellE6: 16 bits]
8
+ */
9
+ export function packBinData(binData) {
10
+ const length = BigInt(binData.lengthE6) & 0xffffn;
11
+ const buyFee = BigInt(binData.addFeeBuyE6) & 0xffffn;
12
+ const sellFee = BigInt(binData.addFeeSellE6) & 0xffffn;
13
+ return length | (buyFee << 16n) | (sellFee << 32n);
14
+ }
15
+ /**
16
+ * Pack 5 bins into a single uint256
17
+ * Each bin takes 48 bits, total 240 bits used, 16 bits unused
18
+ */
19
+ export function packBins5(bins) {
20
+ if (bins.length !== 5) {
21
+ throw new Error("Must provide exactly 5 bins");
22
+ }
23
+ let packed = 0n;
24
+ for (let i = 0; i < 5; i++) {
25
+ const binPacked = packBinData(bins[i]);
26
+ packed |= binPacked << (BigInt(i) * 48n);
27
+ }
28
+ return packed;
29
+ }
30
+ /**
31
+ * Pack an array of bin data into uint256 array (5 bins per uint256)
32
+ * Pads with zero bins if length is not divisible by 5
33
+ */
34
+ export function packBinDataArray(bins) {
35
+ const zeroBin = { lengthE6: 0, addFeeBuyE6: 0, addFeeSellE6: 0 };
36
+ const result = [];
37
+ // Process in chunks of 5
38
+ for (let i = 0; i < bins.length; i += 5) {
39
+ const chunk = [];
40
+ for (let j = 0; j < 5; j++) {
41
+ chunk.push(bins[i + j] || zeroBin);
42
+ }
43
+ result.push(packBins5(chunk));
44
+ }
45
+ return result;
46
+ }
47
+ /**
48
+ * Unpack 48-bit bin data
49
+ */
50
+ export function unpackBinData(packed) {
51
+ const lengthE6 = Number(packed & 0xffffn);
52
+ const addFeeBuyE6 = Number((packed >> 16n) & 0xffffn);
53
+ const addFeeSellE6 = Number((packed >> 32n) & 0xffffn);
54
+ return {
55
+ lengthE6,
56
+ addFeeBuyE6,
57
+ addFeeSellE6,
58
+ };
59
+ }
60
+ /**
61
+ * Pack bin data array into uint256 array ready for contract calls.
62
+ *
63
+ * @param bins Array of bin configurations
64
+ * @returns Packed uint256 array ready for contract calls
65
+ *
66
+ * @example
67
+ * // Create 3 bins: 1% length with default fees
68
+ * const bins = createBins([
69
+ * { lengthE6: 10000, addFeeBuyE6: 0, addFeeSellE6: 0 },
70
+ * { lengthE6: 10000, addFeeBuyE6: 0, addFeeSellE6: 0 },
71
+ * { lengthE6: 10000, addFeeBuyE6: 0, addFeeSellE6: 0 },
72
+ * ]);
73
+ *
74
+ * @example
75
+ * // Create bins with custom fees
76
+ * const bins = createBins([
77
+ * { lengthE6: 10000, addFeeBuyE6: 500, addFeeSellE6: 200 }, // 1% length, +0.05% buy, +0.02% sell
78
+ * { lengthE6: 20000, addFeeBuyE6: 0, addFeeSellE6: 0 }, // 2% length, no extra fees
79
+ * ]);
80
+ */
81
+ export function createBins(bins) {
82
+ return packBinDataArray(bins);
83
+ }
84
+ /**
85
+ * Create uniform bins with the same configuration.
86
+ *
87
+ * @param count Number of bins to create
88
+ * @param lengthE6 Bin length in E6 format (10000 = 1%)
89
+ * @param addFeeBuyE6 Additional buy fee in E6 format (default: 0)
90
+ * @param addFeeSellE6 Additional sell fee in E6 format (default: 0)
91
+ * @returns Packed uint256 array ready for contract calls
92
+ *
93
+ * @example
94
+ * // Create 20 uniform bins, each 1% length
95
+ * const bins = createUniformBins(20, 10000);
96
+ *
97
+ * @example
98
+ * // Create 10 bins with 0.5% length and +0.1% buy fee
99
+ * const bins = createUniformBins(10, 5000, 1000);
100
+ */
101
+ export function createUniformBins(count, lengthE6, addFeeBuyE6 = 0, addFeeSellE6 = 0) {
102
+ const bins = Array(count).fill({
103
+ lengthE6,
104
+ addFeeBuyE6,
105
+ addFeeSellE6,
106
+ });
107
+ return packBinDataArray(bins);
108
+ }
109
+ //# sourceMappingURL=binData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binData.js","sourceRoot":"","sources":["../../src/utils/binData.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MetricAMM SDK - Utility Functions
3
+ */
4
+ export { packBinData, packBins5, packBinDataArray, unpackBinData, createBins, createUniformBins, } from "./binData.js";
5
+ export { priceToQ64, q64ToPrice } from "./price.js";
6
+ export { ONE_E18, ceilDiv, toPriceE18 as toPriceX18, convertToken0ToToken1, convertToken1ToToken0, scaledPositiveDeltaToExternal, } from "./liquidityMath.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EACL,OAAO,EACP,OAAO,EACP,UAAU,IAAI,UAAU,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * MetricAMM SDK - Utility Functions
3
+ */
4
+ // Bin data utilities
5
+ export { packBinData, packBins5, packBinDataArray, unpackBinData, createBins, createUniformBins, } from "./binData.js";
6
+ // Price utilities
7
+ export { priceToQ64, q64ToPrice } from "./price.js";
8
+ // Liquidity math utilities
9
+ export { ONE_E18, ceilDiv, toPriceE18 as toPriceX18, convertToken0ToToken1, convertToken1ToToken0, scaledPositiveDeltaToExternal, } from "./liquidityMath.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAqB;AACrB,OAAO,EACL,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpD,2BAA2B;AAC3B,OAAO,EACL,OAAO,EACP,OAAO,EACP,UAAU,IAAI,UAAU,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * MetricAMM SDK - Liquidity Math Utilities
3
+ */
4
+ export declare const ONE_E18 = 1000000000000000000n;
5
+ export declare function ceilDiv(numerator: bigint, denominator: bigint): bigint;
6
+ export declare function toPriceE18(currentPrice: number): bigint;
7
+ export declare function convertToken0ToToken1(amount0: bigint, token0ScaleMultiplier: bigint, token1ScaleMultiplier: bigint, priceE18: bigint): bigint;
8
+ export declare function convertToken1ToToken0(amount1: bigint, token0ScaleMultiplier: bigint, token1ScaleMultiplier: bigint, priceX18: bigint): bigint;
9
+ export declare function scaledPositiveDeltaToExternal(scaledAmount: bigint, scaleMultiplier: bigint): bigint;
10
+ //# sourceMappingURL=liquidityMath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidityMath.d.ts","sourceRoot":"","sources":["../../src/utils/liquidityMath.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,OAAO,uBAA6B,CAAC;AAElD,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAItE;AAED,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CASvD;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,qBAAqB,EAAE,MAAM,EAC7B,qBAAqB,EAAE,MAAM,EAC7B,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,qBAAqB,EAAE,MAAM,EAC7B,qBAAqB,EAAE,MAAM,EAC7B,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,MAAM,CAER"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * MetricAMM SDK - Liquidity Math Utilities
3
+ */
4
+ export const ONE_E18 = 1000000000000000000n;
5
+ export function ceilDiv(numerator, denominator) {
6
+ if (denominator <= 0n)
7
+ throw new Error("denominator must be > 0");
8
+ if (numerator < 0n)
9
+ throw new Error("numerator must be >= 0");
10
+ return numerator === 0n ? 0n : (numerator + denominator - 1n) / denominator;
11
+ }
12
+ export function toPriceE18(currentPrice) {
13
+ if (!Number.isFinite(currentPrice) || currentPrice <= 0) {
14
+ throw new Error("currentPrice must be a positive finite number");
15
+ }
16
+ const priceE18 = BigInt(Math.round(currentPrice * 1e18));
17
+ if (priceE18 <= 0n) {
18
+ throw new Error("currentPrice is too small");
19
+ }
20
+ return priceE18;
21
+ }
22
+ export function convertToken0ToToken1(amount0, token0ScaleMultiplier, token1ScaleMultiplier, priceE18) {
23
+ return (amount0 * token0ScaleMultiplier * priceE18) / (token1ScaleMultiplier * ONE_E18);
24
+ }
25
+ export function convertToken1ToToken0(amount1, token0ScaleMultiplier, token1ScaleMultiplier, priceX18) {
26
+ return (amount1 * token1ScaleMultiplier * ONE_E18) / (token0ScaleMultiplier * priceX18);
27
+ }
28
+ export function scaledPositiveDeltaToExternal(scaledAmount, scaleMultiplier) {
29
+ return ceilDiv(scaledAmount, scaleMultiplier);
30
+ }
31
+ //# sourceMappingURL=liquidityMath.js.map