@w3lib/evm-batch-call 0.4.1 → 0.5.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 +21 -0
- package/README.md +166 -3
- package/dist/aggregate.d.ts.map +1 -1
- package/dist/aggregate.js +153 -40
- package/dist/aggregate.js.map +1 -1
- package/dist/fallback.d.ts +20 -0
- package/dist/fallback.d.ts.map +1 -1
- package/dist/fallback.js +36 -5
- package/dist/fallback.js.map +1 -1
- package/dist/lp.d.ts +149 -0
- package/dist/lp.d.ts.map +1 -0
- package/dist/lp.js +499 -0
- package/dist/lp.js.map +1 -0
- package/dist/lpMath.d.ts +25 -0
- package/dist/lpMath.d.ts.map +1 -0
- package/dist/lpMath.js +103 -0
- package/dist/lpMath.js.map +1 -0
- package/dist/lpV4.d.ts +108 -0
- package/dist/lpV4.d.ts.map +1 -0
- package/dist/lpV4.js +283 -0
- package/dist/lpV4.js.map +1 -0
- package/dist/owner.d.ts +1 -1
- package/dist/owner.d.ts.map +1 -1
- package/dist/owner.js +18 -5
- package/dist/owner.js.map +1 -1
- package/dist/scan.d.ts +54 -0
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +124 -92
- package/dist/scan.js.map +1 -1
- package/dist/source.d.ts +2 -0
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +4 -0
- package/dist/source.js.map +1 -1
- package/dist/subpaths/lp.d.ts +33 -0
- package/dist/subpaths/lp.d.ts.map +1 -0
- package/dist/subpaths/lp.js +47 -0
- package/dist/subpaths/lp.js.map +1 -0
- package/dist/subpaths/write.d.ts +20 -0
- package/dist/subpaths/write.d.ts.map +1 -0
- package/dist/subpaths/write.js +18 -0
- package/dist/subpaths/write.js.map +1 -0
- package/dist/tron.d.ts +2 -0
- package/dist/tron.d.ts.map +1 -1
- package/dist/tron.js +4 -0
- package/dist/tron.js.map +1 -1
- package/dist/write/batch.d.ts +88 -0
- package/dist/write/batch.d.ts.map +1 -0
- package/dist/write/batch.js +231 -0
- package/dist/write/batch.js.map +1 -0
- package/dist/write/collect.d.ts +53 -0
- package/dist/write/collect.d.ts.map +1 -0
- package/dist/write/collect.js +255 -0
- package/dist/write/collect.js.map +1 -0
- package/dist/write/rpc.d.ts +68 -0
- package/dist/write/rpc.d.ts.map +1 -0
- package/dist/write/rpc.js +236 -0
- package/dist/write/rpc.js.map +1 -0
- package/dist/write/send.d.ts +124 -0
- package/dist/write/send.d.ts.map +1 -0
- package/dist/write/send.js +373 -0
- package/dist/write/send.js.map +1 -0
- package/dist/write/signer.d.ts +58 -0
- package/dist/write/signer.d.ts.map +1 -0
- package/dist/write/signer.js +41 -0
- package/dist/write/signer.js.map +1 -0
- package/dist/write/transfer.d.ts +83 -0
- package/dist/write/transfer.d.ts.map +1 -0
- package/dist/write/transfer.js +259 -0
- package/dist/write/transfer.js.map +1 -0
- package/dist/write/tron.d.ts +58 -0
- package/dist/write/tron.d.ts.map +1 -0
- package/dist/write/tron.js +956 -0
- package/dist/write/tron.js.map +1 -0
- package/package.json +27 -14
- package/src/aggregate.ts +168 -36
- package/src/fallback.ts +55 -11
- package/src/lp.ts +721 -0
- package/src/lpMath.ts +113 -0
- package/src/lpV4.ts +406 -0
- package/src/owner.ts +19 -6
- package/src/scan.ts +155 -86
- package/src/source.ts +5 -0
- package/src/subpaths/lp.ts +71 -0
- package/src/subpaths/write.ts +26 -0
- package/src/tron.ts +5 -0
- package/src/write/batch.ts +302 -0
- package/src/write/collect.ts +312 -0
- package/src/write/rpc.ts +277 -0
- package/src/write/send.ts +490 -0
- package/src/write/signer.ts +90 -0
- package/src/write/transfer.ts +344 -0
- package/src/write/tron.ts +1100 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 批量写操作(子路径 `@w3lib/evm-batch-call/write`):批量调用合约、一对多转账、多钱包归集。
|
|
3
|
+
* 不放在主入口,只做查询时打包不会带上这部分代码。
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { Provider, NATIVE_TOKEN } from '@w3lib/evm-batch-call'
|
|
7
|
+
* import { batchCall, batchCollect, batchTransfer } from '@w3lib/evm-batch-call/write'
|
|
8
|
+
*
|
|
9
|
+
* const multi = new Provider(56, rpcUrl)
|
|
10
|
+
* await batchTransfer(multi, privateKey, [{ to: a, formatted: '1.5' }, { to: b, formatted: '2' }], { token: USDT })
|
|
11
|
+
* await batchCollect(multi, [key1, key2], hotWallet, { tokens: [USDT, NATIVE_TOKEN], gasWallet: gasKey })
|
|
12
|
+
* await batchCall(multi, [{ from: privateKey, call: usdt.approve(router, amount) }, { from: privateKey, to: router, data }])
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export { SIMPLE_7702_ACCOUNT, batchCall, revokeDelegation, type BatchCallMode, type BatchCallOptions, type WriteCall, } from '../write/batch.js';
|
|
16
|
+
export { batchCollect, type BatchCollectOptions, type CollectItemResult, type CollectResult } from '../write/collect.js';
|
|
17
|
+
export { DISPERSE_ADDRESS, batchTransfer, type ApproveResult, type BatchTransferOptions, type TransferItem, type TransferMode, type TransferResult } from '../write/transfer.js';
|
|
18
|
+
export type { SendOptions, TronSendOptions, WriteResult, WriteStatus } from '../write/send.js';
|
|
19
|
+
export type { SignerInput, TronSigner, TronWalletLike, WriteSigner } from '../write/signer.js';
|
|
20
|
+
//# sourceMappingURL=write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/subpaths/write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,SAAS,GACf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAChL,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9F,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 批量写操作(子路径 `@w3lib/evm-batch-call/write`):批量调用合约、一对多转账、多钱包归集。
|
|
3
|
+
* 不放在主入口,只做查询时打包不会带上这部分代码。
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { Provider, NATIVE_TOKEN } from '@w3lib/evm-batch-call'
|
|
7
|
+
* import { batchCall, batchCollect, batchTransfer } from '@w3lib/evm-batch-call/write'
|
|
8
|
+
*
|
|
9
|
+
* const multi = new Provider(56, rpcUrl)
|
|
10
|
+
* await batchTransfer(multi, privateKey, [{ to: a, formatted: '1.5' }, { to: b, formatted: '2' }], { token: USDT })
|
|
11
|
+
* await batchCollect(multi, [key1, key2], hotWallet, { tokens: [USDT, NATIVE_TOKEN], gasWallet: gasKey })
|
|
12
|
+
* await batchCall(multi, [{ from: privateKey, call: usdt.approve(router, amount) }, { from: privateKey, to: router, data }])
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export { SIMPLE_7702_ACCOUNT, batchCall, revokeDelegation, } from '../write/batch.js';
|
|
16
|
+
export { batchCollect } from '../write/collect.js';
|
|
17
|
+
export { DISPERSE_ADDRESS, batchTransfer } from '../write/transfer.js';
|
|
18
|
+
//# sourceMappingURL=write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/subpaths/write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,gBAAgB,GAIjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAwE,MAAM,qBAAqB,CAAA;AACxH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAA4G,MAAM,sBAAsB,CAAA"}
|
package/dist/tron.d.ts
CHANGED
|
@@ -62,6 +62,8 @@ export declare class TronProvider implements EthersLikeProvider {
|
|
|
62
62
|
* 默认以当前连接的钱包地址作为调用者(预执行时 msg.sender 即用户)。
|
|
63
63
|
*/
|
|
64
64
|
static fromTronWeb(tronWeb: TronWebLike, options?: Omit<TronProviderOptions, 'request' | 'fullHost'>): TronProvider;
|
|
65
|
+
/** 直接请求 HTTP API(如 'wallet/getnowblock'),同样经过限流和 429 退避(写操作模块用) */
|
|
66
|
+
request(path: string, body?: Record<string, unknown>): Promise<any>;
|
|
65
67
|
call(tx: TransactionRequest): Promise<string>;
|
|
66
68
|
/** chainId = 创世区块哈希的最后 4 字节(与 TronGrid /jsonrpc 的 eth_chainId 一致,主网 728126428) */
|
|
67
69
|
getChainId(): Promise<number>;
|
package/dist/tron.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tron.d.ts","sourceRoot":"","sources":["../src/tron.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,kBAAkB,EACxB,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExD,sDAAsD;AACtD,eAAO,MAAM,aAAa;;;;CAIhB,CAAA;AAIV,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEpD;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAErD;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAcpD;AAED,8CAA8C;AAC9C,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWrD;AAMD,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,QAAQ,EAAE;QAAE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACrH,cAAc,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;KAAE,CAAA;CAC7C;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;AAEvF,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;CACzD;AAcD;;;;;;GAMG;AACH,qBAAa,YAAa,YAAW,kBAAkB;;gBAUzC,OAAO,GAAE,mBAAwB;IA6B7C;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,UAAU,CAAM,GAAG,YAAY;
|
|
1
|
+
{"version":3,"file":"tron.d.ts","sourceRoot":"","sources":["../src/tron.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,kBAAkB,EACxB,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExD,sDAAsD;AACtD,eAAO,MAAM,aAAa;;;;CAIhB,CAAA;AAIV,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEpD;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAErD;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAcpD;AAED,8CAA8C;AAC9C,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWrD;AAMD,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,QAAQ,EAAE;QAAE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACrH,cAAc,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;KAAE,CAAA;CAC7C;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;AAEvF,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;CACzD;AAcD;;;;;;GAMG;AACH,qBAAa,YAAa,YAAW,kBAAkB;;gBAUzC,OAAO,GAAE,mBAAwB;IA6B7C;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,UAAU,CAAM,GAAG,YAAY;IAQvH,mEAAmE;IACnE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjE,IAAI,CAAC,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiDnD,kFAAkF;IAC5E,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAS7B,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAmDxE"}
|
package/dist/tron.js
CHANGED
|
@@ -111,6 +111,10 @@ export class TronProvider {
|
|
|
111
111
|
request: (path, body) => tronWeb.fullNode.request(path, body, 'post'),
|
|
112
112
|
});
|
|
113
113
|
}
|
|
114
|
+
/** 直接请求 HTTP API(如 'wallet/getnowblock'),同样经过限流和 429 退避(写操作模块用) */
|
|
115
|
+
request(path, body = {}) {
|
|
116
|
+
return this.#limit(() => this.#request(path, body));
|
|
117
|
+
}
|
|
114
118
|
async call(tx) {
|
|
115
119
|
assertLatest(tx.blockTag);
|
|
116
120
|
const body = {
|
package/dist/tron.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tron.js","sourceRoot":"","sources":["../src/tron.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tron.js","sourceRoot":"","sources":["../src/tron.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,MAAM,EACN,OAAO,EACP,YAAY,GAEb,MAAM,QAAQ,CAAA;AAIf,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;CACR,CAAA;AAEV,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;AAEpE,2CAA2C;AAC3C,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,eAAe,GAAG,6BAA6B,CAAA;AAErD,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACjE,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAChC,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC9D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAClC,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAA;IAC9E,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAA;IAChD,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC9D,OAAO,YAAY,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC;AAED,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAA;AAC5D,CAAC;AAkCD,MAAM,SAAU,SAAQ,KAAK;IAGhB;IAFX,YACE,OAAe,EACN,MAAc;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAA;QAFL,WAAM,GAAN,MAAM,CAAQ;IAGzB,CAAC;CACF;AAED,+CAA+C;AAC/C,MAAM,UAAU,GAAG,4CAA4C,CAAA;AAE/D;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IACd,QAAQ,CAAa;IACrB,YAAY,CAAQ;IACpB,YAAY,CAAQ;IACpB,QAAQ,CAAQ;IAChB,YAAY,CAAoC;IACzD,OAAO,GAAG,CAAC,CAAA;IACX,UAAU,GAAG,CAAC,CAAA;IACL,QAAQ,GAAsB,EAAE,CAAA;IAEzC,YAAY,UAA+B,EAAE;QAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAA;QACzD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAA;QACzD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,CAAA;QACjD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAA;QACvC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAA;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,yBAAyB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;YAChF,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;YAClG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAA;YAC9C,CAAC;YACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAA;YACzC,IAAI,CAAC,QAAQ,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;gBACnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE;oBACzC,MAAM,EAAE,MAAM;oBACd,OAAO;oBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAC1B,MAAM,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;iBAC3F,CAAC,CAAA;gBACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACZ,MAAM,IAAI,SAAS,CAAC,gBAAgB,IAAI,iBAAiB,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;gBACpF,CAAC;gBACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;YACnB,CAAC,CAAA;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,OAAoB,EAAE,UAA6D,EAAE;QACtG,OAAO,IAAI,YAAY,CAAC;YACtB,GAAG,OAAO;YACV,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,IAAI,SAAS,CAAC;YACvF,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;SACtE,CAAC,CAAA;IACJ,CAAC;IAED,mEAAmE;IACnE,OAAO,CAAC,IAAY,EAAE,OAAgC,EAAE;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAsB;QAC/B,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;QACzB,MAAM,IAAI,GAA4B;YACpC,aAAa,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE;YAC5E,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SACjD,CAAA;QACD,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACV,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAClD,CAAC;QACD,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;QAC5C,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,gCAAgC,EAAE,IAAI,CAAC,CAAC,CAAA;QAC1F,MAAM,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,EAAE,CAAA;QAChC,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEvF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,2DAA2D;YAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,yBAAyB,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5E,OAAO,IAAI,CAAA;YACb,CAAC;YACD,+CAA+C;YAC/C,kFAAkF;YAClF,MAAM,SAAS,CAAC,qBAAqB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE;gBACnG,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,OAAO,IAAI,IAAI;gBACvB,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE;gBAC7H,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,EAAE,EAAE;aAC9E,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAA;QACrD,IAAI,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,QAAQ,EAAE,CAAC;YACjD,MAAM,SAAS,CAAC,OAAO,IAAI,oBAAoB,EAAE,gBAAgB,EAAE;gBACjE,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE;gBAC7H,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,IAAI;aACb,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,kFAAkF;IAClF,KAAK,CAAC,UAAU;QACd,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACtF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC,CAAA;QAC1C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACrF,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAgB,EAAE,QAAkB;QACnD,YAAY,CAAC,QAAQ,CAAC,CAAA;QACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAChH,OAAO,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC,CAAA;IAClC,CAAC;IAED,eAAe;QACb,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAA;QAC9F,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM,CAAI,IAAsB;QACpC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,+CAA+C;YAC/C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QACnE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,EAAE,CAAA;QAChB,CAAC;QACD,IAAI,CAAC;YACH,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;gBACtB,IAAI,CAAC;oBACH,OAAO,MAAM,IAAI,EAAE,CAAA;gBACrB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;wBACpD,MAAM,GAAG,CAAA;oBACX,CAAC;oBACD,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,CAAA;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;YAClC,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,EAAE,CAAA;YACR,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,EAAE,CAAA;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAM;QACR,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAC5C,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,YAAY,CAAA;QAC3C,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YAChB,MAAM,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;CACF;AAED,SAAS,YAAY,CAAC,QAAiB;IACrC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnG,OAAM;IACR,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,aAAa,CAAC,GAAY;IACjC,yDAAyD;IACzD,MAAM,CAAC,GAAG,GAAiE,CAAA;IAC3E,OAAO,CAAC,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAA;AACzD,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAA;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { type BigNumberish } from 'ethers';
|
|
2
|
+
import { type Call } from '../call.js';
|
|
3
|
+
import type { Provider } from '../provider.js';
|
|
4
|
+
import { WriteRpc } from './rpc.js';
|
|
5
|
+
import { type SendOptions, type TronSendOptions, type WriteResult } from './send.js';
|
|
6
|
+
import { type ResolvedSigner, type SignerInput } from './signer.js';
|
|
7
|
+
/**
|
|
8
|
+
* EIP-7702 批量执行合约:eth-infinitism 的 Simple7702Account(account-abstraction v0.8),各主流链上地址相同。
|
|
9
|
+
* executeBatch 只允许账户自己(或 EntryPoint)调用,委托后别人无法通过它动用钱包里的资产
|
|
10
|
+
*/
|
|
11
|
+
export declare const SIMPLE_7702_ACCOUNT = "0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9";
|
|
12
|
+
/** 一个写调用:目标地址 + calldata,或 Contract 生成的 Call */
|
|
13
|
+
export interface WriteCall {
|
|
14
|
+
/** 发送的钱包:私钥或 ethers Signer */
|
|
15
|
+
from: SignerInput;
|
|
16
|
+
/** 目标地址(与 data 一起用;不传 call 时必填) */
|
|
17
|
+
to?: string;
|
|
18
|
+
/** calldata,默认 '0x'(普通转账) */
|
|
19
|
+
data?: string;
|
|
20
|
+
/** 附带的主币(wei) */
|
|
21
|
+
value?: BigNumberish;
|
|
22
|
+
/** 或者传 Contract 生成的 Call:`new Contract(token, ERC20_ABI).transfer(to, amount)`;`{ value }` overrides 作为 value */
|
|
23
|
+
call?: Call;
|
|
24
|
+
/** 指定 gasLimit 时不预估(7702 模式下忽略,整笔交易统一预估) */
|
|
25
|
+
gasLimit?: bigint;
|
|
26
|
+
}
|
|
27
|
+
export type BatchCallMode = 'tx' | '7702';
|
|
28
|
+
export interface BatchCallOptions extends SendOptions, TronSendOptions {
|
|
29
|
+
/**
|
|
30
|
+
* - 'tx'(默认):每个调用一笔交易,所有链都支持
|
|
31
|
+
* - '7702':钱包通过 EIP-7702 委托给批量执行合约,同一钱包的调用合成一笔交易(按 batchSize 拆分),一笔里的调用要么全部成功要么全部失败。
|
|
32
|
+
* 需要链支持 EIP-7702,钱包需要能本地签名(私钥 / ethers Wallet)。委托会一直保留,可用 revokeDelegation 撤销
|
|
33
|
+
*/
|
|
34
|
+
mode?: BatchCallMode;
|
|
35
|
+
/**
|
|
36
|
+
* 某个调用发送前失败(预估 revert、节点拒绝等)后,同一钱包后面的调用是否继续。默认 false(后面的标记为 skipped)。
|
|
37
|
+
* 交易不等上一笔确认就连续发出,所以已经发出、之后在链上 revert 的交易拦不住后面已发出的交易
|
|
38
|
+
*/
|
|
39
|
+
continueOnError?: boolean;
|
|
40
|
+
/** 7702:委托的合约,默认 SIMPLE_7702_ACCOUNT */
|
|
41
|
+
delegate?: string;
|
|
42
|
+
/** 7702:每笔交易最多打包的调用数,默认 50 */
|
|
43
|
+
batchSize?: number;
|
|
44
|
+
/** 7702:钱包已委托给其他合约时改为委托给 delegate。默认 false(报错,不动已有的委托) */
|
|
45
|
+
redelegate?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/** 归一化后的调用 */
|
|
48
|
+
export interface NormalizedCall {
|
|
49
|
+
signer: ResolvedSigner;
|
|
50
|
+
to: string;
|
|
51
|
+
data: string;
|
|
52
|
+
value: bigint;
|
|
53
|
+
gasLimit?: bigint;
|
|
54
|
+
}
|
|
55
|
+
export declare function normalizeCalls(calls: readonly WriteCall[]): Promise<NormalizedCall[]>;
|
|
56
|
+
/**
|
|
57
|
+
* 批量调用合约(写操作)。结果与 calls 一一对应。
|
|
58
|
+
*
|
|
59
|
+
* ```ts
|
|
60
|
+
* const usdt = new Contract(USDT, ERC20_ABI)
|
|
61
|
+
* await batchCall(multi, [
|
|
62
|
+
* { from: key1, call: usdt.approve(router, amount) },
|
|
63
|
+
* { from: key1, to: router, data: swapData }, // 依赖上一笔:预估失败时先等 approve 确认再预估
|
|
64
|
+
* { from: key2, to: someone, value: 10n ** 16n }, // 不同钱包并发发送
|
|
65
|
+
* ])
|
|
66
|
+
* // [{ index: 0, from, to, status: 'confirmed', hash: '0x…', nonce: 7, gasUsed: '46109', fee: '…', … }, …]
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* - 'tx' 模式:同一钱包按 nonce 顺序连续发出(不等上一笔确认),不同钱包并发(concurrency)
|
|
70
|
+
* - 依赖前一笔结果的调用:预估失败且同一钱包还有未确认的交易时,先等它们确认再预估一次
|
|
71
|
+
* - 结果的 status 见 WriteStatus;未上链的失败(预估 revert 等)不花手续费
|
|
72
|
+
*/
|
|
73
|
+
export declare function batchCall(provider: Provider, calls: readonly WriteCall[], options?: BatchCallOptions): Promise<WriteResult[]>;
|
|
74
|
+
/** Tron 链上用 Tron 的实现(按需加载:只用 EVM 时打包不会带上) */
|
|
75
|
+
export declare function tronModule(provider: Provider): Promise<typeof import('./tron.js') | null>;
|
|
76
|
+
/** 每个调用一笔交易 */
|
|
77
|
+
export declare function sendEach(rpc: WriteRpc, calls: readonly NormalizedCall[], options: BatchCallOptions): Promise<WriteResult[]>;
|
|
78
|
+
/** 7702:同一钱包的调用合成一笔发给自己的 executeBatch 交易 */
|
|
79
|
+
export declare function send7702(rpc: WriteRpc, calls: readonly NormalizedCall[], options: BatchCallOptions): Promise<WriteResult[]>;
|
|
80
|
+
/**
|
|
81
|
+
* 撤销钱包的 EIP-7702 委托(授权给零地址,账户恢复成普通 EOA)。没有委托时直接返回 null,不发交易。
|
|
82
|
+
*
|
|
83
|
+
* ```ts
|
|
84
|
+
* await revokeDelegation(multi, privateKey)
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export declare function revokeDelegation(provider: Provider, from: SignerInput, options?: SendOptions): Promise<WriteResult | null>;
|
|
88
|
+
//# sourceMappingURL=batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../src/write/batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8E,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAA;AAEtH,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,YAAY,CAAA;AAElD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAyC,KAAK,WAAW,EAAE,KAAK,eAAe,EAA8B,KAAK,WAAW,EAAE,MAAM,WAAW,CAAA;AACvJ,OAAO,EAAiB,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAElF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,+CAA+C,CAAA;AAU/E,gDAAgD;AAChD,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,IAAI,EAAE,WAAW,CAAA;IACjB,mCAAmC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iBAAiB;IACjB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,iHAAiH;IACjH,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,MAAM,CAAA;AAEzC,MAAM,WAAW,gBAAiB,SAAQ,WAAW,EAAE,eAAe;IACpE;;;;OAIG;IACH,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,cAAc;AACd,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAA;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAgB3F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAQvI;AAED,6CAA6C;AAC7C,wBAAsB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,WAAW,CAAC,GAAG,IAAI,CAAC,CAE/F;AAED,eAAe;AACf,wBAAsB,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAcjI;AAsBD,4CAA4C;AAC5C,wBAAsB,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA2FjI;AAqBD;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAuBpI"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { Interface, ZeroAddress, getAddress, getBigInt, hexlify } from 'ethers';
|
|
2
|
+
import { encodeCall } from '../call.js';
|
|
3
|
+
import { decodeRevertReason } from '../errors.js';
|
|
4
|
+
import { isTronChain } from '../tron.js';
|
|
5
|
+
import { WriteRpc } from './rpc.js';
|
|
6
|
+
import { emptyOutcome, sendJobs, toWriteResult } from './send.js';
|
|
7
|
+
import { resolveSigner } from './signer.js';
|
|
8
|
+
/**
|
|
9
|
+
* EIP-7702 批量执行合约:eth-infinitism 的 Simple7702Account(account-abstraction v0.8),各主流链上地址相同。
|
|
10
|
+
* executeBatch 只允许账户自己(或 EntryPoint)调用,委托后别人无法通过它动用钱包里的资产
|
|
11
|
+
*/
|
|
12
|
+
export const SIMPLE_7702_ACCOUNT = '0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9';
|
|
13
|
+
const accountInterface = new Interface([
|
|
14
|
+
'function executeBatch((address target, uint256 value, bytes data)[] calls)',
|
|
15
|
+
'error ExecuteError(uint256 index, bytes reason)',
|
|
16
|
+
]);
|
|
17
|
+
/** 7702 委托后账户上的代码:0xef0100 + 委托合约地址 */
|
|
18
|
+
const DELEGATION_PREFIX = '0xef0100';
|
|
19
|
+
export async function normalizeCalls(calls) {
|
|
20
|
+
const cache = new Map();
|
|
21
|
+
return Promise.all(calls.map(async (item, i) => {
|
|
22
|
+
const signer = await resolveSigner(item.from, cache);
|
|
23
|
+
if (item.call) {
|
|
24
|
+
const request = encodeCall(item.call, false);
|
|
25
|
+
const value = item.value ?? item.call.overrides?.value ?? 0n;
|
|
26
|
+
return { signer, to: request.target, data: request.callData, value: getBigInt(value), gasLimit: item.gasLimit };
|
|
27
|
+
}
|
|
28
|
+
if (!item.to) {
|
|
29
|
+
throw new Error(`calls[${i}]: either to or call is required`);
|
|
30
|
+
}
|
|
31
|
+
return { signer, to: getAddress(item.to), data: item.data ? hexlify(item.data) : '0x', value: getBigInt(item.value ?? 0n), gasLimit: item.gasLimit };
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 批量调用合约(写操作)。结果与 calls 一一对应。
|
|
36
|
+
*
|
|
37
|
+
* ```ts
|
|
38
|
+
* const usdt = new Contract(USDT, ERC20_ABI)
|
|
39
|
+
* await batchCall(multi, [
|
|
40
|
+
* { from: key1, call: usdt.approve(router, amount) },
|
|
41
|
+
* { from: key1, to: router, data: swapData }, // 依赖上一笔:预估失败时先等 approve 确认再预估
|
|
42
|
+
* { from: key2, to: someone, value: 10n ** 16n }, // 不同钱包并发发送
|
|
43
|
+
* ])
|
|
44
|
+
* // [{ index: 0, from, to, status: 'confirmed', hash: '0x…', nonce: 7, gasUsed: '46109', fee: '…', … }, …]
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* - 'tx' 模式:同一钱包按 nonce 顺序连续发出(不等上一笔确认),不同钱包并发(concurrency)
|
|
48
|
+
* - 依赖前一笔结果的调用:预估失败且同一钱包还有未确认的交易时,先等它们确认再预估一次
|
|
49
|
+
* - 结果的 status 见 WriteStatus;未上链的失败(预估 revert 等)不花手续费
|
|
50
|
+
*/
|
|
51
|
+
export async function batchCall(provider, calls, options = {}) {
|
|
52
|
+
const tron = await tronModule(provider);
|
|
53
|
+
if (tron) {
|
|
54
|
+
return tron.tronBatchCall(provider, calls, options);
|
|
55
|
+
}
|
|
56
|
+
const rpc = await WriteRpc.from(provider);
|
|
57
|
+
const normalized = await normalizeCalls(calls);
|
|
58
|
+
return (options.mode ?? 'tx') === '7702' ? send7702(rpc, normalized, options) : sendEach(rpc, normalized, options);
|
|
59
|
+
}
|
|
60
|
+
/** Tron 链上用 Tron 的实现(按需加载:只用 EVM 时打包不会带上) */
|
|
61
|
+
export async function tronModule(provider) {
|
|
62
|
+
return isTronChain(await provider.getChainId()) ? import('./tron.js') : null;
|
|
63
|
+
}
|
|
64
|
+
/** 每个调用一笔交易 */
|
|
65
|
+
export async function sendEach(rpc, calls, options) {
|
|
66
|
+
const results = calls.map((c, i) => toWriteResult(i, c.signer.address, c.to, emptyOutcome('skipped')));
|
|
67
|
+
const jobs = calls.map((c, i) => ({
|
|
68
|
+
signer: c.signer,
|
|
69
|
+
gasLimit: c.gasLimit,
|
|
70
|
+
continueOnError: options.continueOnError,
|
|
71
|
+
build: async () => ({ to: c.to, data: c.data, value: c.value }),
|
|
72
|
+
onUpdate: (outcome) => {
|
|
73
|
+
results[i] = toWriteResult(i, c.signer.address, c.to, outcome);
|
|
74
|
+
options.onUpdate?.(results[i]);
|
|
75
|
+
},
|
|
76
|
+
}));
|
|
77
|
+
const outcomes = await sendJobs(rpc, jobs, options);
|
|
78
|
+
return outcomes.map((outcome, i) => toWriteResult(i, calls[i].signer.address, calls[i].to, outcome));
|
|
79
|
+
}
|
|
80
|
+
/** 钱包当前的委托状态 */
|
|
81
|
+
async function delegationOf(rpc, address) {
|
|
82
|
+
const code = (await rpc.code(address)).toLowerCase();
|
|
83
|
+
if (code === '0x' || code === '') {
|
|
84
|
+
return { delegated: false, to: null };
|
|
85
|
+
}
|
|
86
|
+
if (code.startsWith(DELEGATION_PREFIX) && code.length === 2 + 46) {
|
|
87
|
+
return { delegated: true, to: getAddress(`0x${code.slice(8)}`) };
|
|
88
|
+
}
|
|
89
|
+
throw new Error(`${address} is a contract, not an EOA`);
|
|
90
|
+
}
|
|
91
|
+
/** 7702 授权:发送者自己就是授权人时,授权的 nonce 要用交易 nonce + 1(交易先把 nonce 加一,再处理授权) */
|
|
92
|
+
async function authorize(rpc, signer, delegate, txNonce) {
|
|
93
|
+
if (!signer.local || typeof signer.signer.authorize !== 'function') {
|
|
94
|
+
throw new Error("mode '7702' requires a signer that can sign EIP-7702 authorizations locally (a private key or an ethers Wallet)");
|
|
95
|
+
}
|
|
96
|
+
return signer.signer.authorize({ address: delegate, nonce: txNonce + 1, chainId: rpc.chainId });
|
|
97
|
+
}
|
|
98
|
+
/** 7702:同一钱包的调用合成一笔发给自己的 executeBatch 交易 */
|
|
99
|
+
export async function send7702(rpc, calls, options) {
|
|
100
|
+
const delegate = getAddress(options.delegate ?? SIMPLE_7702_ACCOUNT);
|
|
101
|
+
const batchSize = Math.max(1, options.batchSize ?? 50);
|
|
102
|
+
const results = calls.map((c, i) => toWriteResult(i, c.signer.address, c.to, emptyOutcome('skipped')));
|
|
103
|
+
const report = (i, outcome) => {
|
|
104
|
+
const c = calls[i];
|
|
105
|
+
results[i] = toWriteResult(i, c.signer.address, c.to, outcome);
|
|
106
|
+
options.onUpdate?.(results[i]);
|
|
107
|
+
};
|
|
108
|
+
// 按钱包分组、拆成每 batchSize 个一笔
|
|
109
|
+
const byWallet = new Map();
|
|
110
|
+
calls.forEach((c, i) => {
|
|
111
|
+
const key = c.signer.address.toLowerCase();
|
|
112
|
+
byWallet.set(key, [...(byWallet.get(key) ?? []), i]);
|
|
113
|
+
});
|
|
114
|
+
const chunks = [];
|
|
115
|
+
for (const indexes of byWallet.values()) {
|
|
116
|
+
for (let start = 0; start < indexes.length; start += batchSize) {
|
|
117
|
+
chunks.push(indexes.slice(start, start + batchSize));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// 委托合约必须有代码:EIP-7702 委托给没有代码的地址时调用直接“成功”、什么都不执行,结果会全部报 confirmed
|
|
121
|
+
let deployed = null;
|
|
122
|
+
const assertDeployed = async () => {
|
|
123
|
+
deployed ??= rpc.code(delegate).then((code) => Boolean(code && code !== '0x'));
|
|
124
|
+
if (!(await deployed)) {
|
|
125
|
+
throw new Error(`The delegate contract ${delegate} is not deployed on chain ${rpc.chainId}; pass delegate to use another one`);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
// 每笔交易发送前查一次委托状态(同一钱包上一笔带授权时,sendJobs 会先等它确认,这时已经委托好了,不必再带授权)
|
|
129
|
+
const checkDelegation = async (signer) => {
|
|
130
|
+
const { delegated, to } = await delegationOf(rpc, signer.address);
|
|
131
|
+
if (!delegated) {
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
if (to === delegate) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
if (!options.redelegate) {
|
|
138
|
+
throw new Error(`${signer.address} is already delegated to ${to}; pass redelegate: true to replace it`);
|
|
139
|
+
}
|
|
140
|
+
return true;
|
|
141
|
+
};
|
|
142
|
+
const jobs = chunks.map((chunk) => {
|
|
143
|
+
const signer = calls[chunk[0]].signer;
|
|
144
|
+
const data = accountInterface.encodeFunctionData('executeBatch', [
|
|
145
|
+
chunk.map((i) => {
|
|
146
|
+
const c = calls[i];
|
|
147
|
+
return [c.to, c.value, c.data];
|
|
148
|
+
}),
|
|
149
|
+
]);
|
|
150
|
+
return {
|
|
151
|
+
signer,
|
|
152
|
+
continueOnError: options.continueOnError,
|
|
153
|
+
build: async (nonce) => {
|
|
154
|
+
if (!signer.local || nonce === null) {
|
|
155
|
+
throw new Error("mode '7702' requires a signer that can sign locally (a private key or an ethers Wallet)");
|
|
156
|
+
}
|
|
157
|
+
await assertDeployed();
|
|
158
|
+
let auth;
|
|
159
|
+
if (await checkDelegation(signer)) {
|
|
160
|
+
// 预估 gas 按 latest 状态执行:钱包还有未确认的交易时,授权 nonce(按 pending 算)在预估里对不上、授权被跳过,
|
|
161
|
+
// 预估出来的 gas 不含批量执行,上链后执行失败、手续费白付。要求先等这些交易确认
|
|
162
|
+
if ((await rpc.latestNonce(signer.address)) !== nonce) {
|
|
163
|
+
throw new Error('The wallet has unconfirmed transactions; EIP-7702 delegation needs them to be confirmed first');
|
|
164
|
+
}
|
|
165
|
+
auth = [await authorize(rpc, signer, delegate, nonce)];
|
|
166
|
+
}
|
|
167
|
+
return { to: signer.address, data, value: 0n, authorizationList: auth };
|
|
168
|
+
},
|
|
169
|
+
onUpdate: (outcome) => {
|
|
170
|
+
if (outcome.status === 'failed' && outcome.revertData) {
|
|
171
|
+
// 预估时 revert:找出是第几个调用失败,其他调用标记为 skipped(整笔没有发出)
|
|
172
|
+
const failed = failedIndex(outcome.revertData, chunk.length);
|
|
173
|
+
if (failed) {
|
|
174
|
+
chunk.forEach((i, k) => report(i, k === failed.index ? { ...outcome, error: failed.reason } : { ...outcome, status: 'skipped', error: 'skipped: another call in the same batch failed' }));
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
chunk.forEach((i) => report(i, outcome));
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
});
|
|
182
|
+
await sendJobs(rpc, jobs, options);
|
|
183
|
+
return results;
|
|
184
|
+
}
|
|
185
|
+
/** 解析 executeBatch 的 ExecuteError(index, error);只有一个调用时合约直接透传 revert 数据 */
|
|
186
|
+
function failedIndex(data, size) {
|
|
187
|
+
if (size === 1) {
|
|
188
|
+
const reason = decodeRevertReason(data);
|
|
189
|
+
return { index: 0, reason: reason ? `execution reverted: ${reason}` : 'execution reverted' };
|
|
190
|
+
}
|
|
191
|
+
try {
|
|
192
|
+
const parsed = accountInterface.parseError(data);
|
|
193
|
+
if (parsed?.name !== 'ExecuteError') {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
const index = Number(parsed.args[0]);
|
|
197
|
+
const reason = decodeRevertReason(String(parsed.args[1]));
|
|
198
|
+
return index < size ? { index, reason: reason ? `execution reverted: ${reason}` : 'execution reverted' } : null;
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* 撤销钱包的 EIP-7702 委托(授权给零地址,账户恢复成普通 EOA)。没有委托时直接返回 null,不发交易。
|
|
206
|
+
*
|
|
207
|
+
* ```ts
|
|
208
|
+
* await revokeDelegation(multi, privateKey)
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
export async function revokeDelegation(provider, from, options = {}) {
|
|
212
|
+
const rpc = await WriteRpc.from(provider); // Tron 没有 EIP-7702:这里会报不支持
|
|
213
|
+
const signer = await resolveSigner(from);
|
|
214
|
+
if (!(await delegationOf(rpc, signer.address)).delegated) {
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
const [outcome] = await sendJobs(rpc, [
|
|
218
|
+
{
|
|
219
|
+
signer,
|
|
220
|
+
build: async (nonce) => {
|
|
221
|
+
if (nonce === null) {
|
|
222
|
+
throw new Error('revokeDelegation requires a signer that can sign locally (a private key or an ethers Wallet)');
|
|
223
|
+
}
|
|
224
|
+
return { to: signer.address, data: '0x', value: 0n, authorizationList: [await authorize(rpc, signer, ZeroAddress, nonce)] };
|
|
225
|
+
},
|
|
226
|
+
onUpdate: (o) => options.onUpdate?.(toWriteResult(0, signer.address, signer.address, o)),
|
|
227
|
+
},
|
|
228
|
+
], options);
|
|
229
|
+
return toWriteResult(0, signer.address, signer.address, outcome);
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/write/batch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type BigNumberish } from 'ethers';
|
|
2
|
+
import type { Provider } from '../provider.js';
|
|
3
|
+
import { type SendOptions, type TronSendOptions, type WriteResult } from './send.js';
|
|
4
|
+
import { type SignerInput } from './signer.js';
|
|
5
|
+
import { type TransferResult } from './transfer.js';
|
|
6
|
+
export interface BatchCollectOptions extends SendOptions, TronSendOptions {
|
|
7
|
+
/**
|
|
8
|
+
* 要归集的代币。包含主币(NATIVE_TOKEN)时,在代币归集确认后把剩余主币扣掉手续费全部转走
|
|
9
|
+
* (OP Stack / Scroll 链上同时预留 L1 数据费;EIP-1559 链上按 maxFeePerGas 预留,实际手续费更低,会留下少量零头)
|
|
10
|
+
*/
|
|
11
|
+
tokens: readonly string[];
|
|
12
|
+
/**
|
|
13
|
+
* 补 gas 的钱包:子钱包主币不够付归集手续费时,先从它转入刚好够用的主币(按 gasLimit × maxFeePerGas 计算,已含余量),确认后再归集。
|
|
14
|
+
* 不传时,主币不够的子钱包对应的项 status 为 'failed'
|
|
15
|
+
*/
|
|
16
|
+
gasWallet?: SignerInput;
|
|
17
|
+
/** 补 gas 的方式,见 batchTransfer 的 mode,默认 'disperse'(一笔交易给所有子钱包补) */
|
|
18
|
+
gasMode?: 'disperse' | 'tx';
|
|
19
|
+
/** 补 gas 数量的额外倍数,默认 1 */
|
|
20
|
+
gasBuffer?: number;
|
|
21
|
+
/** 各代币的最小归集数量(最小单位),余额低于它的不归集:`{ [USDT]: 10n ** 6n }` */
|
|
22
|
+
minAmount?: Readonly<Record<string, BigNumberish>>;
|
|
23
|
+
}
|
|
24
|
+
/** 单个钱包单个代币的归集结果;from 是子钱包,to 是归集地址 */
|
|
25
|
+
export interface CollectItemResult extends WriteResult {
|
|
26
|
+
token: string;
|
|
27
|
+
native: boolean;
|
|
28
|
+
/** 归集的数量(最小单位);主币扫尾在发送前为 '0' */
|
|
29
|
+
amount: string;
|
|
30
|
+
formatted: string | null;
|
|
31
|
+
}
|
|
32
|
+
export interface CollectResult {
|
|
33
|
+
/** 按 wallets × tokens 顺序(第 i 个钱包第 j 个代币在 i × tokens.length + j) */
|
|
34
|
+
results: CollectItemResult[];
|
|
35
|
+
/** 补 gas 的转账(没有需要补的钱包时为空) */
|
|
36
|
+
topUps: TransferResult[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 归集:多个钱包的代币 / 主币转到同一个地址。每个钱包内按代币顺序逐笔发送,钱包之间并发。
|
|
40
|
+
*
|
|
41
|
+
* ```ts
|
|
42
|
+
* const { results, topUps } = await batchCollect(multi, [key1, key2, key3], hotWallet, {
|
|
43
|
+
* tokens: [USDT, NATIVE_TOKEN], // 主币放在里面表示代币归集完后扫空剩余主币
|
|
44
|
+
* gasWallet: gasKey, // 子钱包主币不够付手续费时先从这里补
|
|
45
|
+
* })
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* 流程:一次 multicall 读出所有钱包的余额 → 预估每笔归集的手续费 → 给不够的钱包补 gas(等确认)
|
|
49
|
+
* → 发代币归集 → (包含主币时)等代币归集确认、按最新余额扫空主币。
|
|
50
|
+
* dryRun 时只做到预估,返回计划(补多少 gas、每笔 gasLimit),不发任何交易
|
|
51
|
+
*/
|
|
52
|
+
export declare function batchCollect(provider: Provider, wallets: readonly SignerInput[], to: string, options: BatchCollectOptions): Promise<CollectResult>;
|
|
53
|
+
//# sourceMappingURL=collect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../../src/write/collect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAA;AAG5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAG9C,OAAO,EAAiF,KAAK,WAAW,EAAE,KAAK,eAAe,EAA2C,KAAK,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5M,OAAO,EAAsC,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAElF,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAOlE,MAAM,WAAW,mBAAoB,SAAQ,WAAW,EAAE,eAAe;IACvE;;;OAGG;IACH,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,WAAW,CAAA;IACvB,kEAAkE;IAClE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IAC3B,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yDAAyD;IACzD,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;CACnD;AAED,uCAAuC;AACvC,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAC5B,6BAA6B;IAC7B,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB;AAaD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAuNxJ"}
|