four-flap-meme-sdk 2.2.7 → 2.2.10
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 +6 -41
- package/README.md +0 -31
- package/README.zh-CN.md +6 -41
- package/dist/chains/bsc/four/approve-tokenmanager.d.ts +26 -1
- package/dist/chains/bsc/four/approve-tokenmanager.js +113 -1
- package/dist/chains/bsc/four/config.d.ts +67 -5
- package/dist/chains/bsc/four/config.js +114 -2
- package/dist/chains/bsc/four/core.d.ts +4 -1
- package/dist/chains/bsc/four/core.js +592 -1
- 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 +46 -2
- package/dist/chains/bsc/four/internal.js +239 -2
- package/dist/chains/bsc/four/pancake-proxy.d.ts +28 -1
- package/dist/chains/bsc/four/pancake-proxy.js +687 -1
- package/dist/chains/bsc/four/private.d.ts +27 -1
- package/dist/chains/bsc/four/private.js +477 -1
- package/dist/chains/bsc/four/submit.d.ts +315 -2
- package/dist/chains/bsc/four/submit.js +752 -2
- package/dist/chains/bsc/four/swap-buy-first.d.ts +55 -2
- package/dist/chains/bsc/four/swap-buy-first.js +507 -2
- package/dist/chains/bsc/four/swap-internal.d.ts +3 -1
- package/dist/chains/bsc/four/swap-internal.js +18 -1
- package/dist/chains/bsc/four/swap.d.ts +144 -2
- package/dist/chains/bsc/four/swap.js +766 -2
- package/dist/chains/bsc/four/types.d.ts +476 -1
- package/dist/chains/bsc/four/utils.d.ts +18 -5
- package/dist/chains/bsc/four/utils.js +1552 -5
- package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +91 -1
- package/dist/chains/bsc/pancake/bundle-buy-first.js +212 -97
- package/dist/chains/bsc/pancake/bundle-swap.d.ts +79 -1
- package/dist/chains/bsc/pancake/bundle-swap.js +726 -114
- package/dist/chains/bsc/pancake/index.d.ts +2 -4
- package/dist/chains/bsc/pancake/index.js +3 -1
- package/dist/chains/bsc/platforms/iro/factory.d.ts +2 -2
- package/dist/chains/bsc/platforms/iro/factory.js +1 -3
- 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 +10 -31
- package/dist/chains/bsc/platforms/iro/token.js +1 -4
- package/dist/chains/eni/batch-router/bundle-approve.js +3 -4
- package/dist/chains/eni/batch-router/transfer.js +25 -55
- package/dist/chains/eni/batch-router/utils.js +6 -32
- package/dist/chains/eni/bundler/sign.js +6 -5
- package/dist/chains/eni/bundler/submit.js +4 -1
- package/dist/chains/eni/constants.js +1 -1
- package/dist/chains/eni/index.d.ts +1 -2
- package/dist/chains/eni/index.js +0 -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 +6 -9
- package/dist/chains/eni/platforms/daoaas/portal-direct.js +44 -28
- package/dist/chains/eni/platforms/daoaas/portal.js +6 -10
- package/dist/chains/eni/platforms/dswap/liquidity.js +26 -58
- 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 +46 -87
- package/dist/chains/eni/platforms/fair-launch/pool.js +1 -4
- package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
- package/dist/chains/eni/platforms/iro/factory.d.ts +2 -2
- package/dist/chains/eni/platforms/iro/factory.js +1 -3
- 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 +26 -90
- package/dist/chains/eni/platforms/iro/token.js +31 -107
- package/dist/chains/eni/platforms/iro/whitelist.js +18 -6
- package/dist/chains/index.d.ts +0 -13
- package/dist/chains/index.js +0 -13
- package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +26 -2
- package/dist/chains/xlayer/eip7702/bundle-approve.js +21 -11
- package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +6 -2
- package/dist/chains/xlayer/eip7702/bundle-buy.js +51 -13
- package/dist/chains/xlayer/eip7702/bundle-create.js +59 -93
- package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +6 -2
- package/dist/chains/xlayer/eip7702/bundle-sell.js +111 -29
- package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +65 -3
- package/dist/chains/xlayer/eip7702/bundle-swap.js +245 -51
- package/dist/chains/xlayer/eip7702/constants.d.ts +16 -1
- package/dist/chains/xlayer/eip7702/constants.js +21 -3
- package/dist/chains/xlayer/eip7702/index.d.ts +46 -28
- package/dist/chains/xlayer/eip7702/index.js +81 -28
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +203 -2
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +307 -63
- package/dist/chains/xlayer/eip7702/types.d.ts +0 -88
- package/dist/chains/xlayer/eip7702/utils.d.ts +3 -0
- package/dist/chains/xlayer/eip7702/utils.js +28 -23
- package/dist/chains/xlayer/eip7702/volume.d.ts +184 -6
- package/dist/chains/xlayer/eip7702/volume.js +164 -89
- 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.d.ts +95 -1
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +299 -66
- package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
- package/dist/chains/xlayer/eoa/eoa-wash-volume.js +23 -18
- package/dist/chains/xlayer/eoa/index.d.ts +6 -10
- package/dist/chains/xlayer/eoa/index.js +23 -8
- package/dist/chains/xlayer/eoa/portal-ops.js +2 -7
- 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 +3 -1
- package/dist/chains/xlayer/index.d.ts +2 -3
- package/dist/chains/xlayer/index.js +7 -4
- package/dist/contracts/helper3.d.ts +5 -20
- package/dist/contracts/helper3.js +20 -56
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +26 -1
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +113 -1
- package/dist/contracts/tm-bundle-merkle/config.d.ts +67 -5
- package/dist/contracts/tm-bundle-merkle/config.js +114 -2
- package/dist/contracts/tm-bundle-merkle/core.d.ts +4 -1
- package/dist/contracts/tm-bundle-merkle/core.js +591 -1
- 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 +46 -2
- package/dist/contracts/tm-bundle-merkle/internal.js +238 -2
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +28 -1
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +686 -1
- package/dist/contracts/tm-bundle-merkle/private.d.ts +27 -1
- package/dist/contracts/tm-bundle-merkle/private.js +476 -1
- package/dist/contracts/tm-bundle-merkle/submit.d.ts +314 -3
- package/dist/contracts/tm-bundle-merkle/submit.js +928 -3
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +55 -2
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +506 -2
- package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +3 -1
- package/dist/contracts/tm-bundle-merkle/swap-internal.js +18 -1
- package/dist/contracts/tm-bundle-merkle/swap.d.ts +144 -2
- package/dist/contracts/tm-bundle-merkle/swap.js +764 -2
- package/dist/contracts/tm-bundle-merkle/types.d.ts +476 -1
- package/dist/contracts/tm-bundle-merkle/utils.d.ts +18 -6
- package/dist/contracts/tm-bundle-merkle/utils.js +1501 -6
- package/dist/contracts/tm-bundle.d.ts +51 -3
- package/dist/contracts/tm-bundle.js +177 -108
- package/dist/contracts/tm.d.ts +2 -3
- package/dist/contracts/tm.js +32 -37
- package/dist/contracts/tm1.js +4 -9
- package/dist/contracts/tm2.js +4 -9
- package/dist/dex/direct-router.d.ts +125 -3
- package/dist/dex/direct-router.js +666 -237
- package/dist/flows/create.d.ts +1 -2
- package/dist/flows/create.js +6 -6
- package/dist/index.d.ts +86 -20
- package/dist/index.js +216 -20
- package/dist/shared/abis/TaxToken.json +105 -0
- package/dist/shared/abis/TokenManager2.json +60 -0
- package/dist/shared/abis/common.d.ts +83 -2
- package/dist/shared/abis/common.js +253 -2
- package/dist/shared/abis/index.d.ts +6 -5
- package/dist/shared/abis/index.js +7 -5
- package/dist/shared/clients/blockrazor.js +25 -39
- package/dist/shared/clients/club48.d.ts +2 -2
- package/dist/shared/clients/club48.js +29 -34
- package/dist/shared/clients/emitservice.js +0 -2
- package/dist/shared/clients/four.d.ts +6 -21
- package/dist/shared/clients/four.js +24 -29
- package/dist/shared/clients/merkle.js +34 -27
- package/dist/shared/constants/addresses.d.ts +1 -1
- package/dist/shared/constants/addresses.js +2 -11
- 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 +6 -2
- package/dist/shared/constants/index.d.ts +0 -3
- package/dist/shared/constants/index.js +0 -1
- package/dist/shared/flap/abi.js +1 -1
- package/dist/shared/flap/constants.d.ts +2 -1
- package/dist/shared/flap/constants.js +4 -3
- package/dist/shared/flap/curve.js +0 -3
- package/dist/shared/flap/errors.d.ts +4 -1
- package/dist/shared/flap/errors.js +1 -20
- package/dist/shared/flap/index.d.ts +5 -5
- package/dist/shared/flap/index.js +5 -5
- package/dist/shared/flap/launch-v6.d.ts +117 -0
- package/dist/shared/flap/launch-v6.js +111 -0
- package/dist/shared/flap/meta.d.ts +18 -22
- package/dist/shared/flap/meta.js +17 -12
- package/dist/shared/flap/permit.js +2 -5
- package/dist/shared/flap/pinata.d.ts +6 -22
- package/dist/shared/flap/pinata.js +26 -21
- package/dist/shared/flap/portal-bundle-merkle/config.d.ts +72 -3
- package/dist/shared/flap/portal-bundle-merkle/config.js +124 -4
- package/dist/shared/flap/portal-bundle-merkle/core.d.ts +4 -0
- package/dist/shared/flap/portal-bundle-merkle/core.js +267 -164
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.d.ts +4 -17
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +195 -107
- package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +92 -100
- package/dist/shared/flap/portal-bundle-merkle/index.d.ts +7 -11
- package/dist/shared/flap/portal-bundle-merkle/index.js +7 -4
- package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +68 -71
- package/dist/shared/flap/portal-bundle-merkle/private.js +114 -61
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +64 -1
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +247 -66
- package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +71 -2
- package/dist/shared/flap/portal-bundle-merkle/swap.js +410 -103
- package/dist/shared/flap/portal-bundle-merkle/types.d.ts +12 -88
- package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +80 -1
- package/dist/shared/flap/portal-bundle-merkle/utils.js +265 -145
- package/dist/shared/flap/portal-bundle.js +56 -55
- package/dist/shared/flap/portal.d.ts +3 -14
- package/dist/shared/flap/portal.js +26 -49
- package/dist/shared/flap/vanity.d.ts +5 -4
- package/dist/shared/flap/vanity.js +20 -13
- package/dist/shared/flap/vault.d.ts +93 -25
- package/dist/shared/flap/vault.js +126 -75
- package/dist/shared/four/tax-token.d.ts +1 -1
- package/dist/shared/four/tax-token.js +7 -27
- package/dist/shared/index.d.ts +0 -6
- package/dist/shared/index.js +0 -4
- package/dist/utils/airdrop-sweep.d.ts +76 -4
- package/dist/utils/airdrop-sweep.js +55 -42
- package/dist/utils/bundle-helpers.d.ts +243 -9
- package/dist/utils/bundle-helpers.js +584 -10
- package/dist/utils/constants.d.ts +61 -5
- package/dist/utils/constants.js +80 -5
- package/dist/utils/contract-factory.d.ts +4 -2
- package/dist/utils/contract-factory.js +18 -25
- package/dist/utils/erc20.d.ts +89 -7
- package/dist/utils/erc20.js +125 -94
- package/dist/utils/errors.d.ts +1 -12
- package/dist/utils/errors.js +1 -60
- package/dist/utils/holders-maker.d.ts +138 -2
- package/dist/utils/holders-maker.js +661 -26
- package/dist/utils/lp-inspect.d.ts +112 -2
- package/dist/utils/lp-inspect.js +223 -73
- package/dist/utils/mpcExclusive.d.ts +5 -2
- package/dist/utils/mpcExclusive.js +3 -4
- package/dist/utils/private-sale.d.ts +58 -2
- package/dist/utils/private-sale.js +15 -4
- package/dist/utils/provider-factory.d.ts +0 -4
- package/dist/utils/provider-factory.js +0 -10
- package/dist/utils/quote-helpers.d.ts +45 -4
- package/dist/utils/quote-helpers.js +74 -17
- package/dist/utils/stealth-transfer.d.ts +28 -2
- package/dist/utils/stealth-transfer.js +15 -31
- package/dist/utils/swap-helpers.d.ts +15 -2
- package/dist/utils/swap-helpers.js +11 -6
- package/dist/utils/wallet.d.ts +25 -2
- package/dist/utils/wallet.js +10 -13
- package/package.json +4 -160
- package/dist/__tests__/subpath-exports.test.d.ts +0 -1
- package/dist/__tests__/subpath-exports.test.js +0 -64
- package/dist/abis/common.d.ts +0 -85
- package/dist/abis/common.js +0 -264
- package/dist/abis/contracts/TaxToken.json +0 -969
- package/dist/abis/contracts/TokenManager2.json +0 -136
- package/dist/abis/contracts/index.d.ts +0 -5
- package/dist/abis/contracts/index.js +0 -5
- package/dist/abis/flap/index.d.ts +0 -3
- package/dist/abis/flap/index.js +0 -3
- package/dist/abis/flap/portal-events.d.ts +0 -6
- package/dist/abis/flap/portal-events.js +0 -17
- package/dist/abis/flap/portal.d.ts +0 -6
- package/dist/abis/flap/portal.js +0 -37
- package/dist/abis/flap/vault.d.ts +0 -171
- package/dist/abis/flap/vault.js +0 -91
- package/dist/abis/index.d.ts +0 -8
- package/dist/abis/index.js +0 -11
- package/dist/bundle-core/__tests__/config-helpers.test.d.ts +0 -1
- package/dist/bundle-core/__tests__/config-helpers.test.js +0 -28
- package/dist/bundle-core/__tests__/facade-parity.test.d.ts +0 -1
- package/dist/bundle-core/__tests__/facade-parity.test.js +0 -33
- package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +0 -1
- package/dist/bundle-core/__tests__/sign-context-helpers.test.js +0 -60
- package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +0 -1
- package/dist/bundle-core/__tests__/sign-fixture.test.js +0 -220
- package/dist/bundle-core/__tests__/sign-fixtures.d.ts +0 -10
- package/dist/bundle-core/__tests__/sign-fixtures.js +0 -16
- package/dist/bundle-core/config-helpers.d.ts +0 -36
- package/dist/bundle-core/config-helpers.js +0 -57
- package/dist/bundle-core/errors.d.ts +0 -50
- package/dist/bundle-core/errors.js +0 -35
- package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +0 -7
- package/dist/bundle-core/four-meme/approve-tokenmanager.js +0 -99
- package/dist/bundle-core/four-meme/core-helpers.d.ts +0 -8
- package/dist/bundle-core/four-meme/core-helpers.js +0 -40
- package/dist/bundle-core/four-meme/core.d.ts +0 -4
- package/dist/bundle-core/four-meme/core.js +0 -515
- package/dist/bundle-core/four-meme/pancake-proxy.d.ts +0 -28
- package/dist/bundle-core/four-meme/pancake-proxy.js +0 -679
- package/dist/bundle-core/four-meme/private.d.ts +0 -27
- package/dist/bundle-core/four-meme/private.js +0 -465
- package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +0 -2
- package/dist/bundle-core/four-meme/sign-context-helpers.js +0 -2
- package/dist/bundle-core/four-meme/swap-buy-first.d.ts +0 -8
- package/dist/bundle-core/four-meme/swap-buy-first.js +0 -493
- package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +0 -6
- package/dist/bundle-core/four-meme/swap-hop-helpers.js +0 -63
- package/dist/bundle-core/four-meme/swap-internal.d.ts +0 -3
- package/dist/bundle-core/four-meme/swap-internal.js +0 -18
- package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +0 -27
- package/dist/bundle-core/four-meme/swap-sign-helpers.js +0 -105
- package/dist/bundle-core/four-meme/swap.d.ts +0 -17
- package/dist/bundle-core/four-meme/swap.js +0 -505
- package/dist/bundle-core/four-meme/types/buy-first.d.ts +0 -50
- package/dist/bundle-core/four-meme/types/buy-first.js +0 -1
- package/dist/bundle-core/four-meme/types/core-flow.d.ts +0 -63
- package/dist/bundle-core/four-meme/types/core-flow.js +0 -1
- package/dist/bundle-core/four-meme/types/index.d.ts +0 -600
- package/dist/bundle-core/four-meme/types/index.js +0 -1
- package/dist/bundle-core/four-meme/types/swap-internal.d.ts +0 -19
- package/dist/bundle-core/four-meme/types/swap-internal.js +0 -1
- package/dist/bundle-core/four-meme/types.d.ts +0 -1
- package/dist/bundle-core/four-meme/types.js +0 -1
- package/dist/bundle-core/four-meme/utils-disperse.d.ts +0 -7
- package/dist/bundle-core/four-meme/utils-disperse.js +0 -396
- package/dist/bundle-core/four-meme/utils-pairwise.d.ts +0 -8
- package/dist/bundle-core/four-meme/utils-pairwise.js +0 -328
- package/dist/bundle-core/four-meme/utils-sweep.d.ts +0 -8
- package/dist/bundle-core/four-meme/utils-sweep.js +0 -744
- package/dist/bundle-core/index.d.ts +0 -8
- package/dist/bundle-core/index.js +0 -8
- package/dist/bundle-core/internal.d.ts +0 -21
- package/dist/bundle-core/internal.js +0 -182
- package/dist/bundle-core/sign-context-helpers.d.ts +0 -25
- package/dist/bundle-core/sign-context-helpers.js +0 -67
- package/dist/bundle-core/submit.d.ts +0 -293
- package/dist/bundle-core/submit.js +0 -727
- package/dist/bundle-core/types/index.d.ts +0 -8
- package/dist/bundle-core/types/index.js +0 -1
- package/dist/bundle-core/types.d.ts +0 -1
- package/dist/bundle-core/types.js +0 -1
- package/dist/chains/bsc/four/utils-disperse.d.ts +0 -1
- package/dist/chains/bsc/four/utils-disperse.js +0 -1
- package/dist/chains/bsc/four/utils-pairwise.d.ts +0 -1
- package/dist/chains/bsc/four/utils-pairwise.js +0 -1
- package/dist/chains/bsc/four/utils-sweep.d.ts +0 -1
- package/dist/chains/bsc/four/utils-sweep.js +0 -1
- package/dist/chains/bsc/iro.d.ts +0 -5
- package/dist/chains/bsc/iro.js +0 -4
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +0 -159
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +0 -117
- package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +0 -241
- package/dist/chains/bsc/pancake/bundle-swap-helpers.js +0 -565
- package/dist/chains/eni/flat-aliases.d.ts +0 -10
- package/dist/chains/eni/flat-aliases.js +0 -8
- package/dist/chains/eni/submit.d.ts +0 -43
- package/dist/chains/eni/submit.js +0 -286
- package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +0 -13
- package/dist/chains/xlayer/eip7702/flat-aliases.js +0 -10
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +0 -79
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +0 -1
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +0 -26
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +0 -57
- package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +0 -148
- package/dist/chains/xlayer/eip7702/volume-helpers.js +0 -48
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +0 -126
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +0 -228
- package/dist/contracts/tm-bundle-helpers.d.ts +0 -88
- package/dist/contracts/tm-bundle-helpers.js +0 -72
- package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +0 -1
- package/dist/contracts/tm-bundle-merkle/utils-disperse.js +0 -1
- package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +0 -1
- package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +0 -1
- package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +0 -1
- package/dist/contracts/tm-bundle-merkle/utils-sweep.js +0 -1
- package/dist/dex/direct-router-helpers.d.ts +0 -264
- package/dist/dex/direct-router-helpers.js +0 -539
- package/dist/dex/types.d.ts +0 -81
- package/dist/dex/types.js +0 -1
- package/dist/exports/root-bundle-and-tooling.d.ts +0 -27
- package/dist/exports/root-bundle-and-tooling.js +0 -30
- package/dist/exports/root-eni-and-bsc-iro.d.ts +0 -26
- package/dist/exports/root-eni-and-bsc-iro.js +0 -66
- package/dist/exports/root-foundations.d.ts +0 -35
- package/dist/exports/root-foundations.js +0 -70
- package/dist/exports/root-swap-dex-and-xlayer.d.ts +0 -30
- package/dist/exports/root-swap-dex-and-xlayer.js +0 -78
- package/dist/flap/index.d.ts +0 -10
- package/dist/flap/index.js +0 -8
- package/dist/flows/index.d.ts +0 -1
- package/dist/flows/index.js +0 -1
- package/dist/merkle/index.d.ts +0 -12
- package/dist/merkle/index.js +0 -11
- package/dist/shared/clients/index.d.ts +0 -8
- package/dist/shared/clients/index.js +0 -8
- package/dist/shared/constants/quote.d.ts +0 -30
- package/dist/shared/constants/quote.js +0 -37
- package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +0 -32
- package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +0 -83
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +0 -125
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +0 -113
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +0 -149
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +0 -259
- package/dist/shared/flap/portal-create-token.d.ts +0 -79
- package/dist/shared/flap/portal-create-token.js +0 -261
- package/dist/shared/foundation/dex/v3-path.d.ts +0 -6
- package/dist/shared/foundation/dex/v3-path.js +0 -35
- package/dist/shared/foundation/gas/bundle-gas.d.ts +0 -49
- package/dist/shared/foundation/gas/bundle-gas.js +0 -93
- package/dist/shared/foundation/gas/profit-hop.d.ts +0 -20
- package/dist/shared/foundation/gas/profit-hop.js +0 -72
- package/dist/shared/foundation/index.d.ts +0 -13
- package/dist/shared/foundation/index.js +0 -12
- package/dist/shared/foundation/nonce/nonce-manager.d.ts +0 -17
- package/dist/shared/foundation/nonce/nonce-manager.js +0 -183
- package/dist/shared/foundation/normalize-unknown.d.ts +0 -9
- package/dist/shared/foundation/normalize-unknown.js +0 -29
- package/dist/shared/foundation/sdk-logger.d.ts +0 -13
- package/dist/shared/foundation/sdk-logger.js +0 -12
- package/dist/shared/foundation/tx/build-request.d.ts +0 -17
- package/dist/shared/foundation/tx/build-request.js +0 -25
- package/dist/shared/foundation/tx/sign-batch.d.ts +0 -5
- package/dist/shared/foundation/tx/sign-batch.js +0 -26
- package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +0 -1
- package/dist/shared/foundation/tx/wallet-sign-patch.js +0 -18
- package/dist/shared/foundation/types/airdrop-sweep.d.ts +0 -79
- package/dist/shared/foundation/types/airdrop-sweep.js +0 -1
- package/dist/shared/foundation/types/erc20.d.ts +0 -65
- package/dist/shared/foundation/types/erc20.js +0 -1
- package/dist/shared/foundation/types/holders-maker.d.ts +0 -64
- package/dist/shared/foundation/types/holders-maker.js +0 -1
- package/dist/shared/foundation/types/index.d.ts +0 -7
- package/dist/shared/foundation/types/index.js +0 -1
- package/dist/shared/foundation/types/lp-inspect.d.ts +0 -102
- package/dist/shared/foundation/types/lp-inspect.js +0 -1
- package/dist/shared/foundation/types/multicall.d.ts +0 -5
- package/dist/shared/foundation/types/multicall.js +0 -1
- package/dist/shared/foundation/types/private-sale.d.ts +0 -35
- package/dist/shared/foundation/types/private-sale.js +0 -1
- package/dist/shared/foundation/types/quote-helpers.d.ts +0 -17
- package/dist/shared/foundation/types/quote-helpers.js +0 -1
- package/dist/types/errors.d.ts +0 -27
- package/dist/types/errors.js +0 -34
- package/dist/utils/holders-maker/addresses.d.ts +0 -12
- package/dist/utils/holders-maker/addresses.js +0 -15
- package/dist/utils/holders-maker/buy-tx.d.ts +0 -44
- package/dist/utils/holders-maker/buy-tx.js +0 -278
- package/dist/utils/holders-maker/constants.d.ts +0 -6
- package/dist/utils/holders-maker/constants.js +0 -7
- package/dist/utils/holders-maker/disperse.d.ts +0 -18
- package/dist/utils/holders-maker/disperse.js +0 -90
- package/dist/utils/holders-maker/routing.d.ts +0 -4
- package/dist/utils/holders-maker/routing.js +0 -45
- package/dist/utils/holders-maker/transfer-tx.d.ts +0 -4
- package/dist/utils/holders-maker/transfer-tx.js +0 -67
- package/dist/utils/holders-maker-helpers.d.ts +0 -9
- package/dist/utils/holders-maker-helpers.js +0 -9
- package/dist/utils/hop-chains.d.ts +0 -35
- package/dist/utils/hop-chains.js +0 -215
- package/dist/utils/lp-inspect-helpers.d.ts +0 -9
- package/dist/utils/lp-inspect-helpers.js +0 -109
- package/dist/utils/types/airdrop-sweep.d.ts +0 -1
- package/dist/utils/types/airdrop-sweep.js +0 -1
- package/dist/utils/types/contract-factory.d.ts +0 -1
- package/dist/utils/types/contract-factory.js +0 -1
- package/dist/utils/types/erc20.d.ts +0 -1
- package/dist/utils/types/erc20.js +0 -1
- package/dist/utils/types/errors.d.ts +0 -1
- package/dist/utils/types/errors.js +0 -1
- package/dist/utils/types/holders-maker.d.ts +0 -1
- package/dist/utils/types/holders-maker.js +0 -1
- package/dist/utils/types/hop-chains.d.ts +0 -8
- package/dist/utils/types/hop-chains.js +0 -1
- package/dist/utils/types/index.d.ts +0 -13
- package/dist/utils/types/index.js +0 -1
- package/dist/utils/types/lp-inspect.d.ts +0 -1
- package/dist/utils/types/lp-inspect.js +0 -1
- package/dist/utils/types/mpc-exclusive.d.ts +0 -5
- package/dist/utils/types/mpc-exclusive.js +0 -1
- package/dist/utils/types/private-sale.d.ts +0 -1
- package/dist/utils/types/private-sale.js +0 -1
- package/dist/utils/types/quote-helpers.d.ts +0 -1
- package/dist/utils/types/quote-helpers.js +0 -1
- package/dist/utils/types/stealth-transfer.d.ts +0 -44
- package/dist/utils/types/stealth-transfer.js +0 -1
- package/dist/utils/types/wallet.d.ts +0 -25
- package/dist/utils/types/wallet.js +0 -1
- package/dist/vanity/index.d.ts +0 -5
- package/dist/vanity/index.js +0 -5
- package/src/abis/contracts/TaxToken.json +0 -969
- package/src/abis/contracts/TokenManager.json +0 -836
- package/src/abis/contracts/TokenManager2.json +0 -136
- package/src/abis/contracts/TokenManagerHelper3.json +0 -993
- /package/dist/{abis/contracts → shared/abis}/TokenManager.json +0 -0
- /package/dist/{abis/contracts → shared/abis}/TokenManagerHelper3.json +0 -0
|
@@ -1,16 +1,112 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* tm-bundle - 主函数
|
|
3
|
-
*/
|
|
4
1
|
import { ethers, Wallet, JsonRpcProvider } from 'ethers';
|
|
5
|
-
import { Club48Client, sendBatchPrivateTransactions, BUILDER_CONTROL_EOA
|
|
6
|
-
import { ADDRESSES } from '../
|
|
7
|
-
import { GAS_LIMITS
|
|
2
|
+
import { Club48Client, sendBatchPrivateTransactions, BUILDER_CONTROL_EOA } from '../shared/clients/club48.js';
|
|
3
|
+
import { ADDRESSES, PROFIT_CONFIG } from '../utils/constants.js';
|
|
4
|
+
import { GAS_LIMITS } from '../shared/constants/index.js';
|
|
8
5
|
import { buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../utils/bundle-helpers.js';
|
|
9
|
-
import TM2Abi from '../abis/
|
|
6
|
+
import TM2Abi from '../shared/abis/TokenManager2.json' with { type: 'json' };
|
|
10
7
|
import { FourClient, buildLoginMessage } from '../shared/clients/four.js';
|
|
11
8
|
import { trySell } from './tm.js';
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
/**
|
|
10
|
+
* four.meme Bundle 交易方法
|
|
11
|
+
* 使用 48.club Bundle 服务实现原子化交易
|
|
12
|
+
*/
|
|
13
|
+
// 错误信息国际化
|
|
14
|
+
const ERRORS = {
|
|
15
|
+
NO_PRIVATE_KEY: {
|
|
16
|
+
en: 'At least 1 private key (creator) is required',
|
|
17
|
+
zh: '至少需要 1 个私钥(创建者)'
|
|
18
|
+
},
|
|
19
|
+
AMOUNT_MISMATCH: {
|
|
20
|
+
en: (buyCount, buyerCount) => `Buy amount count (${buyCount}) must equal buyer count (${buyerCount})`,
|
|
21
|
+
zh: (buyCount, buyerCount) => `购买金额数量(${buyCount})必须等于买家数量(${buyerCount})`
|
|
22
|
+
},
|
|
23
|
+
IMAGE_REQUIRED: {
|
|
24
|
+
en: 'Either imageUrl or imageFile must be provided',
|
|
25
|
+
zh: '必须提供 imageUrl 或 imageFile'
|
|
26
|
+
},
|
|
27
|
+
KEY_AMOUNT_MISMATCH: {
|
|
28
|
+
en: 'Private key count and amount count must match',
|
|
29
|
+
zh: '私钥和购买金额数量必须一致'
|
|
30
|
+
},
|
|
31
|
+
SELL_KEY_AMOUNT_MISMATCH: {
|
|
32
|
+
en: 'Private key count and sell amount count must match',
|
|
33
|
+
zh: '私钥和卖出数量必须一致'
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
// 获取错误信息(根据环境语言)
|
|
37
|
+
function getErrorMessage(key, ...args) {
|
|
38
|
+
const lang = (process.env.LANG || process.env.LANGUAGE || 'en').toLowerCase().includes('zh') ? 'zh' : 'en';
|
|
39
|
+
const message = ERRORS[key][lang];
|
|
40
|
+
return typeof message === 'function' ? message(...args) : message;
|
|
41
|
+
}
|
|
42
|
+
// ========================================
|
|
43
|
+
// 辅助函数
|
|
44
|
+
// ========================================
|
|
45
|
+
/**
|
|
46
|
+
* 等待交易上链(不使用 club48 客户端)
|
|
47
|
+
*/
|
|
48
|
+
async function waitForBundleWithProvider(provider, firstTxSigned, bundleUuid) {
|
|
49
|
+
const maxAttempts = 60; // 最多等待 60 秒
|
|
50
|
+
for (let i = 0; i < maxAttempts; i++) {
|
|
51
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
52
|
+
try {
|
|
53
|
+
const txHash = ethers.keccak256(firstTxSigned);
|
|
54
|
+
const receipt = await provider.getTransactionReceipt(txHash);
|
|
55
|
+
if (receipt) {
|
|
56
|
+
if (receipt.status === 1) {
|
|
57
|
+
return { status: 'INCLUDED', includedBlock: receipt.blockNumber };
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
return { status: 'FAILED' };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
// 继续等待
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return { status: 'PENDING' };
|
|
69
|
+
}
|
|
70
|
+
// ========================================
|
|
71
|
+
// 辅助函数:估算 gas 并应用配置
|
|
72
|
+
// ========================================
|
|
73
|
+
/**
|
|
74
|
+
* 估算 gas 并应用用户配置的倍数
|
|
75
|
+
*/
|
|
76
|
+
async function estimateGasWithMultiplier(provider, txRequest, multiplier) {
|
|
77
|
+
const estimated = await provider.estimateGas(txRequest);
|
|
78
|
+
const mult = multiplier ?? 1.2; // 默认 20% 安全余量
|
|
79
|
+
return BigInt(Math.ceil(Number(estimated) * mult));
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 获取交易类型(用户可配置)
|
|
83
|
+
*/
|
|
84
|
+
function getTxType(config) {
|
|
85
|
+
return config.txType ?? 0; // 默认 Legacy (type 0),适用于 48.club/BSC
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 构建完整的交易请求(包含 gas 估算和交易类型)
|
|
89
|
+
*/
|
|
90
|
+
async function buildTxRequest(provider, unsigned, from, nonce, gasPrice, config, value) {
|
|
91
|
+
const gasLimit = await estimateGasWithMultiplier(provider, { ...unsigned, from, value }, config.gasLimitMultiplier);
|
|
92
|
+
return {
|
|
93
|
+
...unsigned,
|
|
94
|
+
from,
|
|
95
|
+
nonce,
|
|
96
|
+
gasLimit,
|
|
97
|
+
gasPrice,
|
|
98
|
+
chainId: 56,
|
|
99
|
+
type: getTxType(config)
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* four.meme: 创建代币 + 捆绑购买
|
|
104
|
+
*
|
|
105
|
+
* 用户只需传入:
|
|
106
|
+
* - dev 私钥 + N 个买家私钥
|
|
107
|
+
* - 对应的购买金额
|
|
108
|
+
* - 代币基本信息
|
|
109
|
+
*/
|
|
14
110
|
export async function createTokenWithBundleBuy(params) {
|
|
15
111
|
const { privateKeys, buyAmounts, tokenInfo, config } = params;
|
|
16
112
|
if (privateKeys.length === 0) {
|
|
@@ -26,7 +122,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
26
122
|
if (!config.customSubmitFn) {
|
|
27
123
|
club48 = new Club48Client({
|
|
28
124
|
endpoint: 'https://puissant-bsc.48.club',
|
|
29
|
-
explorerEndpoint: config.club48ExplorerEndpoint
|
|
125
|
+
explorerEndpoint: config.club48ExplorerEndpoint
|
|
30
126
|
});
|
|
31
127
|
}
|
|
32
128
|
const fourClient = new FourClient({ baseUrl: config.fourApiUrl });
|
|
@@ -34,7 +130,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
34
130
|
const nonce = await fourClient.generateNonce({
|
|
35
131
|
accountAddress: devWallet.address,
|
|
36
132
|
verifyType: 'LOGIN',
|
|
37
|
-
networkCode: 'BSC'
|
|
133
|
+
networkCode: 'BSC'
|
|
38
134
|
});
|
|
39
135
|
const loginSignature = await devWallet.signMessage(buildLoginMessage(nonce));
|
|
40
136
|
const accessToken = await fourClient.loginDex({
|
|
@@ -44,9 +140,9 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
44
140
|
address: devWallet.address,
|
|
45
141
|
networkCode: 'BSC',
|
|
46
142
|
signature: loginSignature,
|
|
47
|
-
verifyType: 'LOGIN'
|
|
143
|
+
verifyType: 'LOGIN'
|
|
48
144
|
},
|
|
49
|
-
walletName: 'MetaMask'
|
|
145
|
+
walletName: 'MetaMask'
|
|
50
146
|
});
|
|
51
147
|
// 2. 上传图片(如果需要)
|
|
52
148
|
let imgUrl = tokenInfo.imageUrl || '';
|
|
@@ -114,15 +210,13 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
114
210
|
const b0AmountWei = ethers.parseEther(b0AmountStr);
|
|
115
211
|
const preSaleWei = tokenInfo.preSale ? ethers.parseEther(tokenInfo.preSale) : 0n;
|
|
116
212
|
const valueWei = b0AmountWei + preSaleWei;
|
|
117
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
118
|
-
const createTxUnsigned = await tm2.createToken.populateTransaction(createResp.createArg, createResp.signature, {
|
|
119
|
-
value: valueWei,
|
|
120
|
-
});
|
|
213
|
+
const tm2 = new ethers.Contract(tmAddr, TM2Abi, devWallet);
|
|
214
|
+
const createTxUnsigned = await tm2.createToken.populateTransaction(createResp.createArg, createResp.signature, { value: valueWei });
|
|
121
215
|
// 估算 gas 并添加 20% 安全余量
|
|
122
216
|
const estimatedCreateGas = await provider.estimateGas({
|
|
123
217
|
...createTxUnsigned,
|
|
124
218
|
from: devWallet.address,
|
|
125
|
-
value: valueWei
|
|
219
|
+
value: valueWei
|
|
126
220
|
});
|
|
127
221
|
const createGasLimit = (estimatedCreateGas * 120n) / 100n;
|
|
128
222
|
const createTxRequest = {
|
|
@@ -132,14 +226,14 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
132
226
|
gasLimit: createGasLimit,
|
|
133
227
|
gasPrice: gasPrice,
|
|
134
228
|
chainId: 56,
|
|
135
|
-
type: 0
|
|
229
|
+
type: 0 // Legacy transaction (required for BSC on 48.club)
|
|
136
230
|
};
|
|
137
231
|
const signedCreateTx = await devWallet.signTransaction(createTxRequest);
|
|
138
232
|
signedTxs.push(signedCreateTx);
|
|
139
233
|
// 4.2 购买交易
|
|
140
234
|
const buyTxs = [];
|
|
141
235
|
const profitTxs = [];
|
|
142
|
-
const buyAmountsWei = buyAmounts.map(
|
|
236
|
+
const buyAmountsWei = buyAmounts.map(a => ethers.parseEther(a));
|
|
143
237
|
// 🔍 找出买入金额最多的买家(由他支付所有利润)
|
|
144
238
|
let maxBuyerIndex = 0;
|
|
145
239
|
let maxAmount = buyAmountsWei[0];
|
|
@@ -150,13 +244,13 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
150
244
|
}
|
|
151
245
|
}
|
|
152
246
|
// ✅ 并行构建所有购买交易
|
|
153
|
-
const buyerWallets = privateKeys.slice(1).map(
|
|
247
|
+
const buyerWallets = privateKeys.slice(1).map(pk => new Wallet(pk, provider));
|
|
154
248
|
// 并行获取所有买家的 nonce
|
|
155
|
-
const buyerNonces = await Promise.all(buyerWallets.map(
|
|
249
|
+
const buyerNonces = await Promise.all(buyerWallets.map(w => getNextNonce(w)));
|
|
156
250
|
// 并行构建未签名交易和估算 gas
|
|
157
251
|
const buyTxDataList = await Promise.all(buyAmountsWei.map(async (fundsWei, i) => {
|
|
158
252
|
const buyerWallet = buyerWallets[i];
|
|
159
|
-
const buyTm2 = new ethers.Contract(tmAddr,
|
|
253
|
+
const buyTm2 = new ethers.Contract(tmAddr, TM2Abi, buyerWallet);
|
|
160
254
|
const buyTxUnsigned = await buyTm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyerWallet.address, fundsWei, 0n, { value: fundsWei });
|
|
161
255
|
// 估算 gas 并添加 20% 安全余量
|
|
162
256
|
let buyGasLimit;
|
|
@@ -164,7 +258,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
164
258
|
const estimatedBuyGas = await provider.estimateGas({
|
|
165
259
|
...buyTxUnsigned,
|
|
166
260
|
from: buyerWallet.address,
|
|
167
|
-
value: fundsWei
|
|
261
|
+
value: fundsWei
|
|
168
262
|
});
|
|
169
263
|
buyGasLimit = (estimatedBuyGas * 120n) / 100n;
|
|
170
264
|
}
|
|
@@ -181,7 +275,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
181
275
|
nonce: buyerNonces[i],
|
|
182
276
|
gasLimit: data.buyGasLimit,
|
|
183
277
|
gasPrice: gasPrice,
|
|
184
|
-
chainId: 56
|
|
278
|
+
chainId: 56
|
|
185
279
|
};
|
|
186
280
|
return data.buyerWallet.signTransaction(buyTxRequest);
|
|
187
281
|
}));
|
|
@@ -189,7 +283,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
189
283
|
buyTxs.push(...signedBuyTxList);
|
|
190
284
|
// ✅ 聚合利润:由买入最多的人支付总利润(强制 2 跳中转)
|
|
191
285
|
const totalBuyAmount = buyAmountsWei.reduce((sum, amount) => sum + amount, 0n);
|
|
192
|
-
const totalProfitAmount = (totalBuyAmount * BigInt(
|
|
286
|
+
const totalProfitAmount = (totalBuyAmount * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
|
|
193
287
|
let profitHopWallets;
|
|
194
288
|
if (totalProfitAmount > 0n) {
|
|
195
289
|
const payerWallet = new Wallet(privateKeys[maxBuyerIndex + 1], provider);
|
|
@@ -198,12 +292,12 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
198
292
|
provider,
|
|
199
293
|
payerWallet,
|
|
200
294
|
profitAmount: totalProfitAmount,
|
|
201
|
-
profitRecipient:
|
|
295
|
+
profitRecipient: PROFIT_CONFIG.RECIPIENT,
|
|
202
296
|
hopCount: PROFIT_HOP_COUNT,
|
|
203
297
|
gasPrice,
|
|
204
298
|
chainId: 56,
|
|
205
299
|
txType: 0,
|
|
206
|
-
startNonce: profitNonce
|
|
300
|
+
startNonce: profitNonce
|
|
207
301
|
});
|
|
208
302
|
signedTxs.push(...profitHopResult.signedTransactions);
|
|
209
303
|
profitTxs.push(...profitHopResult.signedTransactions);
|
|
@@ -218,7 +312,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
218
312
|
gasLimit: GAS_LIMITS.BRIBE,
|
|
219
313
|
chainId: 56,
|
|
220
314
|
type: 0, // Legacy transaction
|
|
221
|
-
nonce: await getNextNonce(devWallet)
|
|
315
|
+
nonce: await getNextNonce(devWallet)
|
|
222
316
|
});
|
|
223
317
|
signedTxs.push(tipTx);
|
|
224
318
|
}
|
|
@@ -231,14 +325,10 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
231
325
|
else if (config.spPrivateKey) {
|
|
232
326
|
await sendBatchPrivateTransactions(signedTxs, config.spPrivateKey, config.club48Endpoint || 'https://puissant-bsc.48.club', {
|
|
233
327
|
spMode: config.spMode ?? 'timestampPersonalSign',
|
|
234
|
-
spVMode: config.spVMode
|
|
328
|
+
spVMode: config.spVMode
|
|
235
329
|
});
|
|
236
330
|
// 批量提交不返回 bundleUuid,使用第一笔交易的 hash 作为标识
|
|
237
|
-
|
|
238
|
-
if (!firstHash) {
|
|
239
|
-
throw new Error('无法解析首笔已签名交易的 hash(48SP 批量提交)');
|
|
240
|
-
}
|
|
241
|
-
bundleUuid = firstHash;
|
|
331
|
+
bundleUuid = ethers.keccak256(signedTxs[0]);
|
|
242
332
|
}
|
|
243
333
|
else {
|
|
244
334
|
// ✅ 直接提交到 48.club Bundle(仅服务器端可用)
|
|
@@ -248,11 +338,11 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
248
338
|
bundleUuid = await club48.sendBundle({
|
|
249
339
|
txs: signedTxs,
|
|
250
340
|
maxBlockNumber: (await provider.getBlockNumber()) + (config.bundleBlockOffset ?? 100),
|
|
251
|
-
noMerge: config.noMerge
|
|
341
|
+
noMerge: config.noMerge
|
|
252
342
|
}, {
|
|
253
343
|
spMode: config.spMode ?? 'timestampPersonalSign',
|
|
254
344
|
spPrivateKey: config.spPrivateKey || privateKeys[0],
|
|
255
|
-
spVMode: config.spVMode
|
|
345
|
+
spVMode: config.spVMode
|
|
256
346
|
});
|
|
257
347
|
}
|
|
258
348
|
// 6. 等待完成
|
|
@@ -273,7 +363,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
273
363
|
if (createTxHash) {
|
|
274
364
|
const receipt = await provider.getTransactionReceipt(createTxHash);
|
|
275
365
|
if (receipt && receipt.logs) {
|
|
276
|
-
const tm2Interface = new ethers.Interface(
|
|
366
|
+
const tm2Interface = new ethers.Interface(TM2Abi);
|
|
277
367
|
for (const log of receipt.logs) {
|
|
278
368
|
try {
|
|
279
369
|
const parsed = tm2Interface.parseLog({ topics: log.topics, data: log.data });
|
|
@@ -282,15 +372,15 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
282
372
|
break;
|
|
283
373
|
}
|
|
284
374
|
}
|
|
285
|
-
catch (
|
|
375
|
+
catch (e) {
|
|
286
376
|
// 忽略无法解析的日志
|
|
287
377
|
}
|
|
288
378
|
}
|
|
289
379
|
}
|
|
290
380
|
}
|
|
291
381
|
}
|
|
292
|
-
catch {
|
|
293
|
-
|
|
382
|
+
catch (e) {
|
|
383
|
+
console.warn('Failed to parse token address from receipt:', e);
|
|
294
384
|
}
|
|
295
385
|
}
|
|
296
386
|
return {
|
|
@@ -300,7 +390,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
300
390
|
createTx: signedCreateTx,
|
|
301
391
|
buyTxs,
|
|
302
392
|
profitTxs,
|
|
303
|
-
profitHopWallets
|
|
393
|
+
profitHopWallets // ✅ 返回利润多跳钱包
|
|
304
394
|
};
|
|
305
395
|
}
|
|
306
396
|
/**
|
|
@@ -314,7 +404,7 @@ export async function batchBuyWithBundle(params) {
|
|
|
314
404
|
const provider = new JsonRpcProvider(config.rpcUrl);
|
|
315
405
|
const club48 = new Club48Client({
|
|
316
406
|
endpoint: config.club48Endpoint,
|
|
317
|
-
explorerEndpoint: config.club48ExplorerEndpoint
|
|
407
|
+
explorerEndpoint: config.club48ExplorerEndpoint
|
|
318
408
|
});
|
|
319
409
|
const blockOffset = config.bundleBlockOffset ?? 100;
|
|
320
410
|
const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
|
|
@@ -334,8 +424,8 @@ export async function batchBuyWithBundle(params) {
|
|
|
334
424
|
return onchain;
|
|
335
425
|
};
|
|
336
426
|
// ✅ 并行处理所有买家
|
|
337
|
-
const wallets = privateKeys.map(
|
|
338
|
-
const fundsWeiList = buyAmounts.map(
|
|
427
|
+
const wallets = privateKeys.map(pk => new Wallet(pk, provider));
|
|
428
|
+
const fundsWeiList = buyAmounts.map(a => ethers.parseEther(a));
|
|
339
429
|
// 找出买入最多的买家(由他支付所有利润)
|
|
340
430
|
let maxBuyerIndex = 0;
|
|
341
431
|
let maxFunds = fundsWeiList[0];
|
|
@@ -346,7 +436,7 @@ export async function batchBuyWithBundle(params) {
|
|
|
346
436
|
}
|
|
347
437
|
}
|
|
348
438
|
// 并行获取所有钱包的初始 nonce
|
|
349
|
-
const initialNonces = await Promise.all(wallets.map(
|
|
439
|
+
const initialNonces = await Promise.all(wallets.map(w => w.getNonce()));
|
|
350
440
|
// 为每个钱包分配 nonce(普通钱包1个,利润支付者2个)
|
|
351
441
|
const nonceMap = new Map();
|
|
352
442
|
wallets.forEach((w, i) => {
|
|
@@ -361,14 +451,14 @@ export async function batchBuyWithBundle(params) {
|
|
|
361
451
|
// 并行构建未签名交易和估算 gas
|
|
362
452
|
const txDataList = await Promise.all(wallets.map(async (buyerWallet, i) => {
|
|
363
453
|
const fundsWei = fundsWeiList[i];
|
|
364
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
454
|
+
const tm2 = new ethers.Contract(tmAddr, TM2Abi, buyerWallet);
|
|
365
455
|
const buyTxUnsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyerWallet.address, fundsWei, 0n, { value: fundsWei });
|
|
366
456
|
let gasLimit;
|
|
367
457
|
try {
|
|
368
458
|
const estimatedGas = await provider.estimateGas({
|
|
369
459
|
...buyTxUnsigned,
|
|
370
460
|
from: buyerWallet.address,
|
|
371
|
-
value: fundsWei
|
|
461
|
+
value: fundsWei
|
|
372
462
|
});
|
|
373
463
|
gasLimit = (estimatedGas * 120n) / 100n;
|
|
374
464
|
}
|
|
@@ -378,21 +468,21 @@ export async function batchBuyWithBundle(params) {
|
|
|
378
468
|
return { buyTxUnsigned, gasLimit, buyerWallet, fundsWei };
|
|
379
469
|
}));
|
|
380
470
|
// 并行签名所有买入交易
|
|
381
|
-
const signedBuyTxList = await Promise.all(txDataList.map(async (data) => {
|
|
471
|
+
const signedBuyTxList = await Promise.all(txDataList.map(async (data, i) => {
|
|
382
472
|
const buyTxRequest = {
|
|
383
473
|
...data.buyTxUnsigned,
|
|
384
474
|
from: data.buyerWallet.address,
|
|
385
475
|
nonce: getNextNonceLocal(data.buyerWallet),
|
|
386
476
|
gasLimit: data.gasLimit,
|
|
387
477
|
gasPrice: gasPrice,
|
|
388
|
-
chainId: 56
|
|
478
|
+
chainId: 56
|
|
389
479
|
};
|
|
390
480
|
return data.buyerWallet.signTransaction(buyTxRequest);
|
|
391
481
|
}));
|
|
392
482
|
signedTxs.push(...signedBuyTxList);
|
|
393
483
|
// ✅ 聚合利润:由买入最多的人支付总利润(强制 2 跳中转)
|
|
394
484
|
const totalFunds = fundsWeiList.reduce((sum, f) => sum + f, 0n);
|
|
395
|
-
const totalProfit = (totalFunds * BigInt(
|
|
485
|
+
const totalProfit = (totalFunds * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
|
|
396
486
|
let profitHopWallets;
|
|
397
487
|
if (totalProfit > 0n) {
|
|
398
488
|
const payerWallet = wallets[maxBuyerIndex];
|
|
@@ -401,12 +491,12 @@ export async function batchBuyWithBundle(params) {
|
|
|
401
491
|
provider,
|
|
402
492
|
payerWallet,
|
|
403
493
|
profitAmount: totalProfit,
|
|
404
|
-
profitRecipient:
|
|
494
|
+
profitRecipient: PROFIT_CONFIG.RECIPIENT,
|
|
405
495
|
hopCount: PROFIT_HOP_COUNT,
|
|
406
496
|
gasPrice,
|
|
407
497
|
chainId: 56,
|
|
408
498
|
txType: 0,
|
|
409
|
-
startNonce: profitNonce
|
|
499
|
+
startNonce: profitNonce
|
|
410
500
|
});
|
|
411
501
|
signedTxs.push(...profitHopResult.signedTransactions);
|
|
412
502
|
profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
|
|
@@ -421,18 +511,18 @@ export async function batchBuyWithBundle(params) {
|
|
|
421
511
|
gasLimit: GAS_LIMITS.BRIBE,
|
|
422
512
|
chainId: 56,
|
|
423
513
|
type: 0, // Legacy transaction
|
|
424
|
-
nonce: await getNextNonce(tipWallet)
|
|
514
|
+
nonce: await getNextNonce(tipWallet)
|
|
425
515
|
});
|
|
426
516
|
signedTxs.unshift(tipTx);
|
|
427
517
|
}
|
|
428
518
|
const bundleUuid = await club48.sendBundle({
|
|
429
519
|
txs: signedTxs,
|
|
430
520
|
maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
|
|
431
|
-
noMerge: config.noMerge
|
|
521
|
+
noMerge: config.noMerge
|
|
432
522
|
}, {
|
|
433
523
|
spMode: config.spMode ?? 'timestampPersonalSign',
|
|
434
524
|
spPrivateKey: config.spPrivateKey || privateKeys[0],
|
|
435
|
-
spVMode: config.spVMode
|
|
525
|
+
spVMode: config.spVMode
|
|
436
526
|
});
|
|
437
527
|
const status = await club48.waitForBundle(bundleUuid);
|
|
438
528
|
return { bundleUuid, status, buyTxs: signedTxs, profitHopWallets }; // ✅ 返回利润多跳钱包
|
|
@@ -448,7 +538,7 @@ export async function batchSellWithBundle(params) {
|
|
|
448
538
|
const provider = new JsonRpcProvider(config.rpcUrl);
|
|
449
539
|
const club48 = new Club48Client({
|
|
450
540
|
endpoint: config.club48Endpoint,
|
|
451
|
-
explorerEndpoint: config.club48ExplorerEndpoint
|
|
541
|
+
explorerEndpoint: config.club48ExplorerEndpoint
|
|
452
542
|
});
|
|
453
543
|
const blockOffset = config.bundleBlockOffset ?? 100;
|
|
454
544
|
const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
|
|
@@ -468,8 +558,8 @@ export async function batchSellWithBundle(params) {
|
|
|
468
558
|
return onchain;
|
|
469
559
|
};
|
|
470
560
|
// ✅ 并行处理所有卖家
|
|
471
|
-
const wallets = privateKeys.map(
|
|
472
|
-
const amountsWei = sellAmounts.map(
|
|
561
|
+
const wallets = privateKeys.map(pk => new Wallet(pk, provider));
|
|
562
|
+
const amountsWei = sellAmounts.map(a => ethers.parseUnits(a, 18));
|
|
473
563
|
// 并行预估所有卖出能获得的 BNB
|
|
474
564
|
const estimatedBnbOuts = await Promise.all(amountsWei.map(async (amountWei) => {
|
|
475
565
|
try {
|
|
@@ -490,7 +580,7 @@ export async function batchSellWithBundle(params) {
|
|
|
490
580
|
}
|
|
491
581
|
}
|
|
492
582
|
// 并行获取所有钱包的初始 nonce
|
|
493
|
-
const initialNonces = await Promise.all(wallets.map(
|
|
583
|
+
const initialNonces = await Promise.all(wallets.map(w => w.getNonce()));
|
|
494
584
|
const nonceMap = new Map();
|
|
495
585
|
wallets.forEach((w, i) => {
|
|
496
586
|
nonceMap.set(w.address.toLowerCase(), initialNonces[i]);
|
|
@@ -504,13 +594,13 @@ export async function batchSellWithBundle(params) {
|
|
|
504
594
|
// 并行构建未签名交易和估算 gas
|
|
505
595
|
const txDataList = await Promise.all(wallets.map(async (sellerWallet, i) => {
|
|
506
596
|
const amountWei = amountsWei[i];
|
|
507
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
597
|
+
const tm2 = new ethers.Contract(tmAddr, TM2Abi, sellerWallet);
|
|
508
598
|
const sellTxUnsigned = await tm2.sellToken.populateTransaction(0n, tokenAddress, amountWei, 0n);
|
|
509
599
|
let gasLimit;
|
|
510
600
|
try {
|
|
511
601
|
const estimatedGas = await provider.estimateGas({
|
|
512
602
|
...sellTxUnsigned,
|
|
513
|
-
from: sellerWallet.address
|
|
603
|
+
from: sellerWallet.address
|
|
514
604
|
});
|
|
515
605
|
gasLimit = (estimatedGas * 120n) / 100n;
|
|
516
606
|
}
|
|
@@ -520,21 +610,21 @@ export async function batchSellWithBundle(params) {
|
|
|
520
610
|
return { sellTxUnsigned, gasLimit, sellerWallet };
|
|
521
611
|
}));
|
|
522
612
|
// 并行签名所有卖出交易
|
|
523
|
-
const signedSellTxList = await Promise.all(txDataList.map(async (data) => {
|
|
613
|
+
const signedSellTxList = await Promise.all(txDataList.map(async (data, i) => {
|
|
524
614
|
const sellTxRequest = {
|
|
525
615
|
...data.sellTxUnsigned,
|
|
526
616
|
from: data.sellerWallet.address,
|
|
527
617
|
nonce: getNextNonceLocal(data.sellerWallet),
|
|
528
618
|
gasLimit: data.gasLimit,
|
|
529
619
|
gasPrice: gasPrice,
|
|
530
|
-
chainId: 56
|
|
620
|
+
chainId: 56
|
|
531
621
|
};
|
|
532
622
|
return data.sellerWallet.signTransaction(sellTxRequest);
|
|
533
623
|
}));
|
|
534
624
|
signedTxs.push(...signedSellTxList);
|
|
535
625
|
// ✅ 聚合利润:由收益最高的人支付总利润(强制 2 跳中转)
|
|
536
626
|
const totalBnbOut = estimatedBnbOuts.reduce((sum, b) => sum + b, 0n);
|
|
537
|
-
const totalProfit = (totalBnbOut * BigInt(
|
|
627
|
+
const totalProfit = (totalBnbOut * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
|
|
538
628
|
let profitHopWallets;
|
|
539
629
|
if (totalProfit > 0n) {
|
|
540
630
|
const payerWallet = wallets[maxSellerIndex];
|
|
@@ -543,12 +633,12 @@ export async function batchSellWithBundle(params) {
|
|
|
543
633
|
provider,
|
|
544
634
|
payerWallet,
|
|
545
635
|
profitAmount: totalProfit,
|
|
546
|
-
profitRecipient:
|
|
636
|
+
profitRecipient: PROFIT_CONFIG.RECIPIENT,
|
|
547
637
|
hopCount: PROFIT_HOP_COUNT,
|
|
548
638
|
gasPrice,
|
|
549
639
|
chainId: 56,
|
|
550
640
|
txType: 0,
|
|
551
|
-
startNonce: profitNonce
|
|
641
|
+
startNonce: profitNonce
|
|
552
642
|
});
|
|
553
643
|
signedTxs.push(...profitHopResult.signedTransactions);
|
|
554
644
|
profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
|
|
@@ -563,18 +653,18 @@ export async function batchSellWithBundle(params) {
|
|
|
563
653
|
gasLimit: GAS_LIMITS.BRIBE,
|
|
564
654
|
chainId: 56,
|
|
565
655
|
type: 0, // Legacy transaction
|
|
566
|
-
nonce: await getNextNonce(tipWallet)
|
|
656
|
+
nonce: await getNextNonce(tipWallet)
|
|
567
657
|
});
|
|
568
658
|
signedTxs.unshift(tipTx);
|
|
569
659
|
}
|
|
570
660
|
const bundleUuid = await club48.sendBundle({
|
|
571
661
|
txs: signedTxs,
|
|
572
662
|
maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
|
|
573
|
-
noMerge: config.noMerge
|
|
663
|
+
noMerge: config.noMerge
|
|
574
664
|
}, {
|
|
575
665
|
spMode: config.spMode ?? 'timestampPersonalSign',
|
|
576
666
|
spPrivateKey: config.spPrivateKey || privateKeys[0],
|
|
577
|
-
spVMode: config.spVMode
|
|
667
|
+
spVMode: config.spVMode
|
|
578
668
|
});
|
|
579
669
|
const status = await club48.waitForBundle(bundleUuid);
|
|
580
670
|
return { bundleUuid, status, sellTxs: signedTxs, profitHopWallets }; // ✅ 返回利润多跳钱包
|
|
@@ -588,20 +678,12 @@ export async function fourPrivateBuy(params) {
|
|
|
588
678
|
const gasPrice = await club48.getMinGasPrice();
|
|
589
679
|
const fundsWei = ethers.parseEther(funds);
|
|
590
680
|
const minAmount = 0n;
|
|
591
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
681
|
+
const tm2 = new ethers.Contract(tmAddr, TM2Abi, wallet);
|
|
592
682
|
const unsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, to ?? wallet.address, fundsWei, minAmount, { value: fundsWei });
|
|
593
683
|
// 估算 gas 并添加 20% 安全余量
|
|
594
684
|
const estimatedGas = await provider.estimateGas({ ...unsigned, from: wallet.address, value: fundsWei });
|
|
595
685
|
const gasLimit = (estimatedGas * 120n) / 100n;
|
|
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
|
-
};
|
|
686
|
+
const req = { ...unsigned, from: wallet.address, nonce: await wallet.getNonce(), gasLimit, gasPrice, chainId: 56, type: 0 };
|
|
605
687
|
const signed = await wallet.signTransaction(req);
|
|
606
688
|
if (spPrivateKey)
|
|
607
689
|
return await club48.sendPrivateTransactionWith48SP(signed, spPrivateKey);
|
|
@@ -616,20 +698,12 @@ export async function fourPrivateSell(params) {
|
|
|
616
698
|
const gasPrice = await club48.getMinGasPrice();
|
|
617
699
|
const amountWei = ethers.parseUnits(amount, 18);
|
|
618
700
|
const minOut = minFunds ?? 0n;
|
|
619
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
701
|
+
const tm2 = new ethers.Contract(tmAddr, TM2Abi, wallet);
|
|
620
702
|
const unsigned = await tm2.sellToken.populateTransaction(0n, tokenAddress, amountWei, minOut);
|
|
621
703
|
// 估算 gas 并添加 20% 安全余量
|
|
622
704
|
const estimatedGas = await provider.estimateGas({ ...unsigned, from: wallet.address });
|
|
623
705
|
const gasLimit = (estimatedGas * 120n) / 100n;
|
|
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
|
-
};
|
|
706
|
+
const req = { ...unsigned, from: wallet.address, nonce: await wallet.getNonce(), gasLimit, gasPrice, chainId: 56, type: 0 };
|
|
633
707
|
const signed = await wallet.signTransaction(req);
|
|
634
708
|
if (spPrivateKey)
|
|
635
709
|
return await club48.sendPrivateTransactionWith48SP(signed, spPrivateKey);
|
|
@@ -643,20 +717,18 @@ export async function fourBatchPrivateBuy(params) {
|
|
|
643
717
|
const club48 = new Club48Client({ endpoint: club48Endpoint, explorerEndpoint: club48ExplorerEndpoint });
|
|
644
718
|
const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
|
|
645
719
|
// ✅ 并行处理
|
|
646
|
-
const wallets = privateKeys.map(
|
|
647
|
-
const fundsWeiList = fundsList.map(
|
|
720
|
+
const wallets = privateKeys.map(pk => new Wallet(pk, provider));
|
|
721
|
+
const fundsWeiList = fundsList.map(f => ethers.parseEther(f));
|
|
648
722
|
// 并行获取 gasPrice 和所有 nonce
|
|
649
723
|
const [gasPrice, nonces] = await Promise.all([
|
|
650
724
|
club48.getMinGasPrice(),
|
|
651
|
-
Promise.all(wallets.map(
|
|
725
|
+
Promise.all(wallets.map(w => w.getNonce()))
|
|
652
726
|
]);
|
|
653
727
|
// 并行构建未签名交易和估算 gas
|
|
654
728
|
const txDataList = await Promise.all(wallets.map(async (w, i) => {
|
|
655
729
|
const fundsWei = fundsWeiList[i];
|
|
656
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
657
|
-
const unsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, w.address, fundsWei, 0n, {
|
|
658
|
-
value: fundsWei,
|
|
659
|
-
});
|
|
730
|
+
const tm2 = new ethers.Contract(tmAddr, TM2Abi, w);
|
|
731
|
+
const unsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, w.address, fundsWei, 0n, { value: fundsWei });
|
|
660
732
|
let gasLimit;
|
|
661
733
|
try {
|
|
662
734
|
const estimatedGas = await provider.estimateGas({ ...unsigned, from: w.address, value: fundsWei });
|
|
@@ -676,7 +748,7 @@ export async function fourBatchPrivateBuy(params) {
|
|
|
676
748
|
gasLimit: data.gasLimit,
|
|
677
749
|
gasPrice,
|
|
678
750
|
chainId: 56,
|
|
679
|
-
type: 0
|
|
751
|
+
type: 0
|
|
680
752
|
};
|
|
681
753
|
return data.wallet.signTransaction(req);
|
|
682
754
|
}));
|
|
@@ -684,14 +756,11 @@ export async function fourBatchPrivateBuy(params) {
|
|
|
684
756
|
return await sendBatchPrivateTransactions(signedTxs, spPrivateKey, club48Endpoint || 'https://puissant-bsc.48.club');
|
|
685
757
|
}
|
|
686
758
|
// 无 48SP:走 bundle 提交通道
|
|
687
|
-
const bundleUuid = await club48.sendBundle({
|
|
688
|
-
txs: signedTxs,
|
|
689
|
-
maxBlockNumber: (await provider.getBlockNumber()) + 100,
|
|
690
|
-
});
|
|
759
|
+
const bundleUuid = await club48.sendBundle({ txs: signedTxs, maxBlockNumber: (await provider.getBlockNumber()) + 100 });
|
|
691
760
|
return !!bundleUuid;
|
|
692
761
|
}
|
|
693
762
|
export async function fourBatchPrivateSell(params) {
|
|
694
|
-
const { rpcUrl, privateKeys, amounts, tokenAddress, club48Endpoint, club48ExplorerEndpoint, spPrivateKey, minFundsEach
|
|
763
|
+
const { rpcUrl, privateKeys, amounts, tokenAddress, club48Endpoint, club48ExplorerEndpoint, spPrivateKey, minFundsEach } = params;
|
|
695
764
|
if (privateKeys.length !== amounts.length)
|
|
696
765
|
throw new Error('privateKeys and amounts length mismatch');
|
|
697
766
|
const provider = new JsonRpcProvider(rpcUrl);
|
|
@@ -699,17 +768,17 @@ export async function fourBatchPrivateSell(params) {
|
|
|
699
768
|
const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
|
|
700
769
|
const minOut = minFundsEach ?? 0n;
|
|
701
770
|
// ✅ 并行处理
|
|
702
|
-
const wallets = privateKeys.map(
|
|
703
|
-
const amountsWei = amounts.map(
|
|
771
|
+
const wallets = privateKeys.map(pk => new Wallet(pk, provider));
|
|
772
|
+
const amountsWei = amounts.map(a => ethers.parseUnits(a, 18));
|
|
704
773
|
// 并行获取 gasPrice 和所有 nonce
|
|
705
774
|
const [gasPrice, nonces] = await Promise.all([
|
|
706
775
|
club48.getMinGasPrice(),
|
|
707
|
-
Promise.all(wallets.map(
|
|
776
|
+
Promise.all(wallets.map(w => w.getNonce()))
|
|
708
777
|
]);
|
|
709
778
|
// 并行构建未签名交易和估算 gas
|
|
710
779
|
const txDataList = await Promise.all(wallets.map(async (w, i) => {
|
|
711
780
|
const amountWei = amountsWei[i];
|
|
712
|
-
const tm2 = new ethers.Contract(tmAddr,
|
|
781
|
+
const tm2 = new ethers.Contract(tmAddr, TM2Abi, w);
|
|
713
782
|
const unsigned = await tm2.sellToken.populateTransaction(0n, tokenAddress, amountWei, minOut);
|
|
714
783
|
let gasLimit;
|
|
715
784
|
try {
|
|
@@ -730,7 +799,7 @@ export async function fourBatchPrivateSell(params) {
|
|
|
730
799
|
gasLimit: data.gasLimit,
|
|
731
800
|
gasPrice,
|
|
732
801
|
chainId: 56,
|
|
733
|
-
type: 0
|
|
802
|
+
type: 0
|
|
734
803
|
};
|
|
735
804
|
return data.wallet.signTransaction(req);
|
|
736
805
|
}));
|
package/dist/contracts/tm.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { BytesLike, Wallet } from 'ethers';
|
|
2
|
-
|
|
3
|
-
export type Providerish = ReturnType<typeof createBscProvider>;
|
|
1
|
+
import { BytesLike, JsonRpcProvider, Wallet } from 'ethers';
|
|
2
|
+
export type Providerish = JsonRpcProvider;
|
|
4
3
|
export type Signerish = Wallet;
|
|
5
4
|
export type CreateOnChainParams = {
|
|
6
5
|
chain: 'BSC';
|