four-flap-meme-sdk 2.2.2 → 2.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +41 -6
- package/README.md +31 -0
- package/README.zh-CN.md +41 -6
- package/dist/__tests__/subpath-exports.test.d.ts +1 -0
- package/dist/__tests__/subpath-exports.test.js +64 -0
- package/dist/abis/common.d.ts +85 -0
- package/dist/abis/common.js +264 -0
- package/dist/abis/contracts/TaxToken.json +969 -0
- package/dist/abis/contracts/TokenManager2.json +136 -0
- package/dist/abis/contracts/index.d.ts +5 -0
- package/dist/abis/contracts/index.js +5 -0
- package/dist/abis/flap/index.d.ts +3 -0
- package/dist/abis/flap/index.js +3 -0
- package/dist/abis/flap/portal-events.d.ts +6 -0
- package/dist/abis/flap/portal-events.js +17 -0
- package/dist/abis/flap/portal.d.ts +6 -0
- package/dist/abis/flap/portal.js +37 -0
- package/dist/abis/flap/vault.d.ts +171 -0
- package/dist/abis/flap/vault.js +91 -0
- package/dist/abis/index.d.ts +8 -0
- package/dist/abis/index.js +11 -0
- package/dist/bundle-core/__tests__/config-helpers.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
- package/dist/bundle-core/__tests__/facade-parity.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
- package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
- package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
- package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
- package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
- package/dist/bundle-core/config-helpers.d.ts +36 -0
- package/dist/bundle-core/config-helpers.js +57 -0
- package/dist/bundle-core/errors.d.ts +50 -0
- package/dist/bundle-core/errors.js +35 -0
- package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
- package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
- package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
- package/dist/bundle-core/four-meme/core-helpers.js +40 -0
- package/dist/bundle-core/four-meme/core.d.ts +4 -0
- package/dist/bundle-core/four-meme/core.js +515 -0
- package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
- package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
- package/dist/bundle-core/four-meme/private.d.ts +27 -0
- package/dist/bundle-core/four-meme/private.js +465 -0
- package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
- package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
- package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
- package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
- package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
- package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
- package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
- package/dist/bundle-core/four-meme/swap-internal.js +18 -0
- package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
- package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
- package/dist/bundle-core/four-meme/swap.d.ts +17 -0
- package/dist/bundle-core/four-meme/swap.js +505 -0
- package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
- package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
- package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
- package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
- package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
- package/dist/bundle-core/four-meme/types/index.js +1 -0
- package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
- package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
- package/dist/bundle-core/four-meme/types.d.ts +1 -0
- package/dist/bundle-core/four-meme/types.js +1 -0
- package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
- package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
- package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
- package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
- package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
- package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
- package/dist/bundle-core/index.d.ts +8 -0
- package/dist/bundle-core/index.js +8 -0
- package/dist/bundle-core/internal.d.ts +21 -0
- package/dist/bundle-core/internal.js +182 -0
- package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
- package/dist/bundle-core/sign-context-helpers.js +67 -0
- package/dist/bundle-core/submit.d.ts +293 -0
- package/dist/bundle-core/submit.js +727 -0
- package/dist/bundle-core/types/index.d.ts +8 -0
- package/dist/bundle-core/types/index.js +1 -0
- package/dist/bundle-core/types.d.ts +1 -0
- package/dist/bundle-core/types.js +1 -0
- package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
- package/dist/chains/bsc/four/approve-tokenmanager.js +1 -113
- package/dist/chains/bsc/four/config.d.ts +5 -67
- package/dist/chains/bsc/four/config.js +2 -114
- package/dist/chains/bsc/four/core.d.ts +1 -4
- package/dist/chains/bsc/four/core.js +1 -592
- package/dist/chains/bsc/four/index.d.ts +6 -6
- package/dist/chains/bsc/four/index.js +6 -6
- package/dist/chains/bsc/four/internal.d.ts +2 -46
- package/dist/chains/bsc/four/internal.js +2 -239
- package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
- package/dist/chains/bsc/four/pancake-proxy.js +1 -687
- package/dist/chains/bsc/four/private.d.ts +1 -27
- package/dist/chains/bsc/four/private.js +1 -477
- package/dist/chains/bsc/four/submit.d.ts +2 -315
- package/dist/chains/bsc/four/submit.js +2 -752
- package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
- package/dist/chains/bsc/four/swap-buy-first.js +2 -507
- package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
- package/dist/chains/bsc/four/swap-internal.js +1 -18
- package/dist/chains/bsc/four/swap.d.ts +2 -144
- package/dist/chains/bsc/four/swap.js +2 -766
- package/dist/chains/bsc/four/types.d.ts +1 -476
- package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
- package/dist/chains/bsc/four/utils-disperse.js +1 -0
- package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
- package/dist/chains/bsc/four/utils-pairwise.js +1 -0
- package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
- package/dist/chains/bsc/four/utils-sweep.js +1 -0
- package/dist/chains/bsc/four/utils.d.ts +5 -18
- package/dist/chains/bsc/four/utils.js +5 -1552
- package/dist/chains/bsc/iro.d.ts +5 -0
- package/dist/chains/bsc/iro.js +4 -0
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
- package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
- package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -212
- package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
- package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
- package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
- package/dist/chains/bsc/pancake/bundle-swap.js +114 -726
- package/dist/chains/bsc/pancake/index.d.ts +4 -2
- package/dist/chains/bsc/pancake/index.js +1 -3
- package/dist/chains/bsc/platforms/iro/factory.d.ts +2 -2
- package/dist/chains/bsc/platforms/iro/factory.js +3 -1
- package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
- package/dist/chains/bsc/platforms/iro/index.js +3 -3
- package/dist/chains/bsc/platforms/iro/pool.js +31 -10
- package/dist/chains/bsc/platforms/iro/token.js +4 -1
- package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
- package/dist/chains/eni/batch-router/transfer.js +55 -25
- package/dist/chains/eni/batch-router/utils.js +32 -6
- package/dist/chains/eni/bundler/sign.js +5 -6
- package/dist/chains/eni/bundler/submit.js +1 -4
- package/dist/chains/eni/constants.js +1 -1
- package/dist/chains/eni/flat-aliases.d.ts +10 -0
- package/dist/chains/eni/flat-aliases.js +8 -0
- package/dist/chains/eni/index.d.ts +2 -1
- package/dist/chains/eni/index.js +1 -0
- 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 +9 -6
- package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -44
- package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
- package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
- package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
- package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
- package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -46
- package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
- package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
- package/dist/chains/eni/platforms/iro/factory.d.ts +2 -2
- package/dist/chains/eni/platforms/iro/factory.js +3 -1
- package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
- package/dist/chains/eni/platforms/iro/index.js +4 -4
- package/dist/chains/eni/platforms/iro/pool.js +90 -26
- package/dist/chains/eni/platforms/iro/token.js +107 -31
- package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
- package/dist/chains/eni/submit.d.ts +43 -0
- package/dist/chains/eni/submit.js +286 -0
- package/dist/chains/index.d.ts +13 -0
- package/dist/chains/index.js +13 -0
- package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
- package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -21
- package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
- package/dist/chains/xlayer/eip7702/bundle-create.js +93 -59
- package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-sell.js +29 -111
- package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
- package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -245
- package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
- package/dist/chains/xlayer/eip7702/constants.js +3 -21
- package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +13 -0
- package/dist/chains/xlayer/eip7702/flat-aliases.js +10 -0
- package/dist/chains/xlayer/eip7702/index.d.ts +28 -46
- package/dist/chains/xlayer/eip7702/index.js +28 -81
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +63 -307
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
- package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
- package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
- package/dist/chains/xlayer/eip7702/utils.js +23 -28
- package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
- package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
- package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
- package/dist/chains/xlayer/eip7702/volume.js +89 -164
- package/dist/chains/xlayer/eoa/constants.js +1 -1
- package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +66 -299
- package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
- package/dist/chains/xlayer/eoa/eoa-wash-volume.js +18 -23
- package/dist/chains/xlayer/eoa/index.d.ts +10 -6
- package/dist/chains/xlayer/eoa/index.js +8 -23
- package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
- package/dist/chains/xlayer/eoa/router-manager.js +3 -3
- package/dist/chains/xlayer/eoa/types.d.ts +2 -2
- package/dist/chains/xlayer/eoa/types.js +1 -3
- package/dist/chains/xlayer/index.d.ts +3 -2
- package/dist/chains/xlayer/index.js +4 -7
- package/dist/contracts/helper3.d.ts +20 -5
- package/dist/contracts/helper3.js +56 -20
- package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
- package/dist/contracts/tm-bundle-helpers.js +72 -0
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -113
- package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -67
- package/dist/contracts/tm-bundle-merkle/config.js +2 -114
- package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
- package/dist/contracts/tm-bundle-merkle/core.js +1 -591
- package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
- package/dist/contracts/tm-bundle-merkle/index.js +5 -5
- package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -46
- package/dist/contracts/tm-bundle-merkle/internal.js +2 -238
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -686
- package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
- package/dist/contracts/tm-bundle-merkle/private.js +1 -476
- package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
- package/dist/contracts/tm-bundle-merkle/submit.js +3 -928
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -506
- package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
- package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
- package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
- package/dist/contracts/tm-bundle-merkle/swap.js +2 -764
- package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
- package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
- package/dist/contracts/tm-bundle-merkle/utils.d.ts +6 -18
- package/dist/contracts/tm-bundle-merkle/utils.js +6 -1501
- package/dist/contracts/tm-bundle.d.ts +3 -51
- package/dist/contracts/tm-bundle.js +108 -177
- package/dist/contracts/tm.d.ts +3 -2
- package/dist/contracts/tm.js +37 -32
- package/dist/contracts/tm1.js +9 -4
- package/dist/contracts/tm2.js +9 -4
- package/dist/dex/direct-router-helpers.d.ts +264 -0
- package/dist/dex/direct-router-helpers.js +539 -0
- package/dist/dex/direct-router.d.ts +3 -125
- package/dist/dex/direct-router.js +237 -666
- package/dist/dex/types.d.ts +81 -0
- package/dist/dex/types.js +1 -0
- package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
- package/dist/exports/root-bundle-and-tooling.js +30 -0
- package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
- package/dist/exports/root-eni-and-bsc-iro.js +66 -0
- package/dist/exports/root-foundations.d.ts +35 -0
- package/dist/exports/root-foundations.js +70 -0
- package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
- package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
- package/dist/flap/index.d.ts +10 -0
- package/dist/flap/index.js +8 -0
- package/dist/flows/create.d.ts +2 -1
- package/dist/flows/create.js +6 -6
- package/dist/flows/index.d.ts +1 -0
- package/dist/flows/index.js +1 -0
- package/dist/index.d.ts +20 -85
- package/dist/index.js +20 -215
- package/dist/merkle/index.d.ts +12 -0
- package/dist/merkle/index.js +11 -0
- package/dist/shared/abis/common.d.ts +2 -83
- package/dist/shared/abis/common.js +2 -252
- package/dist/shared/abis/index.d.ts +5 -6
- package/dist/shared/abis/index.js +5 -7
- package/dist/shared/clients/blockrazor.js +39 -25
- package/dist/shared/clients/club48.d.ts +2 -2
- package/dist/shared/clients/club48.js +34 -29
- package/dist/shared/clients/emitservice.js +2 -0
- package/dist/shared/clients/four.d.ts +21 -6
- package/dist/shared/clients/four.js +29 -24
- package/dist/shared/clients/index.d.ts +8 -0
- package/dist/shared/clients/index.js +8 -0
- package/dist/shared/clients/merkle.js +27 -34
- package/dist/shared/constants/addresses.d.ts +1 -1
- package/dist/shared/constants/addresses.js +11 -2
- package/dist/shared/constants/chains.d.ts +1 -1
- package/dist/shared/constants/chains.js +1 -1
- package/dist/shared/constants/gas.d.ts +1 -1
- package/dist/shared/constants/gas.js +2 -6
- package/dist/shared/constants/index.d.ts +3 -0
- package/dist/shared/constants/index.js +1 -0
- package/dist/shared/constants/quote.d.ts +30 -0
- package/dist/shared/constants/quote.js +37 -0
- package/dist/shared/flap/abi.js +1 -1
- package/dist/shared/flap/constants.d.ts +1 -2
- package/dist/shared/flap/constants.js +2 -3
- package/dist/shared/flap/curve.js +3 -0
- package/dist/shared/flap/errors.d.ts +1 -4
- package/dist/shared/flap/errors.js +20 -1
- package/dist/shared/flap/index.d.ts +5 -4
- package/dist/shared/flap/index.js +5 -4
- package/dist/shared/flap/meta.d.ts +22 -18
- package/dist/shared/flap/meta.js +12 -17
- package/dist/shared/flap/permit.js +5 -2
- package/dist/shared/flap/pinata.d.ts +22 -6
- package/dist/shared/flap/pinata.js +21 -26
- package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
- package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
- package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
- package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
- package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
- package/dist/shared/flap/portal-bundle-merkle/core.js +96 -277
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.d.ts +7 -2
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +107 -206
- package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
- package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
- package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
- package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
- package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
- package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
- package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
- package/dist/shared/flap/portal-bundle-merkle/types.d.ts +88 -9
- package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
- package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
- package/dist/shared/flap/portal-bundle.js +55 -56
- package/dist/shared/flap/portal-create-token.d.ts +80 -0
- package/dist/shared/flap/portal-create-token.js +257 -0
- package/dist/shared/flap/portal.d.ts +14 -3
- package/dist/shared/flap/portal.js +50 -25
- package/dist/shared/flap/vanity.d.ts +1 -5
- package/dist/shared/flap/vanity.js +6 -17
- package/dist/shared/flap/vault.d.ts +17 -124
- package/dist/shared/flap/vault.js +67 -148
- package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
- package/dist/shared/foundation/dex/v3-path.js +35 -0
- package/dist/shared/foundation/gas/bundle-gas.d.ts +49 -0
- package/dist/shared/foundation/gas/bundle-gas.js +93 -0
- package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
- package/dist/shared/foundation/gas/profit-hop.js +72 -0
- package/dist/shared/foundation/index.d.ts +13 -0
- package/dist/shared/foundation/index.js +12 -0
- package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
- package/dist/shared/foundation/nonce/nonce-manager.js +183 -0
- package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
- package/dist/shared/foundation/normalize-unknown.js +29 -0
- package/dist/shared/foundation/sdk-logger.d.ts +13 -0
- package/dist/shared/foundation/sdk-logger.js +12 -0
- package/dist/shared/foundation/tx/build-request.d.ts +17 -0
- package/dist/shared/foundation/tx/build-request.js +25 -0
- package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
- package/dist/shared/foundation/tx/sign-batch.js +26 -0
- package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
- package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
- package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
- package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
- package/dist/shared/foundation/types/erc20.d.ts +65 -0
- package/dist/shared/foundation/types/erc20.js +1 -0
- package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
- package/dist/shared/foundation/types/holders-maker.js +1 -0
- package/dist/shared/foundation/types/index.d.ts +7 -0
- package/dist/shared/foundation/types/index.js +1 -0
- package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
- package/dist/shared/foundation/types/lp-inspect.js +1 -0
- package/dist/shared/foundation/types/multicall.d.ts +5 -0
- package/dist/shared/foundation/types/multicall.js +1 -0
- package/dist/shared/foundation/types/private-sale.d.ts +35 -0
- package/dist/shared/foundation/types/private-sale.js +1 -0
- package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
- package/dist/shared/foundation/types/quote-helpers.js +1 -0
- package/dist/shared/four/tax-token.d.ts +1 -1
- package/dist/shared/four/tax-token.js +27 -7
- package/dist/shared/index.d.ts +6 -0
- package/dist/shared/index.js +4 -0
- package/dist/types/errors.d.ts +27 -0
- package/dist/types/errors.js +34 -0
- package/dist/utils/airdrop-sweep.d.ts +4 -76
- package/dist/utils/airdrop-sweep.js +42 -55
- package/dist/utils/bundle-helpers.d.ts +9 -243
- package/dist/utils/bundle-helpers.js +10 -584
- package/dist/utils/constants.d.ts +5 -61
- package/dist/utils/constants.js +5 -80
- package/dist/utils/contract-factory.d.ts +2 -4
- package/dist/utils/contract-factory.js +25 -18
- package/dist/utils/erc20.d.ts +7 -89
- package/dist/utils/erc20.js +94 -125
- package/dist/utils/errors.d.ts +12 -1
- package/dist/utils/errors.js +60 -1
- package/dist/utils/holders-maker/addresses.d.ts +12 -0
- package/dist/utils/holders-maker/addresses.js +15 -0
- package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
- package/dist/utils/holders-maker/buy-tx.js +278 -0
- package/dist/utils/holders-maker/constants.d.ts +6 -0
- package/dist/utils/holders-maker/constants.js +7 -0
- package/dist/utils/holders-maker/disperse.d.ts +18 -0
- package/dist/utils/holders-maker/disperse.js +90 -0
- package/dist/utils/holders-maker/routing.d.ts +4 -0
- package/dist/utils/holders-maker/routing.js +45 -0
- package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
- package/dist/utils/holders-maker/transfer-tx.js +67 -0
- package/dist/utils/holders-maker-helpers.d.ts +9 -0
- package/dist/utils/holders-maker-helpers.js +9 -0
- package/dist/utils/holders-maker.d.ts +2 -138
- package/dist/utils/holders-maker.js +26 -661
- package/dist/utils/hop-chains.d.ts +35 -0
- package/dist/utils/hop-chains.js +215 -0
- package/dist/utils/lp-inspect-helpers.d.ts +9 -0
- package/dist/utils/lp-inspect-helpers.js +109 -0
- package/dist/utils/lp-inspect.d.ts +2 -112
- package/dist/utils/lp-inspect.js +73 -223
- package/dist/utils/mpcExclusive.d.ts +2 -5
- package/dist/utils/mpcExclusive.js +4 -3
- package/dist/utils/private-sale.d.ts +2 -58
- package/dist/utils/private-sale.js +4 -15
- package/dist/utils/provider-factory.d.ts +4 -0
- package/dist/utils/provider-factory.js +10 -0
- package/dist/utils/quote-helpers.d.ts +4 -45
- package/dist/utils/quote-helpers.js +17 -74
- package/dist/utils/stealth-transfer.d.ts +2 -28
- package/dist/utils/stealth-transfer.js +31 -15
- package/dist/utils/swap-helpers.d.ts +2 -15
- package/dist/utils/swap-helpers.js +6 -11
- package/dist/utils/types/airdrop-sweep.d.ts +1 -0
- package/dist/utils/types/airdrop-sweep.js +1 -0
- package/dist/utils/types/contract-factory.d.ts +1 -0
- package/dist/utils/types/contract-factory.js +1 -0
- package/dist/utils/types/erc20.d.ts +1 -0
- package/dist/utils/types/erc20.js +1 -0
- package/dist/utils/types/errors.d.ts +1 -0
- package/dist/utils/types/errors.js +1 -0
- package/dist/utils/types/holders-maker.d.ts +1 -0
- package/dist/utils/types/holders-maker.js +1 -0
- package/dist/utils/types/hop-chains.d.ts +8 -0
- package/dist/utils/types/hop-chains.js +1 -0
- package/dist/utils/types/index.d.ts +13 -0
- package/dist/utils/types/index.js +1 -0
- package/dist/utils/types/lp-inspect.d.ts +1 -0
- package/dist/utils/types/lp-inspect.js +1 -0
- package/dist/utils/types/mpc-exclusive.d.ts +5 -0
- package/dist/utils/types/mpc-exclusive.js +1 -0
- package/dist/utils/types/private-sale.d.ts +1 -0
- package/dist/utils/types/private-sale.js +1 -0
- package/dist/utils/types/quote-helpers.d.ts +1 -0
- package/dist/utils/types/quote-helpers.js +1 -0
- package/dist/utils/types/stealth-transfer.d.ts +44 -0
- package/dist/utils/types/stealth-transfer.js +1 -0
- package/dist/utils/types/wallet.d.ts +25 -0
- package/dist/utils/types/wallet.js +1 -0
- package/dist/utils/wallet.d.ts +2 -25
- package/dist/utils/wallet.js +13 -10
- package/dist/vanity/index.d.ts +5 -0
- package/dist/vanity/index.js +5 -0
- package/package.json +160 -4
- package/src/abis/contracts/TaxToken.json +969 -0
- package/src/abis/contracts/TokenManager.json +836 -0
- package/src/abis/contracts/TokenManager2.json +136 -0
- package/src/abis/contracts/TokenManagerHelper3.json +993 -0
- package/dist/shared/abis/TaxToken.json +0 -105
- package/dist/shared/abis/TokenManager2.json +0 -60
- /package/dist/{shared/abis → abis/contracts}/TokenManager.json +0 -0
- /package/dist/{shared/abis → abis/contracts}/TokenManagerHelper3.json +0 -0
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
* 支持 FLAP 内盘、V2 和 V3 三种交易类型
|
|
10
10
|
* 只生成签名,由调用方决定如何提交
|
|
11
11
|
*/
|
|
12
|
-
import { ethers, Contract
|
|
12
|
+
import { ethers, Contract } 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,
|
|
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';
|
|
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 = getCachedProvider(rpcUrl || XLAYER_RPC_URL);
|
|
54
54
|
try {
|
|
55
55
|
switch (tradeType) {
|
|
56
56
|
case 'FLAP': {
|
|
@@ -63,25 +63,22 @@ 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`);
|
|
67
66
|
return BigInt(okbOut.toString());
|
|
68
67
|
}
|
|
69
|
-
catch
|
|
70
|
-
|
|
68
|
+
catch {
|
|
69
|
+
// fallback to previewSell
|
|
71
70
|
}
|
|
72
71
|
// 回退到 previewSell
|
|
73
72
|
try {
|
|
74
73
|
const okbOut = await portalContract.previewSell(tokenAddress, sellAmount);
|
|
75
|
-
console.log(`[Bundle Swap] FLAP previewSell 成功: ${ethers.formatEther(okbOut)} OKB`);
|
|
76
74
|
return BigInt(okbOut.toString());
|
|
77
75
|
}
|
|
78
76
|
catch {
|
|
79
|
-
|
|
77
|
+
// fallback to V2
|
|
80
78
|
}
|
|
81
79
|
// 回退到 V2
|
|
82
80
|
const v2Result = await quoteV2(provider, tokenAddress, WOKB_ADDRESS, sellAmount, 'XLAYER');
|
|
83
81
|
if (v2Result.amountOut > 0n) {
|
|
84
|
-
console.log(`[Bundle Swap] FLAP 回退 V2 报价成功: ${ethers.formatEther(v2Result.amountOut)} OKB`);
|
|
85
82
|
return v2Result.amountOut;
|
|
86
83
|
}
|
|
87
84
|
break;
|
|
@@ -89,7 +86,6 @@ async function quoteSellOutput(sellAmount, tokenAddress, tradeType, fee, rpcUrl)
|
|
|
89
86
|
case 'V2': {
|
|
90
87
|
const result = await quoteV2(provider, tokenAddress, WOKB_ADDRESS, sellAmount, 'XLAYER');
|
|
91
88
|
if (result.amountOut > 0n) {
|
|
92
|
-
console.log(`[Bundle Swap] V2 报价成功: ${ethers.formatEther(result.amountOut)} OKB`);
|
|
93
89
|
return result.amountOut;
|
|
94
90
|
}
|
|
95
91
|
break;
|
|
@@ -97,199 +93,22 @@ async function quoteSellOutput(sellAmount, tokenAddress, tradeType, fee, rpcUrl)
|
|
|
97
93
|
case 'V3': {
|
|
98
94
|
const result = await quoteV3(provider, tokenAddress, WOKB_ADDRESS, sellAmount, 'XLAYER', fee);
|
|
99
95
|
if (result.amountOut > 0n) {
|
|
100
|
-
console.log(`[Bundle Swap] V3 报价成功 (fee=${result.fee}): ${ethers.formatEther(result.amountOut)} OKB`);
|
|
101
96
|
return result.amountOut;
|
|
102
97
|
}
|
|
103
98
|
// 回退到 V2
|
|
104
99
|
const v2Result = await quoteV2(provider, tokenAddress, WOKB_ADDRESS, sellAmount, 'XLAYER');
|
|
105
100
|
if (v2Result.amountOut > 0n) {
|
|
106
|
-
console.log(`[Bundle Swap] V3 回退 V2 报价成功: ${ethers.formatEther(v2Result.amountOut)} OKB`);
|
|
107
101
|
return v2Result.amountOut;
|
|
108
102
|
}
|
|
109
103
|
break;
|
|
110
104
|
}
|
|
111
105
|
}
|
|
112
106
|
}
|
|
113
|
-
catch
|
|
114
|
-
|
|
107
|
+
catch {
|
|
108
|
+
// quote failed, return 0
|
|
115
109
|
}
|
|
116
|
-
console.warn(`[Bundle Swap] 无法获取报价,利润计算可能不准确`);
|
|
117
110
|
return 0n;
|
|
118
111
|
}
|
|
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
|
-
*/
|
|
293
112
|
export async function bundleSwap(params) {
|
|
294
113
|
const { sellerPrivateKey, buyerPrivateKey, tokenAddress, tokenDecimals = 18, sellAmount, hopCount = 0, tradeType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, userType = 'v0', useFundUtilization = false, // ✅ 默认普通模式
|
|
295
114
|
config, } = params;
|
|
@@ -306,25 +125,15 @@ export async function bundleSwap(params) {
|
|
|
306
125
|
// 资金利用率模式才需要中间钱包
|
|
307
126
|
const actualHopCount = useFundUtilization ? hopCount : 0;
|
|
308
127
|
const hopWalletInfos = actualHopCount > 0 ? generateRandomWallets(actualHopCount) : [];
|
|
309
|
-
const hopWallets = hopWalletInfos.map(info => createWallet(info.privateKey, provider));
|
|
128
|
+
const hopWallets = hopWalletInfos.map((info) => createWallet(info.privateKey, provider));
|
|
310
129
|
const sellAmountWei = ethers.parseUnits(truncateDecimals(sellAmount, tokenDecimals), tokenDecimals);
|
|
311
130
|
// 获取卖出报价
|
|
312
131
|
const estimatedOkbOut = await quoteSellOutput(sellAmountWei, tokenAddress, tradeType, fee, config?.rpcUrl);
|
|
313
132
|
// 使用双边费率计算利润(换手 = 卖 + 买)
|
|
314
|
-
const profitAmount = estimatedOkbOut > 0n
|
|
315
|
-
? calculateProfitAmountByUserType(estimatedOkbOut, userType, true)
|
|
316
|
-
: 0n;
|
|
133
|
+
const profitAmount = estimatedOkbOut > 0n ? calculateProfitAmountByUserType(estimatedOkbOut, userType, true) : 0n;
|
|
317
134
|
const profitRecipient = getProfitRecipient(config);
|
|
318
135
|
// 计算买入金额
|
|
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`);
|
|
136
|
+
const buyAmountAfterProfit = estimatedOkbOut > profitAmount ? estimatedOkbOut - profitAmount : 0n;
|
|
328
137
|
// ========================================
|
|
329
138
|
// 并行获取数据
|
|
330
139
|
// ========================================
|
|
@@ -374,7 +183,6 @@ export async function bundleSwap(params) {
|
|
|
374
183
|
// 4. 分发者按比例转账给买家
|
|
375
184
|
// 5. 买家买入
|
|
376
185
|
// ========================================
|
|
377
|
-
console.log(`[Bundle Swap] 资金利用率模式,hopCount=${actualHopCount}`);
|
|
378
186
|
// 1. 卖家卖出
|
|
379
187
|
const sellCall = buildSellCallWithAmountInternal(sellerWallet, sellAmountWei, tokenAddress, tradeType, actualRouter, fee, delegateInterface, portalInterface);
|
|
380
188
|
calls.push(sellCall);
|
|
@@ -427,7 +235,6 @@ export async function bundleSwap(params) {
|
|
|
427
235
|
// 2. 买家用自己预存的 OKB 买入代币
|
|
428
236
|
// 3. 利润从买家的 OKB 中扣除
|
|
429
237
|
// ========================================
|
|
430
|
-
console.log(`[Bundle Swap] 普通模式`);
|
|
431
238
|
// 1. 卖家卖出(OKB 留在卖家账户)
|
|
432
239
|
const sellCall = buildSellCallWithAmountInternal(sellerWallet, sellAmountWei, tokenAddress, tradeType, actualRouter, fee, delegateInterface, portalInterface);
|
|
433
240
|
calls.push(sellCall);
|
|
@@ -492,28 +299,18 @@ export async function bundleBatchSwap(params) {
|
|
|
492
299
|
// 创建钱包
|
|
493
300
|
// ========================================
|
|
494
301
|
const sellerWallet = createWallet(sellerPrivateKey, provider);
|
|
495
|
-
const buyerWallets = buyerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
302
|
+
const buyerWallets = buyerPrivateKeys.map((pk) => createWallet(pk, provider));
|
|
496
303
|
// 资金利用率模式才需要中间钱包
|
|
497
304
|
const actualHopCount = useFundUtilization ? hopCount : 0;
|
|
498
305
|
const hopWalletInfos = actualHopCount > 0 ? generateRandomWallets(actualHopCount) : [];
|
|
499
|
-
const hopWallets = hopWalletInfos.map(info => createWallet(info.privateKey, provider));
|
|
306
|
+
const hopWallets = hopWalletInfos.map((info) => createWallet(info.privateKey, provider));
|
|
500
307
|
const sellAmountWei = ethers.parseUnits(truncateDecimals(sellAmount, tokenDecimals), tokenDecimals);
|
|
501
308
|
// 获取卖出报价
|
|
502
309
|
const estimatedOkbOut = await quoteSellOutput(sellAmountWei, tokenAddress, tradeType, fee, config?.rpcUrl);
|
|
503
310
|
// 计算利润和买入金额
|
|
504
|
-
const profitAmount = estimatedOkbOut > 0n
|
|
505
|
-
? calculateProfitAmountByUserType(estimatedOkbOut, userType, true)
|
|
506
|
-
: 0n;
|
|
311
|
+
const profitAmount = estimatedOkbOut > 0n ? calculateProfitAmountByUserType(estimatedOkbOut, userType, true) : 0n;
|
|
507
312
|
const profitRecipient = getProfitRecipient(config);
|
|
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`);
|
|
313
|
+
const totalBuyAmountAfterProfit = estimatedOkbOut > profitAmount ? estimatedOkbOut - profitAmount : 0n;
|
|
517
314
|
// 验证报价
|
|
518
315
|
if (tradeType === 'FLAP' && totalBuyAmountAfterProfit <= 0n) {
|
|
519
316
|
throw new Error('FLAP 内盘模式需要有效的报价,请检查代币地址或稍后重试');
|
|
@@ -521,11 +318,11 @@ export async function bundleBatchSwap(params) {
|
|
|
521
318
|
// ========================================
|
|
522
319
|
// 并行获取数据
|
|
523
320
|
// ========================================
|
|
524
|
-
const addressesToQuery = [sellerWallet.address, ...buyerWallets.map(w => w.address)];
|
|
321
|
+
const addressesToQuery = [sellerWallet.address, ...buyerWallets.map((w) => w.address)];
|
|
525
322
|
const [nonces, feeData, ...buyerBalances] = await Promise.all([
|
|
526
323
|
batchGetNonces(addressesToQuery, provider),
|
|
527
324
|
provider.getFeeData(),
|
|
528
|
-
...buyerWallets.map(w => provider.getBalance(w.address)),
|
|
325
|
+
...buyerWallets.map((w) => provider.getBalance(w.address)),
|
|
529
326
|
]);
|
|
530
327
|
const sellerNonce = nonces[0];
|
|
531
328
|
const buyerNonces = nonces.slice(1);
|
|
@@ -578,7 +375,6 @@ export async function bundleBatchSwap(params) {
|
|
|
578
375
|
const remainder = totalBuyAmountAfterProfit % BigInt(buyerWallets.length);
|
|
579
376
|
buyAmountsPerBuyer = buyerWallets.map((_, i) => i === buyerWallets.length - 1 ? avgAmount + remainder : avgAmount);
|
|
580
377
|
}
|
|
581
|
-
console.log(`[bundleBatchSwap] 买入金额分配:`, buyAmountsPerBuyer.map(a => ethers.formatEther(a)));
|
|
582
378
|
if (useFundUtilization) {
|
|
583
379
|
// ========================================
|
|
584
380
|
// ✅ 资金利用率模式(一卖多买)
|
|
@@ -587,7 +383,6 @@ export async function bundleBatchSwap(params) {
|
|
|
587
383
|
// 3. 卖家(或最后一个 hop)按比例转账给各买家
|
|
588
384
|
// 4. 各买家用收到的 OKB 买入
|
|
589
385
|
// ========================================
|
|
590
|
-
console.log(`[Bundle Batch Swap] 资金利用率模式,hopCount=${actualHopCount}`);
|
|
591
386
|
// 1. 卖家卖出
|
|
592
387
|
const sellCall = buildSellCallWithAmountInternal(sellerWallet, sellAmountWei, tokenAddress, tradeType, actualRouter, fee, delegateInterface, portalInterface);
|
|
593
388
|
calls.push(sellCall);
|
|
@@ -610,7 +405,10 @@ export async function bundleBatchSwap(params) {
|
|
|
610
405
|
target: sellerWallet.address,
|
|
611
406
|
allowFailure: false,
|
|
612
407
|
value: 0n,
|
|
613
|
-
callData: delegateInterface.encodeFunctionData('transferAmount', [
|
|
408
|
+
callData: delegateInterface.encodeFunctionData('transferAmount', [
|
|
409
|
+
hopWallets[0].address,
|
|
410
|
+
totalBuyAmountAfterProfit,
|
|
411
|
+
]),
|
|
614
412
|
});
|
|
615
413
|
// 中间钱包之间转账(到最后一个 hop):使用 transferTo(全部余额)
|
|
616
414
|
for (let i = 0; i < hopWallets.length - 1; i++) {
|
|
@@ -651,7 +449,6 @@ export async function bundleBatchSwap(params) {
|
|
|
651
449
|
// 2. 利润从第一个买家 OKB 中扣除
|
|
652
450
|
// 3. 各买家用自己预存的 OKB 买入
|
|
653
451
|
// ========================================
|
|
654
|
-
console.log(`[Bundle Batch Swap] 普通模式`);
|
|
655
452
|
// 1. 卖家卖出(OKB 留在卖家账户)
|
|
656
453
|
const sellCall = buildSellCallWithAmountInternal(sellerWallet, sellAmountWei, tokenAddress, tradeType, actualRouter, fee, delegateInterface, portalInterface);
|
|
657
454
|
calls.push(sellCall);
|
|
@@ -679,7 +476,7 @@ export async function bundleBatchSwap(params) {
|
|
|
679
476
|
hopWallets: hopWalletInfos,
|
|
680
477
|
metadata: {
|
|
681
478
|
sellerAddress: sellerWallet.address,
|
|
682
|
-
buyerAddresses: buyerWallets.map(w => w.address),
|
|
479
|
+
buyerAddresses: buyerWallets.map((w) => w.address),
|
|
683
480
|
sellAmount: ethers.formatUnits(sellAmountWei, tokenDecimals),
|
|
684
481
|
estimatedOkbOut: ethers.formatEther(estimatedOkbOut),
|
|
685
482
|
estimatedBuyAmount: ethers.formatEther(totalBuyAmountAfterProfit),
|
|
@@ -723,18 +520,15 @@ export async function bundleMultiSwap(params) {
|
|
|
723
520
|
throw new Error('必须提供有效的 mainPrivateKey(Payer 钱包私钥)');
|
|
724
521
|
}
|
|
725
522
|
// ✅ 验证卖家私钥
|
|
726
|
-
const validSellerPrivateKeys = sellerPrivateKeys.filter(pk => isValidPrivateKey(pk));
|
|
523
|
+
const validSellerPrivateKeys = sellerPrivateKeys.filter((pk) => isValidPrivateKey(pk));
|
|
727
524
|
if (validSellerPrivateKeys.length === 0) {
|
|
728
525
|
throw new Error('没有有效的卖家私钥');
|
|
729
526
|
}
|
|
730
527
|
// ✅ 验证买家私钥
|
|
731
|
-
const validBuyerPrivateKeys = buyerPrivateKeys.filter(pk => isValidPrivateKey(pk));
|
|
528
|
+
const validBuyerPrivateKeys = buyerPrivateKeys.filter((pk) => isValidPrivateKey(pk));
|
|
732
529
|
if (validBuyerPrivateKeys.length === 0) {
|
|
733
530
|
throw new Error('没有有效的买家私钥');
|
|
734
531
|
}
|
|
735
|
-
if (validSellerPrivateKeys.length !== sellerPrivateKeys.length || validBuyerPrivateKeys.length !== buyerPrivateKeys.length) {
|
|
736
|
-
console.warn(`[bundleMultiSwap] 跳过无效私钥: 卖家 ${sellerPrivateKeys.length - validSellerPrivateKeys.length} 个, 买家 ${buyerPrivateKeys.length - validBuyerPrivateKeys.length} 个`);
|
|
737
|
-
}
|
|
738
532
|
const provider = getCachedProvider(config?.rpcUrl);
|
|
739
533
|
// ✅ 空字符串也使用默认值
|
|
740
534
|
const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
|
|
@@ -744,16 +538,16 @@ export async function bundleMultiSwap(params) {
|
|
|
744
538
|
// ✅ 创建 Payer 钱包(支付 Gas 费)
|
|
745
539
|
const mainWallet = createWallet(mainPrivateKey, provider);
|
|
746
540
|
// 创建钱包
|
|
747
|
-
const sellerWallets = validSellerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
748
|
-
const buyerWallets = validBuyerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
541
|
+
const sellerWallets = validSellerPrivateKeys.map((pk) => createWallet(pk, provider));
|
|
542
|
+
const buyerWallets = validBuyerPrivateKeys.map((pk) => createWallet(pk, provider));
|
|
749
543
|
// 合并所有钱包(去重,包括 mainWallet)
|
|
750
544
|
const allWalletsMap = new Map();
|
|
751
545
|
allWalletsMap.set(mainWallet.address.toLowerCase(), mainWallet);
|
|
752
|
-
sellerWallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
753
|
-
buyerWallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
546
|
+
sellerWallets.forEach((w) => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
547
|
+
buyerWallets.forEach((w) => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
754
548
|
const allWallets = Array.from(allWalletsMap.values());
|
|
755
549
|
// 找出 mainWallet 在 allWallets 中的索引
|
|
756
|
-
const mainWalletIndex = allWallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
550
|
+
const mainWalletIndex = allWallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
757
551
|
// 计算买入金额
|
|
758
552
|
const totalBuyAmountWei = ethers.parseEther(truncateDecimals(totalBuyAmount));
|
|
759
553
|
const buyAmountPerWallet = totalBuyAmountWei / BigInt(buyerWallets.length);
|
|
@@ -764,13 +558,13 @@ export async function bundleMultiSwap(params) {
|
|
|
764
558
|
// ========================================
|
|
765
559
|
// 并行获取数据
|
|
766
560
|
// ========================================
|
|
767
|
-
const allAddresses = allWallets.map(w => w.address);
|
|
561
|
+
const allAddresses = allWallets.map((w) => w.address);
|
|
768
562
|
// 获取卖出钱包的代币余额
|
|
769
563
|
const tokenContract = new ethers.Contract(tokenAddress, ERC20_ABI, provider);
|
|
770
564
|
const [nonces, feeData, sellerBalances] = await Promise.all([
|
|
771
565
|
batchGetNonces(allAddresses, provider),
|
|
772
566
|
provider.getFeeData(),
|
|
773
|
-
Promise.all(sellerWallets.map(w => tokenContract.balanceOf(w.address))),
|
|
567
|
+
Promise.all(sellerWallets.map((w) => tokenContract.balanceOf(w.address))),
|
|
774
568
|
]);
|
|
775
569
|
// 计算每个卖家的卖出金额(按百分比)
|
|
776
570
|
const percentBigInt = BigInt(Math.min(100, Math.max(1, sellPercent)));
|
|
@@ -815,8 +609,8 @@ export async function bundleMultiSwap(params) {
|
|
|
815
609
|
signedTransaction,
|
|
816
610
|
metadata: {
|
|
817
611
|
payerAddress: mainWallet.address,
|
|
818
|
-
sellerAddresses: sellerWallets.map(w => w.address),
|
|
819
|
-
buyerAddresses: buyerWallets.map(w => w.address),
|
|
612
|
+
sellerAddresses: sellerWallets.map((w) => w.address),
|
|
613
|
+
buyerAddresses: buyerWallets.map((w) => w.address),
|
|
820
614
|
sellerCount: sellerWallets.filter((_, i) => sellAmountsWei[i] > 0n).length,
|
|
821
615
|
buyerCount: buyerWallets.length,
|
|
822
616
|
totalBuyAmount: ethers.formatEther(totalBuyAmountWei),
|
|
@@ -835,13 +629,15 @@ function buildBuyCallInternal(wallet, amount, tokenAddress, tradeType, routerAdd
|
|
|
835
629
|
case 'FLAP': {
|
|
836
630
|
// ✅ FLAP: 使用 swapExactInput 买入(与 AA 模式保持一致)
|
|
837
631
|
// 原 buy(address token) ABI 与 Portal 不匹配,改用 swapExactInput
|
|
838
|
-
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
|
|
632
|
+
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
|
|
633
|
+
{
|
|
839
634
|
inputToken: ethers.ZeroAddress, // 0x0 = OKB (原生代币)
|
|
840
635
|
outputToken: tokenAddress,
|
|
841
636
|
inputAmount: amount,
|
|
842
637
|
minOutputAmount: 0n,
|
|
843
638
|
permitData: '0x',
|
|
844
|
-
}
|
|
639
|
+
},
|
|
640
|
+
]);
|
|
845
641
|
const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: amount, data: portalCallData }];
|
|
846
642
|
return {
|
|
847
643
|
target: wallet.address,
|
|
@@ -867,7 +663,11 @@ function buildBuyCallInternal(wallet, amount, tokenAddress, tradeType, routerAdd
|
|
|
867
663
|
allowFailure: false,
|
|
868
664
|
value: 0n,
|
|
869
665
|
callData: delegateInterface.encodeFunctionData('executeBuy', [
|
|
870
|
-
routerAddress,
|
|
666
|
+
routerAddress,
|
|
667
|
+
WOKB_ADDRESS,
|
|
668
|
+
tokenAddress,
|
|
669
|
+
fee,
|
|
670
|
+
amount,
|
|
871
671
|
]),
|
|
872
672
|
};
|
|
873
673
|
}
|
|
@@ -877,13 +677,15 @@ function buildSellCallWithAmountInternal(wallet, amount, tokenAddress, tradeType
|
|
|
877
677
|
switch (tradeType) {
|
|
878
678
|
case 'FLAP': {
|
|
879
679
|
// ✅ 使用 swapExactInput 卖出(与 AA 模式保持一致)
|
|
880
|
-
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
|
|
680
|
+
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
|
|
681
|
+
{
|
|
881
682
|
inputToken: tokenAddress,
|
|
882
683
|
outputToken: ethers.ZeroAddress, // 0x0 = OKB
|
|
883
684
|
inputAmount: amount,
|
|
884
685
|
minOutputAmount: 0n,
|
|
885
686
|
permitData: '0x',
|
|
886
|
-
}
|
|
687
|
+
},
|
|
688
|
+
]);
|
|
887
689
|
const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: 0n, data: portalCallData }];
|
|
888
690
|
return {
|
|
889
691
|
target: wallet.address,
|
|
@@ -909,7 +711,11 @@ function buildSellCallWithAmountInternal(wallet, amount, tokenAddress, tradeType
|
|
|
909
711
|
value: 0n,
|
|
910
712
|
// ✅ 修复:传入实际数量,避免卖出全部
|
|
911
713
|
callData: delegateInterface.encodeFunctionData('executeSell', [
|
|
912
|
-
routerAddress,
|
|
714
|
+
routerAddress,
|
|
715
|
+
tokenAddress,
|
|
716
|
+
WOKB_ADDRESS,
|
|
717
|
+
fee,
|
|
718
|
+
amount,
|
|
913
719
|
]),
|
|
914
720
|
};
|
|
915
721
|
}
|
|
@@ -23,22 +23,7 @@ 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
|
|
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
|
-
};
|
|
26
|
+
export { getProfitRecipient, getProfitRateBps, getAllProfitRecipients, calculateProfitAmount, } from '../../../shared/constants/index.js';
|
|
42
27
|
export declare const DEFAULT_GAS_LIMIT = 2000000n;
|
|
43
28
|
export declare const DEFAULT_DEADLINE_MINUTES = 20;
|
|
44
29
|
export declare const DEFAULT_SLIPPAGE_BPS = 100;
|
|
@@ -34,27 +34,9 @@ export const USDC_ADDRESS = '0x74b7f16337b8972027f6196a17a631ac6de26d22';
|
|
|
34
34
|
/** USDT0 地址 (6 位精度) */
|
|
35
35
|
export const USDT0_ADDRESS = '0x779ded0c9e1022225f8e0630b35a9b54be713736';
|
|
36
36
|
// ========================================
|
|
37
|
-
//
|
|
38
|
-
// ========================================
|
|
39
|
-
|
|
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
|
-
};
|
|
37
|
+
// 利润配置(使用 shared/constants 函数 API)
|
|
38
|
+
// ========================================
|
|
39
|
+
export { getProfitRecipient, getProfitRateBps, getAllProfitRecipients, calculateProfitAmount, } from '../../../shared/constants/index.js';
|
|
58
40
|
// ========================================
|
|
59
41
|
// 默认配置
|
|
60
42
|
// ========================================
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EIP-7702 包根扁平别名(与 `root-swap-dex-and-xlayer.ts` 对齐)
|
|
3
|
+
*/
|
|
4
|
+
export { bundleBuy as xlayerEip7702BundleBuy } from './bundle-buy.js';
|
|
5
|
+
export { bundleSell as xlayerEip7702BundleSell } from './bundle-sell.js';
|
|
6
|
+
export { bundleApprove as xlayerEip7702BundleApprove, bundleApproveMultiSpenders as xlayerEip7702BundleApproveMultiSpenders, checkApprovalStatus as xlayerEip7702CheckApprovalStatus, } from './bundle-approve.js';
|
|
7
|
+
export { bundleSwap as xlayerEip7702BundleSwap, bundleBatchSwap as xlayerEip7702BundleBatchSwap, bundleMultiSwap as xlayerEip7702BundleMultiSwap, } from './bundle-swap.js';
|
|
8
|
+
export { disperse as xlayerEip7702Disperse, sweep as xlayerEip7702Sweep, pairwiseTransfer as xlayerEip7702PairwiseTransfer, disperseWithHops as xlayerEip7702DisperseWithHops, sweepWithHops as xlayerEip7702SweepWithHops, } from './multi-hop-transfer.js';
|
|
9
|
+
export { washVolume as xlayerEip7702WashVolume, bundleVolume as xlayerEip7702BundleVolume, singleRoundVolume as xlayerEip7702SingleRoundVolume, makeVolume as xlayerEip7702MakeVolume, makeVolumeWithSwap as xlayerEip7702MakeVolumeWithSwap, } from './volume.js';
|
|
10
|
+
export { bundleCreateBuy as xlayerEip7702BundleCreateBuy, bundleCreateToDex as xlayerEip7702BundleCreateToDex, bundleGraduateBuy as xlayerEip7702BundleGraduateBuy, } from './bundle-create.js';
|
|
11
|
+
export type { TradeType as XLayerEip7702TradeType, BundleBuyParams as XLayerEip7702BundleBuyParams, BundleSellParams as XLayerEip7702BundleSellParams, BundleSwapParams as XLayerEip7702BundleSwapParams, BundleMultiSwapParams as XLayerEip7702BundleMultiSwapParams, DisperseParams as XLayerEip7702DisperseParams, SweepParams as XLayerEip7702SweepParams, EIP7702Config as XLayerEip7702Config, } from './types.js';
|
|
12
|
+
export type { PairwiseTransferParams as XLayerEip7702PairwiseTransferParams } from './multi-hop-transfer.js';
|
|
13
|
+
export type { WashVolumeParams as XLayerEip7702WashVolumeParams, BundleVolumeParams as XLayerEip7702BundleVolumeParams, } from './volume.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EIP-7702 包根扁平别名(与 `root-swap-dex-and-xlayer.ts` 对齐)
|
|
3
|
+
*/
|
|
4
|
+
export { bundleBuy as xlayerEip7702BundleBuy } from './bundle-buy.js';
|
|
5
|
+
export { bundleSell as xlayerEip7702BundleSell } from './bundle-sell.js';
|
|
6
|
+
export { bundleApprove as xlayerEip7702BundleApprove, bundleApproveMultiSpenders as xlayerEip7702BundleApproveMultiSpenders, checkApprovalStatus as xlayerEip7702CheckApprovalStatus, } from './bundle-approve.js';
|
|
7
|
+
export { bundleSwap as xlayerEip7702BundleSwap, bundleBatchSwap as xlayerEip7702BundleBatchSwap, bundleMultiSwap as xlayerEip7702BundleMultiSwap, } from './bundle-swap.js';
|
|
8
|
+
export { disperse as xlayerEip7702Disperse, sweep as xlayerEip7702Sweep, pairwiseTransfer as xlayerEip7702PairwiseTransfer, disperseWithHops as xlayerEip7702DisperseWithHops, sweepWithHops as xlayerEip7702SweepWithHops, } from './multi-hop-transfer.js';
|
|
9
|
+
export { washVolume as xlayerEip7702WashVolume, bundleVolume as xlayerEip7702BundleVolume, singleRoundVolume as xlayerEip7702SingleRoundVolume, makeVolume as xlayerEip7702MakeVolume, makeVolumeWithSwap as xlayerEip7702MakeVolumeWithSwap, } from './volume.js';
|
|
10
|
+
export { bundleCreateBuy as xlayerEip7702BundleCreateBuy, bundleCreateToDex as xlayerEip7702BundleCreateToDex, bundleGraduateBuy as xlayerEip7702BundleGraduateBuy, } from './bundle-create.js';
|