@w3lib/evm-batch-call 0.5.0 → 0.6.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 (63) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +79 -2
  3. package/dist/liquidity/common.d.ts +72 -0
  4. package/dist/liquidity/common.d.ts.map +1 -0
  5. package/dist/liquidity/common.js +271 -0
  6. package/dist/liquidity/common.js.map +1 -0
  7. package/dist/liquidity/concentrated.d.ts +19 -0
  8. package/dist/liquidity/concentrated.d.ts.map +1 -0
  9. package/dist/liquidity/concentrated.js +106 -0
  10. package/dist/liquidity/concentrated.js.map +1 -0
  11. package/dist/liquidity/index.d.ts +42 -0
  12. package/dist/liquidity/index.d.ts.map +1 -0
  13. package/dist/liquidity/index.js +143 -0
  14. package/dist/liquidity/index.js.map +1 -0
  15. package/dist/liquidity/types.d.ts +182 -0
  16. package/dist/liquidity/types.d.ts.map +1 -0
  17. package/dist/liquidity/types.js +2 -0
  18. package/dist/liquidity/types.js.map +1 -0
  19. package/dist/liquidity/v2.d.ts +5 -0
  20. package/dist/liquidity/v2.d.ts.map +1 -0
  21. package/dist/liquidity/v2.js +342 -0
  22. package/dist/liquidity/v2.js.map +1 -0
  23. package/dist/liquidity/v3.d.ts +6 -0
  24. package/dist/liquidity/v3.d.ts.map +1 -0
  25. package/dist/liquidity/v3.js +310 -0
  26. package/dist/liquidity/v3.js.map +1 -0
  27. package/dist/liquidity/v4.d.ts +5 -0
  28. package/dist/liquidity/v4.d.ts.map +1 -0
  29. package/dist/liquidity/v4.js +279 -0
  30. package/dist/liquidity/v4.js.map +1 -0
  31. package/dist/lp.d.ts +8 -1
  32. package/dist/lp.d.ts.map +1 -1
  33. package/dist/lp.js +29 -18
  34. package/dist/lp.js.map +1 -1
  35. package/dist/lpMath.d.ts +55 -0
  36. package/dist/lpMath.d.ts.map +1 -1
  37. package/dist/lpMath.js +209 -0
  38. package/dist/lpMath.js.map +1 -1
  39. package/dist/subpaths/liquidity.d.ts +24 -0
  40. package/dist/subpaths/liquidity.d.ts.map +1 -0
  41. package/dist/subpaths/liquidity.js +21 -0
  42. package/dist/subpaths/liquidity.js.map +1 -0
  43. package/dist/subpaths/lp.d.ts +1 -1
  44. package/dist/subpaths/lp.d.ts.map +1 -1
  45. package/dist/subpaths/lp.js +1 -1
  46. package/dist/subpaths/lp.js.map +1 -1
  47. package/dist/write/tron.d.ts +2 -0
  48. package/dist/write/tron.d.ts.map +1 -1
  49. package/dist/write/tron.js +4 -0
  50. package/dist/write/tron.js.map +1 -1
  51. package/package.json +20 -12
  52. package/src/liquidity/common.ts +314 -0
  53. package/src/liquidity/concentrated.ts +121 -0
  54. package/src/liquidity/index.ts +171 -0
  55. package/src/liquidity/types.ts +194 -0
  56. package/src/liquidity/v2.ts +371 -0
  57. package/src/liquidity/v3.ts +382 -0
  58. package/src/liquidity/v4.ts +348 -0
  59. package/src/lp.ts +36 -18
  60. package/src/lpMath.ts +223 -0
  61. package/src/subpaths/liquidity.ts +52 -0
  62. package/src/subpaths/lp.ts +20 -1
  63. package/src/write/tron.ts +5 -0
