four-flap-meme-sdk 2.2.0 → 2.2.2
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.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 +4 -4
- 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 +4 -8
- 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.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 +97 -26
- 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 +301 -58
- 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 +158 -83
- 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 +85 -20
- package/dist/index.js +215 -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 +252 -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 +5 -5
- package/dist/shared/clients/four.js +17 -21
- 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 +3 -2
- 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 +3 -3
- package/dist/shared/flap/index.js +3 -3
- package/dist/shared/flap/meta.d.ts +18 -16
- package/dist/shared/flap/meta.js +17 -12
- package/dist/shared/flap/permit.js +2 -5
- package/dist/shared/flap/pinata.d.ts +4 -11
- package/dist/shared/flap/pinata.js +16 -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 +172 -92
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +99 -106
- 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 +7 -73
- 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 -1
- package/dist/shared/flap/portal.js +25 -32
- package/dist/shared/flap/vanity.d.ts +5 -1
- package/dist/shared/flap/vanity.js +17 -6
- package/dist/shared/flap/vault.d.ts +124 -17
- package/dist/shared/flap/vault.js +148 -67
- 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 +54 -40
- 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 +10 -5
- package/dist/utils/wallet.d.ts +25 -2
- package/dist/utils/wallet.js +8 -9
- package/package.json +4 -159
- 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 -260
- 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 -34
- 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/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 -39
- 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 -180
- 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,5 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* EIP-7702 XLayer 刷量功能
|
|
3
|
+
*
|
|
4
|
+
* 支持两种模式:
|
|
5
|
+
* 1. 无币模式 (Wash): 单钱包买入+卖出,不需要预先持有代币
|
|
6
|
+
* 2. 捆绑模式 (Bundle): 多钱包批量买入 + 批量卖出
|
|
7
|
+
*
|
|
8
|
+
* 支持池子类型:
|
|
9
|
+
* - FLAP: 内盘 (Flap Portal)
|
|
10
|
+
* - V2: PotatoSwap V2 外盘
|
|
11
|
+
* - V3: PotatoSwap V3 外盘
|
|
12
|
+
*
|
|
13
|
+
* 只生成签名,由调用方决定如何提交
|
|
3
14
|
*/
|
|
4
15
|
import { ethers, Contract } from 'ethers';
|
|
5
16
|
import { getCachedProvider, createWallet, signAuthorizationsWithNonces, batchGetNonces, buildEIP7702TransactionSync, calculateProfitAmountByTxCount, getProfitRecipient, } from './utils.js';
|
|
@@ -7,7 +18,40 @@ import { UNIFIED_DELEGATE_ADDRESS, UNIFIED_DELEGATE_ABI, FLAP_PORTAL_ABI, FLAP_P
|
|
|
7
18
|
import { bundleBuy } from './bundle-buy.js';
|
|
8
19
|
import { bundleSell } from './bundle-sell.js';
|
|
9
20
|
import { bundleSwap } from './bundle-swap.js';
|
|
10
|
-
|
|
21
|
+
/**
|
|
22
|
+
* 截断小数位数,避免 parseEther/parseUnits 报错
|
|
23
|
+
* @param value 数值字符串
|
|
24
|
+
* @param decimals 保留的小数位数(默认 18)
|
|
25
|
+
*/
|
|
26
|
+
function truncateDecimals(value, decimals = 18) {
|
|
27
|
+
if (!value || value === '0')
|
|
28
|
+
return value;
|
|
29
|
+
const parts = String(value).split('.');
|
|
30
|
+
if (parts.length === 1)
|
|
31
|
+
return value;
|
|
32
|
+
const intPart = parts[0] || '0';
|
|
33
|
+
const decPart = (parts[1] || '').slice(0, decimals);
|
|
34
|
+
return decPart ? `${intPart}.${decPart}` : intPart;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 无币刷量 - 每个钱包执行买入+卖出
|
|
38
|
+
*
|
|
39
|
+
* 核心逻辑:[利润刮取] + [钱包1买入] + [钱包1卖出] + [钱包2买入] + [钱包2卖出] + ...
|
|
40
|
+
*
|
|
41
|
+
* 特点:
|
|
42
|
+
* - 钱包不需要预先持有代币
|
|
43
|
+
* - 每个钱包在同一笔交易中完成买入和卖出
|
|
44
|
+
* - 利润从主钱包统一支付
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* const result = await washVolume({
|
|
48
|
+
* privateKeys: ['0x...', '0x...'],
|
|
49
|
+
* tokenAddress: '0x...',
|
|
50
|
+
* buyAmountPerWallet: '0.01',
|
|
51
|
+
* sellPercent: 100,
|
|
52
|
+
* poolType: 'V3',
|
|
53
|
+
* });
|
|
54
|
+
*/
|
|
11
55
|
export async function washVolume(params) {
|
|
12
56
|
const { mainPrivateKey, privateKeys, tokenAddress, tokenDecimals = 18, buyAmountPerWallet, sellPercent = 100, poolType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, userType = 'v0', // ✅ 用户类型(影响利润率)
|
|
13
57
|
config, } = params;
|
|
@@ -25,10 +69,14 @@ export async function washVolume(params) {
|
|
|
25
69
|
if (!isValidPrivateKey(mainPrivateKey)) {
|
|
26
70
|
throw new Error('mainPrivateKey 格式无效');
|
|
27
71
|
}
|
|
28
|
-
const validPrivateKeys = privateKeys.filter(
|
|
72
|
+
const validPrivateKeys = privateKeys.filter(pk => isValidPrivateKey(pk));
|
|
29
73
|
if (validPrivateKeys.length === 0) {
|
|
30
74
|
throw new Error('没有有效的私钥(私钥必须是 0x 开头的 66 位或 64 位十六进制字符串)');
|
|
31
75
|
}
|
|
76
|
+
if (validPrivateKeys.length !== privateKeys.length) {
|
|
77
|
+
console.warn(`[washVolume] 跳过 ${privateKeys.length - validPrivateKeys.length} 个无效私钥`);
|
|
78
|
+
}
|
|
79
|
+
// 使用验证后的私钥
|
|
32
80
|
const actualPrivateKeys = validPrivateKeys;
|
|
33
81
|
const provider = getCachedProvider(config?.rpcUrl);
|
|
34
82
|
// ✅ 空字符串也使用默认值
|
|
@@ -40,7 +88,7 @@ export async function washVolume(params) {
|
|
|
40
88
|
// ✅ 创建 Payer 钱包(支付 Gas 费)
|
|
41
89
|
const mainWallet = createWallet(mainPrivateKey, provider);
|
|
42
90
|
// 创建交易钱包(使用验证后的私钥)
|
|
43
|
-
const wallets = actualPrivateKeys.map(
|
|
91
|
+
const wallets = actualPrivateKeys.map(pk => createWallet(pk, provider));
|
|
44
92
|
// 计算金额(无币刷量:每个钱包 1买 + 1卖 = 2笔交易)
|
|
45
93
|
const buyAmountWei = ethers.parseEther(truncateDecimals(buyAmountPerWallet));
|
|
46
94
|
const totalBuyAmount = buyAmountWei * BigInt(wallets.length);
|
|
@@ -53,20 +101,21 @@ export async function washVolume(params) {
|
|
|
53
101
|
// ========================================
|
|
54
102
|
const allWalletsMap = new Map();
|
|
55
103
|
allWalletsMap.set(mainWallet.address.toLowerCase(), mainWallet);
|
|
56
|
-
wallets.forEach(
|
|
104
|
+
wallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
57
105
|
const allWallets = Array.from(allWalletsMap.values());
|
|
58
106
|
// 找出 mainWallet 在 allWallets 中的索引
|
|
59
|
-
const mainWalletIndex = allWallets.findIndex(
|
|
107
|
+
const mainWalletIndex = allWallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
60
108
|
// ========================================
|
|
61
109
|
// 并行获取数据
|
|
62
110
|
// ========================================
|
|
63
|
-
const allAddresses = allWallets.map(
|
|
111
|
+
const allAddresses = allWallets.map(w => w.address);
|
|
64
112
|
// ✅ 对所有模式,使用【总金额报价 + 按比例分配】
|
|
65
113
|
// 因为所有钱包在同一笔交易中执行,会累积影响价格
|
|
66
114
|
// 这确保了「买多少就卖多少」,避免清空钱包预存代币
|
|
67
115
|
let estimatedTokenAmounts = [];
|
|
68
116
|
const totalBuyWei = buyAmountWei * BigInt(wallets.length);
|
|
69
117
|
if (poolType === 'FLAP') {
|
|
118
|
+
console.log(`[washVolume] FLAP 总金额报价: ${wallets.length} 个钱包, 每个 ${buyAmountWei} wei, 总计 ${totalBuyWei} wei`);
|
|
70
119
|
try {
|
|
71
120
|
const portalContract = new Contract(FLAP_PORTAL_ADDRESS, FLAP_PORTAL_ABI, provider);
|
|
72
121
|
// ✅ 使用 previewBuy(与 AA 模式一致),降级到 quoteExactInput
|
|
@@ -74,16 +123,21 @@ export async function washVolume(params) {
|
|
|
74
123
|
let totalTokenAmount = 0n;
|
|
75
124
|
try {
|
|
76
125
|
totalTokenAmount = await portalContract.previewBuy(tokenAddress, totalBuyWei);
|
|
126
|
+
console.log(`[washVolume] FLAP previewBuy 总预估: ${totalBuyWei} wei OKB -> ${totalTokenAmount} wei 代币`);
|
|
77
127
|
}
|
|
78
|
-
catch {
|
|
128
|
+
catch (previewErr) {
|
|
129
|
+
console.warn(`[washVolume] previewBuy 失败,尝试 quoteExactInput:`, previewErr);
|
|
79
130
|
try {
|
|
131
|
+
// ✅ 降级到 quoteExactInput(与 AA 模式相同的降级策略)
|
|
80
132
|
totalTokenAmount = await portalContract.quoteExactInput.staticCall({
|
|
81
133
|
inputToken: ethers.ZeroAddress, // OKB
|
|
82
134
|
outputToken: tokenAddress, // Token
|
|
83
135
|
inputAmount: totalBuyWei,
|
|
84
136
|
});
|
|
137
|
+
console.log(`[washVolume] FLAP quoteExactInput 总预估: ${totalBuyWei} wei OKB -> ${totalTokenAmount} wei 代币`);
|
|
85
138
|
}
|
|
86
|
-
catch {
|
|
139
|
+
catch (quoteErr) {
|
|
140
|
+
console.warn(`[washVolume] quoteExactInput 也失败:`, quoteErr);
|
|
87
141
|
totalTokenAmount = 0n;
|
|
88
142
|
}
|
|
89
143
|
}
|
|
@@ -100,23 +154,27 @@ export async function washVolume(params) {
|
|
|
100
154
|
return sharePerWallet;
|
|
101
155
|
});
|
|
102
156
|
}
|
|
157
|
+
console.log(`[washVolume] FLAP 代币分配:`, estimatedTokenAmounts.map(a => a.toString()));
|
|
103
158
|
}
|
|
104
|
-
catch {
|
|
105
|
-
|
|
159
|
+
catch (e) {
|
|
160
|
+
console.warn(`[washVolume] FLAP 报价失败:`, e);
|
|
106
161
|
}
|
|
107
162
|
}
|
|
108
163
|
else if (poolType === 'V2' || poolType === 'V3') {
|
|
109
164
|
// ✅ V2/V3 外盘模式:通过报价获取预估代币数量,确保买卖对等
|
|
165
|
+
console.log(`[washVolume] ${poolType} 总金额报价: ${wallets.length} 个钱包, 每个 ${buyAmountWei} wei, 总计 ${totalBuyWei} wei`);
|
|
110
166
|
try {
|
|
111
167
|
const { quoteV2, quoteV3 } = await import('../../../utils/quote-helpers.js');
|
|
112
168
|
let totalTokenAmount = 0n;
|
|
113
169
|
if (poolType === 'V3') {
|
|
114
170
|
const result = await quoteV3(provider, WOKB_ADDRESS, tokenAddress, totalBuyWei, 'XLAYER', fee);
|
|
115
171
|
totalTokenAmount = result.amountOut;
|
|
172
|
+
console.log(`[washVolume] V3 报价成功: ${totalBuyWei} wei OKB -> ${totalTokenAmount} wei 代币 (fee: ${fee})`);
|
|
116
173
|
}
|
|
117
174
|
else {
|
|
118
175
|
const result = await quoteV2(provider, WOKB_ADDRESS, tokenAddress, totalBuyWei, 'XLAYER');
|
|
119
176
|
totalTokenAmount = result.amountOut;
|
|
177
|
+
console.log(`[washVolume] V2 报价成功: ${totalBuyWei} wei OKB -> ${totalTokenAmount} wei 代币`);
|
|
120
178
|
}
|
|
121
179
|
// 均分到每个钱包
|
|
122
180
|
if (totalBuyWei > 0n && totalTokenAmount > 0n) {
|
|
@@ -129,17 +187,22 @@ export async function washVolume(params) {
|
|
|
129
187
|
allocated += sharePerWallet;
|
|
130
188
|
return sharePerWallet;
|
|
131
189
|
});
|
|
190
|
+
console.log(`[washVolume] ${poolType} 代币分配:`, estimatedTokenAmounts.map(a => a.toString()));
|
|
132
191
|
}
|
|
133
192
|
}
|
|
134
|
-
catch {
|
|
135
|
-
|
|
193
|
+
catch (e) {
|
|
194
|
+
console.warn(`[washVolume] ${poolType} 报价失败,将使用 sellPercent 模式:`, e);
|
|
136
195
|
}
|
|
137
196
|
}
|
|
138
|
-
const [nonces, feeData] = await Promise.all([
|
|
197
|
+
const [nonces, feeData] = await Promise.all([
|
|
198
|
+
batchGetNonces(allAddresses, provider),
|
|
199
|
+
provider.getFeeData(),
|
|
200
|
+
]);
|
|
139
201
|
// ========================================
|
|
140
202
|
// 同步签署授权
|
|
141
203
|
// ========================================
|
|
142
|
-
const authorizations = signAuthorizationsWithNonces(allWallets, nonces, delegateAddress, mainWalletIndex
|
|
204
|
+
const authorizations = signAuthorizationsWithNonces(allWallets, nonces, delegateAddress, mainWalletIndex // mainWallet 是交易发起者
|
|
205
|
+
);
|
|
143
206
|
// ========================================
|
|
144
207
|
// 构建调用
|
|
145
208
|
// ========================================
|
|
@@ -188,13 +251,25 @@ export async function washVolume(params) {
|
|
|
188
251
|
},
|
|
189
252
|
};
|
|
190
253
|
}
|
|
191
|
-
// ========================================
|
|
192
|
-
// 捆绑刷量 (Bundle Mode)
|
|
193
|
-
// ========================================
|
|
194
254
|
/**
|
|
195
255
|
* 捆绑刷量 - 多钱包批量买入 + 批量卖出
|
|
196
256
|
*
|
|
197
257
|
* 核心逻辑:[利润刮取] + [买入Ops...] + [卖出Ops...]
|
|
258
|
+
*
|
|
259
|
+
* 特点:
|
|
260
|
+
* - 买入和卖出可以使用不同的钱包
|
|
261
|
+
* - 所有操作在一笔交易中原子执行
|
|
262
|
+
* - 卖出钱包需要预先持有代币
|
|
263
|
+
*
|
|
264
|
+
* @example
|
|
265
|
+
* const result = await bundleVolume({
|
|
266
|
+
* buyerPrivateKeys: ['0x...', '0x...'],
|
|
267
|
+
* buyAmounts: ['0.01', '0.02'],
|
|
268
|
+
* sellerPrivateKeys: ['0x...'],
|
|
269
|
+
* sellPercent: 100,
|
|
270
|
+
* tokenAddress: '0x...',
|
|
271
|
+
* poolType: 'FLAP',
|
|
272
|
+
* });
|
|
198
273
|
*/
|
|
199
274
|
export async function bundleVolume(params) {
|
|
200
275
|
const { mainPrivateKey, buyerPrivateKeys, buyAmounts, sellerPrivateKeys, sellAmounts, sellPercent = 100, tokenAddress, tokenDecimals = 18, poolType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, userType = 'v0', // ✅ 用户类型(影响利润率)
|
|
@@ -222,10 +297,13 @@ export async function bundleVolume(params) {
|
|
|
222
297
|
throw new Error('没有有效的买家私钥');
|
|
223
298
|
}
|
|
224
299
|
// ✅ 验证卖家私钥
|
|
225
|
-
const validSellerPrivateKeys = sellerPrivateKeys.filter(
|
|
300
|
+
const validSellerPrivateKeys = sellerPrivateKeys.filter(pk => isValidPrivateKey(pk));
|
|
226
301
|
if (validSellerPrivateKeys.length === 0) {
|
|
227
302
|
throw new Error('没有有效的卖家私钥');
|
|
228
303
|
}
|
|
304
|
+
if (validBuyerPrivateKeys.length !== buyerPrivateKeys.length || validSellerPrivateKeys.length !== sellerPrivateKeys.length) {
|
|
305
|
+
console.warn(`[bundleVolume] 跳过无效私钥: 买家 ${buyerPrivateKeys.length - validBuyerPrivateKeys.length} 个, 卖家 ${sellerPrivateKeys.length - validSellerPrivateKeys.length} 个`);
|
|
306
|
+
}
|
|
229
307
|
const provider = getCachedProvider(config?.rpcUrl);
|
|
230
308
|
// ✅ 空字符串也使用默认值
|
|
231
309
|
const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
|
|
@@ -235,18 +313,18 @@ export async function bundleVolume(params) {
|
|
|
235
313
|
// ✅ 创建 Payer 钱包(支付 Gas 费)
|
|
236
314
|
const mainWallet = createWallet(mainPrivateKey, provider);
|
|
237
315
|
// 创建钱包(使用验证后的私钥)
|
|
238
|
-
const buyerWallets = validBuyerPrivateKeys.map(
|
|
239
|
-
const sellerWallets = validSellerPrivateKeys.map(
|
|
316
|
+
const buyerWallets = validBuyerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
317
|
+
const sellerWallets = validSellerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
240
318
|
// 合并所有钱包(去重,包括 mainWallet)
|
|
241
319
|
const allWalletsMap = new Map();
|
|
242
320
|
allWalletsMap.set(mainWallet.address.toLowerCase(), mainWallet);
|
|
243
|
-
buyerWallets.forEach(
|
|
244
|
-
sellerWallets.forEach(
|
|
321
|
+
buyerWallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
322
|
+
sellerWallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
245
323
|
const allWallets = Array.from(allWalletsMap.values());
|
|
246
324
|
// 找出 mainWallet 在 allWallets 中的索引
|
|
247
|
-
const mainWalletIndex = allWallets.findIndex(
|
|
325
|
+
const mainWalletIndex = allWallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
248
326
|
// 计算买入金额(使用验证后的金额数组)
|
|
249
|
-
const buyAmountsWei = validBuyAmounts.map(
|
|
327
|
+
const buyAmountsWei = validBuyAmounts.map(amt => ethers.parseEther(truncateDecimals(amt)));
|
|
250
328
|
const totalBuyAmount = buyAmountsWei.reduce((sum, amt) => sum + amt, 0n);
|
|
251
329
|
// ✅ 计算利润(捆绑刷量:买家数 + 卖家数 = 总交易数)
|
|
252
330
|
const totalTxCount = buyerWallets.length + sellerWallets.length;
|
|
@@ -255,13 +333,16 @@ export async function bundleVolume(params) {
|
|
|
255
333
|
// ========================================
|
|
256
334
|
// 并行获取数据
|
|
257
335
|
// ========================================
|
|
258
|
-
const allAddresses = allWallets.map(
|
|
336
|
+
const allAddresses = allWallets.map(w => w.address);
|
|
259
337
|
// 获取卖出钱包的代币余额(如果需要)
|
|
260
338
|
const needBalanceQuery = !sellAmounts || sellAmounts.length !== sellerWallets.length;
|
|
261
|
-
const parallelPromises = [
|
|
339
|
+
const parallelPromises = [
|
|
340
|
+
batchGetNonces(allAddresses, provider),
|
|
341
|
+
provider.getFeeData(),
|
|
342
|
+
];
|
|
262
343
|
if (needBalanceQuery && sellerWallets.length > 0) {
|
|
263
344
|
const tokenContract = new ethers.Contract(tokenAddress, ERC20_ABI, provider);
|
|
264
|
-
parallelPromises.push(Promise.all(sellerWallets.map(
|
|
345
|
+
parallelPromises.push(Promise.all(sellerWallets.map(w => tokenContract.balanceOf(w.address))));
|
|
265
346
|
}
|
|
266
347
|
const results = await Promise.all(parallelPromises);
|
|
267
348
|
const nonces = results[0];
|
|
@@ -270,9 +351,12 @@ export async function bundleVolume(params) {
|
|
|
270
351
|
let sellAmountsWei;
|
|
271
352
|
if (sellAmounts && sellAmounts.length === sellerWallets.length) {
|
|
272
353
|
// ✅ 如果有指定卖出金额,直接使用
|
|
273
|
-
sellAmountsWei = sellAmounts.map(
|
|
354
|
+
sellAmountsWei = sellAmounts.map(amt => ethers.parseUnits(truncateDecimals(amt, tokenDecimals), tokenDecimals));
|
|
274
355
|
}
|
|
275
356
|
else if (needBalanceQuery && results[2]) {
|
|
357
|
+
// ✅ 没有指定卖出金额,需要根据买入金额预估应卖出的代币数量
|
|
358
|
+
const balances = results[2].map(b => typeof b === 'bigint' ? b : BigInt(b.toString()));
|
|
359
|
+
const totalSellerBalance = balances.reduce((sum, b) => sum + b, 0n);
|
|
276
360
|
// ✅ 根据 poolType 预估买入能获得的代币数量
|
|
277
361
|
let estimatedTokenAmount = 0n;
|
|
278
362
|
try {
|
|
@@ -281,28 +365,36 @@ export async function bundleVolume(params) {
|
|
|
281
365
|
const portalContract = new ethers.Contract(FLAP_PORTAL_ADDRESS, FLAP_PORTAL_ABI, provider);
|
|
282
366
|
try {
|
|
283
367
|
estimatedTokenAmount = await portalContract.previewBuy(tokenAddress, totalBuyAmount);
|
|
368
|
+
console.log(`[bundleVolume] FLAP previewBuy: ${totalBuyAmount} wei OKB -> ${estimatedTokenAmount} wei 代币`);
|
|
284
369
|
}
|
|
285
|
-
catch {
|
|
370
|
+
catch (previewErr) {
|
|
371
|
+
console.warn(`[bundleVolume] previewBuy 失败,尝试 quoteBuy:`, previewErr);
|
|
286
372
|
try {
|
|
287
373
|
estimatedTokenAmount = await portalContract.quoteBuy(tokenAddress, totalBuyAmount);
|
|
374
|
+
console.log(`[bundleVolume] FLAP quoteBuy: ${totalBuyAmount} wei OKB -> ${estimatedTokenAmount} wei 代币`);
|
|
288
375
|
}
|
|
289
|
-
catch {
|
|
376
|
+
catch (quoteBuyErr) {
|
|
377
|
+
console.warn(`[bundleVolume] quoteBuy 失败,尝试 quoteExactInput:`, quoteBuyErr);
|
|
290
378
|
try {
|
|
291
379
|
estimatedTokenAmount = await portalContract.quoteExactInput.staticCall({
|
|
292
380
|
inputToken: ethers.ZeroAddress,
|
|
293
381
|
outputToken: tokenAddress,
|
|
294
382
|
inputAmount: totalBuyAmount,
|
|
295
383
|
});
|
|
384
|
+
console.log(`[bundleVolume] FLAP quoteExactInput: ${totalBuyAmount} wei OKB -> ${estimatedTokenAmount} wei 代币`);
|
|
296
385
|
}
|
|
297
|
-
catch {
|
|
386
|
+
catch (quoteErr) {
|
|
387
|
+
console.warn(`[bundleVolume] quoteExactInput 也失败,尝试 V2 路由作为终极兜底:`, quoteErr);
|
|
298
388
|
try {
|
|
389
|
+
// 终极兜底:当内盘接口全部失效时,尝试使用 V2 代码进行报价
|
|
299
390
|
const v2Router = new ethers.Contract(POTATOSWAP_V2_ROUTER, V2_ROUTER_ABI, provider);
|
|
300
391
|
const path = [WOKB_ADDRESS, tokenAddress];
|
|
301
392
|
const amounts = await v2Router.getAmountsOut(totalBuyAmount, path);
|
|
302
393
|
estimatedTokenAmount = amounts[amounts.length - 1];
|
|
394
|
+
console.log(`[bundleVolume] FLAP 终极回退 V2 quote: ${totalBuyAmount} wei OKB -> ${estimatedTokenAmount} wei 代币`);
|
|
303
395
|
}
|
|
304
|
-
catch {
|
|
305
|
-
|
|
396
|
+
catch (v2Err) {
|
|
397
|
+
console.warn(`[bundleVolume] 终极回退 V2 quote 也失败:`, v2Err);
|
|
306
398
|
}
|
|
307
399
|
}
|
|
308
400
|
}
|
|
@@ -320,7 +412,7 @@ export async function bundleVolume(params) {
|
|
|
320
412
|
else {
|
|
321
413
|
// V3: 使用 V3 Quoter
|
|
322
414
|
const v3Quoter = new ethers.Contract('0x27d52F6D9Ed2eBb3E6a4c0Af6b1f5dc85A4d5b2C', [
|
|
323
|
-
'function quoteExactInputSingle((address tokenIn, address tokenOut, uint256 amountIn, uint24 fee, uint160 sqrtPriceLimitX96)) external returns (uint256 amountOut)'
|
|
415
|
+
'function quoteExactInputSingle((address tokenIn, address tokenOut, uint256 amountIn, uint24 fee, uint160 sqrtPriceLimitX96)) external returns (uint256 amountOut)'
|
|
324
416
|
], provider);
|
|
325
417
|
estimatedTokenAmount = await v3Quoter.quoteExactInputSingle.staticCall({
|
|
326
418
|
tokenIn: WOKB_ADDRESS,
|
|
@@ -330,14 +422,15 @@ export async function bundleVolume(params) {
|
|
|
330
422
|
sqrtPriceLimitX96: 0n,
|
|
331
423
|
});
|
|
332
424
|
}
|
|
425
|
+
console.log(`[bundleVolume] ${poolType} quote: ${totalBuyAmount} wei OKB -> ${estimatedTokenAmount} wei 代币`);
|
|
333
426
|
}
|
|
334
|
-
catch {
|
|
335
|
-
|
|
427
|
+
catch (quoteErr) {
|
|
428
|
+
console.warn(`[bundleVolume] ${poolType} 报价失败:`, quoteErr);
|
|
336
429
|
}
|
|
337
430
|
}
|
|
338
431
|
}
|
|
339
|
-
catch {
|
|
340
|
-
|
|
432
|
+
catch (e) {
|
|
433
|
+
console.warn(`[bundleVolume] 报价预估失败:`, e);
|
|
341
434
|
}
|
|
342
435
|
// ✅ 修正卖出数量计算逻辑:卖出数额仅基于本次交易买入的代币预估值,忽略原有余额
|
|
343
436
|
const percentBigInt = BigInt(Math.min(100, Math.max(0, sellPercent)));
|
|
@@ -367,9 +460,11 @@ export async function bundleVolume(params) {
|
|
|
367
460
|
}
|
|
368
461
|
});
|
|
369
462
|
}
|
|
463
|
+
console.log(`[bundleVolume] 每个卖家随机分配的卖出量:`, walletSellAmounts.map(a => a.toString()));
|
|
370
464
|
}
|
|
371
465
|
// ✅ 修复:不再重复应用 sellPercent,因为 totalToSell 已经按 sellPercent 计算过了
|
|
372
466
|
sellAmountsWei = walletSellAmounts;
|
|
467
|
+
console.log(`[bundleVolume] 最终卖出数量 (sellPercent=${sellPercent}%):`, sellAmountsWei.map(a => a.toString()));
|
|
373
468
|
}
|
|
374
469
|
else {
|
|
375
470
|
// ✅ 即使没有余额查询结果,也初始化数组
|
|
@@ -430,10 +525,11 @@ export async function bundleVolume(params) {
|
|
|
430
525
|
},
|
|
431
526
|
};
|
|
432
527
|
}
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
528
|
+
/**
|
|
529
|
+
* 生成单轮刷量签名(买入 + 卖出分开)
|
|
530
|
+
*
|
|
531
|
+
* 注意:买入和卖出是两笔独立交易
|
|
532
|
+
*/
|
|
437
533
|
export async function singleRoundVolume(params) {
|
|
438
534
|
const { privateKeys, tokenAddress, tokenDecimals = 18, buyAmountPerWallet, sellPercent = 100, tradeType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, config, } = params;
|
|
439
535
|
const mainPrivateKey = privateKeys[0];
|
|
@@ -471,10 +567,12 @@ export async function singleRoundVolume(params) {
|
|
|
471
567
|
},
|
|
472
568
|
};
|
|
473
569
|
}
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
570
|
+
/**
|
|
571
|
+
* 生成多轮刷量签名
|
|
572
|
+
*
|
|
573
|
+
* 注意:由于 nonce 问题,只能预生成第一轮
|
|
574
|
+
* 后续轮次需要在前一轮交易确认后才能生成
|
|
575
|
+
*/
|
|
478
576
|
export async function makeVolume(params) {
|
|
479
577
|
const { privateKeys, tokenAddress, tokenDecimals = 18, buyAmountPerRound, rounds, tradeType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, onProgress, config, } = params;
|
|
480
578
|
const buyAmountPerWallet = (parseFloat(buyAmountPerRound) / privateKeys.length).toString();
|
|
@@ -505,10 +603,9 @@ export async function makeVolume(params) {
|
|
|
505
603
|
},
|
|
506
604
|
};
|
|
507
605
|
}
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
/** 生成换手刷量签名 */
|
|
606
|
+
/**
|
|
607
|
+
* 生成换手刷量签名
|
|
608
|
+
*/
|
|
512
609
|
export async function makeVolumeWithSwap(params) {
|
|
513
610
|
const { sellerPrivateKey, buyerPrivateKey, tokenAddress, tokenDecimals = 18, sellAmount, hopCount = 2, tradeType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, config, } = params;
|
|
514
611
|
const result = await bundleSwap({
|
|
@@ -551,15 +648,13 @@ function buildBuyCall(wallet, amount, tokenAddress, poolType, routerAddress, fee
|
|
|
551
648
|
case 'FLAP': {
|
|
552
649
|
// ✅ 修复:使用 swapExactInput 代替 buy 函数,明确指定 inputAmount
|
|
553
650
|
// buy(token) 依赖 msg.value,当 value=0n 时会失败
|
|
554
|
-
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
|
|
555
|
-
{
|
|
651
|
+
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
|
|
556
652
|
inputToken: ethers.ZeroAddress, // 0x0 = OKB (原生代币)
|
|
557
653
|
outputToken: tokenAddress,
|
|
558
654
|
inputAmount: amount,
|
|
559
655
|
minOutputAmount: 0n,
|
|
560
656
|
permitData: '0x',
|
|
561
|
-
}
|
|
562
|
-
]);
|
|
657
|
+
}]);
|
|
563
658
|
const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: amount, data: portalCallData }];
|
|
564
659
|
return {
|
|
565
660
|
target: wallet.address,
|
|
@@ -585,11 +680,7 @@ function buildBuyCall(wallet, amount, tokenAddress, poolType, routerAddress, fee
|
|
|
585
680
|
allowFailure: false,
|
|
586
681
|
value: 0n,
|
|
587
682
|
callData: delegateInterface.encodeFunctionData('executeBuy', [
|
|
588
|
-
routerAddress,
|
|
589
|
-
WOKB_ADDRESS,
|
|
590
|
-
tokenAddress,
|
|
591
|
-
fee,
|
|
592
|
-
amount,
|
|
683
|
+
routerAddress, WOKB_ADDRESS, tokenAddress, fee, amount
|
|
593
684
|
]),
|
|
594
685
|
};
|
|
595
686
|
}
|
|
@@ -604,15 +695,13 @@ tokenAddress, sellPercent, tokenDecimals, poolType, routerAddress, fee, delegate
|
|
|
604
695
|
// ✅ 使用 swapExactInput 卖出(与 AA 模式保持一致)
|
|
605
696
|
// 注意:inputAmount=0 会失败,FLAP 需要先获取余额再调用
|
|
606
697
|
// 这里需要传入实际的代币余额,外层调用者应该提前查询
|
|
607
|
-
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
|
|
608
|
-
{
|
|
698
|
+
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
|
|
609
699
|
inputToken: tokenAddress,
|
|
610
700
|
outputToken: ethers.ZeroAddress, // 0x0 = OKB
|
|
611
701
|
inputAmount: 1n, // 占位符,如果调用 buildSellCall 时不指定 amount,通常意味逻辑上有问题
|
|
612
702
|
minOutputAmount: 0n,
|
|
613
703
|
permitData: '0x',
|
|
614
|
-
}
|
|
615
|
-
]);
|
|
704
|
+
}]);
|
|
616
705
|
const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: 0n, data: portalCallData }];
|
|
617
706
|
return {
|
|
618
707
|
target: wallet.address,
|
|
@@ -628,11 +717,7 @@ tokenAddress, sellPercent, tokenDecimals, poolType, routerAddress, fee, delegate
|
|
|
628
717
|
target: wallet.address,
|
|
629
718
|
allowFailure: false,
|
|
630
719
|
value: 0n,
|
|
631
|
-
callData: delegateInterface.encodeFunctionData('executeSellV2', [
|
|
632
|
-
routerAddress,
|
|
633
|
-
path,
|
|
634
|
-
sellPercent === 100 ? 0 : amount,
|
|
635
|
-
]),
|
|
720
|
+
callData: delegateInterface.encodeFunctionData('executeSellV2', [routerAddress, path, sellPercent === 100 ? 0 : amount]),
|
|
636
721
|
};
|
|
637
722
|
}
|
|
638
723
|
case 'V3': {
|
|
@@ -642,11 +727,7 @@ tokenAddress, sellPercent, tokenDecimals, poolType, routerAddress, fee, delegate
|
|
|
642
727
|
allowFailure: false,
|
|
643
728
|
value: 0n,
|
|
644
729
|
callData: delegateInterface.encodeFunctionData('executeSell', [
|
|
645
|
-
routerAddress,
|
|
646
|
-
tokenAddress,
|
|
647
|
-
WOKB_ADDRESS,
|
|
648
|
-
fee,
|
|
649
|
-
sellPercent === 100 ? 0 : amount,
|
|
730
|
+
routerAddress, tokenAddress, WOKB_ADDRESS, fee, sellPercent === 100 ? 0 : amount
|
|
650
731
|
]),
|
|
651
732
|
};
|
|
652
733
|
}
|
|
@@ -656,15 +737,13 @@ function buildSellCallWithAmount(wallet, amount, tokenAddress, poolType, routerA
|
|
|
656
737
|
switch (poolType) {
|
|
657
738
|
case 'FLAP': {
|
|
658
739
|
// ✅ 使用 swapExactInput 卖出(与 AA 模式保持一致)
|
|
659
|
-
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
|
|
660
|
-
{
|
|
740
|
+
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
|
|
661
741
|
inputToken: tokenAddress,
|
|
662
742
|
outputToken: ethers.ZeroAddress, // 0x0 = OKB
|
|
663
743
|
inputAmount: amount,
|
|
664
744
|
minOutputAmount: 0n,
|
|
665
745
|
permitData: '0x',
|
|
666
|
-
}
|
|
667
|
-
]);
|
|
746
|
+
}]);
|
|
668
747
|
const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: 0n, data: portalCallData }];
|
|
669
748
|
return {
|
|
670
749
|
target: wallet.address,
|
|
@@ -688,11 +767,7 @@ function buildSellCallWithAmount(wallet, amount, tokenAddress, poolType, routerA
|
|
|
688
767
|
allowFailure: false,
|
|
689
768
|
value: 0n,
|
|
690
769
|
callData: delegateInterface.encodeFunctionData('executeSell', [
|
|
691
|
-
routerAddress,
|
|
692
|
-
tokenAddress,
|
|
693
|
-
WOKB_ADDRESS,
|
|
694
|
-
fee,
|
|
695
|
-
amount,
|
|
770
|
+
routerAddress, tokenAddress, WOKB_ADDRESS, fee, amount
|
|
696
771
|
]),
|
|
697
772
|
};
|
|
698
773
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* ⚠️ 通用常量请使用 shared/constants,此文件仅包含 XLayer 特有的配置
|
|
8
8
|
*/
|
|
9
|
-
import { CHAINS, ADDRESSES, GAS_LIMITS, GAS_CONFIG, ZERO_ADDRESS as SHARED_ZERO_ADDRESS
|
|
9
|
+
import { CHAINS, ADDRESSES, GAS_LIMITS, GAS_CONFIG, ZERO_ADDRESS as SHARED_ZERO_ADDRESS } from '../../../shared/constants/index.js';
|
|
10
10
|
// ============================================================================
|
|
11
11
|
// 从 shared/constants 重新导出(向后兼容)
|
|
12
12
|
// ============================================================================
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* XLayer AA DEX 工具函数
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { PROFIT_CONFIG } from '../../../utils/constants.js';
|
|
5
5
|
export function getDexDeadline(minutes = 20) {
|
|
6
6
|
return Math.floor(Date.now() / 1000) + minutes * 60;
|
|
7
7
|
}
|
|
@@ -14,9 +14,9 @@ export function calculateProfitWei(amountWei, profitBps) {
|
|
|
14
14
|
}
|
|
15
15
|
export function resolveProfitSettings(config) {
|
|
16
16
|
const extractProfit = config?.extractProfit !== false;
|
|
17
|
-
const profitBpsRaw = config?.profitBps ??
|
|
18
|
-
const profitBps = Math.max(0, Math.min(
|
|
19
|
-
const profitRecipient = config?.profitRecipient ??
|
|
17
|
+
const profitBpsRaw = config?.profitBps ?? PROFIT_CONFIG.RATE_BPS_SWAP;
|
|
18
|
+
const profitBps = Math.max(0, Math.min(10000, Number(profitBpsRaw)));
|
|
19
|
+
const profitRecipient = config?.profitRecipient ?? PROFIT_CONFIG.RECIPIENT;
|
|
20
20
|
return { extractProfit, profitBps, profitRecipient };
|
|
21
21
|
}
|
|
22
22
|
function shuffle(arr) {
|
|
@@ -36,7 +36,7 @@ export function splitAmount(totalAmount, count) {
|
|
|
36
36
|
return new Array(count).fill(0n);
|
|
37
37
|
const weights = [];
|
|
38
38
|
for (let i = 0; i < count; i++) {
|
|
39
|
-
const w = BigInt(
|
|
39
|
+
const w = BigInt(500000 + Math.floor(Math.random() * 1000000));
|
|
40
40
|
weights.push(w);
|
|
41
41
|
}
|
|
42
42
|
const totalWeight = weights.reduce((a, b) => a + b, 0n);
|
|
@@ -1,4 +1,98 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* XLayer EOA 模式批量换手
|
|
3
|
+
*
|
|
4
|
+
* 专门为 XLayer 链设计,不影响 BSC 链的逻辑
|
|
5
|
+
* - 使用 PotatoSwap V3 Quoter
|
|
6
|
+
* - 使用 WOKB 作为 Wrapped Native Token
|
|
7
|
+
* - 支持多跳转账和利润刮取
|
|
8
|
+
*/
|
|
9
|
+
import { type GeneratedWallet } from '../../../utils/wallet.js';
|
|
10
|
+
export type UserType = 'v0' | 'v1';
|
|
11
|
+
export type SwapRouteType = 'v2' | 'v3-single' | 'v3-multi';
|
|
12
|
+
export interface V2RouteParams {
|
|
13
|
+
routeType: 'v2';
|
|
14
|
+
v2Path: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface V3SingleRouteParams {
|
|
17
|
+
routeType: 'v3-single';
|
|
18
|
+
v3TokenIn: string;
|
|
19
|
+
v3TokenOut: string;
|
|
20
|
+
v3Fee: number;
|
|
21
|
+
v2Path?: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface V3MultiRouteParams {
|
|
24
|
+
routeType: 'v3-multi';
|
|
25
|
+
v3LpAddresses: string[];
|
|
26
|
+
v3ExactTokenIn: string;
|
|
27
|
+
v2Path?: string[];
|
|
28
|
+
}
|
|
29
|
+
export type RouteParams = V2RouteParams | V3SingleRouteParams | V3MultiRouteParams;
|
|
30
|
+
export interface XLayerEoaSwapConfig {
|
|
31
|
+
rpcUrl: string;
|
|
32
|
+
gasLimit?: number | bigint;
|
|
33
|
+
gasLimitMultiplier?: number;
|
|
34
|
+
minGasPriceGwei?: number;
|
|
35
|
+
maxGasPriceGwei?: number;
|
|
36
|
+
txType?: 0 | 2;
|
|
37
|
+
reserveGasBNB?: number;
|
|
38
|
+
userType?: UserType;
|
|
39
|
+
bribeAmount?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface XLayerQuickBatchSwapParams {
|
|
42
|
+
sellerPrivateKey: string;
|
|
43
|
+
sellAmount?: string;
|
|
44
|
+
sellPercentage?: number;
|
|
45
|
+
buyerPrivateKeys: string[];
|
|
46
|
+
buyerRatios?: number[];
|
|
47
|
+
buyerAmounts?: string[];
|
|
48
|
+
tokenAddress: string;
|
|
49
|
+
routeParams: RouteParams;
|
|
50
|
+
config: XLayerEoaSwapConfig;
|
|
51
|
+
quoteToken?: string;
|
|
52
|
+
quoteTokenDecimals?: number;
|
|
53
|
+
disperseHopCount?: number;
|
|
54
|
+
startNonces?: number[];
|
|
55
|
+
}
|
|
56
|
+
export interface XLayerQuickBatchSwapResult {
|
|
57
|
+
signedTransactions: string[];
|
|
58
|
+
disperseHopWallets?: GeneratedWallet[];
|
|
59
|
+
profitHopWallets?: GeneratedWallet[];
|
|
60
|
+
metadata?: {
|
|
61
|
+
sellerAddress: string;
|
|
62
|
+
buyerAddresses: string[];
|
|
63
|
+
sellAmount: string;
|
|
64
|
+
estimatedOutput: string;
|
|
65
|
+
transferAmounts: string[];
|
|
66
|
+
profitAmount?: string;
|
|
67
|
+
useNativeToken: boolean;
|
|
68
|
+
disperseHopCount?: number;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export interface XLayerCrossSwapParams {
|
|
72
|
+
sellerPrivateKeys: string[];
|
|
73
|
+
sellAmounts: string[];
|
|
74
|
+
buyerPrivateKeys: string[];
|
|
75
|
+
tokenAddress: string;
|
|
76
|
+
routeParams: RouteParams;
|
|
77
|
+
config: XLayerEoaSwapConfig;
|
|
78
|
+
quoteToken?: string;
|
|
79
|
+
quoteTokenDecimals?: number;
|
|
80
|
+
buyersPerSell?: number;
|
|
81
|
+
disperseHopCount?: number;
|
|
82
|
+
/** ✅ 预获取的 nonce(地址 -> nonce),避免 nonce 不同步 */
|
|
83
|
+
startNonces?: Map<string, number>;
|
|
84
|
+
}
|
|
85
|
+
export interface XLayerCrossSwapResult {
|
|
86
|
+
signedTransactions: string[];
|
|
87
|
+
rounds: Array<{
|
|
88
|
+
sellerAddress: string;
|
|
89
|
+
buyerAddresses: string[];
|
|
90
|
+
sellAmount: string;
|
|
91
|
+
bundleHash?: string;
|
|
92
|
+
}>;
|
|
93
|
+
disperseHopWallets?: GeneratedWallet[];
|
|
94
|
+
profitHopWallets?: GeneratedWallet[];
|
|
95
|
+
}
|
|
2
96
|
export declare function xlayerQuickBatchSwapMerkle(params: XLayerQuickBatchSwapParams): Promise<XLayerQuickBatchSwapResult>;
|
|
3
97
|
export declare function xlayerCrossSwapMerkle(params: XLayerCrossSwapParams): Promise<XLayerCrossSwapResult>;
|
|
4
98
|
/**
|