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
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
* 支持 FLAP 内盘、V2 和 V3 三种交易类型
|
|
10
10
|
* 只生成签名,由调用方决定如何提交
|
|
11
11
|
*/
|
|
12
|
-
import { ethers, Contract } from 'ethers';
|
|
12
|
+
import { ethers, Contract, JsonRpcProvider } from 'ethers';
|
|
13
13
|
import { quoteV2, quoteV3 } from '../../../utils/quote-helpers.js';
|
|
14
14
|
import { getCachedProvider, createWallet, signAuthorization, signAuthorizationsWithNonces, batchGetNonces, buildEIP7702TransactionSync, calculateProfitAmountByUserType, calculateProfitAmountByTxCount, getProfitRecipient, generateRandomWallets, } from './utils.js';
|
|
15
|
-
import { UNIFIED_DELEGATE_ADDRESS, POTATOSWAP_V2_ROUTER, POTATOSWAP_V3_ROUTER, FLAP_PORTAL_ADDRESS, WOKB_ADDRESS, V3_FEE_TIERS, UNIFIED_DELEGATE_ABI, FLAP_PORTAL_ABI, ERC20_ABI, XLAYER_RPC_URL, } from './constants.js';
|
|
15
|
+
import { UNIFIED_DELEGATE_ADDRESS, POTATOSWAP_V2_ROUTER, POTATOSWAP_V3_ROUTER, FLAP_PORTAL_ADDRESS, WOKB_ADDRESS, V3_FEE_TIERS, UNIFIED_DELEGATE_ABI, FLAP_PORTAL_ABI, ERC20_ABI, XLAYER_RPC_URL, XLAYER_CHAIN_ID, } from './constants.js';
|
|
16
16
|
// ========================================
|
|
17
17
|
// 路由地址获取
|
|
18
18
|
// ========================================
|
|
@@ -50,7 +50,7 @@ function truncateDecimals(value, decimals = 18) {
|
|
|
50
50
|
async function quoteSellOutput(sellAmount, tokenAddress, tradeType, fee, rpcUrl) {
|
|
51
51
|
if (sellAmount <= 0n)
|
|
52
52
|
return 0n;
|
|
53
|
-
const provider =
|
|
53
|
+
const provider = new JsonRpcProvider(rpcUrl || XLAYER_RPC_URL, { chainId: XLAYER_CHAIN_ID, name: 'xlayer', ensAddress: undefined });
|
|
54
54
|
try {
|
|
55
55
|
switch (tradeType) {
|
|
56
56
|
case 'FLAP': {
|
|
@@ -63,22 +63,25 @@ async function quoteSellOutput(sellAmount, tokenAddress, tradeType, fee, rpcUrl)
|
|
|
63
63
|
outputToken: ethers.ZeroAddress,
|
|
64
64
|
inputAmount: sellAmount,
|
|
65
65
|
});
|
|
66
|
+
console.log(`[Bundle Swap] FLAP quoteExactInput 成功: ${ethers.formatEther(okbOut)} OKB`);
|
|
66
67
|
return BigInt(okbOut.toString());
|
|
67
68
|
}
|
|
68
|
-
catch {
|
|
69
|
-
|
|
69
|
+
catch (e) {
|
|
70
|
+
console.warn(`[Bundle Swap] FLAP quoteExactInput 失败:`, e);
|
|
70
71
|
}
|
|
71
72
|
// 回退到 previewSell
|
|
72
73
|
try {
|
|
73
74
|
const okbOut = await portalContract.previewSell(tokenAddress, sellAmount);
|
|
75
|
+
console.log(`[Bundle Swap] FLAP previewSell 成功: ${ethers.formatEther(okbOut)} OKB`);
|
|
74
76
|
return BigInt(okbOut.toString());
|
|
75
77
|
}
|
|
76
78
|
catch {
|
|
77
|
-
|
|
79
|
+
console.warn(`[Bundle Swap] FLAP previewSell 失败,尝试 V2...`);
|
|
78
80
|
}
|
|
79
81
|
// 回退到 V2
|
|
80
82
|
const v2Result = await quoteV2(provider, tokenAddress, WOKB_ADDRESS, sellAmount, 'XLAYER');
|
|
81
83
|
if (v2Result.amountOut > 0n) {
|
|
84
|
+
console.log(`[Bundle Swap] FLAP 回退 V2 报价成功: ${ethers.formatEther(v2Result.amountOut)} OKB`);
|
|
82
85
|
return v2Result.amountOut;
|
|
83
86
|
}
|
|
84
87
|
break;
|
|
@@ -86,6 +89,7 @@ async function quoteSellOutput(sellAmount, tokenAddress, tradeType, fee, rpcUrl)
|
|
|
86
89
|
case 'V2': {
|
|
87
90
|
const result = await quoteV2(provider, tokenAddress, WOKB_ADDRESS, sellAmount, 'XLAYER');
|
|
88
91
|
if (result.amountOut > 0n) {
|
|
92
|
+
console.log(`[Bundle Swap] V2 报价成功: ${ethers.formatEther(result.amountOut)} OKB`);
|
|
89
93
|
return result.amountOut;
|
|
90
94
|
}
|
|
91
95
|
break;
|
|
@@ -93,22 +97,199 @@ async function quoteSellOutput(sellAmount, tokenAddress, tradeType, fee, rpcUrl)
|
|
|
93
97
|
case 'V3': {
|
|
94
98
|
const result = await quoteV3(provider, tokenAddress, WOKB_ADDRESS, sellAmount, 'XLAYER', fee);
|
|
95
99
|
if (result.amountOut > 0n) {
|
|
100
|
+
console.log(`[Bundle Swap] V3 报价成功 (fee=${result.fee}): ${ethers.formatEther(result.amountOut)} OKB`);
|
|
96
101
|
return result.amountOut;
|
|
97
102
|
}
|
|
98
103
|
// 回退到 V2
|
|
99
104
|
const v2Result = await quoteV2(provider, tokenAddress, WOKB_ADDRESS, sellAmount, 'XLAYER');
|
|
100
105
|
if (v2Result.amountOut > 0n) {
|
|
106
|
+
console.log(`[Bundle Swap] V3 回退 V2 报价成功: ${ethers.formatEther(v2Result.amountOut)} OKB`);
|
|
101
107
|
return v2Result.amountOut;
|
|
102
108
|
}
|
|
103
109
|
break;
|
|
104
110
|
}
|
|
105
111
|
}
|
|
106
112
|
}
|
|
107
|
-
catch {
|
|
108
|
-
|
|
113
|
+
catch (error) {
|
|
114
|
+
console.error(`[Bundle Swap] 报价失败:`, error);
|
|
109
115
|
}
|
|
116
|
+
console.warn(`[Bundle Swap] 无法获取报价,利润计算可能不准确`);
|
|
110
117
|
return 0n;
|
|
111
118
|
}
|
|
119
|
+
// ========================================
|
|
120
|
+
// 构建卖出并转账调用
|
|
121
|
+
// ========================================
|
|
122
|
+
function buildSellAndTransferCall(sellerWallet, sellAmount, tokenAddress, recipient, tradeType, routerAddress, fee) {
|
|
123
|
+
const delegateInterface = new ethers.Interface(UNIFIED_DELEGATE_ABI);
|
|
124
|
+
const portalInterface = new ethers.Interface(FLAP_PORTAL_ABI);
|
|
125
|
+
switch (tradeType) {
|
|
126
|
+
case 'FLAP': {
|
|
127
|
+
// ✅ FLAP: 使用 swapExactInput 卖出(与 AA 模式保持一致)
|
|
128
|
+
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
|
|
129
|
+
inputToken: tokenAddress,
|
|
130
|
+
outputToken: ethers.ZeroAddress, // 0x0 = OKB
|
|
131
|
+
inputAmount: sellAmount,
|
|
132
|
+
minOutputAmount: 0n,
|
|
133
|
+
permitData: '0x',
|
|
134
|
+
}]);
|
|
135
|
+
// 通过 executeBatch 让 seller 钱包调用 Portal
|
|
136
|
+
const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: 0n, data: portalCallData }];
|
|
137
|
+
const callData = delegateInterface.encodeFunctionData('executeBatch', [batchCalls]);
|
|
138
|
+
return {
|
|
139
|
+
target: sellerWallet.address,
|
|
140
|
+
allowFailure: false,
|
|
141
|
+
value: 0n,
|
|
142
|
+
callData,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
case 'V2': {
|
|
146
|
+
// V2: 使用 executeSellAndTransferV2
|
|
147
|
+
const path = [tokenAddress, WOKB_ADDRESS];
|
|
148
|
+
const callData = delegateInterface.encodeFunctionData('executeSellAndTransferV2', [
|
|
149
|
+
routerAddress,
|
|
150
|
+
path,
|
|
151
|
+
sellAmount,
|
|
152
|
+
recipient,
|
|
153
|
+
]);
|
|
154
|
+
return {
|
|
155
|
+
target: sellerWallet.address,
|
|
156
|
+
allowFailure: false,
|
|
157
|
+
value: 0n,
|
|
158
|
+
callData,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
case 'V3': {
|
|
162
|
+
// V3: 使用 executeSellAndTransfer
|
|
163
|
+
const callData = delegateInterface.encodeFunctionData('executeSellAndTransfer', [
|
|
164
|
+
routerAddress,
|
|
165
|
+
tokenAddress,
|
|
166
|
+
WOKB_ADDRESS,
|
|
167
|
+
fee,
|
|
168
|
+
sellAmount,
|
|
169
|
+
recipient,
|
|
170
|
+
]);
|
|
171
|
+
return {
|
|
172
|
+
target: sellerWallet.address,
|
|
173
|
+
allowFailure: false,
|
|
174
|
+
value: 0n,
|
|
175
|
+
callData,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// ========================================
|
|
181
|
+
// 构建买入调用
|
|
182
|
+
// ========================================
|
|
183
|
+
function buildBuyCall(buyerWallet, tokenAddress, tradeType, routerAddress, fee, buyAmount // ✅ 新增:买入金额(防止使用全部余额导致问题)
|
|
184
|
+
) {
|
|
185
|
+
const delegateInterface = new ethers.Interface(UNIFIED_DELEGATE_ABI);
|
|
186
|
+
const portalInterface = new ethers.Interface(FLAP_PORTAL_ABI);
|
|
187
|
+
switch (tradeType) {
|
|
188
|
+
case 'FLAP': {
|
|
189
|
+
// ✅ FLAP: 使用 swapExactInput 买入(与 AA 模式保持一致)
|
|
190
|
+
// 原 buy(address token) ABI 与 Portal 不匹配,改用 swapExactInput
|
|
191
|
+
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
|
|
192
|
+
inputToken: ethers.ZeroAddress, // 0x0 = OKB (原生代币)
|
|
193
|
+
outputToken: tokenAddress,
|
|
194
|
+
inputAmount: buyAmount,
|
|
195
|
+
minOutputAmount: 0n,
|
|
196
|
+
permitData: '0x',
|
|
197
|
+
}]);
|
|
198
|
+
const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: buyAmount, data: portalCallData }];
|
|
199
|
+
return {
|
|
200
|
+
target: buyerWallet.address,
|
|
201
|
+
allowFailure: false,
|
|
202
|
+
value: 0n,
|
|
203
|
+
callData: delegateInterface.encodeFunctionData('executeBatch', [batchCalls]),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
case 'V2': {
|
|
207
|
+
// ✅ V2: 使用 executeBuyV2,传入指定金额
|
|
208
|
+
const path = [WOKB_ADDRESS, tokenAddress];
|
|
209
|
+
const callData = delegateInterface.encodeFunctionData('executeBuyV2', [
|
|
210
|
+
routerAddress,
|
|
211
|
+
path,
|
|
212
|
+
buyAmount, // ✅ 使用指定金额,不是 0
|
|
213
|
+
]);
|
|
214
|
+
return {
|
|
215
|
+
target: buyerWallet.address,
|
|
216
|
+
allowFailure: false,
|
|
217
|
+
value: 0n,
|
|
218
|
+
callData,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
case 'V3': {
|
|
222
|
+
// ✅ V3: 使用 executeBuy,传入指定金额
|
|
223
|
+
const callData = delegateInterface.encodeFunctionData('executeBuy', [
|
|
224
|
+
routerAddress,
|
|
225
|
+
WOKB_ADDRESS,
|
|
226
|
+
tokenAddress,
|
|
227
|
+
fee,
|
|
228
|
+
buyAmount, // ✅ 使用指定金额,不是 0
|
|
229
|
+
]);
|
|
230
|
+
return {
|
|
231
|
+
target: buyerWallet.address,
|
|
232
|
+
allowFailure: false,
|
|
233
|
+
value: 0n,
|
|
234
|
+
callData,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* 构建捆绑换手交易
|
|
241
|
+
*/
|
|
242
|
+
async function buildSwapCalls(sellerWallet, buyerWallet, hopWallets, sellAmount, buyAmount, // ✅ 新增:买入金额(防止使用全部余额)
|
|
243
|
+
tokenAddress, tradeType, routerAddress, fee) {
|
|
244
|
+
const delegateInterface = new ethers.Interface(UNIFIED_DELEGATE_ABI);
|
|
245
|
+
const calls = [];
|
|
246
|
+
// 第一步:卖家卖币并转账给第一个中间钱包
|
|
247
|
+
const firstRecipient = hopWallets.length > 0 ? hopWallets[0].address : buyerWallet.address;
|
|
248
|
+
const sellCall = buildSellAndTransferCall(sellerWallet, sellAmount, tokenAddress, firstRecipient, tradeType, routerAddress, fee);
|
|
249
|
+
calls.push(sellCall);
|
|
250
|
+
// FLAP 模式需要额外的转账调用(因为 sell 函数不支持直接转账)
|
|
251
|
+
if (tradeType === 'FLAP') {
|
|
252
|
+
const transferData = delegateInterface.encodeFunctionData('transferTo', [firstRecipient]);
|
|
253
|
+
calls.push({
|
|
254
|
+
target: sellerWallet.address,
|
|
255
|
+
allowFailure: false,
|
|
256
|
+
value: 0n,
|
|
257
|
+
callData: transferData,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
// 中间钱包之间的转账
|
|
261
|
+
for (let i = 0; i < hopWallets.length; i++) {
|
|
262
|
+
const nextRecipient = i < hopWallets.length - 1 ? hopWallets[i + 1].address : buyerWallet.address;
|
|
263
|
+
const transferData = delegateInterface.encodeFunctionData('transferTo', [nextRecipient]);
|
|
264
|
+
calls.push({
|
|
265
|
+
target: hopWallets[i].address,
|
|
266
|
+
allowFailure: false,
|
|
267
|
+
value: 0n,
|
|
268
|
+
callData: transferData,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
// ✅ 最后一步:买家买币(使用指定金额)
|
|
272
|
+
const buyCall = buildBuyCall(buyerWallet, tokenAddress, tradeType, routerAddress, fee, buyAmount);
|
|
273
|
+
calls.push(buyCall);
|
|
274
|
+
return calls;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* 捆绑换手 - 生成签名后的交易
|
|
278
|
+
*
|
|
279
|
+
* @param params 换手参数
|
|
280
|
+
* @returns 签名后的交易和元数据
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* // FLAP 内盘换手
|
|
284
|
+
* const result = await bundleSwap({
|
|
285
|
+
* sellerPrivateKey: '0x...',
|
|
286
|
+
* buyerPrivateKey: '0x...',
|
|
287
|
+
* tokenAddress: '0x...',
|
|
288
|
+
* sellAmount: '100',
|
|
289
|
+
* tradeType: 'FLAP',
|
|
290
|
+
* hopCount: 2,
|
|
291
|
+
* });
|
|
292
|
+
*/
|
|
112
293
|
export async function bundleSwap(params) {
|
|
113
294
|
const { sellerPrivateKey, buyerPrivateKey, tokenAddress, tokenDecimals = 18, sellAmount, hopCount = 0, tradeType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, userType = 'v0', useFundUtilization = false, // ✅ 默认普通模式
|
|
114
295
|
config, } = params;
|
|
@@ -125,15 +306,25 @@ export async function bundleSwap(params) {
|
|
|
125
306
|
// 资金利用率模式才需要中间钱包
|
|
126
307
|
const actualHopCount = useFundUtilization ? hopCount : 0;
|
|
127
308
|
const hopWalletInfos = actualHopCount > 0 ? generateRandomWallets(actualHopCount) : [];
|
|
128
|
-
const hopWallets = hopWalletInfos.map(
|
|
309
|
+
const hopWallets = hopWalletInfos.map(info => createWallet(info.privateKey, provider));
|
|
129
310
|
const sellAmountWei = ethers.parseUnits(truncateDecimals(sellAmount, tokenDecimals), tokenDecimals);
|
|
130
311
|
// 获取卖出报价
|
|
131
312
|
const estimatedOkbOut = await quoteSellOutput(sellAmountWei, tokenAddress, tradeType, fee, config?.rpcUrl);
|
|
132
313
|
// 使用双边费率计算利润(换手 = 卖 + 买)
|
|
133
|
-
const profitAmount = estimatedOkbOut > 0n
|
|
314
|
+
const profitAmount = estimatedOkbOut > 0n
|
|
315
|
+
? calculateProfitAmountByUserType(estimatedOkbOut, userType, true)
|
|
316
|
+
: 0n;
|
|
134
317
|
const profitRecipient = getProfitRecipient(config);
|
|
135
318
|
// 计算买入金额
|
|
136
|
-
const buyAmountAfterProfit = estimatedOkbOut > profitAmount
|
|
319
|
+
const buyAmountAfterProfit = estimatedOkbOut > profitAmount
|
|
320
|
+
? estimatedOkbOut - profitAmount
|
|
321
|
+
: 0n;
|
|
322
|
+
const modeLabel = useFundUtilization ? '资金利用率' : '普通';
|
|
323
|
+
console.log(`[Bundle Swap] 模式: ${modeLabel}`);
|
|
324
|
+
console.log(`[Bundle Swap] 卖出数量: ${sellAmount} Token`);
|
|
325
|
+
console.log(`[Bundle Swap] 预估获得: ${ethers.formatEther(estimatedOkbOut)} OKB`);
|
|
326
|
+
console.log(`[Bundle Swap] 利润: ${ethers.formatEther(profitAmount)} OKB (userType=${userType})`);
|
|
327
|
+
console.log(`[Bundle Swap] 买入金额: ${ethers.formatEther(buyAmountAfterProfit)} OKB`);
|
|
137
328
|
// ========================================
|
|
138
329
|
// 并行获取数据
|
|
139
330
|
// ========================================
|
|
@@ -183,6 +374,7 @@ export async function bundleSwap(params) {
|
|
|
183
374
|
// 4. 分发者按比例转账给买家
|
|
184
375
|
// 5. 买家买入
|
|
185
376
|
// ========================================
|
|
377
|
+
console.log(`[Bundle Swap] 资金利用率模式,hopCount=${actualHopCount}`);
|
|
186
378
|
// 1. 卖家卖出
|
|
187
379
|
const sellCall = buildSellCallWithAmountInternal(sellerWallet, sellAmountWei, tokenAddress, tradeType, actualRouter, fee, delegateInterface, portalInterface);
|
|
188
380
|
calls.push(sellCall);
|
|
@@ -235,6 +427,7 @@ export async function bundleSwap(params) {
|
|
|
235
427
|
// 2. 买家用自己预存的 OKB 买入代币
|
|
236
428
|
// 3. 利润从买家的 OKB 中扣除
|
|
237
429
|
// ========================================
|
|
430
|
+
console.log(`[Bundle Swap] 普通模式`);
|
|
238
431
|
// 1. 卖家卖出(OKB 留在卖家账户)
|
|
239
432
|
const sellCall = buildSellCallWithAmountInternal(sellerWallet, sellAmountWei, tokenAddress, tradeType, actualRouter, fee, delegateInterface, portalInterface);
|
|
240
433
|
calls.push(sellCall);
|
|
@@ -299,18 +492,28 @@ export async function bundleBatchSwap(params) {
|
|
|
299
492
|
// 创建钱包
|
|
300
493
|
// ========================================
|
|
301
494
|
const sellerWallet = createWallet(sellerPrivateKey, provider);
|
|
302
|
-
const buyerWallets = buyerPrivateKeys.map(
|
|
495
|
+
const buyerWallets = buyerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
303
496
|
// 资金利用率模式才需要中间钱包
|
|
304
497
|
const actualHopCount = useFundUtilization ? hopCount : 0;
|
|
305
498
|
const hopWalletInfos = actualHopCount > 0 ? generateRandomWallets(actualHopCount) : [];
|
|
306
|
-
const hopWallets = hopWalletInfos.map(
|
|
499
|
+
const hopWallets = hopWalletInfos.map(info => createWallet(info.privateKey, provider));
|
|
307
500
|
const sellAmountWei = ethers.parseUnits(truncateDecimals(sellAmount, tokenDecimals), tokenDecimals);
|
|
308
501
|
// 获取卖出报价
|
|
309
502
|
const estimatedOkbOut = await quoteSellOutput(sellAmountWei, tokenAddress, tradeType, fee, config?.rpcUrl);
|
|
310
503
|
// 计算利润和买入金额
|
|
311
|
-
const profitAmount = estimatedOkbOut > 0n
|
|
504
|
+
const profitAmount = estimatedOkbOut > 0n
|
|
505
|
+
? calculateProfitAmountByUserType(estimatedOkbOut, userType, true)
|
|
506
|
+
: 0n;
|
|
312
507
|
const profitRecipient = getProfitRecipient(config);
|
|
313
|
-
const totalBuyAmountAfterProfit = estimatedOkbOut > profitAmount
|
|
508
|
+
const totalBuyAmountAfterProfit = estimatedOkbOut > profitAmount
|
|
509
|
+
? estimatedOkbOut - profitAmount
|
|
510
|
+
: 0n;
|
|
511
|
+
const modeLabel = useFundUtilization ? '资金利用率' : '普通';
|
|
512
|
+
console.log(`[Bundle Batch Swap] 模式: ${modeLabel}`);
|
|
513
|
+
console.log(`[Bundle Batch Swap] 卖出数量: ${sellAmount} Token`);
|
|
514
|
+
console.log(`[Bundle Batch Swap] 预估获得: ${ethers.formatEther(estimatedOkbOut)} OKB`);
|
|
515
|
+
console.log(`[Bundle Batch Swap] 利润: ${ethers.formatEther(profitAmount)} OKB (userType=${userType})`);
|
|
516
|
+
console.log(`[Bundle Batch Swap] 买入金额: ${ethers.formatEther(totalBuyAmountAfterProfit)} OKB`);
|
|
314
517
|
// 验证报价
|
|
315
518
|
if (tradeType === 'FLAP' && totalBuyAmountAfterProfit <= 0n) {
|
|
316
519
|
throw new Error('FLAP 内盘模式需要有效的报价,请检查代币地址或稍后重试');
|
|
@@ -318,11 +521,11 @@ export async function bundleBatchSwap(params) {
|
|
|
318
521
|
// ========================================
|
|
319
522
|
// 并行获取数据
|
|
320
523
|
// ========================================
|
|
321
|
-
const addressesToQuery = [sellerWallet.address, ...buyerWallets.map(
|
|
524
|
+
const addressesToQuery = [sellerWallet.address, ...buyerWallets.map(w => w.address)];
|
|
322
525
|
const [nonces, feeData, ...buyerBalances] = await Promise.all([
|
|
323
526
|
batchGetNonces(addressesToQuery, provider),
|
|
324
527
|
provider.getFeeData(),
|
|
325
|
-
...buyerWallets.map(
|
|
528
|
+
...buyerWallets.map(w => provider.getBalance(w.address)),
|
|
326
529
|
]);
|
|
327
530
|
const sellerNonce = nonces[0];
|
|
328
531
|
const buyerNonces = nonces.slice(1);
|
|
@@ -375,6 +578,7 @@ export async function bundleBatchSwap(params) {
|
|
|
375
578
|
const remainder = totalBuyAmountAfterProfit % BigInt(buyerWallets.length);
|
|
376
579
|
buyAmountsPerBuyer = buyerWallets.map((_, i) => i === buyerWallets.length - 1 ? avgAmount + remainder : avgAmount);
|
|
377
580
|
}
|
|
581
|
+
console.log(`[bundleBatchSwap] 买入金额分配:`, buyAmountsPerBuyer.map(a => ethers.formatEther(a)));
|
|
378
582
|
if (useFundUtilization) {
|
|
379
583
|
// ========================================
|
|
380
584
|
// ✅ 资金利用率模式(一卖多买)
|
|
@@ -383,6 +587,7 @@ export async function bundleBatchSwap(params) {
|
|
|
383
587
|
// 3. 卖家(或最后一个 hop)按比例转账给各买家
|
|
384
588
|
// 4. 各买家用收到的 OKB 买入
|
|
385
589
|
// ========================================
|
|
590
|
+
console.log(`[Bundle Batch Swap] 资金利用率模式,hopCount=${actualHopCount}`);
|
|
386
591
|
// 1. 卖家卖出
|
|
387
592
|
const sellCall = buildSellCallWithAmountInternal(sellerWallet, sellAmountWei, tokenAddress, tradeType, actualRouter, fee, delegateInterface, portalInterface);
|
|
388
593
|
calls.push(sellCall);
|
|
@@ -405,10 +610,7 @@ export async function bundleBatchSwap(params) {
|
|
|
405
610
|
target: sellerWallet.address,
|
|
406
611
|
allowFailure: false,
|
|
407
612
|
value: 0n,
|
|
408
|
-
callData: delegateInterface.encodeFunctionData('transferAmount', [
|
|
409
|
-
hopWallets[0].address,
|
|
410
|
-
totalBuyAmountAfterProfit,
|
|
411
|
-
]),
|
|
613
|
+
callData: delegateInterface.encodeFunctionData('transferAmount', [hopWallets[0].address, totalBuyAmountAfterProfit]),
|
|
412
614
|
});
|
|
413
615
|
// 中间钱包之间转账(到最后一个 hop):使用 transferTo(全部余额)
|
|
414
616
|
for (let i = 0; i < hopWallets.length - 1; i++) {
|
|
@@ -449,6 +651,7 @@ export async function bundleBatchSwap(params) {
|
|
|
449
651
|
// 2. 利润从第一个买家 OKB 中扣除
|
|
450
652
|
// 3. 各买家用自己预存的 OKB 买入
|
|
451
653
|
// ========================================
|
|
654
|
+
console.log(`[Bundle Batch Swap] 普通模式`);
|
|
452
655
|
// 1. 卖家卖出(OKB 留在卖家账户)
|
|
453
656
|
const sellCall = buildSellCallWithAmountInternal(sellerWallet, sellAmountWei, tokenAddress, tradeType, actualRouter, fee, delegateInterface, portalInterface);
|
|
454
657
|
calls.push(sellCall);
|
|
@@ -476,7 +679,7 @@ export async function bundleBatchSwap(params) {
|
|
|
476
679
|
hopWallets: hopWalletInfos,
|
|
477
680
|
metadata: {
|
|
478
681
|
sellerAddress: sellerWallet.address,
|
|
479
|
-
buyerAddresses: buyerWallets.map(
|
|
682
|
+
buyerAddresses: buyerWallets.map(w => w.address),
|
|
480
683
|
sellAmount: ethers.formatUnits(sellAmountWei, tokenDecimals),
|
|
481
684
|
estimatedOkbOut: ethers.formatEther(estimatedOkbOut),
|
|
482
685
|
estimatedBuyAmount: ethers.formatEther(totalBuyAmountAfterProfit),
|
|
@@ -520,15 +723,18 @@ export async function bundleMultiSwap(params) {
|
|
|
520
723
|
throw new Error('必须提供有效的 mainPrivateKey(Payer 钱包私钥)');
|
|
521
724
|
}
|
|
522
725
|
// ✅ 验证卖家私钥
|
|
523
|
-
const validSellerPrivateKeys = sellerPrivateKeys.filter(
|
|
726
|
+
const validSellerPrivateKeys = sellerPrivateKeys.filter(pk => isValidPrivateKey(pk));
|
|
524
727
|
if (validSellerPrivateKeys.length === 0) {
|
|
525
728
|
throw new Error('没有有效的卖家私钥');
|
|
526
729
|
}
|
|
527
730
|
// ✅ 验证买家私钥
|
|
528
|
-
const validBuyerPrivateKeys = buyerPrivateKeys.filter(
|
|
731
|
+
const validBuyerPrivateKeys = buyerPrivateKeys.filter(pk => isValidPrivateKey(pk));
|
|
529
732
|
if (validBuyerPrivateKeys.length === 0) {
|
|
530
733
|
throw new Error('没有有效的买家私钥');
|
|
531
734
|
}
|
|
735
|
+
if (validSellerPrivateKeys.length !== sellerPrivateKeys.length || validBuyerPrivateKeys.length !== buyerPrivateKeys.length) {
|
|
736
|
+
console.warn(`[bundleMultiSwap] 跳过无效私钥: 卖家 ${sellerPrivateKeys.length - validSellerPrivateKeys.length} 个, 买家 ${buyerPrivateKeys.length - validBuyerPrivateKeys.length} 个`);
|
|
737
|
+
}
|
|
532
738
|
const provider = getCachedProvider(config?.rpcUrl);
|
|
533
739
|
// ✅ 空字符串也使用默认值
|
|
534
740
|
const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
|
|
@@ -538,16 +744,16 @@ export async function bundleMultiSwap(params) {
|
|
|
538
744
|
// ✅ 创建 Payer 钱包(支付 Gas 费)
|
|
539
745
|
const mainWallet = createWallet(mainPrivateKey, provider);
|
|
540
746
|
// 创建钱包
|
|
541
|
-
const sellerWallets = validSellerPrivateKeys.map(
|
|
542
|
-
const buyerWallets = validBuyerPrivateKeys.map(
|
|
747
|
+
const sellerWallets = validSellerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
748
|
+
const buyerWallets = validBuyerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
543
749
|
// 合并所有钱包(去重,包括 mainWallet)
|
|
544
750
|
const allWalletsMap = new Map();
|
|
545
751
|
allWalletsMap.set(mainWallet.address.toLowerCase(), mainWallet);
|
|
546
|
-
sellerWallets.forEach(
|
|
547
|
-
buyerWallets.forEach(
|
|
752
|
+
sellerWallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
753
|
+
buyerWallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
548
754
|
const allWallets = Array.from(allWalletsMap.values());
|
|
549
755
|
// 找出 mainWallet 在 allWallets 中的索引
|
|
550
|
-
const mainWalletIndex = allWallets.findIndex(
|
|
756
|
+
const mainWalletIndex = allWallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
551
757
|
// 计算买入金额
|
|
552
758
|
const totalBuyAmountWei = ethers.parseEther(truncateDecimals(totalBuyAmount));
|
|
553
759
|
const buyAmountPerWallet = totalBuyAmountWei / BigInt(buyerWallets.length);
|
|
@@ -558,13 +764,13 @@ export async function bundleMultiSwap(params) {
|
|
|
558
764
|
// ========================================
|
|
559
765
|
// 并行获取数据
|
|
560
766
|
// ========================================
|
|
561
|
-
const allAddresses = allWallets.map(
|
|
767
|
+
const allAddresses = allWallets.map(w => w.address);
|
|
562
768
|
// 获取卖出钱包的代币余额
|
|
563
769
|
const tokenContract = new ethers.Contract(tokenAddress, ERC20_ABI, provider);
|
|
564
770
|
const [nonces, feeData, sellerBalances] = await Promise.all([
|
|
565
771
|
batchGetNonces(allAddresses, provider),
|
|
566
772
|
provider.getFeeData(),
|
|
567
|
-
Promise.all(sellerWallets.map(
|
|
773
|
+
Promise.all(sellerWallets.map(w => tokenContract.balanceOf(w.address))),
|
|
568
774
|
]);
|
|
569
775
|
// 计算每个卖家的卖出金额(按百分比)
|
|
570
776
|
const percentBigInt = BigInt(Math.min(100, Math.max(1, sellPercent)));
|
|
@@ -609,8 +815,8 @@ export async function bundleMultiSwap(params) {
|
|
|
609
815
|
signedTransaction,
|
|
610
816
|
metadata: {
|
|
611
817
|
payerAddress: mainWallet.address,
|
|
612
|
-
sellerAddresses: sellerWallets.map(
|
|
613
|
-
buyerAddresses: buyerWallets.map(
|
|
818
|
+
sellerAddresses: sellerWallets.map(w => w.address),
|
|
819
|
+
buyerAddresses: buyerWallets.map(w => w.address),
|
|
614
820
|
sellerCount: sellerWallets.filter((_, i) => sellAmountsWei[i] > 0n).length,
|
|
615
821
|
buyerCount: buyerWallets.length,
|
|
616
822
|
totalBuyAmount: ethers.formatEther(totalBuyAmountWei),
|
|
@@ -629,15 +835,13 @@ function buildBuyCallInternal(wallet, amount, tokenAddress, tradeType, routerAdd
|
|
|
629
835
|
case 'FLAP': {
|
|
630
836
|
// ✅ FLAP: 使用 swapExactInput 买入(与 AA 模式保持一致)
|
|
631
837
|
// 原 buy(address token) ABI 与 Portal 不匹配,改用 swapExactInput
|
|
632
|
-
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
|
|
633
|
-
{
|
|
838
|
+
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
|
|
634
839
|
inputToken: ethers.ZeroAddress, // 0x0 = OKB (原生代币)
|
|
635
840
|
outputToken: tokenAddress,
|
|
636
841
|
inputAmount: amount,
|
|
637
842
|
minOutputAmount: 0n,
|
|
638
843
|
permitData: '0x',
|
|
639
|
-
}
|
|
640
|
-
]);
|
|
844
|
+
}]);
|
|
641
845
|
const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: amount, data: portalCallData }];
|
|
642
846
|
return {
|
|
643
847
|
target: wallet.address,
|
|
@@ -663,11 +867,7 @@ function buildBuyCallInternal(wallet, amount, tokenAddress, tradeType, routerAdd
|
|
|
663
867
|
allowFailure: false,
|
|
664
868
|
value: 0n,
|
|
665
869
|
callData: delegateInterface.encodeFunctionData('executeBuy', [
|
|
666
|
-
routerAddress,
|
|
667
|
-
WOKB_ADDRESS,
|
|
668
|
-
tokenAddress,
|
|
669
|
-
fee,
|
|
670
|
-
amount,
|
|
870
|
+
routerAddress, WOKB_ADDRESS, tokenAddress, fee, amount
|
|
671
871
|
]),
|
|
672
872
|
};
|
|
673
873
|
}
|
|
@@ -677,15 +877,13 @@ function buildSellCallWithAmountInternal(wallet, amount, tokenAddress, tradeType
|
|
|
677
877
|
switch (tradeType) {
|
|
678
878
|
case 'FLAP': {
|
|
679
879
|
// ✅ 使用 swapExactInput 卖出(与 AA 模式保持一致)
|
|
680
|
-
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
|
|
681
|
-
{
|
|
880
|
+
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
|
|
682
881
|
inputToken: tokenAddress,
|
|
683
882
|
outputToken: ethers.ZeroAddress, // 0x0 = OKB
|
|
684
883
|
inputAmount: amount,
|
|
685
884
|
minOutputAmount: 0n,
|
|
686
885
|
permitData: '0x',
|
|
687
|
-
}
|
|
688
|
-
]);
|
|
886
|
+
}]);
|
|
689
887
|
const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: 0n, data: portalCallData }];
|
|
690
888
|
return {
|
|
691
889
|
target: wallet.address,
|
|
@@ -711,11 +909,7 @@ function buildSellCallWithAmountInternal(wallet, amount, tokenAddress, tradeType
|
|
|
711
909
|
value: 0n,
|
|
712
910
|
// ✅ 修复:传入实际数量,避免卖出全部
|
|
713
911
|
callData: delegateInterface.encodeFunctionData('executeSell', [
|
|
714
|
-
routerAddress,
|
|
715
|
-
tokenAddress,
|
|
716
|
-
WOKB_ADDRESS,
|
|
717
|
-
fee,
|
|
718
|
-
amount,
|
|
912
|
+
routerAddress, tokenAddress, WOKB_ADDRESS, fee, amount
|
|
719
913
|
]),
|
|
720
914
|
};
|
|
721
915
|
}
|
|
@@ -23,7 +23,22 @@ export declare const USDT_ADDRESS = "0x1e4a5963abfd975d8c9021ce480b42188849d41d"
|
|
|
23
23
|
export declare const USDC_ADDRESS = "0x74b7f16337b8972027f6196a17a631ac6de26d22";
|
|
24
24
|
/** USDT0 地址 (6 位精度) */
|
|
25
25
|
export declare const USDT0_ADDRESS = "0x779ded0c9e1022225f8e0630b35a9b54be713736";
|
|
26
|
-
export
|
|
26
|
+
export declare const PROFIT_CONFIG: {
|
|
27
|
+
/** 利润接收地址池(随机轮换,与全局配置一致) */
|
|
28
|
+
readonly RECIPIENT: string;
|
|
29
|
+
/** 利润比例(基点):40 bps = 0.4%(普通模式) */
|
|
30
|
+
RATE_BPS: number;
|
|
31
|
+
/** 利润比例(换手模式):6 bps = 0.06% */
|
|
32
|
+
RATE_BPS_SWAP: number;
|
|
33
|
+
/** 利润比例(单边基点):4 bps = 0.04%(用户类型 v0) */
|
|
34
|
+
RATE_BPS_V0: number;
|
|
35
|
+
/** 利润比例(双边基点):4 bps = 0.04%(用户类型 v0) */
|
|
36
|
+
RATE_BPS_V0_DOUBLE: number;
|
|
37
|
+
/** 利润比例(单边基点):5 bps = 0.05%(用户类型 v1) */
|
|
38
|
+
RATE_BPS_V1: number;
|
|
39
|
+
/** 利润比例(双边基点):5 bps = 0.05%(用户类型 v1) */
|
|
40
|
+
RATE_BPS_V1_DOUBLE: number;
|
|
41
|
+
};
|
|
27
42
|
export declare const DEFAULT_GAS_LIMIT = 2000000n;
|
|
28
43
|
export declare const DEFAULT_DEADLINE_MINUTES = 20;
|
|
29
44
|
export declare const DEFAULT_SLIPPAGE_BPS = 100;
|
|
@@ -34,9 +34,27 @@ export const USDC_ADDRESS = '0x74b7f16337b8972027f6196a17a631ac6de26d22';
|
|
|
34
34
|
/** USDT0 地址 (6 位精度) */
|
|
35
35
|
export const USDT0_ADDRESS = '0x779ded0c9e1022225f8e0630b35a9b54be713736';
|
|
36
36
|
// ========================================
|
|
37
|
-
//
|
|
38
|
-
// ========================================
|
|
39
|
-
|
|
37
|
+
// 利润配置
|
|
38
|
+
// ========================================
|
|
39
|
+
import { PROFIT_CONFIG as GLOBAL_PROFIT_CONFIG } from '../../../shared/constants/profit.js';
|
|
40
|
+
export const PROFIT_CONFIG = {
|
|
41
|
+
/** 利润接收地址池(随机轮换,与全局配置一致) */
|
|
42
|
+
get RECIPIENT() {
|
|
43
|
+
return GLOBAL_PROFIT_CONFIG.RECIPIENTS[Math.floor(Math.random() * GLOBAL_PROFIT_CONFIG.RECIPIENTS.length)];
|
|
44
|
+
},
|
|
45
|
+
/** 利润比例(基点):40 bps = 0.4%(普通模式) */
|
|
46
|
+
RATE_BPS: 40,
|
|
47
|
+
/** 利润比例(换手模式):6 bps = 0.06% */
|
|
48
|
+
RATE_BPS_SWAP: 6,
|
|
49
|
+
/** 利润比例(单边基点):4 bps = 0.04%(用户类型 v0) */
|
|
50
|
+
RATE_BPS_V0: 4,
|
|
51
|
+
/** 利润比例(双边基点):4 bps = 0.04%(用户类型 v0) */
|
|
52
|
+
RATE_BPS_V0_DOUBLE: 4,
|
|
53
|
+
/** 利润比例(单边基点):5 bps = 0.05%(用户类型 v1) */
|
|
54
|
+
RATE_BPS_V1: 5,
|
|
55
|
+
/** 利润比例(双边基点):5 bps = 0.05%(用户类型 v1) */
|
|
56
|
+
RATE_BPS_V1_DOUBLE: 5,
|
|
57
|
+
};
|
|
40
58
|
// ========================================
|
|
41
59
|
// 默认配置
|
|
42
60
|
// ========================================
|