@@ -0,0 +1,342 @@
1
+ import { Interface } from 'ethers';
2
+ import { LP_PROTOCOLS } from '../lp.js';
3
+ import { sqrtBigInt } from '../lpMath.js';
4
+ import { ZERO_ADDRESS, approvals, evm, isNative, makePlan, minus, out, parseAmount, protocolById, removeAmount, same, tokenInfo } from './common.js';
5
+ const routerInterface = new Interface([
6
+ 'function WETH() view returns (address)',
7
+ 'function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256 amountA, uint256 amountB, uint256 liquidity)',
8
+ 'function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity)',
9
+ 'function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256 amountA, uint256 amountB)',
10
+ 'function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) returns (uint256 amountToken, uint256 amountETH)',
11
+ ]);
12
+ const factoryInterface = new Interface(['function getPair(address tokenA, address tokenB) view returns (address)', 'function feeTo() view returns (address)']);
13
+ const pairInterface = new Interface([
14
+ 'function token0() view returns (address)',
15
+ 'function token1() view returns (address)',
16
+ 'function factory() view returns (address)',
17
+ 'function getReserves() view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast)',
18
+ 'function totalSupply() view returns (uint256)',
19
+ 'function balanceOf(address owner) view returns (uint256)',
20
+ 'function kLast() view returns (uint256)',
21
+ ]);
22
+ /** UniswapV2Pair.MINIMUM_LIQUIDITY:第一次添加时锁定的 LP 代币 */
23
+ const MINIMUM_LIQUIDITY = 1000n;
24
+ /**
25
+ * UniswapV2Pair._mintFee:协议手续费开启(factory.feeTo 不为零)时,每次添加 / 移除前先按 √k 的增长给 feeTo 增发 LP,
26
+ * 按份额算数量时要用增发后的总量。比例按 LpProtocol.protocolFee,没填时按 8/25(增发得多、算出的数量偏少,最小值更宽松,不会因此 revert)
27
+ */
28
+ function protocolFeeMint(protocol, totalSupply, reserve0, reserve1, kLast) {
29
+ if (kLast === 0n || totalSupply === 0n) {
30
+ return 0n;
31
+ }
32
+ const rootK = sqrtBigInt(reserve0 * reserve1);
33
+ const rootKLast = sqrtBigInt(kLast);
34
+ if (rootK <= rootKLast) {
35
+ return 0n;
36
+ }
37
+ return protocol.protocolFee === '1/6'
38
+ ? (totalSupply * (rootK - rootKLast)) / (rootK * 5n + rootKLast)
39
+ : (totalSupply * (rootK - rootKLast) * 8n) / (rootK * 17n + rootKLast * 8n);
40
+ }
41
+ function routerOf(protocol) {
42
+ if (!protocol.router) {
43
+ throw new Error(`Protocol ${protocol.id} has no router; set router on its LpProtocol`);
44
+ }
45
+ return evm(protocol.router);
46
+ }
47
+ /** 读池子:储备、总量、owner 持有的 LP;协议没给时按池子的 factory 找(Router)。已知协议时协议手续费的状态一并读 */
48
+ async function readPair(ctx, pair, protocol) {
49
+ const c = ctx.provider.contract(pair, pairInterface);
50
+ const feeToCall = (factory) => ctx.provider.contract(factory, factoryInterface).feeTo();
51
+ // kLast / feeTo 有的分叉没有:一起用 tryAll 读,读不到按没开启协议手续费
52
+ const first = (await ctx.provider.tryAll([
53
+ c.token0(),
54
+ c.token1(),
55
+ c.factory(),
56
+ c.getReserves(),
57
+ c.totalSupply(),
58
+ c.balanceOf(ctx.owner),
59
+ c.kLast(),
60
+ ...(protocol?.factory ? [feeToCall(protocol.factory)] : []),
61
+ ]));
62
+ const [token0, token1, factory, reserves, totalSupply, balance, kLast] = first;
63
+ if (!token0 || !token1 || !factory || !reserves || totalSupply === null || balance === null) {
64
+ throw new Error(`${out(ctx, pair)} is not a V2 pool`);
65
+ }
66
+ const found = protocol ??
67
+ [...(ctx.options.protocols ?? []), ...LP_PROTOCOLS].find((p) => p.chainId === ctx.chainId && p.version === 'v2' && p.factory && same(p.factory, factory));
68
+ if (!found) {
69
+ throw new Error(`Unknown V2 factory ${out(ctx, evm(factory))} of pool ${out(ctx, pair)}; pass its LpProtocol (with router) in options.protocols`);
70
+ }
71
+ if (protocol?.factory && !same(protocol.factory, factory)) {
72
+ throw new Error(`Pool ${out(ctx, pair)} does not belong to ${protocol.id}`);
73
+ }
74
+ const feeTo = protocol?.factory ? (first[7] ?? null) : (await ctx.provider.tryAll([feeToCall(factory)]))[0];
75
+ const feeOn = feeTo !== null && evm(feeTo) !== ZERO_ADDRESS;
76
+ const minted = feeOn ? protocolFeeMint(found, totalSupply, reserves[0], reserves[1], kLast ?? 0n) : 0n;
77
+ return {
78
+ protocol: found,
79
+ router: routerOf(found),
80
+ pair,
81
+ token0: evm(token0),
82
+ token1: evm(token1),
83
+ reserve0: reserves[0],
84
+ reserve1: reserves[1],
85
+ totalSupply: totalSupply + minted,
86
+ balance,
87
+ };
88
+ }
89
+ /** 仓位上带的协议:LpProtocol 对象直接用;协议 id 按内置表 / options.protocols 找(getLpPositions 里不认识的工厂是 'v2:<工厂>',按工厂找) */
90
+ function refProtocol(ctx, ref) {
91
+ if (!ref.protocol || (typeof ref.protocol === 'string' && ref.protocol.startsWith('v2:'))) {
92
+ return undefined;
93
+ }
94
+ const protocol = protocolById(ctx, ref.protocol);
95
+ if (protocol.version !== 'v2') {
96
+ throw new Error(`${protocol.id} is not a V2 protocol`);
97
+ }
98
+ return protocol;
99
+ }
100
+ const wethOf = async (ctx, router) => evm((await ctx.provider.call(ctx.provider.contract(router, routerInterface).WETH())));
101
+ /** UniswapV2Library.quote:按储备比例换算 */
102
+ const quote = (amountA, reserveA, reserveB) => (amountA * reserveB) / reserveA;
103
+ export async function v2Add(ctx, params) {
104
+ let state;
105
+ /** 新建时 tokenA 是不是 token0;往已有仓位追加时为 null(数量直接按 token0 / token1) */
106
+ let aIs0 = null;
107
+ let native = ctx.options.native ?? false;
108
+ /** Router 的包装币(用主币时才读) */
109
+ let weth = null;
110
+ if ('position' in params) {
111
+ const ref = params.position;
112
+ if (!ref.pool) {
113
+ throw new Error('V2 position needs pool');
114
+ }
115
+ state = await readPair(ctx, evm(ref.pool), refProtocol(ctx, ref));
116
+ }
117
+ else {
118
+ const protocol = params.protocol;
119
+ const router = routerOf(protocol);
120
+ let a = evm(params.tokenA);
121
+ let b = evm(params.tokenB);
122
+ if (isNative(ctx, a) || isNative(ctx, b)) {
123
+ // 主币:换成 Router 的包装币,用主币支付
124
+ const wrapped = await wethOf(ctx, router);
125
+ a = isNative(ctx, a) ? wrapped : a;
126
+ b = isNative(ctx, b) ? wrapped : b;
127
+ weth = wrapped;
128
+ native = true;
129
+ }
130
+ if (a === b) {
131
+ throw new Error('tokenA and tokenB must be different');
132
+ }
133
+ if (!protocol.factory) {
134
+ throw new Error(`Protocol ${protocol.id} has no factory; set factory on its LpProtocol`);
135
+ }
136
+ const pair = evm((await ctx.provider.call(ctx.provider.contract(protocol.factory, factoryInterface).getPair(a, b))));
137
+ if (pair === ZERO_ADDRESS) {
138
+ // 池子还不存在:Router 添加时会创建
139
+ const [token0, token1] = BigInt(a) < BigInt(b) ? [a, b] : [b, a];
140
+ state = { protocol, router, pair: null, token0, token1, reserve0: 0n, reserve1: 0n, totalSupply: 0n, balance: 0n };
141
+ }
142
+ else {
143
+ state = await readPair(ctx, pair, protocol);
144
+ }
145
+ aIs0 = a === state.token0;
146
+ }
147
+ const { router, token0, token1, reserve0, reserve1, totalSupply } = state;
148
+ // 代币信息和(往已有仓位用主币追加时)包装币地址互不依赖,一起读
149
+ const [tokens, wrapped] = await Promise.all([tokenInfo(ctx, [token0, token1]), native && !weth ? wethOf(ctx, router) : Promise.resolve(weth)]);
150
+ const [t0, t1] = tokens;
151
+ weth = wrapped;
152
+ let given0;
153
+ let given1;
154
+ if (aIs0 === null) {
155
+ const p = params;
156
+ given0 = parseAmount(p.amount0, p.amount0Formatted, t0, 'amount0');
157
+ given1 = parseAmount(p.amount1, p.amount1Formatted, t1, 'amount1');
158
+ }
159
+ else {
160
+ const p = params;
161
+ const amountA = parseAmount(p.amountA, p.amountAFormatted, aIs0 ? t0 : t1, 'amountA');
162
+ const amountB = parseAmount(p.amountB, p.amountBFormatted, aIs0 ? t1 : t0, 'amountB');
163
+ [given0, given1] = aIs0 ? [amountA, amountB] : [amountB, amountA];
164
+ }
165
+ if (given0 === undefined && given1 === undefined) {
166
+ throw new Error('Pass the amount of at least one token');
167
+ }
168
+ // 主币:其中一边必须是包装币
169
+ if (native) {
170
+ weth ??= await wethOf(ctx, router);
171
+ if (weth !== token0 && weth !== token1) {
172
+ throw new Error('native: true needs one side of the pool to be the wrapped native token');
173
+ }
174
+ }
175
+ // 传给 Router 的数量(desired):给了的按给的,另一边按储备比例
176
+ let desired0;
177
+ let desired1;
178
+ const empty = reserve0 === 0n && reserve1 === 0n;
179
+ if (!empty && (reserve0 === 0n || reserve1 === 0n)) {
180
+ throw new Error(`Pool ${out(ctx, state.pair)} has one empty reserve; liquidity cannot be added at a meaningful price`);
181
+ }
182
+ if (empty) {
183
+ if (!given0 || !given1) {
184
+ throw new Error('The pool is empty: pass the amounts of both tokens (they set the initial price)');
185
+ }
186
+ ;
187
+ [desired0, desired1] = [given0, given1];
188
+ }
189
+ else {
190
+ desired0 = given0 ?? quote(given1, reserve1, reserve0);
191
+ desired1 = given1 ?? quote(given0, reserve0, reserve1);
192
+ }
193
+ // 实际用掉的数量:与 Router 的 _addLiquidity 一致(A 是 addLiquidity 的第一个代币;addLiquidityETH 的 A 是非包装币那一边)。
194
+ // 先按 A 算 B 的最优数量,超出 B 的 desired 时反过来按 B 算 A
195
+ let amount0 = desired0;
196
+ let amount1 = desired1;
197
+ if (!empty) {
198
+ const aIsToken0 = weth !== token0;
199
+ const [dA, dB, rA, rB] = aIsToken0 ? [desired0, desired1, reserve0, reserve1] : [desired1, desired0, reserve1, reserve0];
200
+ const optimalB = quote(dA, rA, rB);
201
+ const [amountA, amountB] = optimalB <= dB ? [dA, optimalB] : [quote(dB, rB, rA), dB];
202
+ [amount0, amount1] = aIsToken0 ? [amountA, amountB] : [amountB, amountA];
203
+ }
204
+ if (amount0 === 0n || amount1 === 0n) {
205
+ throw new Error('Amount too small: one side rounds to 0');
206
+ }
207
+ const liquidity = totalSupply === 0n ? sqrtBigInt(amount0 * amount1) - MINIMUM_LIQUIDITY : minBig((amount0 * totalSupply) / reserve0, (amount1 * totalSupply) / reserve1);
208
+ if (liquidity <= 0n) {
209
+ throw new Error('Amount too small: no LP tokens would be minted');
210
+ }
211
+ // 最小值按实际会用掉的数量算(两边都给、比例与池子不同时,Router 会按较少的一边收取,那一边的最小值不能按给的数量算)
212
+ const min0 = empty ? desired0 : minus(amount0, ctx.slippage);
213
+ const min1 = empty ? desired1 : minus(amount1, ctx.slippage);
214
+ let main;
215
+ let value = 0n;
216
+ if (weth) {
217
+ const tokenIs0 = weth === token1;
218
+ const token = tokenIs0 ? token0 : token1;
219
+ // 附带的主币按 desired 给,没用完的 Router 会退回
220
+ value = tokenIs0 ? desired1 : desired0;
221
+ main = {
222
+ kind: 'add',
223
+ to: out(ctx, router),
224
+ data: routerInterface.encodeFunctionData('addLiquidityETH', [
225
+ token,
226
+ tokenIs0 ? desired0 : desired1,
227
+ tokenIs0 ? min0 : min1,
228
+ tokenIs0 ? min1 : min0,
229
+ ctx.recipient,
230
+ ctx.deadline,
231
+ ]),
232
+ value: value.toString(),
233
+ };
234
+ }
235
+ else {
236
+ main = {
237
+ kind: 'add',
238
+ to: out(ctx, router),
239
+ data: routerInterface.encodeFunctionData('addLiquidity', [token0, token1, desired0, desired1, min0, min1, ctx.recipient, ctx.deadline]),
240
+ value: '0',
241
+ };
242
+ }
243
+ const approve = await approvals(ctx, [
244
+ { token: token0, spender: router, amount: desired0 },
245
+ { token: token1, spender: router, amount: desired1 },
246
+ ].filter((i) => i.token !== weth));
247
+ return makePlan(ctx, {
248
+ action: 'add',
249
+ version: 'v2',
250
+ protocol: state.protocol.id,
251
+ protocolName: state.protocol.name,
252
+ pool: state.pair,
253
+ createPool: state.pair === null,
254
+ token0: t0,
255
+ token1: t1,
256
+ tokenId: null,
257
+ tickLower: null,
258
+ tickUpper: null,
259
+ tick: null,
260
+ price: null,
261
+ priceLower: null,
262
+ priceUpper: null,
263
+ liquidity: liquidity.toString(),
264
+ amount0: amount0.toString(),
265
+ amount1: amount1.toString(),
266
+ amount0Max: desired0.toString(),
267
+ amount1Max: desired1.toString(),
268
+ amount0Min: null,
269
+ amount1Min: null,
270
+ fees0: '0',
271
+ fees1: '0',
272
+ native: weth === null ? null : weth === token0 ? 'token0' : 'token1',
273
+ value: value.toString(),
274
+ transactions: [...approve, main],
275
+ });
276
+ }
277
+ export async function v2Remove(ctx, params) {
278
+ const ref = params.position;
279
+ if (!ref.pool) {
280
+ throw new Error('V2 position needs pool');
281
+ }
282
+ const state = await readPair(ctx, evm(ref.pool), refProtocol(ctx, ref));
283
+ const { router, token0, token1, reserve0, reserve1, totalSupply, balance } = state;
284
+ if (balance === 0n) {
285
+ throw new Error(`${out(ctx, ctx.owner)} holds no LP tokens of ${out(ctx, state.pair)}`);
286
+ }
287
+ const liquidity = removeAmount(balance, params.percent, params.liquidity);
288
+ const [t0, t1] = (await tokenInfo(ctx, [token0, token1]));
289
+ // 按份额取出(与 pair.burn 一致;总量已含先给 feeTo 增发的协议手续费)
290
+ const amount0 = (liquidity * reserve0) / totalSupply;
291
+ const amount1 = (liquidity * reserve1) / totalSupply;
292
+ const min0 = minus(amount0, ctx.slippage);
293
+ const min1 = minus(amount1, ctx.slippage);
294
+ let weth = null;
295
+ if (ctx.options.native) {
296
+ weth = await wethOf(ctx, router);
297
+ if (weth !== token0 && weth !== token1) {
298
+ throw new Error('native: true needs one side of the pool to be the wrapped native token');
299
+ }
300
+ }
301
+ const tokenIs0 = weth === token1;
302
+ const main = {
303
+ kind: 'remove',
304
+ to: out(ctx, router),
305
+ data: weth
306
+ ? routerInterface.encodeFunctionData('removeLiquidityETH', [tokenIs0 ? token0 : token1, liquidity, tokenIs0 ? min0 : min1, tokenIs0 ? min1 : min0, ctx.recipient, ctx.deadline])
307
+ : routerInterface.encodeFunctionData('removeLiquidity', [token0, token1, liquidity, min0, min1, ctx.recipient, ctx.deadline]),
308
+ value: '0',
309
+ };
310
+ const approve = await approvals(ctx, [{ token: state.pair, spender: router, amount: liquidity }]);
311
+ return makePlan(ctx, {
312
+ action: 'remove',
313
+ version: 'v2',
314
+ protocol: state.protocol.id,
315
+ protocolName: state.protocol.name,
316
+ pool: state.pair,
317
+ createPool: false,
318
+ token0: t0,
319
+ token1: t1,
320
+ tokenId: null,
321
+ tickLower: null,
322
+ tickUpper: null,
323
+ tick: null,
324
+ price: null,
325
+ priceLower: null,
326
+ priceUpper: null,
327
+ liquidity: liquidity.toString(),
328
+ amount0: amount0.toString(),
329
+ amount1: amount1.toString(),
330
+ amount0Max: null,
331
+ amount1Max: null,
332
+ amount0Min: min0.toString(),
333
+ amount1Min: min1.toString(),
334
+ fees0: '0',
335
+ fees1: '0',
336
+ native: weth === null ? null : weth === token0 ? 'token0' : 'token1',
337
+ value: '0',
338
+ transactions: [...approve, main],
339
+ });
340
+ }
341
+ const minBig = (a, b) => (a < b ? a : b);
342
+ //# sourceMappingURL=v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2.js","sourceRoot":"","sources":["../../src/liquidity/v2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type Ctx } from './common.js';
2
+ import type { IncreaseLiquidityParams, LiquidityPlan, NewPositionParams, RemoveLiquidityParams } from './types.js';
3
+ export declare function v3Add(ctx: Ctx, params: IncreaseLiquidityParams | NewPositionParams): Promise<LiquidityPlan>;
4
+ /** 移除(liquidity > 0)/ 只领取手续费(collectOnly) */
5
+ export declare function v3Remove(ctx: Ctx, params: RemoveLiquidityParams, collectOnly?: boolean): Promise<LiquidityPlan>;
6
+ //# sourceMappingURL=v3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3.d.ts","sourceRoot":"","sources":["../../src/liquidity/v3.ts"],"names":[],"mappings":"AAKA,OAAO,EAcL,KAAK,GAAG,EACT,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,uBAAuB,EAAE,aAAa,EAAe,iBAAiB,EAAe,qBAAqB,EAAE,MAAM,YAAY,CAAA;AA+J5I,wBAAsB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAsIjH;AAED,6CAA6C;AAC7C,wBAAsB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,qBAAqB,EAAE,WAAW,UAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAgEnH"}