@w3lib/evm-batch-call 0.7.0 → 0.8.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.
- package/CHANGELOG.md +30 -0
- package/README.md +206 -1
- package/dist/dividends.d.ts +135 -0
- package/dist/dividends.d.ts.map +1 -0
- package/dist/dividends.js +253 -0
- package/dist/dividends.js.map +1 -0
- package/dist/history.d.ts +154 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +247 -0
- package/dist/history.js.map +1 -0
- package/dist/historySources.d.ts +32 -0
- package/dist/historySources.d.ts.map +1 -0
- package/dist/historySources.js +319 -0
- package/dist/historySources.js.map +1 -0
- package/dist/liquidity/v3.d.ts +2 -0
- package/dist/liquidity/v3.d.ts.map +1 -1
- package/dist/liquidity/v3.js +1 -1
- package/dist/liquidity/v3.js.map +1 -1
- package/dist/liquidity/v4.d.ts +21 -0
- package/dist/liquidity/v4.d.ts.map +1 -1
- package/dist/liquidity/v4.js +4 -3
- package/dist/liquidity/v4.js.map +1 -1
- package/dist/lp.d.ts +8 -0
- package/dist/lp.d.ts.map +1 -1
- package/dist/lp.js +17 -1
- package/dist/lp.js.map +1 -1
- package/dist/lpV4.d.ts +4 -0
- package/dist/lpV4.d.ts.map +1 -1
- package/dist/lpV4.js +27 -3
- package/dist/lpV4.js.map +1 -1
- package/dist/permit.d.ts +137 -0
- package/dist/permit.d.ts.map +1 -0
- package/dist/permit.js +355 -0
- package/dist/permit.js.map +1 -0
- package/dist/portfolio.d.ts +2 -0
- package/dist/portfolio.d.ts.map +1 -1
- package/dist/portfolio.js +9 -4
- package/dist/portfolio.js.map +1 -1
- package/dist/rewards/farms.d.ts +26 -0
- package/dist/rewards/farms.d.ts.map +1 -0
- package/dist/rewards/farms.js +210 -0
- package/dist/rewards/farms.js.map +1 -0
- package/dist/rewards/index.d.ts +42 -0
- package/dist/rewards/index.d.ts.map +1 -0
- package/dist/rewards/index.js +382 -0
- package/dist/rewards/index.js.map +1 -0
- package/dist/rewards/types.d.ts +170 -0
- package/dist/rewards/types.d.ts.map +1 -0
- package/dist/rewards/types.js +2 -0
- package/dist/rewards/types.js.map +1 -0
- package/dist/simulate.d.ts +186 -0
- package/dist/simulate.d.ts.map +1 -0
- package/dist/simulate.js +559 -0
- package/dist/simulate.js.map +1 -0
- package/dist/simulateDecode.d.ts +33 -0
- package/dist/simulateDecode.d.ts.map +1 -0
- package/dist/simulateDecode.js +321 -0
- package/dist/simulateDecode.js.map +1 -0
- package/dist/smartAccount/account.d.ts +31 -0
- package/dist/smartAccount/account.d.ts.map +1 -0
- package/dist/smartAccount/account.js +33 -0
- package/dist/smartAccount/account.js.map +1 -0
- package/dist/smartAccount/clients.d.ts +77 -0
- package/dist/smartAccount/clients.d.ts.map +1 -0
- package/dist/smartAccount/clients.js +122 -0
- package/dist/smartAccount/clients.js.map +1 -0
- package/dist/smartAccount/eip5792.d.ts +77 -0
- package/dist/smartAccount/eip5792.d.ts.map +1 -0
- package/dist/smartAccount/eip5792.js +152 -0
- package/dist/smartAccount/eip5792.js.map +1 -0
- package/dist/smartAccount/send.d.ts +40 -0
- package/dist/smartAccount/send.d.ts.map +1 -0
- package/dist/smartAccount/send.js +271 -0
- package/dist/smartAccount/send.js.map +1 -0
- package/dist/smartAccount/userOp.d.ts +91 -0
- package/dist/smartAccount/userOp.d.ts.map +1 -0
- package/dist/smartAccount/userOp.js +124 -0
- package/dist/smartAccount/userOp.js.map +1 -0
- package/dist/subpaths/dividends.d.ts +28 -0
- package/dist/subpaths/dividends.d.ts.map +1 -0
- package/dist/subpaths/dividends.js +29 -0
- package/dist/subpaths/dividends.js.map +1 -0
- package/dist/subpaths/history.d.ts +22 -0
- package/dist/subpaths/history.d.ts.map +1 -0
- package/dist/subpaths/history.js +23 -0
- package/dist/subpaths/history.js.map +1 -0
- package/dist/subpaths/permit.d.ts +14 -0
- package/dist/subpaths/permit.d.ts.map +1 -0
- package/dist/subpaths/permit.js +14 -0
- package/dist/subpaths/permit.js.map +1 -0
- package/dist/subpaths/price.js +2 -2
- package/dist/subpaths/price.js.map +1 -1
- package/dist/subpaths/rewards.d.ts +27 -0
- package/dist/subpaths/rewards.d.ts.map +1 -0
- package/dist/subpaths/rewards.js +25 -0
- package/dist/subpaths/rewards.js.map +1 -0
- package/dist/subpaths/simulate.d.ts +25 -0
- package/dist/subpaths/simulate.d.ts.map +1 -0
- package/dist/subpaths/simulate.js +28 -0
- package/dist/subpaths/simulate.js.map +1 -0
- package/dist/subpaths/smart-account.d.ts +24 -0
- package/dist/subpaths/smart-account.d.ts.map +1 -0
- package/dist/subpaths/smart-account.js +24 -0
- package/dist/subpaths/smart-account.js.map +1 -0
- package/dist/swap.d.ts +45 -5
- package/dist/swap.d.ts.map +1 -1
- package/dist/swap.js +108 -12
- package/dist/swap.js.map +1 -1
- package/dist/write/batch.d.ts +34 -2
- package/dist/write/batch.d.ts.map +1 -1
- package/dist/write/batch.js +22 -3
- package/dist/write/batch.js.map +1 -1
- package/dist/write/collect.d.ts +9 -0
- package/dist/write/collect.d.ts.map +1 -1
- package/dist/write/collect.js +41 -1
- package/dist/write/collect.js.map +1 -1
- package/dist/write/send.d.ts +4 -0
- package/dist/write/send.d.ts.map +1 -1
- package/dist/write/send.js.map +1 -1
- package/dist/write/signer.d.ts +5 -1
- package/dist/write/signer.d.ts.map +1 -1
- package/dist/write/signer.js.map +1 -1
- package/dist/write/transfer.d.ts +5 -3
- package/dist/write/transfer.d.ts.map +1 -1
- package/dist/write/transfer.js +12 -6
- package/dist/write/transfer.js.map +1 -1
- package/package.json +35 -1
- package/src/dividends.ts +360 -0
- package/src/history.ts +367 -0
- package/src/historySources.ts +360 -0
- package/src/liquidity/v3.ts +1 -1
- package/src/liquidity/v4.ts +4 -3
- package/src/lp.ts +18 -1
- package/src/lpV4.ts +32 -2
- package/src/permit.ts +457 -0
- package/src/portfolio.ts +11 -4
- package/src/rewards/farms.ts +229 -0
- package/src/rewards/index.ts +431 -0
- package/src/rewards/types.ts +179 -0
- package/src/simulate.ts +727 -0
- package/src/simulateDecode.ts +352 -0
- package/src/smartAccount/account.ts +63 -0
- package/src/smartAccount/clients.ts +180 -0
- package/src/smartAccount/eip5792.ts +187 -0
- package/src/smartAccount/send.ts +341 -0
- package/src/smartAccount/userOp.ts +180 -0
- package/src/subpaths/dividends.ts +47 -0
- package/src/subpaths/history.ts +41 -0
- package/src/subpaths/permit.ts +39 -0
- package/src/subpaths/price.ts +2 -2
- package/src/subpaths/rewards.ts +46 -0
- package/src/subpaths/simulate.ts +51 -0
- package/src/subpaths/smart-account.ts +40 -0
- package/src/swap.ts +139 -18
- package/src/write/batch.ts +44 -5
- package/src/write/collect.ts +60 -1
- package/src/write/send.ts +4 -0
- package/src/write/signer.ts +5 -1
- package/src/write/transfer.ts +17 -10
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import { MAX_UINT128, createCtx, evm, fmt, out } from '../liquidity/common.js';
|
|
2
|
+
import { npmInterface } from '../liquidity/v3.js';
|
|
3
|
+
import { Actions, Planner, pmInterface } from '../liquidity/v4.js';
|
|
4
|
+
import { LP_PROTOCOLS, lpPositions } from '../lp.js';
|
|
5
|
+
import { tokenPrices } from '../price.js';
|
|
6
|
+
import { withSignal } from '../util.js';
|
|
7
|
+
import { batchCall, tronModule } from '../write/batch.js';
|
|
8
|
+
import { resolveSigner } from '../write/signer.js';
|
|
9
|
+
import { mapPool } from '../write/send.js';
|
|
10
|
+
import { FARM_PROTOCOLS, gaugeInterface, masterChefInterface, readGauges, readMasterChef } from './farms.js';
|
|
11
|
+
export { FARM_PROTOCOLS } from './farms.js';
|
|
12
|
+
const lower = (s) => s.toLowerCase();
|
|
13
|
+
/** 同一个代币的数量合并 */
|
|
14
|
+
function sumAmounts(items) {
|
|
15
|
+
const sum = new Map();
|
|
16
|
+
for (const { amounts } of items) {
|
|
17
|
+
for (const a of amounts) {
|
|
18
|
+
const key = lower(a.token.address);
|
|
19
|
+
const entry = sum.get(key) ?? { amount: a, raw: 0n, usd: undefined };
|
|
20
|
+
entry.raw += BigInt(a.amount);
|
|
21
|
+
if (a.usd !== undefined) {
|
|
22
|
+
entry.usd = a.usd === null ? (entry.usd ?? null) : (entry.usd ?? 0) + a.usd;
|
|
23
|
+
}
|
|
24
|
+
sum.set(key, entry);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return [...sum.values()]
|
|
28
|
+
.filter((e) => e.raw > 0n)
|
|
29
|
+
.map(({ amount, raw, usd }) => ({ token: amount.token, amount: raw.toString(), formatted: fmt(raw, amount.token), ...(usd === undefined ? {} : { usd }) }));
|
|
30
|
+
}
|
|
31
|
+
const usdOf = (amounts) => {
|
|
32
|
+
if (amounts.every((a) => a.usd === undefined)) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
const known = amounts.filter((a) => a.usd != null && BigInt(a.amount) > 0n);
|
|
36
|
+
return known.length ? known.reduce((s, a) => s + a.usd, 0) : null;
|
|
37
|
+
};
|
|
38
|
+
/** 给每一项的数量加美元价值(价格源出错时全部为 null) */
|
|
39
|
+
async function applyPrices(provider, items, options) {
|
|
40
|
+
const tokens = [...new Set(items.flatMap((i) => i.amounts).filter((a) => BigInt(a.amount) > 0n).map((a) => a.token.address))];
|
|
41
|
+
if (!tokens.length) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
let prices = tokens.map(() => null);
|
|
45
|
+
try {
|
|
46
|
+
const found = await tokenPrices(provider, tokens, {
|
|
47
|
+
...(options.prices === true ? {} : { sources: options.prices }),
|
|
48
|
+
...(options.fetch ? { fetch: options.fetch } : {}),
|
|
49
|
+
});
|
|
50
|
+
prices = found.map((p) => p.price);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
try {
|
|
54
|
+
options.onPriceError?.(err);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// 回调出错不影响查询结果
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const priceOf = new Map(tokens.map((t, i) => [lower(t), prices[i]]));
|
|
61
|
+
for (const item of items) {
|
|
62
|
+
for (const a of item.amounts) {
|
|
63
|
+
const price = priceOf.get(lower(a.token.address)) ?? null;
|
|
64
|
+
a.usd = a.formatted !== null && price !== null ? Number(a.formatted) * price : BigInt(a.amount) === 0n ? 0 : null;
|
|
65
|
+
}
|
|
66
|
+
item.usd = usdOf(item.amounts) ?? null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** 选出要查的 LP 协议 / 挖矿合约 */
|
|
70
|
+
function selectProtocols(chainId, options) {
|
|
71
|
+
const farmTable = [...(options.farms ?? []), ...FARM_PROTOCOLS].filter((f) => f.chainId === chainId);
|
|
72
|
+
const custom = (options.protocols ?? []).filter((p) => typeof p !== 'string' && p.chainId === chainId);
|
|
73
|
+
const lpAll = [...custom, ...LP_PROTOCOLS.filter((p) => p.chainId === chainId)];
|
|
74
|
+
if (!options.protocols) {
|
|
75
|
+
return { lp: undefined, farms: farmTable, lpAll };
|
|
76
|
+
}
|
|
77
|
+
const lp = [];
|
|
78
|
+
const farms = [];
|
|
79
|
+
for (const p of options.protocols) {
|
|
80
|
+
if (typeof p !== 'string') {
|
|
81
|
+
if (p.chainId === chainId && p.version !== 'v2')
|
|
82
|
+
lp.push(p);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const inLp = lpAll.filter((x) => x.id === p);
|
|
86
|
+
const inFarm = farmTable.filter((f) => f.id === p);
|
|
87
|
+
if (!inLp.length && !inFarm.length) {
|
|
88
|
+
throw new Error(`Unknown protocol ${p} on chain ${chainId}; pass an LpProtocol / FarmProtocol object for protocols that are not built in`);
|
|
89
|
+
}
|
|
90
|
+
// V2 的手续费计入 LP 份额,没有单独领取的
|
|
91
|
+
if (inLp.some((x) => x.version !== 'v2'))
|
|
92
|
+
lp.push(p);
|
|
93
|
+
farms.push(...inFarm);
|
|
94
|
+
}
|
|
95
|
+
return { lp, farms, lpAll };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 查一个地址能领取的全部内容(只读):V3 / V4 仓位未领取的手续费、质押在 MasterChef / gauge 里的仓位的挖矿奖励,
|
|
99
|
+
* 数量按精度换算,可选美元价值。每个来源单独读取,某个来源出错只记进 `errors`
|
|
100
|
+
*
|
|
101
|
+
* ```ts
|
|
102
|
+
* const c = await claimable(multi, user, { prices: true })
|
|
103
|
+
* c.items // [{ kind: 'fees', protocol: 'uniswap-v3', tokenId: '123', amounts: [{ token: USDC, formatted: '12.3', usd: 12.3 }, …], usd: 20.1 }, { kind: 'farm', amounts: [CAKE …] }, …]
|
|
104
|
+
* c.totals // 按代币汇总
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export function claimable(provider, owner, options = {}) {
|
|
108
|
+
return withSignal(options.signal, () => queryClaimable(provider, owner, options));
|
|
109
|
+
}
|
|
110
|
+
async function queryClaimable(provider, owner, options) {
|
|
111
|
+
const ctx = await createCtx(provider, owner, {});
|
|
112
|
+
const { chainId } = ctx;
|
|
113
|
+
const wantFees = options.fees ?? true;
|
|
114
|
+
const wantRewards = options.rewards ?? true;
|
|
115
|
+
const maxPositions = Math.max(1, Math.floor(options.maxPositions ?? 500));
|
|
116
|
+
const overrides = {
|
|
117
|
+
...(options.blockTag !== undefined ? { blockTag: options.blockTag } : {}),
|
|
118
|
+
...(options.minBlock !== undefined ? { minBlock: options.minBlock } : {}),
|
|
119
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
120
|
+
};
|
|
121
|
+
const { lp, farms, lpAll } = selectProtocols(chainId, options);
|
|
122
|
+
const errors = [];
|
|
123
|
+
const items = [];
|
|
124
|
+
const task = async (source, run) => {
|
|
125
|
+
try {
|
|
126
|
+
items.push(...(await run()));
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
errors.push({ source, error: err instanceof Error ? err.message : String(err) });
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
const source = { ctx, owner: ctx.owner, overrides, maxPositions, lpProtocols: lpAll };
|
|
133
|
+
await Promise.all([
|
|
134
|
+
wantFees && (lp === undefined || lp.length)
|
|
135
|
+
? task('positions', async () => {
|
|
136
|
+
const positions = await lpPositions(provider, owner, { ...overrides, ...(lp ? { protocols: lp } : {}), versions: ['v3', 'v4'], v4: options.v4, maxPositions });
|
|
137
|
+
return positions
|
|
138
|
+
.filter((p) => BigInt(p.fees0) + BigInt(p.fees1) > 0n)
|
|
139
|
+
.map((p) => ({
|
|
140
|
+
id: `fees:${p.protocol}:${p.tokenId}`,
|
|
141
|
+
kind: 'fees',
|
|
142
|
+
protocol: p.protocol,
|
|
143
|
+
protocolName: p.protocolName,
|
|
144
|
+
version: p.version,
|
|
145
|
+
tokenId: p.tokenId,
|
|
146
|
+
pool: p.pool,
|
|
147
|
+
staked: false,
|
|
148
|
+
target: p.positionManager,
|
|
149
|
+
amounts: [
|
|
150
|
+
{ token: p.token0, amount: p.fees0, formatted: p.fees0Formatted },
|
|
151
|
+
{ token: p.token1, amount: p.fees1, formatted: p.fees1Formatted },
|
|
152
|
+
],
|
|
153
|
+
}));
|
|
154
|
+
})
|
|
155
|
+
: null,
|
|
156
|
+
...farms.map((farm) => farm.kind === 'masterchef-v3'
|
|
157
|
+
? wantFees || wantRewards
|
|
158
|
+
? task(farm.id, () => readMasterChef(source, farm, wantFees, wantRewards))
|
|
159
|
+
: null
|
|
160
|
+
: wantRewards
|
|
161
|
+
? task(farm.id, () => readGauges(source, farm, options.gauges))
|
|
162
|
+
: null),
|
|
163
|
+
]);
|
|
164
|
+
if (options.prices) {
|
|
165
|
+
await applyPrices(provider, items, options);
|
|
166
|
+
}
|
|
167
|
+
if (options.prices) {
|
|
168
|
+
items.sort((a, b) => (b.usd ?? -1) - (a.usd ?? -1));
|
|
169
|
+
}
|
|
170
|
+
const totals = sumAmounts(items);
|
|
171
|
+
const usd = usdOf(totals);
|
|
172
|
+
return { chainId, owner: out(ctx, ctx.owner), items, totals, ...(usd === undefined ? {} : { usd }), errors };
|
|
173
|
+
}
|
|
174
|
+
function groupOf(items) {
|
|
175
|
+
const groups = new Map();
|
|
176
|
+
for (const item of items) {
|
|
177
|
+
const [type, kind, key] = item.kind === 'gauge'
|
|
178
|
+
? ['gauge', 'gauge', item.id]
|
|
179
|
+
: item.staked
|
|
180
|
+
? ['masterchef', 'farm', item.target]
|
|
181
|
+
: item.version === 'v4'
|
|
182
|
+
? ['v4', 'fees', item.target]
|
|
183
|
+
: ['v3', 'fees', item.target];
|
|
184
|
+
const k = `${type}:${key}`;
|
|
185
|
+
const group = groups.get(k) ?? { kind, type, target: item.target, items: [] };
|
|
186
|
+
group.items.push(item);
|
|
187
|
+
groups.set(k, group);
|
|
188
|
+
}
|
|
189
|
+
return [...groups.values()];
|
|
190
|
+
}
|
|
191
|
+
const wrap = (iface, calls) => (calls.length === 1 ? calls[0] : iface.encodeFunctionData('multicall', [calls]));
|
|
192
|
+
/** 一组(同一个合约)里的若干项 → 一笔交易的 calldata */
|
|
193
|
+
function encodeGroup(ctx, type, items) {
|
|
194
|
+
const recipient = ctx.recipient;
|
|
195
|
+
if (type === 'v3') {
|
|
196
|
+
return wrap(npmInterface, items.map((i) => npmInterface.encodeFunctionData('collect', [{ tokenId: i.tokenId, recipient, amount0Max: MAX_UINT128, amount1Max: MAX_UINT128 }])));
|
|
197
|
+
}
|
|
198
|
+
if (type === 'masterchef') {
|
|
199
|
+
return wrap(masterChefInterface, items.map((i) => i.kind === 'farm'
|
|
200
|
+
? masterChefInterface.encodeFunctionData('harvest', [i.tokenId, recipient])
|
|
201
|
+
: masterChefInterface.encodeFunctionData('collectTo', [{ tokenId: i.tokenId, recipient, amount0Max: MAX_UINT128, amount1Max: MAX_UINT128 }, recipient])));
|
|
202
|
+
}
|
|
203
|
+
if (type === 'gauge') {
|
|
204
|
+
return gaugeInterface.encodeFunctionData('getReward', [items[0].tokenId]);
|
|
205
|
+
}
|
|
206
|
+
// V4:每个仓位 DECREASE_LIQUIDITY(0) 结算手续费,再把涉及的每个币整个取出(TAKE 的数量 0 = 全部)
|
|
207
|
+
const planner = new Planner();
|
|
208
|
+
const hookData = ctx.options.hookData ?? '0x';
|
|
209
|
+
for (const i of items) {
|
|
210
|
+
planner.add(Actions.DECREASE_LIQUIDITY, ['uint256', 'uint256', 'uint128', 'uint128', 'bytes'], [i.tokenId, 0n, 0n, 0n, hookData]);
|
|
211
|
+
}
|
|
212
|
+
const currencies = new Set(items.flatMap((i) => i.amounts.map((a) => evm(a.token.address))));
|
|
213
|
+
for (const currency of currencies) {
|
|
214
|
+
planner.add(Actions.TAKE, ['address', 'address', 'uint256'], [currency, recipient, 0n]);
|
|
215
|
+
}
|
|
216
|
+
return pmInterface.encodeFunctionData('modifyLiquidities', [planner.encode(), ctx.deadline]);
|
|
217
|
+
}
|
|
218
|
+
function buildTxs(ctx, items, batchSize) {
|
|
219
|
+
return groupOf(items).flatMap((group) => {
|
|
220
|
+
// gauge 的 getReward 一次只能领一个仓位
|
|
221
|
+
const size = group.type === 'gauge' ? 1 : batchSize;
|
|
222
|
+
const txs = [];
|
|
223
|
+
for (let i = 0; i < group.items.length; i += size) {
|
|
224
|
+
const part = group.items.slice(i, i + size);
|
|
225
|
+
txs.push({ kind: group.kind, to: out(ctx, group.target), data: encodeGroup(ctx, group.type, part), value: '0', itemIds: part.map((x) => x.id) });
|
|
226
|
+
}
|
|
227
|
+
return txs;
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* 领取计划(不签名、不发送):把要领取的项合并成尽量少的交易——同一个仓位合约的 V3 仓位用它的 `multicall`、
|
|
232
|
+
* V4 仓位合并成一次 `modifyLiquidities`、MasterChef 的挖矿奖励和质押仓位手续费用它的 `multicall`、每个 gauge 的仓位各一笔。
|
|
233
|
+
* 交易之间互不依赖,可以交给 `batchCall` 的 '7702' / '4337' / '5792' 模式合成一笔原子交易,或者逐笔发送。
|
|
234
|
+
*
|
|
235
|
+
* 默认先模拟(/simulate):某一笔失败时逐项再试,会失败的项放进 `skipped`,不拖累其他仓位。
|
|
236
|
+
*
|
|
237
|
+
* ```ts
|
|
238
|
+
* const plan = await buildClaimAll(multi, user, { prices: true, minUsd: 1 })
|
|
239
|
+
* plan.transactions // [{ kind: 'fees', to: npm, data, itemIds: [...] }, { kind: 'farm', … }]
|
|
240
|
+
* plan.skipped // [{ item, reason: 'below minUsd' }]
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
243
|
+
export async function buildClaimAll(provider, owner, options = {}) {
|
|
244
|
+
const ctx = await createCtx(provider, owner, { recipient: options.recipient, hookData: options.hookData });
|
|
245
|
+
const batchSize = Math.floor(options.batchSize ?? 20);
|
|
246
|
+
if (!(batchSize >= 1)) {
|
|
247
|
+
throw new RangeError(`batchSize must be at least 1: ${options.batchSize}`);
|
|
248
|
+
}
|
|
249
|
+
if (options.minUsd !== undefined && !(options.minUsd >= 0)) {
|
|
250
|
+
throw new RangeError(`minUsd must not be negative: ${options.minUsd}`);
|
|
251
|
+
}
|
|
252
|
+
const found = options.items ? undefined : await claimable(provider, owner, options);
|
|
253
|
+
const candidates = options.items ? [...options.items] : found.items;
|
|
254
|
+
const skipped = [];
|
|
255
|
+
const seen = new Set();
|
|
256
|
+
let included = candidates.filter((item) => {
|
|
257
|
+
const skip = (reason) => {
|
|
258
|
+
skipped.push({ item, reason });
|
|
259
|
+
return false;
|
|
260
|
+
};
|
|
261
|
+
if (seen.has(item.id))
|
|
262
|
+
return false;
|
|
263
|
+
seen.add(item.id);
|
|
264
|
+
if (item.amounts.every((a) => BigInt(a.amount) === 0n))
|
|
265
|
+
return skip('nothing to claim');
|
|
266
|
+
// 有一个要领的币没有价格就当价值未知(usd 只是已知部分的合计),不跳过
|
|
267
|
+
const unknownValue = item.amounts.some((a) => BigInt(a.amount) > 0n && a.usd === null);
|
|
268
|
+
if (options.minUsd !== undefined && item.usd != null && !unknownValue && item.usd < options.minUsd)
|
|
269
|
+
return skip(`below minUsd (${item.usd})`);
|
|
270
|
+
if (item.kind === 'gauge' && ctx.recipient !== ctx.owner)
|
|
271
|
+
return skip('gauge rewards are always paid to the owner, recipient is not supported');
|
|
272
|
+
return true;
|
|
273
|
+
});
|
|
274
|
+
let transactions = buildTxs(ctx, included, batchSize);
|
|
275
|
+
if (options.simulate !== false && transactions.length) {
|
|
276
|
+
const checked = await preflight(provider, ctx, included, transactions, skipped, options.signal);
|
|
277
|
+
included = checked.items;
|
|
278
|
+
transactions = checked.transactions;
|
|
279
|
+
}
|
|
280
|
+
const totals = sumAmounts(included);
|
|
281
|
+
const usd = usdOf(totals);
|
|
282
|
+
return { chainId: ctx.chainId, owner: out(ctx, ctx.owner), recipient: out(ctx, ctx.recipient), items: included, skipped, totals, ...(usd === undefined ? {} : { usd }), transactions };
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* 模拟每一笔;失败的逐项再试,去掉会失败的项后重新构建。逐项都通过、只有合并后的那一笔失败时(gas / multicall 的相互影响)
|
|
286
|
+
* 对半拆开再模拟,直到通过或拆成单项。返回的交易模拟都没有失败;模拟本身出错(节点不支持等)时不拦,照常发送;取消(signal)时抛出
|
|
287
|
+
*/
|
|
288
|
+
async function preflight(provider, ctx, items, transactions, skipped, signal) {
|
|
289
|
+
const { simulate } = await import('../simulate.js');
|
|
290
|
+
const run = async (tx) => {
|
|
291
|
+
signal?.throwIfAborted();
|
|
292
|
+
try {
|
|
293
|
+
tx.simulation = await simulate(provider, { from: ctx.owner, to: tx.to, data: tx.data, value: 0n }, { from: ctx.owner, fee: false });
|
|
294
|
+
return tx.simulation.success ? null : (tx.simulation.error ?? 'execution reverted');
|
|
295
|
+
}
|
|
296
|
+
catch (err) {
|
|
297
|
+
if (signal?.aborted || (err instanceof Error && err.name === 'AbortError'))
|
|
298
|
+
throw err;
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
const byId = new Map(items.map((i) => [i.id, i]));
|
|
303
|
+
const failed = new Map();
|
|
304
|
+
const settle = async (tx) => {
|
|
305
|
+
const error = await run(tx);
|
|
306
|
+
if (error === null)
|
|
307
|
+
return [tx];
|
|
308
|
+
const list = tx.itemIds.map((id) => byId.get(id));
|
|
309
|
+
if (list.length === 1) {
|
|
310
|
+
failed.set(tx.itemIds[0], error);
|
|
311
|
+
return [];
|
|
312
|
+
}
|
|
313
|
+
// 逐项再试,找出是哪几个仓位失败
|
|
314
|
+
const singles = await mapPool(list, 4, async (item) => {
|
|
315
|
+
const single = buildTxs(ctx, [item], 1)[0];
|
|
316
|
+
return { item, single, error: await run(single) };
|
|
317
|
+
});
|
|
318
|
+
const good = singles.filter((s) => s.error === null);
|
|
319
|
+
for (const s of singles) {
|
|
320
|
+
if (s.error !== null)
|
|
321
|
+
failed.set(s.item.id, s.error);
|
|
322
|
+
}
|
|
323
|
+
if (good.length === singles.length) {
|
|
324
|
+
// 单项都能过、合并的失败:对半拆开
|
|
325
|
+
const half = Math.ceil(list.length / 2);
|
|
326
|
+
const parts = [list.slice(0, half), list.slice(half)].flatMap((part) => buildTxs(ctx, part, part.length));
|
|
327
|
+
return (await Promise.all(parts.map(settle))).flat();
|
|
328
|
+
}
|
|
329
|
+
if (good.length === 1)
|
|
330
|
+
return [good[0].single];
|
|
331
|
+
return (await Promise.all(buildTxs(ctx, good.map((s) => s.item), list.length).map(settle))).flat();
|
|
332
|
+
};
|
|
333
|
+
const settled = [];
|
|
334
|
+
await mapPool(transactions, 4, async (tx, i) => {
|
|
335
|
+
settled[i] = await settle(tx);
|
|
336
|
+
});
|
|
337
|
+
if (!failed.size) {
|
|
338
|
+
return { items, transactions: settled.flat() };
|
|
339
|
+
}
|
|
340
|
+
for (const item of items) {
|
|
341
|
+
if (failed.has(item.id))
|
|
342
|
+
skipped.push({ item, reason: `simulation failed: ${failed.get(item.id)}` });
|
|
343
|
+
}
|
|
344
|
+
return { items: items.filter((i) => !failed.has(i.id)), transactions: settled.flat() };
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* 领取全部手续费和挖矿奖励:构建计划(同 buildClaimAll)后用 from 签名发送,每笔独立,某一笔失败不影响后面的。
|
|
348
|
+
* from 与 /write 的 batchCall 相同;`mode: '7702' | '4337' | '5792'` 时合成一笔原子交易(一个仓位失败整笔回滚,所以先模拟、剔除会失败的项)。
|
|
349
|
+
*
|
|
350
|
+
* ```ts
|
|
351
|
+
* const { status, plan, claimed } = await claimAll(multi, privateKey, { minUsd: 1 })
|
|
352
|
+
* await claimAll(multi, privateKey, { mode: '7702' }) // 一笔交易领完
|
|
353
|
+
* await claimAll(multi, privateKey, { items: picked }) // 只领 getClaimable / claimable 结果里挑出来的
|
|
354
|
+
* ```
|
|
355
|
+
*/
|
|
356
|
+
export async function claimAll(provider, from, options = {}) {
|
|
357
|
+
const tron = await tronModule(provider);
|
|
358
|
+
const owner = tron ? await tron.tronSignerAddress(from) : (await resolveSigner(from)).address;
|
|
359
|
+
const plan = await buildClaimAll(provider, owner, options);
|
|
360
|
+
if (!plan.transactions.length) {
|
|
361
|
+
return { plan, results: [], status: 'skipped', claimed: [], failed: [] };
|
|
362
|
+
}
|
|
363
|
+
const { items: _items, protocols: _protocols, fees: _fees, rewards: _rewards, v4: _v4, farms: _farms, gauges: _gauges, maxPositions: _max, prices: _prices, onPriceError: _onPriceError, fetch: _fetch, recipient: _recipient, hookData: _hookData, minUsd: _minUsd, batchSize: _batchSize, simulate: _simulate, blockTag: _blockTag, from: _from, minBlock: _minBlock, ...send } = options;
|
|
364
|
+
const written = await batchCall(provider, plan.transactions.map((tx) => ({ from, to: tx.to, data: tx.data, value: 0n })), { ...send, continueOnError: options.continueOnError ?? true });
|
|
365
|
+
const results = written.map((r, i) => ({ ...r, kind: plan.transactions[i].kind, itemIds: plan.transactions[i].itemIds }));
|
|
366
|
+
if (options.dryRun) {
|
|
367
|
+
// 只预估:没有领取任何东西。预估通过的项放进 simulated,预估失败的才算 failed
|
|
368
|
+
const ok = new Set(results.filter((r) => r.status === 'simulated').flatMap((r) => r.itemIds));
|
|
369
|
+
const badRun = results.find((r) => r.status !== 'simulated');
|
|
370
|
+
return { plan, results, status: badRun ? badRun.status : 'simulated', claimed: [], failed: plan.items.filter((i) => !ok.has(i.id)), simulated: plan.items.filter((i) => ok.has(i.id)) };
|
|
371
|
+
}
|
|
372
|
+
const confirmed = new Set(results.filter((r) => r.status === 'confirmed').flatMap((r) => r.itemIds));
|
|
373
|
+
const bad = results.find((r) => r.status !== 'confirmed');
|
|
374
|
+
return {
|
|
375
|
+
plan,
|
|
376
|
+
results,
|
|
377
|
+
status: bad ? bad.status : 'confirmed',
|
|
378
|
+
claimed: plan.items.filter((i) => confirmed.has(i.id)),
|
|
379
|
+
failed: plan.items.filter((i) => !confirmed.has(i.id)),
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rewards/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import type { CallOverrides } from '../aggregate.js';
|
|
2
|
+
import type { LpProtocol, LpToken } from '../lp.js';
|
|
3
|
+
import type { LpV4Options } from '../lpV4.js';
|
|
4
|
+
import type { TokenPricesOptions } from '../price.js';
|
|
5
|
+
import type { SimulationResult } from '../simulate.js';
|
|
6
|
+
import type { BatchCallOptions } from '../write/batch.js';
|
|
7
|
+
import type { WriteResult, WriteStatus } from '../write/send.js';
|
|
8
|
+
/** 内置表之外的挖矿合约(自己的 FarmProtocol) */
|
|
9
|
+
export interface FarmProtocol {
|
|
10
|
+
/** 协议 id:与 LP 协议同名时(如 'pancakeswap-v3')选这个协议会同时查它的挖矿奖励 */
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
/**
|
|
14
|
+
* - masterchef-v3:PancakeSwap V3 的 MasterChefV3,仓位 NFT 存在合约里,按 `balanceOf` / `tokenOfOwnerByIndex` 列出用户质押的仓位,
|
|
15
|
+
* `pendingCake` 是待领取的 CAKE,质押中的仓位手续费也由它代为领取
|
|
16
|
+
* - gauge:Aerodrome / Velodrome Slipstream 的 CLGauge(经 Voter 找到每个池子的 gauge),`stakedValues` / `earned` / `getReward`
|
|
17
|
+
*/
|
|
18
|
+
kind: 'masterchef-v3' | 'gauge';
|
|
19
|
+
chainId: number;
|
|
20
|
+
/** 仓位 NFT 合约(质押的仓位属于它) */
|
|
21
|
+
positionManager: string;
|
|
22
|
+
/** masterchef-v3:MasterChefV3 合约 */
|
|
23
|
+
masterChef?: string;
|
|
24
|
+
/** gauge:Voter 合约(pools / gauges) */
|
|
25
|
+
voter?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 领取的内容:
|
|
29
|
+
* - fees:V3 / V4 仓位未领取的手续费(token0 / token1),质押在 MasterChef 里的仓位也有
|
|
30
|
+
* - farm:MasterChef 的挖矿奖励(CAKE)
|
|
31
|
+
* - gauge:Slipstream gauge 的奖励(AERO / VELO)
|
|
32
|
+
*/
|
|
33
|
+
export type ClaimKind = 'fees' | 'farm' | 'gauge';
|
|
34
|
+
export interface ClaimAmount {
|
|
35
|
+
token: LpToken;
|
|
36
|
+
/** 最小单位 */
|
|
37
|
+
amount: string;
|
|
38
|
+
/** 按精度换算;读不到精度时为 null */
|
|
39
|
+
formatted: string | null;
|
|
40
|
+
/** 开启 prices 时:美元价值(没有价格或读不到精度时为 null) */
|
|
41
|
+
usd?: number | null;
|
|
42
|
+
}
|
|
43
|
+
/** 一项可领取的内容:一个仓位的手续费,或一个质押仓位的挖矿奖励 */
|
|
44
|
+
export interface ClaimItem {
|
|
45
|
+
/** `<kind>:<协议 id>:<tokenId>`,在一次查询里唯一 */
|
|
46
|
+
id: string;
|
|
47
|
+
kind: ClaimKind;
|
|
48
|
+
protocol: string;
|
|
49
|
+
protocolName: string;
|
|
50
|
+
/** fees:仓位的版本 */
|
|
51
|
+
version?: 'v3' | 'v4';
|
|
52
|
+
tokenId: string;
|
|
53
|
+
/** 池子地址(V4 为 poolId);gauge 为 null */
|
|
54
|
+
pool: string | null;
|
|
55
|
+
/** 仓位 NFT 质押在挖矿合约里 */
|
|
56
|
+
staked: boolean;
|
|
57
|
+
/** 领取时调用的合约:仓位合约 / MasterChef / gauge */
|
|
58
|
+
target: string;
|
|
59
|
+
/** fees 固定是 [token0, token1](可能有一边为 0);farm / gauge 是奖励代币 */
|
|
60
|
+
amounts: ClaimAmount[];
|
|
61
|
+
/** 开启 prices 时:这一项的美元价值(已知部分的合计;全部未知时为 null) */
|
|
62
|
+
usd?: number | null;
|
|
63
|
+
/** 数量是估计值(MasterChef 的 harvest 预执行失败,退回 pendingCake,实际领到的可能更多) */
|
|
64
|
+
approximate?: boolean;
|
|
65
|
+
}
|
|
66
|
+
export interface Claimable {
|
|
67
|
+
chainId: number;
|
|
68
|
+
owner: string;
|
|
69
|
+
/** 有东西可领的项,开启 prices 时按美元价值从大到小排 */
|
|
70
|
+
items: ClaimItem[];
|
|
71
|
+
/** 按代币汇总 */
|
|
72
|
+
totals: ClaimAmount[];
|
|
73
|
+
usd?: number | null;
|
|
74
|
+
/** 某个来源读取失败(节点出错等)时的说明,其他来源的结果照常返回 */
|
|
75
|
+
errors: Array<{
|
|
76
|
+
source: string;
|
|
77
|
+
error: string;
|
|
78
|
+
}>;
|
|
79
|
+
}
|
|
80
|
+
export interface ClaimableOptions extends CallOverrides {
|
|
81
|
+
/**
|
|
82
|
+
* 查哪些协议:LP 协议 id('uniswap-v3'、'pancakeswap-v3'、'uniswap-v4' …)或自己的 LpProtocol、挖矿协议 id('aerodrome-slipstream' …)。
|
|
83
|
+
* 'pancakeswap-v3' 同时包含它的 MasterChef 挖矿。默认这条链上内置的全部
|
|
84
|
+
*/
|
|
85
|
+
protocols?: ReadonlyArray<string | LpProtocol>;
|
|
86
|
+
/** 查手续费(V3 / V4 仓位,含质押在 MasterChef 里的),默认 true */
|
|
87
|
+
fees?: boolean;
|
|
88
|
+
/** 查挖矿奖励(MasterChef / gauge),默认 true */
|
|
89
|
+
rewards?: boolean;
|
|
90
|
+
/** V4:怎么找仓位(已知 tokenIds 或扫描 Transfer 事件,同 getLpPositions),两个都没有时不查 V4 */
|
|
91
|
+
v4?: LpV4Options;
|
|
92
|
+
/** 内置表里没有的挖矿合约 */
|
|
93
|
+
farms?: readonly FarmProtocol[];
|
|
94
|
+
/** gauge:直接指定要查的 gauge 地址,不再通过 Voter 枚举全部池子(Aerodrome 有两千多个,枚举要几千次读取) */
|
|
95
|
+
gauges?: readonly string[];
|
|
96
|
+
/** 每个协议最多核对多少个仓位,默认 500 */
|
|
97
|
+
maxPositions?: number;
|
|
98
|
+
/** 美元价值(可选):true 用 DefiLlama + 链上池子,也可以传 tokenPrices 的 sources。默认不查 */
|
|
99
|
+
prices?: boolean | TokenPricesOptions['sources'];
|
|
100
|
+
/** 价格源出错时调用:照样返回结果,usd 为 null */
|
|
101
|
+
onPriceError?: (error: unknown) => void;
|
|
102
|
+
/** 自定义 fetch(价格用) */
|
|
103
|
+
fetch?: typeof fetch;
|
|
104
|
+
}
|
|
105
|
+
export interface ClaimAllOptions extends ClaimableOptions {
|
|
106
|
+
/** 要领取的项(getClaimable 的结果里挑),默认领取查到的全部 */
|
|
107
|
+
items?: readonly ClaimItem[];
|
|
108
|
+
/** 领取的代币收到哪个地址,默认 owner。gauge 的奖励只能发给 owner,传了别的地址时这些项会被跳过 */
|
|
109
|
+
recipient?: string;
|
|
110
|
+
/** V4:传给 hooks 的 hookData,默认 '0x' */
|
|
111
|
+
hookData?: string;
|
|
112
|
+
/** 美元价值低于这个值的项跳过(不够付 gas 的零头);价值未知的不跳过。需要 prices */
|
|
113
|
+
minUsd?: number;
|
|
114
|
+
/** 一笔交易最多合并多少个仓位,默认 20 */
|
|
115
|
+
batchSize?: number;
|
|
116
|
+
/**
|
|
117
|
+
* 构建后先模拟(用 /simulate,按需加载):某一笔失败时逐项再试,把会失败的项放进 skipped,其余照常领取。默认 true;
|
|
118
|
+
* 设为 false 时不模拟(某一项失败会让它所在的那一笔整体失败)
|
|
119
|
+
*/
|
|
120
|
+
simulate?: boolean;
|
|
121
|
+
}
|
|
122
|
+
export interface ClaimTx {
|
|
123
|
+
kind: ClaimKind;
|
|
124
|
+
to: string;
|
|
125
|
+
data: string;
|
|
126
|
+
value: '0';
|
|
127
|
+
/** 这一笔里包含的项(ClaimItem.id) */
|
|
128
|
+
itemIds: string[];
|
|
129
|
+
/** 模拟的结果(simulate 不为 false 时):资产变化就是实际会收到的数量 */
|
|
130
|
+
simulation?: SimulationResult;
|
|
131
|
+
}
|
|
132
|
+
export interface ClaimSkipped {
|
|
133
|
+
item: ClaimItem;
|
|
134
|
+
reason: string;
|
|
135
|
+
}
|
|
136
|
+
/** 领取计划:要按顺序发送的交易(每笔独立,互不依赖)。只读取、不签名 */
|
|
137
|
+
export interface ClaimPlan {
|
|
138
|
+
chainId: number;
|
|
139
|
+
owner: string;
|
|
140
|
+
recipient: string;
|
|
141
|
+
/** 会领取的项 */
|
|
142
|
+
items: ClaimItem[];
|
|
143
|
+
/** 跳过的项和原因(没东西可领、低于 minUsd、模拟失败、地址不允许 …) */
|
|
144
|
+
skipped: ClaimSkipped[];
|
|
145
|
+
/** 按代币汇总的预计数量(用的是查询时的数量,挖矿奖励随时间还会增加一点) */
|
|
146
|
+
totals: ClaimAmount[];
|
|
147
|
+
usd?: number | null;
|
|
148
|
+
transactions: ClaimTx[];
|
|
149
|
+
}
|
|
150
|
+
export interface ClaimAllSendOptions extends ClaimAllOptions, Omit<BatchCallOptions, 'continueOnError'> {
|
|
151
|
+
/** 某一笔发送前失败后,后面的是否继续,默认 true(每一笔都是独立的领取) */
|
|
152
|
+
continueOnError?: boolean;
|
|
153
|
+
}
|
|
154
|
+
export interface ClaimTxResult extends WriteResult {
|
|
155
|
+
kind: ClaimKind;
|
|
156
|
+
itemIds: string[];
|
|
157
|
+
}
|
|
158
|
+
export interface ClaimResult {
|
|
159
|
+
plan: ClaimPlan;
|
|
160
|
+
/** 与 plan.transactions 一一对应 */
|
|
161
|
+
results: ClaimTxResult[];
|
|
162
|
+
/** 全部确认为 'confirmed';dryRun 全部预估通过为 'simulated';没有东西可领为 'skipped';否则是第一笔没成功的状态 */
|
|
163
|
+
status: WriteStatus;
|
|
164
|
+
/** 已确认的交易里的项 / 其他交易里的项(dryRun 时 claimed 为空,failed 只含预估失败的项) */
|
|
165
|
+
claimed: ClaimItem[];
|
|
166
|
+
failed: ClaimItem[];
|
|
167
|
+
/** dryRun:预估通过的项(没有真正发送) */
|
|
168
|
+
simulated?: ClaimItem[];
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rewards/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/rewards/types.ts"],"names":[],"mappings":""}
|