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,82 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tm-bundle - 主函数
|
|
3
|
+
*/
|
|
1
4
|
import { ethers, Wallet, JsonRpcProvider } from 'ethers';
|
|
2
|
-
import { Club48Client, sendBatchPrivateTransactions, BUILDER_CONTROL_EOA } from '../shared/clients/club48.js';
|
|
3
|
-
import { ADDRESSES } from '../
|
|
4
|
-
import {
|
|
5
|
-
import { GAS_LIMITS } from '../shared/constants/index.js';
|
|
5
|
+
import { Club48Client, sendBatchPrivateTransactions, BUILDER_CONTROL_EOA, } from '../shared/clients/club48.js';
|
|
6
|
+
import { ADDRESSES } from '../shared/constants/index.js';
|
|
7
|
+
import { GAS_LIMITS, getProfitRateBps, getProfitRecipient } from '../shared/constants/index.js';
|
|
6
8
|
import { buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../utils/bundle-helpers.js';
|
|
7
|
-
import TM2Abi from '../
|
|
9
|
+
import TM2Abi from '../abis/contracts/TokenManager2.json' with { type: 'json' };
|
|
8
10
|
import { FourClient, buildLoginMessage } from '../shared/clients/four.js';
|
|
9
11
|
import { trySell } from './tm.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* 使用 48.club Bundle 服务实现原子化交易
|
|
13
|
-
*/
|
|
14
|
-
// 错误信息国际化
|
|
15
|
-
const ERRORS = {
|
|
16
|
-
NO_PRIVATE_KEY: {
|
|
17
|
-
en: 'At least 1 private key (creator) is required',
|
|
18
|
-
zh: '至少需要 1 个私钥(创建者)'
|
|
19
|
-
},
|
|
20
|
-
AMOUNT_MISMATCH: {
|
|
21
|
-
en: (buyCount, buyerCount) => `Buy amount count (${buyCount}) must equal buyer count (${buyerCount})`,
|
|
22
|
-
zh: (buyCount, buyerCount) => `购买金额数量(${buyCount})必须等于买家数量(${buyerCount})`
|
|
23
|
-
},
|
|
24
|
-
IMAGE_REQUIRED: {
|
|
25
|
-
en: 'Either imageUrl or imageFile must be provided',
|
|
26
|
-
zh: '必须提供 imageUrl 或 imageFile'
|
|
27
|
-
},
|
|
28
|
-
KEY_AMOUNT_MISMATCH: {
|
|
29
|
-
en: 'Private key count and amount count must match',
|
|
30
|
-
zh: '私钥和购买金额数量必须一致'
|
|
31
|
-
},
|
|
32
|
-
SELL_KEY_AMOUNT_MISMATCH: {
|
|
33
|
-
en: 'Private key count and sell amount count must match',
|
|
34
|
-
zh: '私钥和卖出数量必须一致'
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
// 获取错误信息(根据环境语言)
|
|
38
|
-
function getErrorMessage(key, ...args) {
|
|
39
|
-
const lang = (process.env.LANG || process.env.LANGUAGE || 'en').toLowerCase().includes('zh') ? 'zh' : 'en';
|
|
40
|
-
const message = ERRORS[key][lang];
|
|
41
|
-
return typeof message === 'function' ? message(...args) : message;
|
|
42
|
-
}
|
|
43
|
-
// ========================================
|
|
44
|
-
// 辅助函数
|
|
45
|
-
// ========================================
|
|
46
|
-
/**
|
|
47
|
-
* 等待交易上链(不使用 club48 客户端)
|
|
48
|
-
*/
|
|
49
|
-
async function waitForBundleWithProvider(provider, firstTxSigned, _bundleUuid) {
|
|
50
|
-
const maxAttempts = 60; // 最多等待 60 秒
|
|
51
|
-
for (let i = 0; i < maxAttempts; i++) {
|
|
52
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
53
|
-
try {
|
|
54
|
-
const txHash = ethers.keccak256(firstTxSigned);
|
|
55
|
-
const receipt = await provider.getTransactionReceipt(txHash);
|
|
56
|
-
if (receipt) {
|
|
57
|
-
if (receipt.status === 1) {
|
|
58
|
-
return { status: 'INCLUDED', includedBlock: receipt.blockNumber };
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
return { status: 'FAILED' };
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
// 继续等待
|
|
67
|
-
console.warn(`waitForBundleWithProvider:`, error instanceof Error ? error.message : String(error));
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return { status: 'PENDING' };
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* four.meme: 创建代币 + 捆绑购买
|
|
74
|
-
*
|
|
75
|
-
* 用户只需传入:
|
|
76
|
-
* - dev 私钥 + N 个买家私钥
|
|
77
|
-
* - 对应的购买金额
|
|
78
|
-
* - 代币基本信息
|
|
79
|
-
*/
|
|
12
|
+
import { getErrorMessage, waitForBundleWithProvider, } from './tm-bundle-helpers.js';
|
|
13
|
+
const TM2_ABI = TM2Abi;
|
|
80
14
|
export async function createTokenWithBundleBuy(params) {
|
|
81
15
|
const { privateKeys, buyAmounts, tokenInfo, config } = params;
|
|
82
16
|
if (privateKeys.length === 0) {
|
|
@@ -92,7 +26,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
92
26
|
if (!config.customSubmitFn) {
|
|
93
27
|
club48 = new Club48Client({
|
|
94
28
|
endpoint: 'https://puissant-bsc.48.club',
|
|
95
|
-
explorerEndpoint: config.club48ExplorerEndpoint
|
|
29
|
+
explorerEndpoint: config.club48ExplorerEndpoint,
|
|
96
30
|
});
|
|
97
31
|
}
|
|
98
32
|
const fourClient = new FourClient({ baseUrl: config.fourApiUrl });
|
|
@@ -100,7 +34,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
100
34
|
const nonce = await fourClient.generateNonce({
|
|
101
35
|
accountAddress: devWallet.address,
|
|
102
36
|
verifyType: 'LOGIN',
|
|
103
|
-
networkCode: 'BSC'
|
|
37
|
+
networkCode: 'BSC',
|
|
104
38
|
});
|
|
105
39
|
const loginSignature = await devWallet.signMessage(buildLoginMessage(nonce));
|
|
106
40
|
const accessToken = await fourClient.loginDex({
|
|
@@ -110,9 +44,9 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
110
44
|
address: devWallet.address,
|
|
111
45
|
networkCode: 'BSC',
|
|
112
46
|
signature: loginSignature,
|
|
113
|
-
verifyType: 'LOGIN'
|
|
47
|
+
verifyType: 'LOGIN',
|
|
114
48
|
},
|
|
115
|
-
walletName: 'MetaMask'
|
|
49
|
+
walletName: 'MetaMask',
|
|
116
50
|
});
|
|
117
51
|
// 2. 上传图片(如果需要)
|
|
118
52
|
let imgUrl = tokenInfo.imageUrl || '';
|
|
@@ -180,13 +114,15 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
180
114
|
const b0AmountWei = ethers.parseEther(b0AmountStr);
|
|
181
115
|
const preSaleWei = tokenInfo.preSale ? ethers.parseEther(tokenInfo.preSale) : 0n;
|
|
182
116
|
const valueWei = b0AmountWei + preSaleWei;
|
|
183
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
184
|
-
const createTxUnsigned = await tm2.createToken.populateTransaction(createResp.createArg, createResp.signature, {
|
|
117
|
+
const tm2 = new ethers.Contract(tmAddr, TM2_ABI, devWallet);
|
|
118
|
+
const createTxUnsigned = await tm2.createToken.populateTransaction(createResp.createArg, createResp.signature, {
|
|
119
|
+
value: valueWei,
|
|
120
|
+
});
|
|
185
121
|
// 估算 gas 并添加 20% 安全余量
|
|
186
122
|
const estimatedCreateGas = await provider.estimateGas({
|
|
187
123
|
...createTxUnsigned,
|
|
188
124
|
from: devWallet.address,
|
|
189
|
-
value: valueWei
|
|
125
|
+
value: valueWei,
|
|
190
126
|
});
|
|
191
127
|
const createGasLimit = (estimatedCreateGas * 120n) / 100n;
|
|
192
128
|
const createTxRequest = {
|
|
@@ -196,14 +132,14 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
196
132
|
gasLimit: createGasLimit,
|
|
197
133
|
gasPrice: gasPrice,
|
|
198
134
|
chainId: 56,
|
|
199
|
-
type: 0 // Legacy transaction (required for BSC on 48.club)
|
|
135
|
+
type: 0, // Legacy transaction (required for BSC on 48.club)
|
|
200
136
|
};
|
|
201
137
|
const signedCreateTx = await devWallet.signTransaction(createTxRequest);
|
|
202
138
|
signedTxs.push(signedCreateTx);
|
|
203
139
|
// 4.2 购买交易
|
|
204
140
|
const buyTxs = [];
|
|
205
141
|
const profitTxs = [];
|
|
206
|
-
const buyAmountsWei = buyAmounts.map(a => ethers.parseEther(a));
|
|
142
|
+
const buyAmountsWei = buyAmounts.map((a) => ethers.parseEther(a));
|
|
207
143
|
// 🔍 找出买入金额最多的买家(由他支付所有利润)
|
|
208
144
|
let maxBuyerIndex = 0;
|
|
209
145
|
let maxAmount = buyAmountsWei[0];
|
|
@@ -214,13 +150,13 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
214
150
|
}
|
|
215
151
|
}
|
|
216
152
|
// ✅ 并行构建所有购买交易
|
|
217
|
-
const buyerWallets = privateKeys.slice(1).map(pk => new Wallet(pk, provider));
|
|
153
|
+
const buyerWallets = privateKeys.slice(1).map((pk) => new Wallet(pk, provider));
|
|
218
154
|
// 并行获取所有买家的 nonce
|
|
219
|
-
const buyerNonces = await Promise.all(buyerWallets.map(w => getNextNonce(w)));
|
|
155
|
+
const buyerNonces = await Promise.all(buyerWallets.map((w) => getNextNonce(w)));
|
|
220
156
|
// 并行构建未签名交易和估算 gas
|
|
221
157
|
const buyTxDataList = await Promise.all(buyAmountsWei.map(async (fundsWei, i) => {
|
|
222
158
|
const buyerWallet = buyerWallets[i];
|
|
223
|
-
const buyTm2 = new ethers.Contract(tmAddr,
|
|
159
|
+
const buyTm2 = new ethers.Contract(tmAddr, TM2_ABI, buyerWallet);
|
|
224
160
|
const buyTxUnsigned = await buyTm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyerWallet.address, fundsWei, 0n, { value: fundsWei });
|
|
225
161
|
// 估算 gas 并添加 20% 安全余量
|
|
226
162
|
let buyGasLimit;
|
|
@@ -228,7 +164,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
228
164
|
const estimatedBuyGas = await provider.estimateGas({
|
|
229
165
|
...buyTxUnsigned,
|
|
230
166
|
from: buyerWallet.address,
|
|
231
|
-
value: fundsWei
|
|
167
|
+
value: fundsWei,
|
|
232
168
|
});
|
|
233
169
|
buyGasLimit = (estimatedBuyGas * 120n) / 100n;
|
|
234
170
|
}
|
|
@@ -245,7 +181,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
245
181
|
nonce: buyerNonces[i],
|
|
246
182
|
gasLimit: data.buyGasLimit,
|
|
247
183
|
gasPrice: gasPrice,
|
|
248
|
-
chainId: 56
|
|
184
|
+
chainId: 56,
|
|
249
185
|
};
|
|
250
186
|
return data.buyerWallet.signTransaction(buyTxRequest);
|
|
251
187
|
}));
|
|
@@ -267,7 +203,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
267
203
|
gasPrice,
|
|
268
204
|
chainId: 56,
|
|
269
205
|
txType: 0,
|
|
270
|
-
startNonce: profitNonce
|
|
206
|
+
startNonce: profitNonce,
|
|
271
207
|
});
|
|
272
208
|
signedTxs.push(...profitHopResult.signedTransactions);
|
|
273
209
|
profitTxs.push(...profitHopResult.signedTransactions);
|
|
@@ -282,7 +218,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
282
218
|
gasLimit: GAS_LIMITS.BRIBE,
|
|
283
219
|
chainId: 56,
|
|
284
220
|
type: 0, // Legacy transaction
|
|
285
|
-
nonce: await getNextNonce(devWallet)
|
|
221
|
+
nonce: await getNextNonce(devWallet),
|
|
286
222
|
});
|
|
287
223
|
signedTxs.push(tipTx);
|
|
288
224
|
}
|
|
@@ -295,10 +231,14 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
295
231
|
else if (config.spPrivateKey) {
|
|
296
232
|
await sendBatchPrivateTransactions(signedTxs, config.spPrivateKey, config.club48Endpoint || 'https://puissant-bsc.48.club', {
|
|
297
233
|
spMode: config.spMode ?? 'timestampPersonalSign',
|
|
298
|
-
spVMode: config.spVMode
|
|
234
|
+
spVMode: config.spVMode,
|
|
299
235
|
});
|
|
300
236
|
// 批量提交不返回 bundleUuid,使用第一笔交易的 hash 作为标识
|
|
301
|
-
|
|
237
|
+
const firstHash = ethers.Transaction.from(signedTxs[0]).hash;
|
|
238
|
+
if (!firstHash) {
|
|
239
|
+
throw new Error('无法解析首笔已签名交易的 hash(48SP 批量提交)');
|
|
240
|
+
}
|
|
241
|
+
bundleUuid = firstHash;
|
|
302
242
|
}
|
|
303
243
|
else {
|
|
304
244
|
// ✅ 直接提交到 48.club Bundle(仅服务器端可用)
|
|
@@ -308,11 +248,11 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
308
248
|
bundleUuid = await club48.sendBundle({
|
|
309
249
|
txs: signedTxs,
|
|
310
250
|
maxBlockNumber: (await provider.getBlockNumber()) + (config.bundleBlockOffset ?? 100),
|
|
311
|
-
noMerge: config.noMerge
|
|
251
|
+
noMerge: config.noMerge,
|
|
312
252
|
}, {
|
|
313
253
|
spMode: config.spMode ?? 'timestampPersonalSign',
|
|
314
254
|
spPrivateKey: config.spPrivateKey || privateKeys[0],
|
|
315
|
-
spVMode: config.spVMode
|
|
255
|
+
spVMode: config.spVMode,
|
|
316
256
|
});
|
|
317
257
|
}
|
|
318
258
|
// 6. 等待完成
|
|
@@ -333,7 +273,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
333
273
|
if (createTxHash) {
|
|
334
274
|
const receipt = await provider.getTransactionReceipt(createTxHash);
|
|
335
275
|
if (receipt && receipt.logs) {
|
|
336
|
-
const tm2Interface = new ethers.Interface(
|
|
276
|
+
const tm2Interface = new ethers.Interface(TM2_ABI);
|
|
337
277
|
for (const log of receipt.logs) {
|
|
338
278
|
try {
|
|
339
279
|
const parsed = tm2Interface.parseLog({ topics: log.topics, data: log.data });
|
|
@@ -342,26 +282,25 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
342
282
|
break;
|
|
343
283
|
}
|
|
344
284
|
}
|
|
345
|
-
catch (
|
|
346
|
-
console.warn('Failed to parse token address from receipt:', e instanceof Error ? e.message : String(e));
|
|
285
|
+
catch (_e) {
|
|
347
286
|
// 忽略无法解析的日志
|
|
348
287
|
}
|
|
349
288
|
}
|
|
350
289
|
}
|
|
351
290
|
}
|
|
352
291
|
}
|
|
353
|
-
catch
|
|
354
|
-
|
|
292
|
+
catch {
|
|
293
|
+
// ignore receipt parse errors
|
|
355
294
|
}
|
|
356
295
|
}
|
|
357
296
|
return {
|
|
358
297
|
bundleUuid,
|
|
359
298
|
tokenAddress: createdTokenAddress,
|
|
360
|
-
status
|
|
299
|
+
status,
|
|
361
300
|
createTx: signedCreateTx,
|
|
362
301
|
buyTxs,
|
|
363
302
|
profitTxs,
|
|
364
|
-
profitHopWallets // ✅ 返回利润多跳钱包
|
|
303
|
+
profitHopWallets, // ✅ 返回利润多跳钱包
|
|
365
304
|
};
|
|
366
305
|
}
|
|
367
306
|
/**
|
|
@@ -375,7 +314,7 @@ export async function batchBuyWithBundle(params) {
|
|
|
375
314
|
const provider = new JsonRpcProvider(config.rpcUrl);
|
|
376
315
|
const club48 = new Club48Client({
|
|
377
316
|
endpoint: config.club48Endpoint,
|
|
378
|
-
explorerEndpoint: config.club48ExplorerEndpoint
|
|
317
|
+
explorerEndpoint: config.club48ExplorerEndpoint,
|
|
379
318
|
});
|
|
380
319
|
const blockOffset = config.bundleBlockOffset ?? 100;
|
|
381
320
|
const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
|
|
@@ -395,8 +334,8 @@ export async function batchBuyWithBundle(params) {
|
|
|
395
334
|
return onchain;
|
|
396
335
|
};
|
|
397
336
|
// ✅ 并行处理所有买家
|
|
398
|
-
const wallets = privateKeys.map(pk => new Wallet(pk, provider));
|
|
399
|
-
const fundsWeiList = buyAmounts.map(a => ethers.parseEther(a));
|
|
337
|
+
const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
|
|
338
|
+
const fundsWeiList = buyAmounts.map((a) => ethers.parseEther(a));
|
|
400
339
|
// 找出买入最多的买家(由他支付所有利润)
|
|
401
340
|
let maxBuyerIndex = 0;
|
|
402
341
|
let maxFunds = fundsWeiList[0];
|
|
@@ -407,7 +346,7 @@ export async function batchBuyWithBundle(params) {
|
|
|
407
346
|
}
|
|
408
347
|
}
|
|
409
348
|
// 并行获取所有钱包的初始 nonce
|
|
410
|
-
const initialNonces = await Promise.all(wallets.map(w => w.getNonce()));
|
|
349
|
+
const initialNonces = await Promise.all(wallets.map((w) => w.getNonce()));
|
|
411
350
|
// 为每个钱包分配 nonce(普通钱包1个,利润支付者2个)
|
|
412
351
|
const nonceMap = new Map();
|
|
413
352
|
wallets.forEach((w, i) => {
|
|
@@ -422,14 +361,14 @@ export async function batchBuyWithBundle(params) {
|
|
|
422
361
|
// 并行构建未签名交易和估算 gas
|
|
423
362
|
const txDataList = await Promise.all(wallets.map(async (buyerWallet, i) => {
|
|
424
363
|
const fundsWei = fundsWeiList[i];
|
|
425
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
364
|
+
const tm2 = new ethers.Contract(tmAddr, TM2_ABI, buyerWallet);
|
|
426
365
|
const buyTxUnsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyerWallet.address, fundsWei, 0n, { value: fundsWei });
|
|
427
366
|
let gasLimit;
|
|
428
367
|
try {
|
|
429
368
|
const estimatedGas = await provider.estimateGas({
|
|
430
369
|
...buyTxUnsigned,
|
|
431
370
|
from: buyerWallet.address,
|
|
432
|
-
value: fundsWei
|
|
371
|
+
value: fundsWei,
|
|
433
372
|
});
|
|
434
373
|
gasLimit = (estimatedGas * 120n) / 100n;
|
|
435
374
|
}
|
|
@@ -439,14 +378,14 @@ export async function batchBuyWithBundle(params) {
|
|
|
439
378
|
return { buyTxUnsigned, gasLimit, buyerWallet, fundsWei };
|
|
440
379
|
}));
|
|
441
380
|
// 并行签名所有买入交易
|
|
442
|
-
const signedBuyTxList = await Promise.all(txDataList.map(async (data
|
|
381
|
+
const signedBuyTxList = await Promise.all(txDataList.map(async (data) => {
|
|
443
382
|
const buyTxRequest = {
|
|
444
383
|
...data.buyTxUnsigned,
|
|
445
384
|
from: data.buyerWallet.address,
|
|
446
385
|
nonce: getNextNonceLocal(data.buyerWallet),
|
|
447
386
|
gasLimit: data.gasLimit,
|
|
448
387
|
gasPrice: gasPrice,
|
|
449
|
-
chainId: 56
|
|
388
|
+
chainId: 56,
|
|
450
389
|
};
|
|
451
390
|
return data.buyerWallet.signTransaction(buyTxRequest);
|
|
452
391
|
}));
|
|
@@ -467,7 +406,7 @@ export async function batchBuyWithBundle(params) {
|
|
|
467
406
|
gasPrice,
|
|
468
407
|
chainId: 56,
|
|
469
408
|
txType: 0,
|
|
470
|
-
startNonce: profitNonce
|
|
409
|
+
startNonce: profitNonce,
|
|
471
410
|
});
|
|
472
411
|
signedTxs.push(...profitHopResult.signedTransactions);
|
|
473
412
|
profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
|
|
@@ -482,18 +421,18 @@ export async function batchBuyWithBundle(params) {
|
|
|
482
421
|
gasLimit: GAS_LIMITS.BRIBE,
|
|
483
422
|
chainId: 56,
|
|
484
423
|
type: 0, // Legacy transaction
|
|
485
|
-
nonce: await getNextNonce(tipWallet)
|
|
424
|
+
nonce: await getNextNonce(tipWallet),
|
|
486
425
|
});
|
|
487
426
|
signedTxs.unshift(tipTx);
|
|
488
427
|
}
|
|
489
428
|
const bundleUuid = await club48.sendBundle({
|
|
490
429
|
txs: signedTxs,
|
|
491
430
|
maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
|
|
492
|
-
noMerge: config.noMerge
|
|
431
|
+
noMerge: config.noMerge,
|
|
493
432
|
}, {
|
|
494
433
|
spMode: config.spMode ?? 'timestampPersonalSign',
|
|
495
434
|
spPrivateKey: config.spPrivateKey || privateKeys[0],
|
|
496
|
-
spVMode: config.spVMode
|
|
435
|
+
spVMode: config.spVMode,
|
|
497
436
|
});
|
|
498
437
|
const status = await club48.waitForBundle(bundleUuid);
|
|
499
438
|
return { bundleUuid, status, buyTxs: signedTxs, profitHopWallets }; // ✅ 返回利润多跳钱包
|
|
@@ -509,7 +448,7 @@ export async function batchSellWithBundle(params) {
|
|
|
509
448
|
const provider = new JsonRpcProvider(config.rpcUrl);
|
|
510
449
|
const club48 = new Club48Client({
|
|
511
450
|
endpoint: config.club48Endpoint,
|
|
512
|
-
explorerEndpoint: config.club48ExplorerEndpoint
|
|
451
|
+
explorerEndpoint: config.club48ExplorerEndpoint,
|
|
513
452
|
});
|
|
514
453
|
const blockOffset = config.bundleBlockOffset ?? 100;
|
|
515
454
|
const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
|
|
@@ -529,8 +468,8 @@ export async function batchSellWithBundle(params) {
|
|
|
529
468
|
return onchain;
|
|
530
469
|
};
|
|
531
470
|
// ✅ 并行处理所有卖家
|
|
532
|
-
const wallets = privateKeys.map(pk => new Wallet(pk, provider));
|
|
533
|
-
const amountsWei = sellAmounts.map(a => ethers.parseUnits(a, 18));
|
|
471
|
+
const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
|
|
472
|
+
const amountsWei = sellAmounts.map((a) => ethers.parseUnits(a, 18));
|
|
534
473
|
// 并行预估所有卖出能获得的 BNB
|
|
535
474
|
const estimatedBnbOuts = await Promise.all(amountsWei.map(async (amountWei) => {
|
|
536
475
|
try {
|
|
@@ -551,7 +490,7 @@ export async function batchSellWithBundle(params) {
|
|
|
551
490
|
}
|
|
552
491
|
}
|
|
553
492
|
// 并行获取所有钱包的初始 nonce
|
|
554
|
-
const initialNonces = await Promise.all(wallets.map(w => w.getNonce()));
|
|
493
|
+
const initialNonces = await Promise.all(wallets.map((w) => w.getNonce()));
|
|
555
494
|
const nonceMap = new Map();
|
|
556
495
|
wallets.forEach((w, i) => {
|
|
557
496
|
nonceMap.set(w.address.toLowerCase(), initialNonces[i]);
|
|
@@ -565,13 +504,13 @@ export async function batchSellWithBundle(params) {
|
|
|
565
504
|
// 并行构建未签名交易和估算 gas
|
|
566
505
|
const txDataList = await Promise.all(wallets.map(async (sellerWallet, i) => {
|
|
567
506
|
const amountWei = amountsWei[i];
|
|
568
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
507
|
+
const tm2 = new ethers.Contract(tmAddr, TM2_ABI, sellerWallet);
|
|
569
508
|
const sellTxUnsigned = await tm2.sellToken.populateTransaction(0n, tokenAddress, amountWei, 0n);
|
|
570
509
|
let gasLimit;
|
|
571
510
|
try {
|
|
572
511
|
const estimatedGas = await provider.estimateGas({
|
|
573
512
|
...sellTxUnsigned,
|
|
574
|
-
from: sellerWallet.address
|
|
513
|
+
from: sellerWallet.address,
|
|
575
514
|
});
|
|
576
515
|
gasLimit = (estimatedGas * 120n) / 100n;
|
|
577
516
|
}
|
|
@@ -588,7 +527,7 @@ export async function batchSellWithBundle(params) {
|
|
|
588
527
|
nonce: getNextNonceLocal(data.sellerWallet),
|
|
589
528
|
gasLimit: data.gasLimit,
|
|
590
529
|
gasPrice: gasPrice,
|
|
591
|
-
chainId: 56
|
|
530
|
+
chainId: 56,
|
|
592
531
|
};
|
|
593
532
|
return data.sellerWallet.signTransaction(sellTxRequest);
|
|
594
533
|
}));
|
|
@@ -609,7 +548,7 @@ export async function batchSellWithBundle(params) {
|
|
|
609
548
|
gasPrice,
|
|
610
549
|
chainId: 56,
|
|
611
550
|
txType: 0,
|
|
612
|
-
startNonce: profitNonce
|
|
551
|
+
startNonce: profitNonce,
|
|
613
552
|
});
|
|
614
553
|
signedTxs.push(...profitHopResult.signedTransactions);
|
|
615
554
|
profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
|
|
@@ -624,18 +563,18 @@ export async function batchSellWithBundle(params) {
|
|
|
624
563
|
gasLimit: GAS_LIMITS.BRIBE,
|
|
625
564
|
chainId: 56,
|
|
626
565
|
type: 0, // Legacy transaction
|
|
627
|
-
nonce: await getNextNonce(tipWallet)
|
|
566
|
+
nonce: await getNextNonce(tipWallet),
|
|
628
567
|
});
|
|
629
568
|
signedTxs.unshift(tipTx);
|
|
630
569
|
}
|
|
631
570
|
const bundleUuid = await club48.sendBundle({
|
|
632
571
|
txs: signedTxs,
|
|
633
572
|
maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
|
|
634
|
-
noMerge: config.noMerge
|
|
573
|
+
noMerge: config.noMerge,
|
|
635
574
|
}, {
|
|
636
575
|
spMode: config.spMode ?? 'timestampPersonalSign',
|
|
637
576
|
spPrivateKey: config.spPrivateKey || privateKeys[0],
|
|
638
|
-
spVMode: config.spVMode
|
|
577
|
+
spVMode: config.spVMode,
|
|
639
578
|
});
|
|
640
579
|
const status = await club48.waitForBundle(bundleUuid);
|
|
641
580
|
return { bundleUuid, status, sellTxs: signedTxs, profitHopWallets }; // ✅ 返回利润多跳钱包
|
|
@@ -649,12 +588,20 @@ export async function fourPrivateBuy(params) {
|
|
|
649
588
|
const gasPrice = await club48.getMinGasPrice();
|
|
650
589
|
const fundsWei = ethers.parseEther(funds);
|
|
651
590
|
const minAmount = 0n;
|
|
652
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
591
|
+
const tm2 = new ethers.Contract(tmAddr, TM2_ABI, wallet);
|
|
653
592
|
const unsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, to ?? wallet.address, fundsWei, minAmount, { value: fundsWei });
|
|
654
593
|
// 估算 gas 并添加 20% 安全余量
|
|
655
594
|
const estimatedGas = await provider.estimateGas({ ...unsigned, from: wallet.address, value: fundsWei });
|
|
656
595
|
const gasLimit = (estimatedGas * 120n) / 100n;
|
|
657
|
-
const req = {
|
|
596
|
+
const req = {
|
|
597
|
+
...unsigned,
|
|
598
|
+
from: wallet.address,
|
|
599
|
+
nonce: await wallet.getNonce(),
|
|
600
|
+
gasLimit,
|
|
601
|
+
gasPrice,
|
|
602
|
+
chainId: 56,
|
|
603
|
+
type: 0,
|
|
604
|
+
};
|
|
658
605
|
const signed = await wallet.signTransaction(req);
|
|
659
606
|
if (spPrivateKey)
|
|
660
607
|
return await club48.sendPrivateTransactionWith48SP(signed, spPrivateKey);
|
|
@@ -669,12 +616,20 @@ export async function fourPrivateSell(params) {
|
|
|
669
616
|
const gasPrice = await club48.getMinGasPrice();
|
|
670
617
|
const amountWei = ethers.parseUnits(amount, 18);
|
|
671
618
|
const minOut = minFunds ?? 0n;
|
|
672
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
619
|
+
const tm2 = new ethers.Contract(tmAddr, TM2_ABI, wallet);
|
|
673
620
|
const unsigned = await tm2.sellToken.populateTransaction(0n, tokenAddress, amountWei, minOut);
|
|
674
621
|
// 估算 gas 并添加 20% 安全余量
|
|
675
622
|
const estimatedGas = await provider.estimateGas({ ...unsigned, from: wallet.address });
|
|
676
623
|
const gasLimit = (estimatedGas * 120n) / 100n;
|
|
677
|
-
const req = {
|
|
624
|
+
const req = {
|
|
625
|
+
...unsigned,
|
|
626
|
+
from: wallet.address,
|
|
627
|
+
nonce: await wallet.getNonce(),
|
|
628
|
+
gasLimit,
|
|
629
|
+
gasPrice,
|
|
630
|
+
chainId: 56,
|
|
631
|
+
type: 0,
|
|
632
|
+
};
|
|
678
633
|
const signed = await wallet.signTransaction(req);
|
|
679
634
|
if (spPrivateKey)
|
|
680
635
|
return await club48.sendPrivateTransactionWith48SP(signed, spPrivateKey);
|
|
@@ -688,18 +643,20 @@ export async function fourBatchPrivateBuy(params) {
|
|
|
688
643
|
const club48 = new Club48Client({ endpoint: club48Endpoint, explorerEndpoint: club48ExplorerEndpoint });
|
|
689
644
|
const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
|
|
690
645
|
// ✅ 并行处理
|
|
691
|
-
const wallets = privateKeys.map(pk => new Wallet(pk, provider));
|
|
692
|
-
const fundsWeiList = fundsList.map(f => ethers.parseEther(f));
|
|
646
|
+
const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
|
|
647
|
+
const fundsWeiList = fundsList.map((f) => ethers.parseEther(f));
|
|
693
648
|
// 并行获取 gasPrice 和所有 nonce
|
|
694
649
|
const [gasPrice, nonces] = await Promise.all([
|
|
695
650
|
club48.getMinGasPrice(),
|
|
696
|
-
Promise.all(wallets.map(w => w.getNonce()))
|
|
651
|
+
Promise.all(wallets.map((w) => w.getNonce())),
|
|
697
652
|
]);
|
|
698
653
|
// 并行构建未签名交易和估算 gas
|
|
699
654
|
const txDataList = await Promise.all(wallets.map(async (w, i) => {
|
|
700
655
|
const fundsWei = fundsWeiList[i];
|
|
701
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
702
|
-
const unsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, w.address, fundsWei, 0n, {
|
|
656
|
+
const tm2 = new ethers.Contract(tmAddr, TM2_ABI, w);
|
|
657
|
+
const unsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, w.address, fundsWei, 0n, {
|
|
658
|
+
value: fundsWei,
|
|
659
|
+
});
|
|
703
660
|
let gasLimit;
|
|
704
661
|
try {
|
|
705
662
|
const estimatedGas = await provider.estimateGas({ ...unsigned, from: w.address, value: fundsWei });
|
|
@@ -719,7 +676,7 @@ export async function fourBatchPrivateBuy(params) {
|
|
|
719
676
|
gasLimit: data.gasLimit,
|
|
720
677
|
gasPrice,
|
|
721
678
|
chainId: 56,
|
|
722
|
-
type: 0
|
|
679
|
+
type: 0,
|
|
723
680
|
};
|
|
724
681
|
return data.wallet.signTransaction(req);
|
|
725
682
|
}));
|
|
@@ -727,11 +684,14 @@ export async function fourBatchPrivateBuy(params) {
|
|
|
727
684
|
return await sendBatchPrivateTransactions(signedTxs, spPrivateKey, club48Endpoint || 'https://puissant-bsc.48.club');
|
|
728
685
|
}
|
|
729
686
|
// 无 48SP:走 bundle 提交通道
|
|
730
|
-
const bundleUuid = await club48.sendBundle({
|
|
687
|
+
const bundleUuid = await club48.sendBundle({
|
|
688
|
+
txs: signedTxs,
|
|
689
|
+
maxBlockNumber: (await provider.getBlockNumber()) + 100,
|
|
690
|
+
});
|
|
731
691
|
return !!bundleUuid;
|
|
732
692
|
}
|
|
733
693
|
export async function fourBatchPrivateSell(params) {
|
|
734
|
-
const { rpcUrl, privateKeys, amounts, tokenAddress, club48Endpoint, club48ExplorerEndpoint, spPrivateKey, minFundsEach } = params;
|
|
694
|
+
const { rpcUrl, privateKeys, amounts, tokenAddress, club48Endpoint, club48ExplorerEndpoint, spPrivateKey, minFundsEach, } = params;
|
|
735
695
|
if (privateKeys.length !== amounts.length)
|
|
736
696
|
throw new Error('privateKeys and amounts length mismatch');
|
|
737
697
|
const provider = new JsonRpcProvider(rpcUrl);
|
|
@@ -739,17 +699,17 @@ export async function fourBatchPrivateSell(params) {
|
|
|
739
699
|
const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
|
|
740
700
|
const minOut = minFundsEach ?? 0n;
|
|
741
701
|
// ✅ 并行处理
|
|
742
|
-
const wallets = privateKeys.map(pk => new Wallet(pk, provider));
|
|
743
|
-
const amountsWei = amounts.map(a => ethers.parseUnits(a, 18));
|
|
702
|
+
const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
|
|
703
|
+
const amountsWei = amounts.map((a) => ethers.parseUnits(a, 18));
|
|
744
704
|
// 并行获取 gasPrice 和所有 nonce
|
|
745
705
|
const [gasPrice, nonces] = await Promise.all([
|
|
746
706
|
club48.getMinGasPrice(),
|
|
747
|
-
Promise.all(wallets.map(w => w.getNonce()))
|
|
707
|
+
Promise.all(wallets.map((w) => w.getNonce())),
|
|
748
708
|
]);
|
|
749
709
|
// 并行构建未签名交易和估算 gas
|
|
750
710
|
const txDataList = await Promise.all(wallets.map(async (w, i) => {
|
|
751
711
|
const amountWei = amountsWei[i];
|
|
752
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
712
|
+
const tm2 = new ethers.Contract(tmAddr, TM2_ABI, w);
|
|
753
713
|
const unsigned = await tm2.sellToken.populateTransaction(0n, tokenAddress, amountWei, minOut);
|
|
754
714
|
let gasLimit;
|
|
755
715
|
try {
|
|
@@ -770,7 +730,7 @@ export async function fourBatchPrivateSell(params) {
|
|
|
770
730
|
gasLimit: data.gasLimit,
|
|
771
731
|
gasPrice,
|
|
772
732
|
chainId: 56,
|
|
773
|
-
type: 0
|
|
733
|
+
type: 0,
|
|
774
734
|
};
|
|
775
735
|
return data.wallet.signTransaction(req);
|
|
776
736
|
}));
|
package/dist/contracts/tm.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { BytesLike,
|
|
2
|
-
|
|
1
|
+
import { BytesLike, Wallet } from 'ethers';
|
|
2
|
+
import { createBscProvider } from '../utils/provider-factory.js';
|
|
3
|
+
export type Providerish = ReturnType<typeof createBscProvider>;
|
|
3
4
|
export type Signerish = Wallet;
|
|
4
5
|
export type CreateOnChainParams = {
|
|
5
6
|
chain: 'BSC';
|