four-flap-meme-sdk 1.9.49 → 2.1.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/__tests__/subpath-exports.test.js +34 -0
- 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.js +60 -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/{shared 2/flap/portal-bundle-merkle/pancake-proxy.js → bundle-core/four-meme/pancake-proxy.js} +277 -299
- 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/{chains/bsc/four/swap/index.js → bundle-core/four-meme/swap.js} +84 -408
- package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
- package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
- package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
- package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
- package/dist/bundle-core/four-meme/types.d.ts +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.d.ts +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/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/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/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 → bundle-swap-helpers.js} +63 -70
- 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/index.d.ts +13 -0
- package/dist/chains/index.js +13 -0
- 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 +29 -46
- package/dist/chains/xlayer/eip7702/index.js +27 -81
- package/dist/chains/xlayer/eip7702/{multi-hop-transfer/types.d.ts → multi-hop-transfer-helpers.d.ts} +17 -23
- 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/types.d.ts → volume-helpers.d.ts} +41 -17
- 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.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/{direct-router/types.d.ts → types.d.ts} +1 -1
- 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/flap/index.d.ts +10 -0
- package/dist/flap/index.js +8 -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 +3 -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/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.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/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.js +18 -0
- package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
- package/dist/{utils/erc20/types.d.ts → shared/foundation/types/erc20.d.ts} +7 -19
- package/dist/{utils/holders-maker/types.d.ts → shared/foundation/types/holders-maker.d.ts} +4 -12
- package/dist/shared/foundation/types/index.d.ts +7 -0
- package/dist/{utils/lp-inspect/types.d.ts → shared/foundation/types/lp-inspect.d.ts} +4 -2
- 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/{utils/quote-helpers/types.d.ts → shared/foundation/types/quote-helpers.d.ts} +1 -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 +6 -0
- package/dist/shared/index.js +4 -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.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.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.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.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.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 +120 -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/chains/bsc/four/submit/blockrazor.d.ts +0 -18
- package/dist/chains/bsc/four/submit/blockrazor.js +0 -86
- package/dist/chains/bsc/four/submit/direct.d.ts +0 -66
- package/dist/chains/bsc/four/submit/direct.js +0 -452
- package/dist/chains/bsc/four/submit/helpers.d.ts +0 -18
- package/dist/chains/bsc/four/submit/helpers.js +0 -57
- package/dist/chains/bsc/four/submit/index.d.ts +0 -12
- package/dist/chains/bsc/four/submit/index.js +0 -11
- package/dist/chains/bsc/four/submit/merkle.d.ts +0 -18
- package/dist/chains/bsc/four/submit/merkle.js +0 -74
- package/dist/chains/bsc/four/submit/types.d.ts +0 -143
- package/dist/chains/bsc/four/swap/index.d.ts +0 -32
- package/dist/chains/bsc/four/swap/types.d.ts +0 -70
- package/dist/chains/bsc/four/utils/index.d.ts +0 -20
- package/dist/chains/bsc/four/utils/index.js +0 -1558
- package/dist/chains/bsc/pancake/bundle-buy-first/index.d.ts +0 -8
- package/dist/chains/bsc/pancake/bundle-buy-first/index.js +0 -907
- package/dist/chains/bsc/pancake/bundle-buy-first/types.d.ts +0 -73
- package/dist/chains/bsc/pancake/bundle-swap/helpers.d.ts +0 -102
- package/dist/chains/bsc/pancake/bundle-swap/index.d.ts +0 -50
- package/dist/chains/bsc/pancake/bundle-swap/index.js +0 -1066
- package/dist/chains/bsc/pancake/bundle-swap/types.d.ts +0 -202
- package/dist/chains/bsc/pancake/bundle-swap/types.js +0 -3
- package/dist/chains/xlayer/eip7702/bundle-swap/index.d.ts +0 -72
- package/dist/chains/xlayer/eip7702/bundle-swap/index.js +0 -921
- package/dist/chains/xlayer/eip7702/bundle-swap/types.d.ts +0 -65
- package/dist/chains/xlayer/eip7702/multi-hop-transfer/index.d.ts +0 -128
- package/dist/chains/xlayer/eip7702/multi-hop-transfer/index.js +0 -857
- package/dist/chains/xlayer/eip7702/volume/index.d.ts +0 -96
- package/dist/chains/xlayer/eip7702/volume/index.js +0 -793
- package/dist/dex/direct-router/index.d.ts +0 -70
- package/dist/dex/direct-router/index.js +0 -1410
- package/dist/shared/abis/TaxToken.json +0 -969
- package/dist/shared/abis/TokenManager.json +0 -836
- package/dist/shared/abis/TokenManager2.json +0 -136
- package/dist/shared/abis/TokenManagerHelper3.json +0 -993
- package/dist/shared/flap/__tests__/curve.test.js +0 -85
- package/dist/shared/flap/portal/index.d.ts +0 -12
- package/dist/shared/flap/portal/index.js +0 -11
- package/dist/shared/flap/portal/portal.d.ts +0 -47
- package/dist/shared/flap/portal/portal.js +0 -218
- package/dist/shared/flap/portal/types.d.ts +0 -227
- package/dist/shared/flap/portal/types.js +0 -80
- package/dist/shared/flap/portal/writer.d.ts +0 -121
- package/dist/shared/flap/portal/writer.js +0 -265
- package/dist/shared/flap/portal-bundle-merkle/core/index.d.ts +0 -18
- package/dist/shared/flap/portal-bundle-merkle/core/index.js +0 -938
- package/dist/shared/flap/portal-bundle-merkle/swap/index.d.ts +0 -42
- package/dist/shared/flap/portal-bundle-merkle/swap/index.js +0 -1448
- package/dist/shared/flap/portal-bundle-merkle/swap/types.d.ts +0 -84
- package/dist/shared/flap/portal-bundle-merkle/utils/index.d.ts +0 -17
- package/dist/shared/flap/portal-bundle-merkle/utils/index.js +0 -1024
- package/dist/shared/flap/portal-bundle-merkle/utils/types.d.ts +0 -16
- package/dist/shared 2/abis/TaxToken.json +0 -105
- package/dist/shared 2/abis/TokenManager.json +0 -836
- package/dist/shared 2/abis/TokenManager2.json +0 -60
- package/dist/shared 2/abis/TokenManagerHelper3.json +0 -993
- package/dist/shared 2/abis/common.d.ts +0 -85
- package/dist/shared 2/abis/common.js +0 -254
- package/dist/shared 2/abis/index.d.ts +0 -8
- package/dist/shared 2/abis/index.js +0 -8
- package/dist/shared 2/clients/blockrazor.d.ts +0 -314
- package/dist/shared 2/clients/blockrazor.js +0 -596
- package/dist/shared 2/clients/club48.d.ts +0 -154
- package/dist/shared 2/clients/club48.js +0 -331
- package/dist/shared 2/clients/emitservice.d.ts +0 -47
- package/dist/shared 2/clients/emitservice.js +0 -44
- package/dist/shared 2/clients/four.d.ts +0 -132
- package/dist/shared 2/clients/four.js +0 -281
- package/dist/shared 2/clients/merkle.d.ts +0 -210
- package/dist/shared 2/clients/merkle.js +0 -400
- package/dist/shared 2/flap/__tests__/curve.test.js +0 -85
- package/dist/shared 2/flap/abi.d.ts +0 -4
- package/dist/shared 2/flap/abi.js +0 -4
- package/dist/shared 2/flap/constants.d.ts +0 -128
- package/dist/shared 2/flap/constants.js +0 -143
- package/dist/shared 2/flap/curve.d.ts +0 -33
- package/dist/shared 2/flap/curve.js +0 -84
- package/dist/shared 2/flap/errors.d.ts +0 -37
- package/dist/shared 2/flap/errors.js +0 -114
- package/dist/shared 2/flap/index.d.ts +0 -22
- package/dist/shared 2/flap/index.js +0 -33
- package/dist/shared 2/flap/ipfs.d.ts +0 -21
- package/dist/shared 2/flap/ipfs.js +0 -38
- package/dist/shared 2/flap/meta.d.ts +0 -30
- package/dist/shared 2/flap/meta.js +0 -195
- package/dist/shared 2/flap/permit.d.ts +0 -16
- package/dist/shared 2/flap/permit.js +0 -67
- package/dist/shared 2/flap/pinata.d.ts +0 -40
- package/dist/shared 2/flap/pinata.js +0 -106
- package/dist/shared 2/flap/portal-bundle-merkle/config.d.ts +0 -79
- package/dist/shared 2/flap/portal-bundle-merkle/config.js +0 -133
- package/dist/shared 2/flap/portal-bundle-merkle/core.d.ts +0 -18
- package/dist/shared 2/flap/portal-bundle-merkle/core.js +0 -938
- package/dist/shared 2/flap/portal-bundle-merkle/create-to-dex.d.ts +0 -125
- package/dist/shared 2/flap/portal-bundle-merkle/create-to-dex.js +0 -665
- package/dist/shared 2/flap/portal-bundle-merkle/curve-to-dex.d.ts +0 -88
- package/dist/shared 2/flap/portal-bundle-merkle/curve-to-dex.js +0 -446
- package/dist/shared 2/flap/portal-bundle-merkle/index.d.ts +0 -14
- package/dist/shared 2/flap/portal-bundle-merkle/index.js +0 -26
- package/dist/shared 2/flap/portal-bundle-merkle/pancake-proxy.d.ts +0 -28
- package/dist/shared 2/flap/portal-bundle-merkle/private.d.ts +0 -17
- package/dist/shared 2/flap/portal-bundle-merkle/private.js +0 -549
- package/dist/shared 2/flap/portal-bundle-merkle/swap-buy-first.d.ts +0 -65
- package/dist/shared 2/flap/portal-bundle-merkle/swap-buy-first.js +0 -831
- package/dist/shared 2/flap/portal-bundle-merkle/swap.d.ts +0 -201
- package/dist/shared 2/flap/portal-bundle-merkle/swap.js +0 -1359
- package/dist/shared 2/flap/portal-bundle-merkle/types.d.ts +0 -358
- package/dist/shared 2/flap/portal-bundle-merkle/utils.d.ts +0 -89
- package/dist/shared 2/flap/portal-bundle-merkle/utils.js +0 -963
- package/dist/shared 2/flap/portal-bundle.d.ts +0 -119
- package/dist/shared 2/flap/portal-bundle.js +0 -584
- package/dist/shared 2/flap/portal.d.ts +0 -392
- package/dist/shared 2/flap/portal.js +0 -559
- package/dist/shared 2/flap/vanity.d.ts +0 -48
- package/dist/shared 2/flap/vanity.js +0 -110
- package/dist/shared 2/flap/vault.d.ts +0 -240
- package/dist/shared 2/flap/vault.js +0 -366
- package/dist/shared 2/four/index.d.ts +0 -7
- package/dist/shared 2/four/index.js +0 -22
- package/dist/shared 2/four/tax-token.d.ts +0 -176
- package/dist/shared 2/four/tax-token.js +0 -302
- package/dist/shared 2/index.d.ts +0 -10
- package/dist/shared 2/index.js +0 -10
- package/dist/utils/__tests__/errors.test.js +0 -76
- package/dist/utils/erc20/index.d.ts +0 -242
- package/dist/utils/erc20/index.js +0 -645
- package/dist/utils/holders-maker/helpers.d.ts +0 -43
- package/dist/utils/holders-maker/helpers.js +0 -371
- package/dist/utils/holders-maker/index.d.ts +0 -26
- package/dist/utils/holders-maker/index.js +0 -218
- package/dist/utils/holders-maker/types.js +0 -4
- package/dist/utils/lp-inspect/index.d.ts +0 -44
- package/dist/utils/lp-inspect/index.js +0 -937
- package/dist/utils/quote-helpers/index.d.ts +0 -107
- package/dist/utils/quote-helpers/index.js +0 -346
- /package/dist/{chains/bsc/four/submit/types.js → __tests__/subpath-exports.test.d.ts} +0 -0
- /package/dist/{chains/bsc/four/swap/types.js → bundle-core/__tests__/config-helpers.test.d.ts} +0 -0
- /package/dist/{chains/bsc/four/utils/types.d.ts → bundle-core/__tests__/facade-parity.test.d.ts} +0 -0
- /package/dist/{chains/bsc/four/utils/types.js → bundle-core/__tests__/sign-context-helpers.test.d.ts} +0 -0
- /package/dist/{chains/bsc/pancake/bundle-buy-first/types.js → bundle-core/__tests__/sign-fixture.test.d.ts} +0 -0
- /package/dist/{chains/xlayer/eip7702/multi-hop-transfer/types.js → bundle-core/four-meme/types/buy-first.js} +0 -0
- /package/dist/{chains/xlayer/eip7702/volume/types.js → bundle-core/four-meme/types/core-flow.js} +0 -0
- /package/dist/{dex/direct-router/types.js → bundle-core/four-meme/types/index.js} +0 -0
- /package/dist/{shared 2/flap/__tests__/curve.test.d.ts → bundle-core/four-meme/types/swap-internal.js} +0 -0
- /package/dist/{chains/xlayer/eip7702/bundle-swap → bundle-core/four-meme}/types.js +0 -0
- /package/dist/{shared/flap/__tests__/curve.test.d.ts → bundle-core/types/index.js} +0 -0
- /package/dist/{shared 2/flap/portal-bundle-merkle → bundle-core}/types.js +0 -0
- /package/dist/{shared/flap/portal-bundle-merkle/core/types.d.ts → chains/xlayer/eip7702/multi-hop-transfer-helpers.js} +0 -0
- /package/dist/{shared/flap/portal-bundle-merkle/core → dex}/types.js +0 -0
- /package/dist/shared/{flap/portal-bundle-merkle/swap/types.js → foundation/tx/wallet-sign-patch.d.ts} +0 -0
- /package/dist/shared/{flap/portal-bundle-merkle/utils/types.js → foundation/types/airdrop-sweep.js} +0 -0
- /package/dist/{utils/__tests__/errors.test.d.ts → shared/foundation/types/erc20.js} +0 -0
- /package/dist/{utils/erc20/types.js → shared/foundation/types/holders-maker.js} +0 -0
- /package/dist/{utils/lp-inspect/types.js → shared/foundation/types/index.js} +0 -0
- /package/dist/{utils/quote-helpers/types.js → shared/foundation/types/lp-inspect.js} +0 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { ethers, Wallet, JsonRpcProvider } from 'ethers';
|
|
2
|
+
import { type GeneratedWallet } from '../../../utils/wallet.js';
|
|
3
|
+
import { NonceManager, CommonBundleConfig } from '../../../utils/bundle-helpers.js';
|
|
4
|
+
export declare const NATIVE_TRANSFER_GAS_LIMIT: 21055n;
|
|
5
|
+
export declare const ERC20_TRANSFER_GAS_LIMIT_HOP: 65000n;
|
|
6
|
+
export declare const BRIBE_GAS_LIMIT: 21000n;
|
|
7
|
+
/**
|
|
8
|
+
* 分发多跳路径信息
|
|
9
|
+
*/
|
|
10
|
+
export type DisperseHopPath = {
|
|
11
|
+
targetAddress: string;
|
|
12
|
+
hopWallets: Wallet[];
|
|
13
|
+
hopWalletsInfo: GeneratedWallet[];
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* 生成分发多跳路径
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateDisperseHopPaths(targetAddresses: string[], hopCount: number, provider: JsonRpcProvider): DisperseHopPath[];
|
|
19
|
+
/**
|
|
20
|
+
* 构建原生代币多跳转账链
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildNativeHopChain(payer: Wallet, path: DisperseHopPath, finalAmount: bigint, gasPrice: bigint, chainId: number, txType: 0 | 2, payerNonce: number): Promise<string[]>;
|
|
23
|
+
/**
|
|
24
|
+
* 构建 ERC20 多跳转账链(需要配合 BNB 多跳使用)
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildERC20HopChain(payer: Wallet, path: DisperseHopPath, erc20Address: string, erc20Amount: bigint, gasPrice: bigint, chainId: number, txType: 0 | 2, payerNonce: number): Promise<string[]>;
|
|
27
|
+
/**
|
|
28
|
+
* 构建 BNB 多跳转账链(为 ERC20 中间钱包预留 gas)
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildBNBHopChainForERC20(payer: Wallet, path: DisperseHopPath, finalGasAmount: bigint, gasPrice: bigint, chainId: number, txType: 0 | 2, payerNonce: number): Promise<string[]>;
|
|
31
|
+
export declare function createPancakeContext(config: PancakeSwapSignConfig): PancakeContext;
|
|
32
|
+
export type QuoteSellParams = {
|
|
33
|
+
routeParams: RouteParams;
|
|
34
|
+
sellAmountWei: bigint;
|
|
35
|
+
provider: ethers.JsonRpcProvider;
|
|
36
|
+
v2RouterAddress?: string;
|
|
37
|
+
};
|
|
38
|
+
export declare function quoteSellOutput({ routeParams, sellAmountWei, provider, v2RouterAddress, }: QuoteSellParams): Promise<QuoteBNBResult>;
|
|
39
|
+
export type BuildSwapParams = {
|
|
40
|
+
routeParams: RouteParams;
|
|
41
|
+
sellAmountWei: bigint;
|
|
42
|
+
buyAmountBNB: bigint;
|
|
43
|
+
buyer: Wallet;
|
|
44
|
+
seller: Wallet;
|
|
45
|
+
tokenAddress: string;
|
|
46
|
+
useNativeToken?: boolean;
|
|
47
|
+
v2RouterAddress?: string;
|
|
48
|
+
};
|
|
49
|
+
export declare function buildSwapTransactions({ routeParams, sellAmountWei, buyAmountBNB, buyer, seller, tokenAddress, useNativeToken, v2RouterAddress, }: BuildSwapParams): Promise<SwapUnsignedResult>;
|
|
50
|
+
export type BuyerBudgetParams = {
|
|
51
|
+
buyer: Wallet;
|
|
52
|
+
quotedBNBOut: bigint;
|
|
53
|
+
reserveGasBNB?: number;
|
|
54
|
+
useNativeToken?: boolean;
|
|
55
|
+
quoteToken?: string;
|
|
56
|
+
quoteTokenDecimals?: number;
|
|
57
|
+
provider?: ethers.JsonRpcProvider;
|
|
58
|
+
};
|
|
59
|
+
export declare function calculateBuyerBudget({ buyer, quotedBNBOut, reserveGasBNB, useNativeToken, quoteToken, quoteTokenDecimals, provider, }: BuyerBudgetParams): Promise<BuyerBudget>;
|
|
60
|
+
export type PlanNonceParams = {
|
|
61
|
+
seller: Wallet;
|
|
62
|
+
buyer: Wallet;
|
|
63
|
+
sameAddress: boolean;
|
|
64
|
+
approvalExists: boolean;
|
|
65
|
+
profitNeeded: boolean;
|
|
66
|
+
needBribeTx: boolean;
|
|
67
|
+
nonceManager: NonceManager;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* ✅ 从前端传入的 startNonces 构建 NoncePlan(用于性能优化)
|
|
71
|
+
* 顺序:[sellerBaseNonce, buyerNonce]
|
|
72
|
+
*/
|
|
73
|
+
export declare function buildNoncePlanFromNonces(startNonces: number[], sameAddress: boolean, approvalExists: boolean, profitNeeded: boolean, needBribeTx: boolean): NoncePlan;
|
|
74
|
+
/**
|
|
75
|
+
* ✅ 规划 nonce
|
|
76
|
+
* 交易顺序:贿赂 → 授权 → 卖出 → 买入 → 利润
|
|
77
|
+
* 贿赂和利润由卖方发送
|
|
78
|
+
*/
|
|
79
|
+
export declare function planNonces({ seller, buyer, sameAddress, approvalExists, profitNeeded, needBribeTx, nonceManager, }: PlanNonceParams): Promise<NoncePlan>;
|
|
80
|
+
/**
|
|
81
|
+
* 根据 userType 计算利润率
|
|
82
|
+
*/
|
|
83
|
+
export declare function getProfitRateBps(userType?: UserType): number;
|
|
84
|
+
export declare function calculateProfitAmount(estimatedBNBOut: bigint, userType?: UserType): bigint;
|
|
85
|
+
/**
|
|
86
|
+
* ✅ 获取 ERC20 代币 → 原生代币(BNB)的报价
|
|
87
|
+
* 用于将 ERC20 利润转换为 BNB
|
|
88
|
+
* 使用共享的报价函数
|
|
89
|
+
*/
|
|
90
|
+
export declare function getERC20ToNativeQuote(provider: ethers.JsonRpcProvider, tokenAddress: string, tokenAmount: bigint, version?: 'v2' | 'v3', fee?: number): Promise<bigint>;
|
|
91
|
+
export type BalanceValidationParams = {
|
|
92
|
+
sameAddress: boolean;
|
|
93
|
+
buyerBalance: bigint;
|
|
94
|
+
buyAmountBNB: bigint;
|
|
95
|
+
reserveGas: bigint;
|
|
96
|
+
gasLimit: bigint;
|
|
97
|
+
gasPrice: bigint;
|
|
98
|
+
useNativeToken?: boolean;
|
|
99
|
+
quoteTokenDecimals?: number;
|
|
100
|
+
provider?: ethers.JsonRpcProvider;
|
|
101
|
+
buyerAddress?: string;
|
|
102
|
+
};
|
|
103
|
+
export declare function validateFinalBalances({ sameAddress, buyerBalance, buyAmountBNB, reserveGas, gasLimit, gasPrice, useNativeToken, quoteTokenDecimals, provider, buyerAddress, }: BalanceValidationParams): Promise<void>;
|
|
104
|
+
export declare function countTruthy(values: unknown[]): number;
|
|
105
|
+
/**
|
|
106
|
+
* PancakeSwap V2/V3 通用捆绑换手(Merkle Bundle)
|
|
107
|
+
*
|
|
108
|
+
* 功能:钱包A卖出代币 → 钱包B买入相同数量 → 原子执行
|
|
109
|
+
* 适用于所有已迁移到外盘的代币(不区分Four/Flap)
|
|
110
|
+
*/
|
|
111
|
+
export type UserType = 'v0' | 'v1';
|
|
112
|
+
export interface PancakeSwapSignConfig {
|
|
113
|
+
rpcUrl: string;
|
|
114
|
+
gasLimit?: number | bigint;
|
|
115
|
+
gasLimitMultiplier?: number;
|
|
116
|
+
minGasPriceGwei?: number;
|
|
117
|
+
maxGasPriceGwei?: number;
|
|
118
|
+
txType?: 0 | 2;
|
|
119
|
+
chainId?: number;
|
|
120
|
+
reserveGasBNB?: number;
|
|
121
|
+
userType?: UserType;
|
|
122
|
+
bribeAmount?: number;
|
|
123
|
+
v2RouterAddress?: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* 获取 Gas Limit
|
|
127
|
+
*/
|
|
128
|
+
export declare function getGasLimit(config: PancakeSwapSignConfig | PancakeSwapConfig, defaultGas?: number): bigint;
|
|
129
|
+
export declare function getGasPrice(provider: ethers.JsonRpcProvider, config: PancakeSwapSignConfig | PancakeSwapConfig): Promise<bigint>;
|
|
130
|
+
export declare const PANCAKE_V2_ROUTER_ABI: string[];
|
|
131
|
+
export declare const PANCAKE_V3_ROUTER_ABI: (string | {
|
|
132
|
+
inputs: {
|
|
133
|
+
components: {
|
|
134
|
+
name: string;
|
|
135
|
+
type: string;
|
|
136
|
+
}[];
|
|
137
|
+
name: string;
|
|
138
|
+
type: string;
|
|
139
|
+
}[];
|
|
140
|
+
name: string;
|
|
141
|
+
outputs: {
|
|
142
|
+
name: string;
|
|
143
|
+
type: string;
|
|
144
|
+
}[];
|
|
145
|
+
stateMutability: string;
|
|
146
|
+
type: string;
|
|
147
|
+
})[];
|
|
148
|
+
export declare const ERC20_BALANCE_OF_ABI: string[];
|
|
149
|
+
export declare const PANCAKE_V2_ROUTER_ADDRESS: "0x10ED43C718714eb63d5aA57B78B54704E256024E";
|
|
150
|
+
export declare const PANCAKE_V3_ROUTER_ADDRESS: "0x13f4EA83D0bd40E75C8222255bc855a974568Dd4";
|
|
151
|
+
export declare const FLAT_FEE = 0n;
|
|
152
|
+
export declare const WBNB_ADDRESS: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c";
|
|
153
|
+
export type SwapRouteType = 'v2' | 'v3-single' | 'v3-multi';
|
|
154
|
+
export interface PancakeSwapConfig extends CommonBundleConfig {
|
|
155
|
+
apiKey: string;
|
|
156
|
+
customRpcUrl?: string;
|
|
157
|
+
bundleBlockOffset?: number;
|
|
158
|
+
reserveGasBNB?: number;
|
|
159
|
+
waitForConfirmation?: boolean;
|
|
160
|
+
waitTimeoutMs?: number;
|
|
161
|
+
}
|
|
162
|
+
export interface V2RouteParams {
|
|
163
|
+
routeType: 'v2';
|
|
164
|
+
v2Path: string[];
|
|
165
|
+
}
|
|
166
|
+
export interface V3SingleRouteParams {
|
|
167
|
+
routeType: 'v3-single';
|
|
168
|
+
v3TokenIn: string;
|
|
169
|
+
v3TokenOut: string;
|
|
170
|
+
v3Fee: number;
|
|
171
|
+
v2Path?: string[];
|
|
172
|
+
}
|
|
173
|
+
export interface V3MultiRouteParams {
|
|
174
|
+
routeType: 'v3-multi';
|
|
175
|
+
v3LpAddresses: string[];
|
|
176
|
+
v3ExactTokenIn: string;
|
|
177
|
+
v2Path?: string[];
|
|
178
|
+
}
|
|
179
|
+
export type RouteParams = V2RouteParams | V3SingleRouteParams | V3MultiRouteParams;
|
|
180
|
+
export interface PancakeBundleSwapSignParams {
|
|
181
|
+
sellerPrivateKey: string;
|
|
182
|
+
sellAmount?: string;
|
|
183
|
+
sellPercentage?: number;
|
|
184
|
+
buyerPrivateKey: string;
|
|
185
|
+
tokenAddress: string;
|
|
186
|
+
routeParams: RouteParams;
|
|
187
|
+
config: PancakeSwapSignConfig;
|
|
188
|
+
quoteToken?: string;
|
|
189
|
+
quoteTokenDecimals?: number;
|
|
190
|
+
startNonces?: number[];
|
|
191
|
+
}
|
|
192
|
+
export interface PancakeBundleSwapParams {
|
|
193
|
+
sellerPrivateKey: string;
|
|
194
|
+
sellAmount?: string;
|
|
195
|
+
sellPercentage?: number;
|
|
196
|
+
buyerPrivateKey: string;
|
|
197
|
+
tokenAddress: string;
|
|
198
|
+
routeParams: RouteParams;
|
|
199
|
+
config: PancakeSwapConfig;
|
|
200
|
+
}
|
|
201
|
+
/** ✅ Pancake Swap 结果(简化版) */
|
|
202
|
+
export type PancakeSwapResult = {
|
|
203
|
+
signedTransactions: string[];
|
|
204
|
+
profitHopWallets?: GeneratedWallet[];
|
|
205
|
+
metadata?: {
|
|
206
|
+
sellerAddress: string;
|
|
207
|
+
buyerAddress: string;
|
|
208
|
+
sellAmount: string;
|
|
209
|
+
buyAmount: string;
|
|
210
|
+
profitAmount?: string;
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
export type PancakeContext = {
|
|
214
|
+
chainId: number;
|
|
215
|
+
provider: ethers.JsonRpcProvider;
|
|
216
|
+
};
|
|
217
|
+
export type QuoteBNBResult = {
|
|
218
|
+
estimatedBNBOut: bigint;
|
|
219
|
+
};
|
|
220
|
+
export type SwapUnsignedResult = {
|
|
221
|
+
sellUnsigned: ethers.TransactionLike;
|
|
222
|
+
buyUnsigned: ethers.TransactionLike;
|
|
223
|
+
};
|
|
224
|
+
export type BuyerBudget = {
|
|
225
|
+
buyerBalance: bigint;
|
|
226
|
+
reserveGas: bigint;
|
|
227
|
+
requiredBalance: bigint;
|
|
228
|
+
buyAmountBNB: bigint;
|
|
229
|
+
useNativeToken: boolean;
|
|
230
|
+
};
|
|
231
|
+
export type NoncePlan = {
|
|
232
|
+
sellerNonce: number;
|
|
233
|
+
buyerNonce: number;
|
|
234
|
+
bribeNonce?: number;
|
|
235
|
+
profitNonce?: number;
|
|
236
|
+
};
|
|
237
|
+
export declare const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
|
|
238
|
+
/**
|
|
239
|
+
* PancakeSwap捆绑换手(V2/V3通用)
|
|
240
|
+
* ✅ 支持 quoteToken:传入 USDT 等地址时,卖出得到该代币,买入使用该代币
|
|
241
|
+
*/
|
|
@@ -1,34 +1,29 @@
|
|
|
1
1
|
import { ethers, Wallet, Contract } from 'ethers';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const PANCAKE_V3_ROUTER_ADDRESS = ADDRESSES.BSC.PancakeV3Router;
|
|
14
|
-
const PANCAKE_V2_ROUTER_ABI = V2_ROUTER_ABI;
|
|
15
|
-
const PANCAKE_V3_ROUTER_ABI = V3_ROUTER02_ABI;
|
|
16
|
-
const ERC20_BALANCE_OF_ABI = ERC20_BALANCE_ABI;
|
|
17
|
-
const WBNB_ADDRESS = ADDRESSES.BSC.WBNB;
|
|
2
|
+
import { generateWallets } from '../../../utils/wallet.js';
|
|
3
|
+
import { V2_ROUTER_ABI, V3_ROUTER02_ABI, ERC20_BALANCE_ABI, ERC20_ABI } from '../../../abis/common.js';
|
|
4
|
+
import { createSignProvider } from '../../../bundle-core/sign-context-helpers.js';
|
|
5
|
+
import { quoteV2, quoteV3 } from '../../../utils/quote-helpers.js';
|
|
6
|
+
import { GAS_LIMITS } from '../../../shared/constants/index.js';
|
|
7
|
+
import { getDeadline } from '../../../utils/bundle-helpers.js';
|
|
8
|
+
import { ADDRESSES } from '../../../shared/constants/index.js';
|
|
9
|
+
// ==================== 多跳转账常量(使用统一常量) ====================
|
|
10
|
+
export const NATIVE_TRANSFER_GAS_LIMIT = GAS_LIMITS.NATIVE_TRANSFER;
|
|
11
|
+
export const ERC20_TRANSFER_GAS_LIMIT_HOP = GAS_LIMITS.ERC20_TRANSFER;
|
|
12
|
+
export const BRIBE_GAS_LIMIT = GAS_LIMITS.BRIBE;
|
|
18
13
|
/**
|
|
19
14
|
* 生成分发多跳路径
|
|
20
15
|
*/
|
|
21
16
|
export function generateDisperseHopPaths(targetAddresses, hopCount, provider) {
|
|
22
17
|
if (hopCount <= 0) {
|
|
23
|
-
return targetAddresses.map(addr => ({
|
|
18
|
+
return targetAddresses.map((addr) => ({
|
|
24
19
|
targetAddress: addr,
|
|
25
20
|
hopWallets: [],
|
|
26
|
-
hopWalletsInfo: []
|
|
21
|
+
hopWalletsInfo: [],
|
|
27
22
|
}));
|
|
28
23
|
}
|
|
29
|
-
return targetAddresses.map(targetAddress => {
|
|
24
|
+
return targetAddresses.map((targetAddress) => {
|
|
30
25
|
const hopWalletsInfo = generateWallets(hopCount);
|
|
31
|
-
const hopWallets = hopWalletsInfo.map(w => new Wallet(w.privateKey, provider));
|
|
26
|
+
const hopWallets = hopWalletsInfo.map((w) => new Wallet(w.privateKey, provider));
|
|
32
27
|
return { targetAddress, hopWallets, hopWalletsInfo };
|
|
33
28
|
});
|
|
34
29
|
}
|
|
@@ -45,7 +40,7 @@ export async function buildNativeHopChain(payer, path, finalAmount, gasPrice, ch
|
|
|
45
40
|
nonce: payerNonce,
|
|
46
41
|
gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
|
|
47
42
|
chainId,
|
|
48
|
-
type: txType
|
|
43
|
+
type: txType,
|
|
49
44
|
};
|
|
50
45
|
if (txType === 2) {
|
|
51
46
|
tx.maxFeePerGas = gasPrice;
|
|
@@ -71,7 +66,7 @@ export async function buildNativeHopChain(payer, path, finalAmount, gasPrice, ch
|
|
|
71
66
|
nonce: payerNonce,
|
|
72
67
|
gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
|
|
73
68
|
chainId,
|
|
74
|
-
type: txType
|
|
69
|
+
type: txType,
|
|
75
70
|
};
|
|
76
71
|
if (txType === 2) {
|
|
77
72
|
firstTx.maxFeePerGas = gasPrice;
|
|
@@ -92,7 +87,7 @@ export async function buildNativeHopChain(payer, path, finalAmount, gasPrice, ch
|
|
|
92
87
|
nonce: 0,
|
|
93
88
|
gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
|
|
94
89
|
chainId,
|
|
95
|
-
type: txType
|
|
90
|
+
type: txType,
|
|
96
91
|
};
|
|
97
92
|
if (txType === 2) {
|
|
98
93
|
tx.maxFeePerGas = gasPrice;
|
|
@@ -121,7 +116,7 @@ export async function buildERC20HopChain(payer, path, erc20Address, erc20Amount,
|
|
|
121
116
|
nonce: payerNonce,
|
|
122
117
|
gasLimit: ERC20_TRANSFER_GAS_LIMIT_HOP,
|
|
123
118
|
chainId,
|
|
124
|
-
type: txType
|
|
119
|
+
type: txType,
|
|
125
120
|
};
|
|
126
121
|
if (txType === 2) {
|
|
127
122
|
tx.maxFeePerGas = gasPrice;
|
|
@@ -142,7 +137,7 @@ export async function buildERC20HopChain(payer, path, erc20Address, erc20Amount,
|
|
|
142
137
|
nonce: payerNonce,
|
|
143
138
|
gasLimit: ERC20_TRANSFER_GAS_LIMIT_HOP,
|
|
144
139
|
chainId,
|
|
145
|
-
type: txType
|
|
140
|
+
type: txType,
|
|
146
141
|
};
|
|
147
142
|
if (txType === 2) {
|
|
148
143
|
firstTx.maxFeePerGas = gasPrice;
|
|
@@ -164,7 +159,7 @@ export async function buildERC20HopChain(payer, path, erc20Address, erc20Amount,
|
|
|
164
159
|
nonce: 1, // nonce=0 已用于 BNB 转发
|
|
165
160
|
gasLimit: ERC20_TRANSFER_GAS_LIMIT_HOP,
|
|
166
161
|
chainId,
|
|
167
|
-
type: txType
|
|
162
|
+
type: txType,
|
|
168
163
|
};
|
|
169
164
|
if (txType === 2) {
|
|
170
165
|
tx.maxFeePerGas = gasPrice;
|
|
@@ -204,7 +199,7 @@ export async function buildBNBHopChainForERC20(payer, path, finalGasAmount, gasP
|
|
|
204
199
|
nonce: payerNonce,
|
|
205
200
|
gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
|
|
206
201
|
chainId,
|
|
207
|
-
type: txType
|
|
202
|
+
type: txType,
|
|
208
203
|
};
|
|
209
204
|
if (txType === 2) {
|
|
210
205
|
firstTx.maxFeePerGas = gasPrice;
|
|
@@ -225,7 +220,7 @@ export async function buildBNBHopChainForERC20(payer, path, finalGasAmount, gasP
|
|
|
225
220
|
nonce: 0,
|
|
226
221
|
gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
|
|
227
222
|
chainId,
|
|
228
|
-
type: txType
|
|
223
|
+
type: txType,
|
|
229
224
|
};
|
|
230
225
|
if (txType === 2) {
|
|
231
226
|
tx.maxFeePerGas = gasPrice;
|
|
@@ -238,25 +233,19 @@ export async function buildBNBHopChainForERC20(payer, path, finalGasAmount, gasP
|
|
|
238
233
|
}
|
|
239
234
|
return signedTxs;
|
|
240
235
|
}
|
|
236
|
+
// ==================== 工具函数 ====================
|
|
241
237
|
export function createPancakeContext(config) {
|
|
242
238
|
const chainId = config.chainId ?? 56;
|
|
243
|
-
const provider =
|
|
244
|
-
chainId,
|
|
245
|
-
name: 'BSC'
|
|
246
|
-
});
|
|
239
|
+
const provider = createSignProvider(config.rpcUrl, chainId);
|
|
247
240
|
return { chainId, provider };
|
|
248
241
|
}
|
|
249
|
-
export async function quoteSellOutput({ routeParams, sellAmountWei, provider, v2RouterAddress }) {
|
|
250
|
-
console.log(`[quoteSellOutput] 开始报价, routeType=${routeParams.routeType}, sellAmount=${sellAmountWei} wei`);
|
|
251
|
-
// ==================== V2 报价 ====================
|
|
242
|
+
export async function quoteSellOutput({ routeParams, sellAmountWei, provider, v2RouterAddress, }) {
|
|
252
243
|
if (routeParams.routeType === 'v2') {
|
|
253
244
|
const { v2Path } = routeParams;
|
|
254
245
|
const tokenIn = v2Path[0];
|
|
255
246
|
const tokenOut = v2Path[v2Path.length - 1];
|
|
256
|
-
console.log(`[quoteSellOutput] V2 路径: ${v2Path.join(' → ')}`);
|
|
257
247
|
const result = await quoteV2(provider, tokenIn, tokenOut, sellAmountWei, 'BSC', v2RouterAddress);
|
|
258
248
|
if (result.amountOut > 0n) {
|
|
259
|
-
console.log(`[quoteSellOutput] V2 报价成功: ${ethers.formatEther(result.amountOut)} BNB`);
|
|
260
249
|
return { estimatedBNBOut: result.amountOut };
|
|
261
250
|
}
|
|
262
251
|
throw new Error('V2 报价失败: 所有路径均无效');
|
|
@@ -264,11 +253,8 @@ export async function quoteSellOutput({ routeParams, sellAmountWei, provider, v2
|
|
|
264
253
|
// ==================== V3 单跳报价 ====================
|
|
265
254
|
if (routeParams.routeType === 'v3-single') {
|
|
266
255
|
const params = routeParams;
|
|
267
|
-
console.log(`[quoteSellOutput] V3 单跳: ${params.v3TokenIn} → ${params.v3TokenOut}, fee=${params.v3Fee}`);
|
|
268
|
-
// ✅ 只用 V3 报价,不 fallback 到 V2
|
|
269
256
|
const result = await quoteV3(provider, params.v3TokenIn, params.v3TokenOut, sellAmountWei, 'BSC', params.v3Fee);
|
|
270
257
|
if (result.amountOut > 0n) {
|
|
271
|
-
console.log(`[quoteSellOutput] V3 报价成功 (fee=${result.fee}): ${ethers.formatEther(result.amountOut)} BNB`);
|
|
272
258
|
return { estimatedBNBOut: result.amountOut };
|
|
273
259
|
}
|
|
274
260
|
// ❌ V3 报价失败时不再 fallback 到 V2,因为价格可能差异很大
|
|
@@ -277,14 +263,11 @@ export async function quoteSellOutput({ routeParams, sellAmountWei, provider, v2
|
|
|
277
263
|
// ==================== V3 多跳报价 ====================
|
|
278
264
|
if (routeParams.routeType === 'v3-multi') {
|
|
279
265
|
const params = routeParams;
|
|
280
|
-
console.log(`[quoteSellOutput] V3 多跳: LPs=${params.v3LpAddresses?.join(', ')}`);
|
|
281
|
-
// ✅ V3 多跳:只用 V3 报价,不 fallback 到 V2
|
|
282
266
|
if (params.v3LpAddresses && params.v3LpAddresses.length > 0) {
|
|
283
267
|
const tokenIn = params.v3ExactTokenIn;
|
|
284
268
|
const WBNB = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c';
|
|
285
269
|
const result = await quoteV3(provider, tokenIn, WBNB, sellAmountWei, 'BSC');
|
|
286
270
|
if (result.amountOut > 0n) {
|
|
287
|
-
console.log(`[quoteSellOutput] V3 多跳报价成功: ${ethers.formatEther(result.amountOut)} BNB`);
|
|
288
271
|
return { estimatedBNBOut: result.amountOut };
|
|
289
272
|
}
|
|
290
273
|
}
|
|
@@ -293,7 +276,8 @@ export async function quoteSellOutput({ routeParams, sellAmountWei, provider, v2
|
|
|
293
276
|
}
|
|
294
277
|
throw new Error(`不支持的路由类型: ${routeParams.routeType}`);
|
|
295
278
|
}
|
|
296
|
-
export async function buildSwapTransactions({ routeParams, sellAmountWei, buyAmountBNB, buyer, seller, tokenAddress, useNativeToken = true, v2RouterAddress }) {
|
|
279
|
+
export async function buildSwapTransactions({ routeParams, sellAmountWei, buyAmountBNB, buyer, seller, tokenAddress, useNativeToken = true, v2RouterAddress, }) {
|
|
280
|
+
void tokenAddress;
|
|
297
281
|
const deadline = getDeadline();
|
|
298
282
|
const buyValue = useNativeToken ? buyAmountBNB + FLAT_FEE : 0n;
|
|
299
283
|
if (routeParams.routeType === 'v2') {
|
|
@@ -327,34 +311,38 @@ export async function buildSwapTransactions({ routeParams, sellAmountWei, buyAmo
|
|
|
327
311
|
const v3RouterSeller = new Contract(PANCAKE_V3_ROUTER_ADDRESS, PANCAKE_V3_ROUTER_ABI, seller);
|
|
328
312
|
const v3RouterBuyer = new Contract(PANCAKE_V3_ROUTER_ADDRESS, PANCAKE_V3_ROUTER_ABI, buyer);
|
|
329
313
|
// 卖出:Token → WBNB,需要 unwrapWETH9
|
|
330
|
-
const sellSwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [
|
|
314
|
+
const sellSwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [
|
|
315
|
+
{
|
|
331
316
|
tokenIn: v3TokenIn,
|
|
332
317
|
tokenOut: v3TokenOut,
|
|
333
318
|
fee: v3Fee,
|
|
334
319
|
recipient: PANCAKE_V3_ROUTER_ADDRESS, // 先发给 Router
|
|
335
320
|
amountIn: sellAmountWei,
|
|
336
321
|
amountOutMinimum: 0n,
|
|
337
|
-
sqrtPriceLimitX96: 0n
|
|
338
|
-
}
|
|
322
|
+
sqrtPriceLimitX96: 0n,
|
|
323
|
+
},
|
|
324
|
+
]);
|
|
339
325
|
const sellUnwrapData = v3RouterIface.encodeFunctionData('unwrapWETH9', [0n, seller.address]);
|
|
340
326
|
const sellUnsigned = await v3RouterSeller.multicall.populateTransaction(deadline, [sellSwapData, sellUnwrapData]);
|
|
341
327
|
// 买入:WBNB → Token
|
|
342
|
-
const buySwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [
|
|
328
|
+
const buySwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [
|
|
329
|
+
{
|
|
343
330
|
tokenIn: v3TokenOut,
|
|
344
331
|
tokenOut: v3TokenIn,
|
|
345
332
|
fee: v3Fee,
|
|
346
333
|
recipient: buyer.address,
|
|
347
334
|
amountIn: buyAmountBNB,
|
|
348
335
|
amountOutMinimum: 0n,
|
|
349
|
-
sqrtPriceLimitX96: 0n
|
|
350
|
-
}
|
|
336
|
+
sqrtPriceLimitX96: 0n,
|
|
337
|
+
},
|
|
338
|
+
]);
|
|
351
339
|
const buyUnsigned = await v3RouterBuyer.multicall.populateTransaction(deadline, [buySwapData], { value: buyValue });
|
|
352
340
|
return { sellUnsigned, buyUnsigned };
|
|
353
341
|
}
|
|
354
342
|
// V3 多跳暂不支持官方合约
|
|
355
343
|
throw new Error('V3 多跳路由暂不支持官方合约,请使用 V2 路由或 V3 单跳');
|
|
356
344
|
}
|
|
357
|
-
export async function calculateBuyerBudget({ buyer, quotedBNBOut, reserveGasBNB, useNativeToken = true, quoteToken, quoteTokenDecimals = 18, provider }) {
|
|
345
|
+
export async function calculateBuyerBudget({ buyer, quotedBNBOut, reserveGasBNB, useNativeToken = true, quoteToken, quoteTokenDecimals = 18, provider, }) {
|
|
358
346
|
const reserveGas = ethers.parseEther((reserveGasBNB ?? 0.0005).toString());
|
|
359
347
|
// ✅ 已移除滑点保护:直接使用报价金额
|
|
360
348
|
const buyAmountBNB = quotedBNBOut;
|
|
@@ -413,7 +401,7 @@ export function buildNoncePlanFromNonces(startNonces, sameAddress, approvalExist
|
|
|
413
401
|
* 交易顺序:贿赂 → 授权 → 卖出 → 买入 → 利润
|
|
414
402
|
* 贿赂和利润由卖方发送
|
|
415
403
|
*/
|
|
416
|
-
export async function planNonces({ seller, buyer, sameAddress, approvalExists, profitNeeded, needBribeTx, nonceManager }) {
|
|
404
|
+
export async function planNonces({ seller, buyer, sameAddress, approvalExists, profitNeeded, needBribeTx, nonceManager, }) {
|
|
417
405
|
if (sameAddress) {
|
|
418
406
|
// 同一地址:贿赂(可选) + 授权(可选) + 卖出 + 买入 + 利润(可选)
|
|
419
407
|
const txCount = countTruthy([needBribeTx, approvalExists, true, true, profitNeeded]);
|
|
@@ -433,7 +421,7 @@ export async function planNonces({ seller, buyer, sameAddress, approvalExists, p
|
|
|
433
421
|
// ✅ 并行获取 seller 和 buyer 的 nonce
|
|
434
422
|
const [sellerNonces, buyerNonce] = await Promise.all([
|
|
435
423
|
nonceManager.getNextNonceBatch(seller, sellerTxCount),
|
|
436
|
-
nonceManager.getNextNonce(buyer)
|
|
424
|
+
nonceManager.getNextNonce(buyer),
|
|
437
425
|
]);
|
|
438
426
|
let idx = 0;
|
|
439
427
|
const bribeNonce = needBribeTx ? sellerNonces[idx++] : undefined;
|
|
@@ -446,7 +434,7 @@ export async function planNonces({ seller, buyer, sameAddress, approvalExists, p
|
|
|
446
434
|
// ✅ 并行获取 seller 和 buyer 的 nonce
|
|
447
435
|
const [sellerNonce, buyerNonce] = await Promise.all([
|
|
448
436
|
nonceManager.getNextNonce(seller),
|
|
449
|
-
nonceManager.getNextNonce(buyer)
|
|
437
|
+
nonceManager.getNextNonce(buyer),
|
|
450
438
|
]);
|
|
451
439
|
return { sellerNonce, buyerNonce };
|
|
452
440
|
}
|
|
@@ -455,12 +443,12 @@ export async function planNonces({ seller, buyer, sameAddress, approvalExists, p
|
|
|
455
443
|
*/
|
|
456
444
|
export function getProfitRateBps(userType) {
|
|
457
445
|
if (userType === 'v0') {
|
|
458
|
-
return
|
|
446
|
+
return 4; // 0.06%
|
|
459
447
|
}
|
|
460
448
|
else if (userType === 'v1') {
|
|
461
|
-
return
|
|
449
|
+
return 5; // 0.05%
|
|
462
450
|
}
|
|
463
|
-
return
|
|
451
|
+
return 4; // 默认 0.06%
|
|
464
452
|
}
|
|
465
453
|
export function calculateProfitAmount(estimatedBNBOut, userType) {
|
|
466
454
|
if (estimatedBNBOut <= 0n) {
|
|
@@ -487,22 +475,14 @@ export async function getERC20ToNativeQuote(provider, tokenAddress, tokenAmount,
|
|
|
487
475
|
if (version === 'v3') {
|
|
488
476
|
const result = await quoteV3(provider, tokenAddress, WBNB_ADDRESS, tokenAmount, 'BSC', fee);
|
|
489
477
|
if (result.amountOut > 0n) {
|
|
490
|
-
console.log(`[getERC20ToNativeQuote] V3 报价成功: ${ethers.formatEther(result.amountOut)} BNB`);
|
|
491
478
|
return result.amountOut;
|
|
492
479
|
}
|
|
493
|
-
console.warn(`[getERC20ToNativeQuote] V3 报价失败`);
|
|
494
480
|
return 0n;
|
|
495
481
|
}
|
|
496
|
-
// V2 报价
|
|
497
482
|
const result = await quoteV2(provider, tokenAddress, WBNB_ADDRESS, tokenAmount, 'BSC');
|
|
498
|
-
|
|
499
|
-
console.log(`[getERC20ToNativeQuote] V2 报价成功: ${ethers.formatEther(result.amountOut)} BNB`);
|
|
500
|
-
return result.amountOut;
|
|
501
|
-
}
|
|
502
|
-
console.warn(`[getERC20ToNativeQuote] V2 报价失败`);
|
|
503
|
-
return 0n;
|
|
483
|
+
return result.amountOut > 0n ? result.amountOut : 0n;
|
|
504
484
|
}
|
|
505
|
-
export async function validateFinalBalances({ sameAddress, buyerBalance, buyAmountBNB, reserveGas, gasLimit, gasPrice, useNativeToken = true, quoteTokenDecimals = 18, provider, buyerAddress }) {
|
|
485
|
+
export async function validateFinalBalances({ sameAddress, buyerBalance, buyAmountBNB, reserveGas, gasLimit, gasPrice, useNativeToken = true, quoteTokenDecimals = 18, provider, buyerAddress, }) {
|
|
506
486
|
const gasCost = gasLimit * gasPrice;
|
|
507
487
|
if (sameAddress) {
|
|
508
488
|
// 同一地址:需要足够的余额支付两笔交易
|
|
@@ -541,6 +521,9 @@ export async function validateFinalBalances({ sameAddress, buyerBalance, buyAmou
|
|
|
541
521
|
export function countTruthy(values) {
|
|
542
522
|
return values.filter(Boolean).length;
|
|
543
523
|
}
|
|
524
|
+
/**
|
|
525
|
+
* 获取 Gas Limit
|
|
526
|
+
*/
|
|
544
527
|
export function getGasLimit(config, defaultGas = 800000) {
|
|
545
528
|
if (config.gasLimit !== undefined) {
|
|
546
529
|
return typeof config.gasLimit === 'bigint' ? config.gasLimit : BigInt(config.gasLimit);
|
|
@@ -565,8 +548,18 @@ export async function getGasPrice(provider, config) {
|
|
|
565
548
|
return gasPrice;
|
|
566
549
|
}
|
|
567
550
|
// ✅ ABI 别名(从公共模块导入)
|
|
551
|
+
export const PANCAKE_V2_ROUTER_ABI = V2_ROUTER_ABI;
|
|
552
|
+
export const PANCAKE_V3_ROUTER_ABI = V3_ROUTER02_ABI;
|
|
553
|
+
export const ERC20_BALANCE_OF_ABI = ERC20_BALANCE_ABI;
|
|
568
554
|
// ✅ 使用官方 PancakeSwap Router 地址
|
|
555
|
+
export const PANCAKE_V2_ROUTER_ADDRESS = ADDRESSES.BSC.PancakeV2Router;
|
|
556
|
+
export const PANCAKE_V3_ROUTER_ADDRESS = ADDRESSES.BSC.PancakeV3Router;
|
|
569
557
|
// 常量
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
558
|
+
export const FLAT_FEE = 0n;
|
|
559
|
+
export const WBNB_ADDRESS = ADDRESSES.BSC.WBNB;
|
|
560
|
+
export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
|
|
561
|
+
// ✅ ERC20_BALANCE_OF_ABI 已在文件开头定义
|
|
562
|
+
/**
|
|
563
|
+
* PancakeSwap捆绑换手(V2/V3通用)
|
|
564
|
+
* ✅ 支持 quoteToken:传入 USDT 等地址时,卖出得到该代币,买入使用该代币
|
|
565
|
+
*/
|
|
@@ -1,83 +1,5 @@
|
|
|
1
|
-
import { CommonBundleConfig } from '../../../utils/bundle-helpers.js';
|
|
2
1
|
import { type GeneratedWallet } from '../../../utils/wallet.js';
|
|
3
|
-
|
|
4
|
-
export interface PancakeSwapSignConfig {
|
|
5
|
-
rpcUrl: string;
|
|
6
|
-
gasLimit?: number | bigint;
|
|
7
|
-
gasLimitMultiplier?: number;
|
|
8
|
-
minGasPriceGwei?: number;
|
|
9
|
-
maxGasPriceGwei?: number;
|
|
10
|
-
txType?: 0 | 2;
|
|
11
|
-
chainId?: number;
|
|
12
|
-
reserveGasBNB?: number;
|
|
13
|
-
userType?: UserType;
|
|
14
|
-
bribeAmount?: number;
|
|
15
|
-
v2RouterAddress?: string;
|
|
16
|
-
}
|
|
17
|
-
export type SwapRouteType = 'v2' | 'v3-single' | 'v3-multi';
|
|
18
|
-
export interface PancakeSwapConfig extends CommonBundleConfig {
|
|
19
|
-
apiKey: string;
|
|
20
|
-
customRpcUrl?: string;
|
|
21
|
-
bundleBlockOffset?: number;
|
|
22
|
-
reserveGasBNB?: number;
|
|
23
|
-
waitForConfirmation?: boolean;
|
|
24
|
-
waitTimeoutMs?: number;
|
|
25
|
-
}
|
|
26
|
-
export interface V2RouteParams {
|
|
27
|
-
routeType: 'v2';
|
|
28
|
-
v2Path: string[];
|
|
29
|
-
}
|
|
30
|
-
export interface V3SingleRouteParams {
|
|
31
|
-
routeType: 'v3-single';
|
|
32
|
-
v3TokenIn: string;
|
|
33
|
-
v3TokenOut: string;
|
|
34
|
-
v3Fee: number;
|
|
35
|
-
v2Path?: string[];
|
|
36
|
-
}
|
|
37
|
-
export interface V3MultiRouteParams {
|
|
38
|
-
routeType: 'v3-multi';
|
|
39
|
-
v3LpAddresses: string[];
|
|
40
|
-
v3ExactTokenIn: string;
|
|
41
|
-
v2Path?: string[];
|
|
42
|
-
}
|
|
43
|
-
export type RouteParams = V2RouteParams | V3SingleRouteParams | V3MultiRouteParams;
|
|
44
|
-
export interface PancakeBundleSwapSignParams {
|
|
45
|
-
sellerPrivateKey: string;
|
|
46
|
-
sellAmount?: string;
|
|
47
|
-
sellPercentage?: number;
|
|
48
|
-
buyerPrivateKey: string;
|
|
49
|
-
tokenAddress: string;
|
|
50
|
-
routeParams: RouteParams;
|
|
51
|
-
config: PancakeSwapSignConfig;
|
|
52
|
-
quoteToken?: string;
|
|
53
|
-
quoteTokenDecimals?: number;
|
|
54
|
-
startNonces?: number[];
|
|
55
|
-
}
|
|
56
|
-
export interface PancakeBundleSwapParams {
|
|
57
|
-
sellerPrivateKey: string;
|
|
58
|
-
sellAmount?: string;
|
|
59
|
-
sellPercentage?: number;
|
|
60
|
-
buyerPrivateKey: string;
|
|
61
|
-
tokenAddress: string;
|
|
62
|
-
routeParams: RouteParams;
|
|
63
|
-
config: PancakeSwapConfig;
|
|
64
|
-
}
|
|
65
|
-
/** ✅ Pancake Swap 结果(简化版) */
|
|
66
|
-
export type PancakeSwapResult = {
|
|
67
|
-
signedTransactions: string[];
|
|
68
|
-
profitHopWallets?: GeneratedWallet[];
|
|
69
|
-
metadata?: {
|
|
70
|
-
sellerAddress: string;
|
|
71
|
-
buyerAddress: string;
|
|
72
|
-
sellAmount: string;
|
|
73
|
-
buyAmount: string;
|
|
74
|
-
profitAmount?: string;
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
/**
|
|
78
|
-
* PancakeSwap捆绑换手(V2/V3通用)
|
|
79
|
-
* ✅ 支持 quoteToken:传入 USDT 等地址时,卖出得到该代币,买入使用该代币
|
|
80
|
-
*/
|
|
2
|
+
import { PancakeBundleSwapSignParams, PancakeSwapResult, PancakeSwapSignConfig, RouteParams } from './bundle-swap-helpers.js';
|
|
81
3
|
export declare function pancakeBundleSwapMerkle(params: PancakeBundleSwapSignParams): Promise<PancakeSwapResult>;
|
|
82
4
|
/**
|
|
83
5
|
* 批量换手参数(一卖多买)
|