four-flap-meme-sdk 1.9.49 → 2.0.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/README.en.md +41 -6
- package/README.md +31 -0
- package/README.zh-CN.md +41 -6
- package/dist/abis/common.js +74 -68
- package/dist/abis/flap/vault.js +9 -7
- package/dist/abis/index.d.ts +3 -4
- package/dist/abis/index.js +3 -4
- package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
- package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
- package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
- package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
- package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
- package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
- package/dist/bundle-core/config-helpers.d.ts +36 -0
- package/dist/bundle-core/config-helpers.js +57 -0
- package/dist/bundle-core/errors.d.ts +50 -0
- package/dist/bundle-core/errors.js +34 -0
- package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
- package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
- package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
- package/dist/bundle-core/four-meme/core-helpers.js +40 -0
- package/dist/bundle-core/four-meme/core.d.ts +4 -0
- package/dist/bundle-core/four-meme/core.js +515 -0
- package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
- package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
- package/dist/bundle-core/four-meme/private.d.ts +27 -0
- package/dist/bundle-core/four-meme/private.js +465 -0
- package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
- package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
- package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
- package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
- package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
- package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
- package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
- package/dist/bundle-core/four-meme/swap-internal.js +18 -0
- package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
- package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
- package/dist/bundle-core/four-meme/swap.d.ts +17 -0
- package/dist/bundle-core/four-meme/swap.js +505 -0
- package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
- package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
- package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
- package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
- package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
- package/dist/bundle-core/four-meme/types/index.js +1 -0
- package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
- package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
- package/dist/bundle-core/four-meme/types.d.ts +1 -0
- package/dist/bundle-core/four-meme/types.js +1 -0
- package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
- package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
- package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
- package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
- package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
- package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
- package/dist/bundle-core/index.d.ts +8 -0
- package/dist/bundle-core/index.js +8 -0
- package/dist/bundle-core/internal.d.ts +21 -0
- package/dist/bundle-core/internal.js +182 -0
- package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
- package/dist/bundle-core/sign-context-helpers.js +67 -0
- package/dist/bundle-core/submit.d.ts +293 -0
- package/dist/bundle-core/submit.js +727 -0
- package/dist/bundle-core/types/index.d.ts +8 -0
- package/dist/bundle-core/types/index.js +1 -0
- package/dist/bundle-core/types.d.ts +1 -0
- package/dist/bundle-core/types.js +1 -0
- package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
- package/dist/chains/bsc/four/approve-tokenmanager.js +1 -116
- package/dist/chains/bsc/four/config.d.ts +5 -70
- package/dist/chains/bsc/four/config.js +2 -115
- package/dist/chains/bsc/four/core.d.ts +1 -4
- package/dist/chains/bsc/four/core.js +1 -589
- package/dist/chains/bsc/four/disperse.d.ts +12 -0
- package/dist/chains/bsc/four/disperse.js +470 -0
- package/dist/chains/bsc/four/index.d.ts +6 -6
- package/dist/chains/bsc/four/index.js +6 -6
- package/dist/chains/bsc/four/internal.d.ts +2 -50
- package/dist/chains/bsc/four/internal.js +2 -237
- package/dist/chains/bsc/four/pairwise.d.ts +7 -0
- package/dist/chains/bsc/four/pairwise.js +308 -0
- package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
- package/dist/chains/bsc/four/pancake-proxy.js +1 -688
- package/dist/chains/bsc/four/private.d.ts +1 -27
- package/dist/chains/bsc/four/private.js +1 -477
- package/dist/chains/bsc/four/submit.d.ts +2 -315
- package/dist/chains/bsc/four/submit.js +2 -746
- package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
- package/dist/chains/bsc/four/swap-buy-first.js +2 -506
- package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
- package/dist/chains/bsc/four/swap-internal.js +1 -18
- package/dist/chains/bsc/four/swap.d.ts +2 -144
- package/dist/chains/bsc/four/swap.js +2 -760
- package/dist/chains/bsc/four/sweep.d.ts +13 -0
- package/dist/chains/bsc/four/sweep.js +788 -0
- package/dist/chains/bsc/four/types.d.ts +1 -476
- package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
- package/dist/chains/bsc/four/utils-disperse.js +1 -0
- package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
- package/dist/chains/bsc/four/utils-pairwise.js +1 -0
- package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
- package/dist/chains/bsc/four/utils-sweep.js +1 -0
- package/dist/chains/bsc/four/utils.d.ts +5 -18
- package/dist/chains/bsc/four/utils.js +5 -1534
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
- package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
- package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -207
- package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
- package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
- package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
- package/dist/chains/bsc/pancake/bundle-swap.js +111 -686
- package/dist/chains/bsc/pancake/index.d.ts +4 -2
- package/dist/chains/bsc/pancake/index.js +1 -3
- package/dist/chains/bsc/platforms/iro/factory.js +3 -1
- package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
- package/dist/chains/bsc/platforms/iro/index.js +3 -3
- package/dist/chains/bsc/platforms/iro/pool.js +31 -10
- package/dist/chains/bsc/platforms/iro/token.js +4 -1
- package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
- package/dist/chains/eni/batch-router/transfer.js +54 -23
- package/dist/chains/eni/batch-router/utils.js +32 -6
- package/dist/chains/eni/bundler/sign.js +4 -4
- package/dist/chains/eni/bundler/submit.js +1 -4
- package/dist/chains/eni/constants.js +1 -1
- package/dist/chains/eni/index.d.ts +1 -1
- package/dist/chains/eni/platforms/daoaas/create.js +2 -2
- package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
- package/dist/chains/eni/platforms/daoaas/index.js +3 -3
- package/dist/chains/eni/platforms/daoaas/meta.js +8 -4
- package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -43
- package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
- package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
- package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
- package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
- package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -47
- package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
- package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
- package/dist/chains/eni/platforms/iro/factory.js +3 -1
- package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
- package/dist/chains/eni/platforms/iro/index.js +4 -4
- package/dist/chains/eni/platforms/iro/pool.js +90 -26
- package/dist/chains/eni/platforms/iro/token.js +107 -31
- package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
- package/dist/chains/eni/submit.js +5 -13
- package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
- package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -20
- package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
- package/dist/chains/xlayer/eip7702/bundle-create.js +93 -56
- package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-sell.js +26 -74
- package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
- package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -68
- package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
- package/dist/chains/xlayer/eip7702/constants.js +3 -21
- package/dist/chains/xlayer/eip7702/index.d.ts +27 -46
- package/dist/chains/xlayer/eip7702/index.js +27 -81
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +58 -291
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
- package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
- package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
- package/dist/chains/xlayer/eip7702/utils.js +23 -28
- package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
- package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
- package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
- package/dist/chains/xlayer/eip7702/volume.js +83 -158
- package/dist/chains/xlayer/eoa/constants.js +1 -1
- package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +64 -276
- package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
- package/dist/chains/xlayer/eoa/eoa-wash-volume.js +14 -14
- package/dist/chains/xlayer/eoa/index.d.ts +10 -6
- package/dist/chains/xlayer/eoa/index.js +8 -23
- package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
- package/dist/chains/xlayer/eoa/router-manager.js +3 -3
- package/dist/chains/xlayer/eoa/types-core.d.ts +363 -0
- package/dist/chains/xlayer/eoa/types-core.js +53 -0
- package/dist/chains/xlayer/eoa/types-create.d.ts +413 -0
- package/dist/chains/xlayer/eoa/types-create.js +9 -0
- package/dist/chains/xlayer/eoa/types-volume.d.ts +209 -0
- package/dist/chains/xlayer/eoa/types-volume.js +13 -0
- package/dist/chains/xlayer/eoa/types.d.ts +2 -2
- package/dist/chains/xlayer/eoa/types.js +1 -3
- package/dist/contracts/helper3.d.ts +20 -17
- package/dist/contracts/helper3.js +56 -20
- package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
- package/dist/contracts/tm-bundle-helpers.js +72 -0
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -117
- package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -70
- package/dist/contracts/tm-bundle-merkle/config.js +2 -115
- package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
- package/dist/contracts/tm-bundle-merkle/core.js +1 -588
- package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
- package/dist/contracts/tm-bundle-merkle/index.js +5 -5
- package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -50
- package/dist/contracts/tm-bundle-merkle/internal.js +2 -236
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -687
- package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
- package/dist/contracts/tm-bundle-merkle/private.js +1 -476
- package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
- package/dist/contracts/tm-bundle-merkle/submit.js +3 -919
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -505
- package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
- package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
- package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
- package/dist/contracts/tm-bundle-merkle/swap.js +2 -757
- package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
- package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
- package/dist/contracts/tm-bundle-merkle/utils.d.ts +5 -6
- package/dist/contracts/tm-bundle-merkle/utils.js +5 -6
- package/dist/contracts/tm-bundle.d.ts +3 -51
- package/dist/contracts/tm-bundle.js +102 -142
- package/dist/contracts/tm.d.ts +3 -2
- package/dist/contracts/tm.js +36 -32
- package/dist/contracts/tm1.js +9 -4
- package/dist/contracts/tm2.js +9 -4
- package/dist/dex/direct-router-helpers.d.ts +264 -0
- package/dist/dex/direct-router-helpers.js +539 -0
- package/dist/dex/direct-router.d.ts +3 -125
- package/dist/dex/direct-router.js +237 -652
- package/dist/dex/types.d.ts +81 -0
- package/dist/dex/types.js +1 -0
- package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
- package/dist/exports/root-bundle-and-tooling.js +30 -0
- package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
- package/dist/exports/root-eni-and-bsc-iro.js +66 -0
- package/dist/exports/root-foundations.d.ts +35 -0
- package/dist/exports/root-foundations.js +70 -0
- package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
- package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
- package/dist/flows/create.d.ts +2 -2
- package/dist/flows/create.js +6 -6
- package/dist/flows/index.d.ts +1 -0
- package/dist/flows/index.js +1 -0
- package/dist/index.d.ts +20 -91
- package/dist/index.js +20 -215
- package/dist/shared/abis/common.d.ts +2 -83
- package/dist/shared/abis/common.js +2 -252
- package/dist/shared/abis/index.d.ts +5 -6
- package/dist/shared/abis/index.js +5 -7
- package/dist/shared/clients/blockrazor.js +41 -24
- package/dist/shared/clients/club48.js +30 -26
- package/dist/shared/clients/emitservice.js +2 -0
- package/dist/shared/clients/four.js +23 -18
- package/dist/shared/clients/index.d.ts +8 -0
- package/dist/shared/clients/index.js +8 -0
- package/dist/shared/clients/merkle.js +26 -30
- package/dist/shared/constants/addresses.d.ts +1 -1
- package/dist/shared/constants/addresses.js +11 -2
- package/dist/shared/constants/chains.d.ts +1 -1
- package/dist/shared/constants/chains.js +1 -1
- package/dist/shared/constants/gas.d.ts +1 -1
- package/dist/shared/constants/gas.js +2 -6
- package/dist/shared/constants/index.d.ts +1 -0
- package/dist/shared/constants/index.js +1 -0
- package/dist/shared/constants/quote.d.ts +30 -0
- package/dist/shared/constants/quote.js +37 -0
- package/dist/shared/flap/__tests__/curve.test.js +3 -3
- package/dist/shared/flap/abi.js +1 -1
- package/dist/shared/flap/constants.d.ts +1 -1
- package/dist/shared/flap/constants.js +2 -2
- package/dist/shared/flap/curve.js +3 -0
- package/dist/shared/flap/errors.d.ts +1 -4
- package/dist/shared/flap/errors.js +21 -3
- package/dist/shared/flap/index.d.ts +2 -2
- package/dist/shared/flap/index.js +2 -2
- package/dist/shared/flap/meta.d.ts +16 -18
- package/dist/shared/flap/meta.js +14 -26
- package/dist/shared/flap/permit.js +6 -5
- package/dist/shared/flap/pinata.d.ts +9 -2
- package/dist/shared/flap/pinata.js +20 -18
- package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
- package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
- package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
- package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
- package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
- package/dist/shared/flap/portal-bundle-merkle/core.js +66 -156
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +81 -86
- package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
- package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
- package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
- package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
- package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
- package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
- package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
- package/dist/shared/flap/portal-bundle-merkle/types.d.ts +73 -3
- package/dist/shared/flap/portal-bundle-merkle/utils-helpers.d.ts +100 -0
- package/dist/shared/flap/portal-bundle-merkle/utils-helpers.js +133 -0
- package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
- package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
- package/dist/shared/flap/portal-bundle.js +54 -42
- package/dist/shared/flap/portal.js +32 -10
- package/dist/shared/flap/vanity.js +4 -7
- package/dist/shared/flap/vault.d.ts +1 -1
- package/dist/shared/flap/vault.js +54 -48
- package/dist/shared/flap 2/__tests__/curve.test.d.ts +1 -0
- package/dist/shared/flap 2/portal-bundle-merkle/types.js +1 -0
- package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
- package/dist/shared/foundation/dex/v3-path.js +35 -0
- package/dist/shared/foundation/gas/bundle-gas.d.ts +39 -0
- package/dist/shared/foundation/gas/bundle-gas.js +93 -0
- package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
- package/dist/shared/foundation/gas/profit-hop.js +72 -0
- package/dist/shared/foundation/index.d.ts +13 -0
- package/dist/shared/foundation/index.js +12 -0
- package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
- package/dist/shared/foundation/nonce/nonce-manager.js +180 -0
- package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
- package/dist/shared/foundation/normalize-unknown.js +29 -0
- package/dist/shared/foundation/sdk-logger.d.ts +13 -0
- package/dist/shared/foundation/sdk-logger.js +12 -0
- package/dist/shared/foundation/tx/build-request.d.ts +17 -0
- package/dist/shared/foundation/tx/build-request.js +25 -0
- package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
- package/dist/shared/foundation/tx/sign-batch.js +26 -0
- package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
- package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
- package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
- package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
- package/dist/shared/foundation/types/erc20.d.ts +65 -0
- package/dist/shared/foundation/types/erc20.js +1 -0
- package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
- package/dist/shared/foundation/types/holders-maker.js +1 -0
- package/dist/shared/foundation/types/index.d.ts +7 -0
- package/dist/shared/foundation/types/index.js +1 -0
- package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
- package/dist/shared/foundation/types/lp-inspect.js +1 -0
- package/dist/shared/foundation/types/multicall.d.ts +5 -0
- package/dist/shared/foundation/types/multicall.js +1 -0
- package/dist/shared/foundation/types/private-sale.d.ts +35 -0
- package/dist/shared/foundation/types/private-sale.js +1 -0
- package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
- package/dist/shared/foundation/types/quote-helpers.js +1 -0
- package/dist/shared/four/tax-token.d.ts +1 -1
- package/dist/shared/four/tax-token.js +27 -7
- package/dist/shared/index.d.ts +4 -0
- package/dist/shared/index.js +4 -0
- package/dist/types/distribute.d.ts +72 -0
- package/dist/types/distribute.js +1 -0
- package/dist/types 2/errors.d.ts +27 -0
- package/dist/types 2/errors.js +34 -0
- package/dist/utils/airdrop-sweep-types.d.ts +1 -0
- package/dist/utils/airdrop-sweep-types.js +1 -0
- package/dist/utils/airdrop-sweep.d.ts +4 -76
- package/dist/utils/airdrop-sweep.js +38 -52
- package/dist/utils/bundle-helpers.d.ts +9 -243
- package/dist/utils/bundle-helpers.js +10 -584
- package/dist/utils/constants.d.ts +5 -61
- package/dist/utils/constants.js +5 -80
- package/dist/utils/contract-factory.d.ts +2 -4
- package/dist/utils/contract-factory.js +25 -18
- package/dist/utils/erc20-types.d.ts +1 -0
- package/dist/utils/erc20-types.js +1 -0
- package/dist/utils/erc20.d.ts +8 -90
- package/dist/utils/erc20.js +94 -153
- package/dist/utils/errors.d.ts +10 -22
- package/dist/utils/errors.js +61 -79
- package/dist/utils/holders-maker/addresses.d.ts +12 -0
- package/dist/utils/holders-maker/addresses.js +15 -0
- package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
- package/dist/utils/holders-maker/buy-tx.js +278 -0
- package/dist/utils/holders-maker/constants.d.ts +6 -0
- package/dist/utils/holders-maker/constants.js +7 -0
- package/dist/utils/holders-maker/disperse.d.ts +18 -0
- package/dist/utils/holders-maker/disperse.js +90 -0
- package/dist/utils/holders-maker/routing.d.ts +4 -0
- package/dist/utils/holders-maker/routing.js +45 -0
- package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
- package/dist/utils/holders-maker/transfer-tx.js +67 -0
- package/dist/utils/holders-maker-helpers.d.ts +9 -0
- package/dist/utils/holders-maker-helpers.js +9 -0
- package/dist/utils/holders-maker-types.d.ts +1 -0
- package/dist/utils/holders-maker-types.js +1 -0
- package/dist/utils/holders-maker.d.ts +2 -138
- package/dist/utils/holders-maker.js +23 -651
- package/dist/utils/hop-chains.d.ts +35 -0
- package/dist/utils/hop-chains.js +215 -0
- package/dist/utils/lp-inspect-helpers.d.ts +9 -0
- package/dist/utils/lp-inspect-helpers.js +109 -0
- package/dist/utils/lp-inspect-types.d.ts +1 -0
- package/dist/utils/lp-inspect-types.js +1 -0
- package/dist/utils/lp-inspect.d.ts +2 -112
- package/dist/utils/lp-inspect.js +63 -195
- package/dist/utils/mpcExclusive.d.ts +2 -5
- package/dist/utils/mpcExclusive.js +4 -3
- package/dist/utils/private-sale-types.d.ts +1 -0
- package/dist/utils/private-sale-types.js +1 -0
- package/dist/utils/private-sale.d.ts +2 -58
- package/dist/utils/private-sale.js +2 -7
- package/dist/utils/provider-factory.d.ts +4 -0
- package/dist/utils/provider-factory.js +10 -0
- package/dist/utils/quote-helpers-types.d.ts +1 -0
- package/dist/utils/quote-helpers-types.js +1 -0
- package/dist/utils/quote-helpers.d.ts +4 -45
- package/dist/utils/quote-helpers.js +15 -65
- package/dist/utils/stealth-transfer.d.ts +2 -28
- package/dist/utils/stealth-transfer.js +30 -14
- package/dist/utils/swap-helpers.d.ts +0 -3
- package/dist/utils/swap-helpers.js +6 -9
- package/dist/utils/types/airdrop-sweep.d.ts +1 -0
- package/dist/utils/types/airdrop-sweep.js +1 -0
- package/dist/utils/types/contract-factory.d.ts +1 -0
- package/dist/utils/types/contract-factory.js +1 -0
- package/dist/utils/types/erc20.d.ts +1 -0
- package/dist/utils/types/erc20.js +1 -0
- package/dist/utils/types/errors.d.ts +1 -0
- package/dist/utils/types/errors.js +1 -0
- package/dist/utils/types/holders-maker.d.ts +1 -0
- package/dist/utils/types/holders-maker.js +1 -0
- package/dist/utils/types/hop-chains.d.ts +8 -0
- package/dist/utils/types/hop-chains.js +1 -0
- package/dist/utils/types/index.d.ts +13 -0
- package/dist/utils/types/index.js +1 -0
- package/dist/utils/types/lp-inspect.d.ts +1 -0
- package/dist/utils/types/lp-inspect.js +1 -0
- package/dist/utils/types/mpc-exclusive.d.ts +5 -0
- package/dist/utils/types/mpc-exclusive.js +1 -0
- package/dist/utils/types/private-sale.d.ts +1 -0
- package/dist/utils/types/private-sale.js +1 -0
- package/dist/utils/types/quote-helpers.d.ts +1 -0
- package/dist/utils/types/quote-helpers.js +1 -0
- package/dist/utils/types/stealth-transfer.d.ts +44 -0
- package/dist/utils/types/stealth-transfer.js +1 -0
- package/dist/utils/types/wallet.d.ts +25 -0
- package/dist/utils/types/wallet.js +1 -0
- package/dist/utils/wallet.d.ts +2 -25
- package/dist/utils/wallet.js +9 -10
- package/package.json +55 -2
- package/src/abis/contracts/TaxToken.json +969 -0
- package/src/abis/contracts/TokenManager.json +836 -0
- package/src/abis/contracts/TokenManager2.json +136 -0
- package/src/abis/contracts/TokenManagerHelper3.json +993 -0
- /package/dist/{shared 2/flap/__tests__/curve.test.d.ts → bundle-core/__tests__/config-helpers.test.d.ts} +0 -0
- /package/dist/{shared 2/flap/portal-bundle-merkle/types.js → bundle-core/__tests__/facade-parity.test.d.ts} +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/TaxToken.json +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/TokenManager.json +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/TokenManager2.json +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/TokenManagerHelper3.json +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/common.d.ts +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/common.js +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/index.d.ts +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/index.js +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/blockrazor.d.ts +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/blockrazor.js +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/club48.d.ts +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/club48.js +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/emitservice.d.ts +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/emitservice.js +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/four.d.ts +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/four.js +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/merkle.d.ts +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/merkle.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/__tests__/curve.test.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/abi.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/abi.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/constants.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/constants.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/curve.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/curve.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/errors.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/errors.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/index.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/index.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/ipfs.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/ipfs.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/meta.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/meta.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/permit.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/permit.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/pinata.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/pinata.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/config.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/config.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/core.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/core.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/create-to-dex.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/create-to-dex.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/curve-to-dex.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/curve-to-dex.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/index.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/index.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/pancake-proxy.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/pancake-proxy.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/private.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/private.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap-buy-first.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap-buy-first.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/types.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/utils.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/utils.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/vanity.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/vanity.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/vault.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/vault.js +0 -0
- /package/dist/{shared 2/four → shared/four 2}/index.d.ts +0 -0
- /package/dist/{shared 2/four → shared/four 2}/index.js +0 -0
- /package/dist/{shared 2/four → shared/four 2}/tax-token.d.ts +0 -0
- /package/dist/{shared 2/four → shared/four 2}/tax-token.js +0 -0
- /package/dist/{shared 2/index.d.ts → shared/index 2.js} +0 -0
- /package/dist/{shared 2/index.js → shared/index.d 2.ts} +0 -0
|
@@ -1,80 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
export type BundleSubmitResult = {
|
|
4
|
-
bundleUuid: string;
|
|
5
|
-
signedTxs: string[];
|
|
6
|
-
};
|
|
7
|
-
/** ✅ 签名结果(精简版 - 仅返回签名交易) */
|
|
8
|
-
export type SignedTransactionsResult = {
|
|
9
|
-
signedTransactions: string[];
|
|
10
|
-
};
|
|
11
|
-
/** ✅ 分散参数(完整版 - 包含 Bundle 提交) */
|
|
12
|
-
export type DisperseParams = {
|
|
13
|
-
rpcUrl: string;
|
|
14
|
-
chainId: number;
|
|
15
|
-
fromPrivateKey: string;
|
|
16
|
-
recipients: string[];
|
|
17
|
-
amount?: string;
|
|
18
|
-
amounts?: string[];
|
|
19
|
-
tokenAddress?: string;
|
|
20
|
-
bundleEndpoint?: string;
|
|
21
|
-
gasPriceGwei?: string;
|
|
22
|
-
transferGasLimit?: bigint;
|
|
23
|
-
nativeGasLimit?: bigint;
|
|
24
|
-
blockOffset?: number;
|
|
25
|
-
spMode?: SoulPointSignatureMode;
|
|
26
|
-
spPrivateKey?: string;
|
|
27
|
-
spVMode?: VNormalizationMode;
|
|
28
|
-
};
|
|
29
|
-
/** ✅ 分散参数(精简版 - 仅签名) */
|
|
30
|
-
export type DisperseSignParams = {
|
|
31
|
-
rpcUrl: string;
|
|
32
|
-
chainId: number;
|
|
33
|
-
fromPrivateKey: string;
|
|
34
|
-
recipients: string[];
|
|
35
|
-
amount?: string;
|
|
36
|
-
amounts?: string[];
|
|
37
|
-
tokenAddress?: string;
|
|
38
|
-
gasPriceGwei?: string;
|
|
39
|
-
transferGasLimit?: bigint;
|
|
40
|
-
nativeGasLimit?: bigint;
|
|
41
|
-
};
|
|
42
|
-
export declare function disperseWithBundle(params: DisperseSignParams): Promise<SignedTransactionsResult>;
|
|
43
|
-
/** ✅ 归集参数(完整版 - 包含 Bundle 提交) */
|
|
44
|
-
export type SweepParams = {
|
|
45
|
-
rpcUrl: string;
|
|
46
|
-
chainId: number;
|
|
47
|
-
sourcePrivateKeys: string[];
|
|
48
|
-
target: string;
|
|
49
|
-
ratioPct?: number;
|
|
50
|
-
amount?: string;
|
|
51
|
-
tokenAddress?: string;
|
|
52
|
-
bundleEndpoint?: string;
|
|
53
|
-
gasPriceGwei?: string;
|
|
54
|
-
transferGasLimit?: bigint;
|
|
55
|
-
nativeGasLimit?: bigint;
|
|
56
|
-
blockOffset?: number;
|
|
57
|
-
skipIfInsufficient?: boolean;
|
|
58
|
-
spMode?: SoulPointSignatureMode;
|
|
59
|
-
spPrivateKey?: string;
|
|
60
|
-
spVMode?: VNormalizationMode;
|
|
61
|
-
};
|
|
62
|
-
/** ✅ 归集参数(精简版 - 仅签名) */
|
|
63
|
-
export type SweepSignParams = {
|
|
64
|
-
rpcUrl: string;
|
|
65
|
-
chainId: number;
|
|
66
|
-
sourcePrivateKeys: string[];
|
|
67
|
-
target: string;
|
|
68
|
-
ratioPct?: number;
|
|
69
|
-
amount?: string;
|
|
70
|
-
tokenAddress?: string;
|
|
71
|
-
gasPriceGwei?: string;
|
|
72
|
-
transferGasLimit?: bigint;
|
|
73
|
-
nativeGasLimit?: bigint;
|
|
74
|
-
skipIfInsufficient?: boolean;
|
|
75
|
-
};
|
|
1
|
+
import type { AirdropDisperseSignParams, SignedTransactionsResult, AirdropSweepSignParams } from './types/airdrop-sweep.js';
|
|
2
|
+
export declare function disperseWithBundle(params: AirdropDisperseSignParams): Promise<SignedTransactionsResult>;
|
|
76
3
|
/**
|
|
77
4
|
* 归集(仅签名版本 - 不提交 Bundle)
|
|
78
5
|
* ✅ 精简版:只负责签名交易,不提交
|
|
79
6
|
*/
|
|
80
|
-
export declare function sweepWithBundle(params:
|
|
7
|
+
export declare function sweepWithBundle(params: AirdropSweepSignParams): Promise<SignedTransactionsResult>;
|
|
8
|
+
export type { BundleSubmitResult, SignedTransactionsResult, AirdropDisperseParams, AirdropDisperseSignParams, AirdropSweepParams, AirdropSweepSignParams, DisperseParams, DisperseSignParams, SweepParams, SweepSignParams, } from './types/airdrop-sweep.js';
|
|
@@ -1,34 +1,15 @@
|
|
|
1
1
|
import { ethers, JsonRpcProvider } from 'ethers';
|
|
2
|
-
import { GAS_LIMITS } from '../shared/constants/index.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
if (!Number.isFinite(d) || d < 0 || d > 36)
|
|
8
|
-
return 18;
|
|
9
|
-
return d;
|
|
10
|
-
}
|
|
11
|
-
catch {
|
|
12
|
-
return 18;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* 分散(仅签名版本 - 不提交 Bundle)
|
|
17
|
-
* ✅ 精简版:只负责签名交易,不提交
|
|
18
|
-
*/
|
|
19
|
-
/** ENI Chain ID — EIP-1559 (type 2) */
|
|
20
|
-
const ENI_CHAIN_ID = 173;
|
|
21
|
-
function getTxType(chainId) {
|
|
22
|
-
return chainId === ENI_CHAIN_ID ? 2 : 0;
|
|
23
|
-
}
|
|
24
|
-
function buildGasFields(txType, gasPrice) {
|
|
25
|
-
if (txType === 2) {
|
|
26
|
-
return { type: 2, maxFeePerGas: gasPrice, maxPriorityFeePerGas: gasPrice / 10n || 1n };
|
|
27
|
-
}
|
|
28
|
-
return { type: 0, gasPrice };
|
|
2
|
+
import { GAS_LIMITS, isEniChain } from '../shared/constants/index.js';
|
|
3
|
+
import { buildGasFields } from '../shared/foundation/gas/bundle-gas.js';
|
|
4
|
+
import { getErc20Decimals } from '../bundle-core/internal.js';
|
|
5
|
+
function getTxTypeForChain(chainId) {
|
|
6
|
+
return isEniChain(chainId) ? 2 : 0;
|
|
29
7
|
}
|
|
8
|
+
// ==========================================
|
|
9
|
+
// 通用:原生/代币 一键分散 & 一键归集(Bundle)
|
|
10
|
+
// ==========================================
|
|
30
11
|
export async function disperseWithBundle(params) {
|
|
31
|
-
const { rpcUrl, chainId, fromPrivateKey, recipients, amount, amounts, tokenAddress, gasPriceGwei, transferGasLimit = GAS_LIMITS.ERC20_TRANSFER, nativeGasLimit = GAS_LIMITS.BRIBE } = params;
|
|
12
|
+
const { rpcUrl, chainId, fromPrivateKey, recipients, amount, amounts, tokenAddress, gasPriceGwei, transferGasLimit = GAS_LIMITS.ERC20_TRANSFER, nativeGasLimit = GAS_LIMITS.BRIBE, } = params;
|
|
32
13
|
if (!recipients || recipients.length === 0) {
|
|
33
14
|
return { signedTransactions: [] };
|
|
34
15
|
}
|
|
@@ -36,14 +17,14 @@ export async function disperseWithBundle(params) {
|
|
|
36
17
|
const wallet = new ethers.Wallet(fromPrivateKey, provider);
|
|
37
18
|
const gasPrice = gasPriceGwei && gasPriceGwei.trim().length > 0
|
|
38
19
|
? ethers.parseUnits(gasPriceGwei, 'gwei')
|
|
39
|
-
: (await provider.getFeeData()).gasPrice ?? ethers.parseUnits('1', 'gwei');
|
|
20
|
+
: ((await provider.getFeeData()).gasPrice ?? ethers.parseUnits('1', 'gwei'));
|
|
40
21
|
// 规范化 amounts:优先使用数组;否则将单值扩展为数组
|
|
41
22
|
const useAmountsArray = Array.isArray(amounts) && amounts.length > 0;
|
|
42
23
|
const effAmounts = useAmountsArray
|
|
43
24
|
? amounts
|
|
44
|
-
:
|
|
25
|
+
: typeof amount === 'string' && amount.trim().length > 0
|
|
45
26
|
? new Array(recipients.length).fill(amount)
|
|
46
|
-
: []
|
|
27
|
+
: [];
|
|
47
28
|
if (effAmounts.length !== recipients.length) {
|
|
48
29
|
throw new Error('recipients and amounts length mismatch');
|
|
49
30
|
}
|
|
@@ -51,7 +32,7 @@ export async function disperseWithBundle(params) {
|
|
|
51
32
|
const signedTxs = [];
|
|
52
33
|
if (isNative) {
|
|
53
34
|
const baseNonce = await provider.getTransactionCount(wallet.address, 'pending');
|
|
54
|
-
const txType =
|
|
35
|
+
const txType = getTxTypeForChain(chainId);
|
|
55
36
|
const signedTxList = await Promise.all(recipients.map(async (to, i) => {
|
|
56
37
|
const amountWei = ethers.parseEther(effAmounts[i]);
|
|
57
38
|
return wallet.signTransaction({
|
|
@@ -69,10 +50,10 @@ export async function disperseWithBundle(params) {
|
|
|
69
50
|
// ✅ 并行获取 decimals 和 nonce
|
|
70
51
|
const [decimals, baseNonce] = await Promise.all([
|
|
71
52
|
getErc20Decimals(provider, tokenAddress),
|
|
72
|
-
provider.getTransactionCount(wallet.address, 'pending')
|
|
53
|
+
provider.getTransactionCount(wallet.address, 'pending'),
|
|
73
54
|
]);
|
|
74
55
|
const iface = new ethers.Interface(['function transfer(address,uint256) returns (bool)']);
|
|
75
|
-
const txType =
|
|
56
|
+
const txType = getTxTypeForChain(chainId);
|
|
76
57
|
const signedTxList = await Promise.all(recipients.map(async (to, i) => {
|
|
77
58
|
const amountWei = ethers.parseUnits(effAmounts[i], decimals);
|
|
78
59
|
const data = iface.encodeFunctionData('transfer', [to, amountWei]);
|
|
@@ -96,14 +77,14 @@ export async function disperseWithBundle(params) {
|
|
|
96
77
|
* ✅ 精简版:只负责签名交易,不提交
|
|
97
78
|
*/
|
|
98
79
|
export async function sweepWithBundle(params) {
|
|
99
|
-
const { rpcUrl, chainId, sourcePrivateKeys, target, ratioPct, amount, tokenAddress, gasPriceGwei, transferGasLimit = GAS_LIMITS.ERC20_TRANSFER, nativeGasLimit = GAS_LIMITS.BRIBE, skipIfInsufficient = true } = params;
|
|
80
|
+
const { rpcUrl, chainId, sourcePrivateKeys, target, ratioPct, amount, tokenAddress, gasPriceGwei, transferGasLimit = GAS_LIMITS.ERC20_TRANSFER, nativeGasLimit = GAS_LIMITS.BRIBE, skipIfInsufficient = true, } = params;
|
|
100
81
|
if (!sourcePrivateKeys || sourcePrivateKeys.length === 0) {
|
|
101
82
|
return { signedTransactions: [] };
|
|
102
83
|
}
|
|
103
84
|
const provider = new JsonRpcProvider(rpcUrl, chainId);
|
|
104
85
|
const gasPrice = gasPriceGwei && gasPriceGwei.trim().length > 0
|
|
105
86
|
? ethers.parseUnits(gasPriceGwei, 'gwei')
|
|
106
|
-
: (await provider.getFeeData()).gasPrice ?? ethers.parseUnits('1', 'gwei');
|
|
87
|
+
: ((await provider.getFeeData()).gasPrice ?? ethers.parseUnits('1', 'gwei'));
|
|
107
88
|
const isNative = !tokenAddress || tokenAddress.trim().length === 0;
|
|
108
89
|
const signedTxs = [];
|
|
109
90
|
const clampRatio = (n) => {
|
|
@@ -118,18 +99,18 @@ export async function sweepWithBundle(params) {
|
|
|
118
99
|
const ratio = clampRatio(ratioPct);
|
|
119
100
|
if (isNative) {
|
|
120
101
|
// ✅ 并行处理所有源钱包
|
|
121
|
-
const wallets = sourcePrivateKeys.map(pk => new ethers.Wallet(pk, provider));
|
|
102
|
+
const wallets = sourcePrivateKeys.map((pk) => new ethers.Wallet(pk, provider));
|
|
122
103
|
const gasCost = nativeGasLimit * gasPrice;
|
|
123
104
|
// 并行获取所有余额和 nonce
|
|
124
105
|
const [balances, nonces] = await Promise.all([
|
|
125
|
-
Promise.all(wallets.map(w => provider.getBalance(w.address).catch(() => 0n))),
|
|
126
|
-
Promise.all(wallets.map(w => provider.getTransactionCount(w.address, 'pending')))
|
|
106
|
+
Promise.all(wallets.map((w) => provider.getBalance(w.address).catch(() => 0n))),
|
|
107
|
+
Promise.all(wallets.map((w) => provider.getTransactionCount(w.address, 'pending'))),
|
|
127
108
|
]);
|
|
128
109
|
// 计算每个钱包的发送金额
|
|
129
|
-
const sendAmounts = balances.map(bal => {
|
|
110
|
+
const sendAmounts = balances.map((bal) => {
|
|
130
111
|
if (ratio !== undefined) {
|
|
131
112
|
const want = (bal * BigInt(ratio)) / 100n;
|
|
132
|
-
const maxSendable = bal > gasCost ?
|
|
113
|
+
const maxSendable = bal > gasCost ? bal - gasCost : 0n;
|
|
133
114
|
return want > maxSendable ? maxSendable : want;
|
|
134
115
|
}
|
|
135
116
|
else if (amount && amount.trim().length > 0) {
|
|
@@ -140,9 +121,9 @@ export async function sweepWithBundle(params) {
|
|
|
140
121
|
}
|
|
141
122
|
return 0n;
|
|
142
123
|
});
|
|
143
|
-
const txType =
|
|
144
|
-
const validIndices = sendAmounts.map((amt, i) => amt > 0n ? i : -1).filter(i => i >= 0);
|
|
145
|
-
const signedTxList = await Promise.all(validIndices.map(i => wallets[i].signTransaction({
|
|
124
|
+
const txType = getTxTypeForChain(chainId);
|
|
125
|
+
const validIndices = sendAmounts.map((amt, i) => (amt > 0n ? i : -1)).filter((i) => i >= 0);
|
|
126
|
+
const signedTxList = await Promise.all(validIndices.map((i) => wallets[i].signTransaction({
|
|
146
127
|
to: target,
|
|
147
128
|
value: sendAmounts[i],
|
|
148
129
|
nonce: nonces[i],
|
|
@@ -153,8 +134,11 @@ export async function sweepWithBundle(params) {
|
|
|
153
134
|
signedTxs.push(...signedTxList);
|
|
154
135
|
}
|
|
155
136
|
else {
|
|
156
|
-
const wallets = sourcePrivateKeys.map(pk => new ethers.Wallet(pk, provider));
|
|
157
|
-
const iface = new ethers.Interface([
|
|
137
|
+
const wallets = sourcePrivateKeys.map((pk) => new ethers.Wallet(pk, provider));
|
|
138
|
+
const iface = new ethers.Interface([
|
|
139
|
+
'function balanceOf(address) view returns (uint256)',
|
|
140
|
+
'function transfer(address,uint256) returns (bool)',
|
|
141
|
+
]);
|
|
158
142
|
// ✅ 并行获取 decimals、所有代币余额和 nonce
|
|
159
143
|
const [decimals, balanceResults, nonces] = await Promise.all([
|
|
160
144
|
getErc20Decimals(provider, tokenAddress),
|
|
@@ -169,10 +153,10 @@ export async function sweepWithBundle(params) {
|
|
|
169
153
|
return 0n;
|
|
170
154
|
}
|
|
171
155
|
})),
|
|
172
|
-
Promise.all(wallets.map(w => provider.getTransactionCount(w.address, 'pending')))
|
|
156
|
+
Promise.all(wallets.map((w) => provider.getTransactionCount(w.address, 'pending'))),
|
|
173
157
|
]);
|
|
174
158
|
// 计算每个钱包的发送金额
|
|
175
|
-
const sendAmounts = balanceResults.map(bal => {
|
|
159
|
+
const sendAmounts = balanceResults.map((bal) => {
|
|
176
160
|
if (ratio !== undefined) {
|
|
177
161
|
return (bal * BigInt(ratio)) / 100n;
|
|
178
162
|
}
|
|
@@ -184,15 +168,17 @@ export async function sweepWithBundle(params) {
|
|
|
184
168
|
return 0n;
|
|
185
169
|
});
|
|
186
170
|
// 过滤余额不足的钱包
|
|
187
|
-
const validIndices = sendAmounts
|
|
171
|
+
const validIndices = sendAmounts
|
|
172
|
+
.map((amt, i) => {
|
|
188
173
|
if (amt <= 0n)
|
|
189
174
|
return -1;
|
|
190
175
|
if (skipIfInsufficient && balanceResults[i] < amt)
|
|
191
176
|
return -1;
|
|
192
177
|
return i;
|
|
193
|
-
})
|
|
194
|
-
|
|
195
|
-
const
|
|
178
|
+
})
|
|
179
|
+
.filter((i) => i >= 0);
|
|
180
|
+
const txType = getTxTypeForChain(chainId);
|
|
181
|
+
const signedTxList = await Promise.all(validIndices.map((i) => {
|
|
196
182
|
const data = iface.encodeFunctionData('transfer', [target, sendAmounts[i]]);
|
|
197
183
|
return wallets[i].signTransaction({
|
|
198
184
|
to: tokenAddress,
|
|
@@ -1,244 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Bundle 交易辅助工具
|
|
3
|
-
*
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
* 策略:
|
|
12
|
-
* 1. 每次获取 nonce 时查询链上状态(使用 'pending' 包含待处理交易)
|
|
13
|
-
* 2. 仅在同一批次内维护临时递增缓存
|
|
14
|
-
* 3. 不持久化缓存,避免因失败交易导致 nonce 过高
|
|
15
|
-
*/
|
|
16
|
-
export declare class NonceManager {
|
|
17
|
-
private provider;
|
|
18
|
-
private tempNonceCache;
|
|
19
|
-
private chainIdPromise?;
|
|
20
|
-
constructor(provider: JsonRpcProvider);
|
|
21
|
-
private getChainId;
|
|
22
|
-
/**
|
|
23
|
-
* 获取下一个可用的 nonce
|
|
24
|
-
* @param wallet 钱包对象或地址
|
|
25
|
-
* @returns 下一个 nonce
|
|
26
|
-
*/
|
|
27
|
-
getNextNonce(wallet: Wallet | string): Promise<number>;
|
|
28
|
-
/**
|
|
29
|
-
* 批量获取连续 nonce(推荐用于同一地址的批量交易)
|
|
30
|
-
* @param wallet 钱包对象或地址
|
|
31
|
-
* @param count 需要的 nonce 数量
|
|
32
|
-
* @returns nonce 数组
|
|
33
|
-
*/
|
|
34
|
-
getNextNonceBatch(wallet: Wallet | string, count: number): Promise<number[]>;
|
|
35
|
-
/**
|
|
36
|
-
* 清空临时缓存(建议在每次 bundle 提交后调用)
|
|
37
|
-
*/
|
|
38
|
-
clearTemp(): void;
|
|
39
|
-
/**
|
|
40
|
-
* 获取当前临时缓存的 nonce(调试用)
|
|
41
|
-
*/
|
|
42
|
-
getTempCachedNonce(address: string): number | undefined;
|
|
43
|
-
/**
|
|
44
|
-
* ✅ 批量获取多个不同地址的 nonce(真正的单次 JSON-RPC 批量请求)
|
|
45
|
-
* 使用 provider.send 发送批量请求,N 个地址只需 1 次网络往返
|
|
46
|
-
* @param wallets 钱包数组
|
|
47
|
-
* @returns nonce 数组(顺序与 wallets 对应)
|
|
48
|
-
*/
|
|
49
|
-
getNextNoncesForWallets(wallets: (Wallet | string)[]): Promise<number[]>;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Gas 价格配置
|
|
53
|
-
*/
|
|
54
|
-
export interface GasPriceConfig {
|
|
55
|
-
/** 基础 gas price(如果不提供则从链上获取) */
|
|
56
|
-
baseGasPrice?: bigint;
|
|
57
|
-
/** Gas price 增幅百分比(默认 50,即提高 50%) */
|
|
58
|
-
multiplierPercent?: number;
|
|
59
|
-
/** 最小 gas price */
|
|
60
|
-
minGasPrice?: bigint;
|
|
61
|
-
/** 最大 gas price */
|
|
62
|
-
maxGasPrice?: bigint;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* 获取优化后的 Gas Price
|
|
66
|
-
* @param provider Provider 实例
|
|
67
|
-
* @param config Gas 配置
|
|
68
|
-
* @returns Gas price
|
|
69
|
-
*/
|
|
70
|
-
export declare function getOptimizedGasPrice(provider: JsonRpcProvider, config?: GasPriceConfig): Promise<bigint>;
|
|
71
|
-
/**
|
|
72
|
-
* Gas 估算配置
|
|
73
|
-
*/
|
|
74
|
-
export interface GasEstimateConfig {
|
|
75
|
-
/** Gas limit 安全余量倍数(默认 1.2 = 20%) */
|
|
76
|
-
multiplier?: number;
|
|
77
|
-
/** 失败时的默认 gas limit */
|
|
78
|
-
fallbackGasLimit?: bigint;
|
|
79
|
-
/** 是否允许估算失败 */
|
|
80
|
-
allowFailure?: boolean;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* 估算 gas 并应用安全余量
|
|
84
|
-
* @param provider Provider 实例
|
|
85
|
-
* @param txRequest 交易请求
|
|
86
|
-
* @param config Gas 估算配置
|
|
87
|
-
* @returns Gas limit
|
|
88
|
-
*/
|
|
89
|
-
export declare function estimateGasWithSafety(provider: JsonRpcProvider, txRequest: ethers.TransactionLike, config?: GasEstimateConfig): Promise<bigint>;
|
|
90
|
-
/**
|
|
91
|
-
* 批量估算 gas(并行)
|
|
92
|
-
* @param provider Provider 实例
|
|
93
|
-
* @param txRequests 交易请求数组
|
|
94
|
-
* @param config Gas 估算配置
|
|
95
|
-
* @returns Gas limit 数组
|
|
96
|
-
*/
|
|
97
|
-
export declare function estimateGasBatch(provider: JsonRpcProvider, txRequests: ethers.TransactionLike[], config?: GasEstimateConfig): Promise<bigint[]>;
|
|
98
|
-
/**
|
|
99
|
-
* 构建交易对象
|
|
100
|
-
*/
|
|
101
|
-
export interface BuildTransactionOptions {
|
|
102
|
-
from: string;
|
|
103
|
-
to?: string;
|
|
104
|
-
data?: string;
|
|
105
|
-
value?: bigint;
|
|
106
|
-
nonce: number;
|
|
107
|
-
gasPrice: bigint;
|
|
108
|
-
gasLimit: bigint;
|
|
109
|
-
chainId: number;
|
|
110
|
-
type?: 0 | 2;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* 构建标准交易对象
|
|
114
|
-
* @param options 交易选项
|
|
115
|
-
* @returns 交易对象
|
|
116
|
-
*/
|
|
117
|
-
export declare function buildTransaction(options: BuildTransactionOptions): ethers.TransactionLike;
|
|
118
|
-
/**
|
|
119
|
-
* 通用配置接口(用于提取公共配置字段)
|
|
120
|
-
*/
|
|
121
|
-
export interface CommonBundleConfig {
|
|
122
|
-
gasLimit?: number;
|
|
123
|
-
gasLimitMultiplier?: number;
|
|
124
|
-
minGasPriceGwei?: number;
|
|
125
|
-
maxGasPriceGwei?: number;
|
|
126
|
-
txType?: 0 | 2;
|
|
127
|
-
chainId?: number;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* 获取 Gas Limit
|
|
131
|
-
* 优先使用 config.gasLimit,否则使用默认值 * multiplier
|
|
132
|
-
*/
|
|
133
|
-
export declare function getGasLimit(config: CommonBundleConfig, defaultGas?: number): bigint;
|
|
134
|
-
/**
|
|
135
|
-
* 获取 Gas Price 配置(转换为 GasPriceConfig)
|
|
136
|
-
*/
|
|
137
|
-
export declare function getGasPriceConfig(config: CommonBundleConfig): GasPriceConfig;
|
|
138
|
-
/**
|
|
139
|
-
* 获取交易类型
|
|
140
|
-
*/
|
|
141
|
-
export declare function getTxType(config: CommonBundleConfig): 0 | 2;
|
|
142
|
-
/**
|
|
143
|
-
* 根据交易类型构建 gas 字段
|
|
144
|
-
* type 0 (Legacy): 使用 gasPrice
|
|
145
|
-
* type 2 (EIP-1559): 使用 maxFeePerGas + maxPriorityFeePerGas
|
|
146
|
-
*
|
|
147
|
-
* BaseWallet.signTransaction -> Transaction.from() 不会自动转换
|
|
148
|
-
* gasPrice 到 maxFeePerGas,必须显式传入正确字段
|
|
149
|
-
*/
|
|
150
|
-
export declare function buildGasFields(txType: number, gasPrice: bigint): Record<string, unknown>;
|
|
151
|
-
/**
|
|
152
|
-
* 获取链 ID(从 provider 或 config)
|
|
153
|
-
*/
|
|
154
|
-
export declare function getChainId(provider: JsonRpcProvider, configChainId?: number): Promise<number>;
|
|
155
|
-
/**
|
|
156
|
-
* 并行签名多个交易
|
|
157
|
-
* @param wallet 钱包
|
|
158
|
-
* @param transactions 交易数组
|
|
159
|
-
* @returns 已签名的交易数组
|
|
160
|
-
*/
|
|
161
|
-
export declare function signTransactionsBatch(wallet: Wallet, transactions: ethers.TransactionLike[]): Promise<string[]>;
|
|
162
|
-
/**
|
|
163
|
-
* 批量签名(支持多个钱包)
|
|
164
|
-
* @param wallets 钱包数组
|
|
165
|
-
* @param transactions 交易数组(必须与钱包一一对应)
|
|
166
|
-
* @returns 已签名的交易数组
|
|
167
|
-
*/
|
|
168
|
-
export declare function signTransactionsBatchMultiWallet(wallets: Wallet[], transactions: ethers.TransactionLike[]): Promise<string[]>;
|
|
169
|
-
/**
|
|
170
|
-
* 验证已签名交易的格式
|
|
171
|
-
* @param signedTxs 已签名的交易数组
|
|
172
|
-
* @returns 是否全部有效
|
|
173
|
-
*/
|
|
174
|
-
export declare function validateSignedTransactions(signedTxs: string[]): boolean;
|
|
175
|
-
/**
|
|
176
|
-
* 获取交易 deadline(Unix 时间戳秒)
|
|
177
|
-
* @param minutes 有效分钟数,默认 20
|
|
178
|
-
* @returns Unix 时间戳(秒)
|
|
179
|
-
*/
|
|
180
|
-
export declare function getDeadline(minutes?: number): number;
|
|
181
|
-
/**
|
|
182
|
-
* 编码 V3 多跳 path
|
|
183
|
-
* 格式:token0 (20 bytes) + fee (3 bytes) + token1 (20 bytes) + fee (3 bytes) + token2 (20 bytes) ...
|
|
184
|
-
*
|
|
185
|
-
* @param tokens 代币地址数组 [tokenIn, tokenMid1, tokenMid2, ..., tokenOut]
|
|
186
|
-
* @param fees 费率数组 [fee0, fee1, ...] - 长度应该是 tokens.length - 1
|
|
187
|
-
* @returns 编码后的 path(hex string)
|
|
188
|
-
*
|
|
189
|
-
* @example
|
|
190
|
-
* // WBNB → USDT(500) → TOKEN(2500)
|
|
191
|
-
* encodeV3Path(['0xWBNB...', '0xUSDT...', '0xTOKEN...'], [500, 2500])
|
|
192
|
-
*/
|
|
193
|
-
export declare function encodeV3Path(tokens: string[], fees: number[]): string;
|
|
194
|
-
/**
|
|
195
|
-
* 解码 V3 path 为代币和费率数组
|
|
196
|
-
* @param path 编码后的 path
|
|
197
|
-
* @returns { tokens, fees }
|
|
198
|
-
*/
|
|
199
|
-
export declare function decodeV3Path(path: string): {
|
|
200
|
-
tokens: string[];
|
|
201
|
-
fees: number[];
|
|
202
|
-
};
|
|
203
|
-
/**
|
|
204
|
-
* 利润多跳转账配置
|
|
205
|
-
*/
|
|
206
|
-
export interface ProfitHopConfig {
|
|
207
|
-
provider: JsonRpcProvider;
|
|
208
|
-
payerWallet: Wallet;
|
|
209
|
-
profitAmount: bigint;
|
|
210
|
-
profitRecipient: string;
|
|
211
|
-
hopCount?: number;
|
|
212
|
-
gasPrice: bigint;
|
|
213
|
-
chainId: number;
|
|
214
|
-
txType: number;
|
|
215
|
-
startNonce?: number;
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* 利润多跳结果
|
|
219
|
-
*/
|
|
220
|
-
export interface ProfitHopResult {
|
|
221
|
-
signedTransactions: string[];
|
|
222
|
-
hopWallets: GeneratedWallet[];
|
|
223
|
-
totalNonceUsed: number;
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* 强制 2 跳的利润转账常量
|
|
227
|
-
*/
|
|
228
|
-
export declare const PROFIT_HOP_COUNT = 2;
|
|
229
|
-
/**
|
|
230
|
-
* 生成利润转账交易
|
|
231
|
-
*
|
|
232
|
-
* BSC 链:使用多跳转账
|
|
233
|
-
* 流程(2 跳):
|
|
234
|
-
* 1. 支付者 → 中转1(gas + 利润 + 中转1的gas)
|
|
235
|
-
* 2. 中转1 → 中转2(gas + 利润)
|
|
236
|
-
* 3. 中转2 → 利润地址(利润)
|
|
237
|
-
*
|
|
238
|
-
* 其他链:直接转账到收益地址
|
|
239
|
-
* 流程:支付者 → 利润地址
|
|
240
|
-
*
|
|
241
|
-
* @param config 配置参数
|
|
242
|
-
* @returns 签名交易和中转钱包私钥
|
|
243
|
-
*/
|
|
244
|
-
export declare function buildProfitHopTransactions(config: ProfitHopConfig): Promise<ProfitHopResult>;
|
|
2
|
+
* Bundle 交易辅助工具 — 实现已迁至 shared/foundation/
|
|
3
|
+
* 本文件保留 re-export,兼容现有 import 路径。
|
|
4
|
+
*/
|
|
5
|
+
export { NonceManager } from '../shared/foundation/nonce/nonce-manager.js';
|
|
6
|
+
export { type GasPriceConfig, type GasEstimateConfig, type BuildTransactionOptions, type CommonBundleConfig, getOptimizedGasPrice, estimateGasWithSafety, estimateGasBatch, buildTransaction, getGasLimit, getGasPriceConfig, getTxType, buildGasFields, } from '../shared/foundation/gas/bundle-gas.js';
|
|
7
|
+
export { type ProfitHopConfig, type ProfitHopResult, PROFIT_HOP_COUNT, buildProfitHopTransactions, } from '../shared/foundation/gas/profit-hop.js';
|
|
8
|
+
export { getChainId, signTransactionsBatch, signTransactionsBatchMultiWallet, validateSignedTransactions, } from '../shared/foundation/tx/sign-batch.js';
|
|
9
|
+
export { getDeadline, encodeV3Path, decodeV3Path } from '../shared/foundation/dex/v3-path.js';
|
|
10
|
+
import '../shared/foundation/tx/wallet-sign-patch.js';
|