four-flap-meme-sdk 2.2.18 → 2.2.20
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/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 +240 -0
- package/dist/abis/contracts/TaxToken.json +969 -0
- package/dist/abis/contracts/TokenManager.json +836 -0
- package/dist/abis/contracts/TokenManager2.json +136 -0
- package/dist/abis/contracts/TokenManagerHelper3.json +993 -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 +5 -0
- package/dist/abis/flap/index.js +5 -0
- package/dist/abis/flap/portal-eip7702.d.ts +4 -0
- package/dist/abis/flap/portal-eip7702.js +39 -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-merkle.d.ts +4 -0
- package/dist/abis/flap/portal-merkle.js +25 -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 +37 -0
- package/dist/bundle-core/config-helpers.js +58 -0
- package/dist/bundle-core/errors.d.ts +50 -0
- package/dist/bundle-core/errors.js +38 -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 +41 -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 +456 -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 +28 -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 +16 -0
- package/dist/bundle-core/internal.js +160 -0
- package/dist/bundle-core/sign-context-helpers.d.ts +26 -0
- package/dist/bundle-core/sign-context-helpers.js +63 -0
- package/dist/bundle-core/submit.d.ts +293 -0
- package/dist/bundle-core/submit.js +731 -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 +155 -0
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +80 -0
- package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
- package/dist/chains/bsc/pancake/bundle-buy-first.js +98 -213
- 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 +287 -0
- package/dist/chains/index.d.ts +13 -0
- package/dist/chains/index.js +13 -0
- package/dist/chains/xlayer/constants.d.ts +5 -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 +104 -74
- 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 +11 -26
- package/dist/chains/xlayer/eip7702/constants.js +15 -68
- 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 +58 -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.d.ts +1 -1
- package/dist/chains/xlayer/eoa/constants.js +2 -16
- package/dist/chains/xlayer/eoa/dex-helpers.d.ts +1 -1
- package/dist/chains/xlayer/eoa/dex-helpers.js +7 -37
- 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 +5 -4
- 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 +73 -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 +120 -187
- package/dist/contracts/tm.d.ts +10 -8
- package/dist/contracts/tm.js +39 -35
- package/dist/contracts/tm1.js +9 -4
- package/dist/contracts/tm2.js +10 -5
- package/dist/dex/direct-router-helpers.d.ts +269 -0
- package/dist/dex/direct-router-helpers.js +536 -0
- package/dist/dex/direct-router.d.ts +3 -125
- package/dist/dex/direct-router.js +244 -672
- 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 +11 -0
- package/dist/flap/index.js +9 -0
- package/dist/flows/create.d.ts +2 -1
- package/dist/flows/create.js +6 -6
- package/dist/flows/index.d.ts +9 -0
- package/dist/flows/index.js +9 -0
- package/dist/index.d.ts +20 -88
- package/dist/index.js +20 -218
- 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 -254
- package/dist/shared/abis/index.d.ts +5 -6
- package/dist/shared/abis/index.js +5 -7
- package/dist/shared/clients/blockrazor.d.ts +4 -8
- package/dist/shared/clients/blockrazor.js +43 -35
- package/dist/shared/clients/club48.d.ts +2 -2
- package/dist/shared/clients/club48.js +36 -30
- 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.d.ts +4 -3
- package/dist/shared/clients/merkle.js +30 -47
- package/dist/shared/constants/addresses.d.ts +27 -1
- package/dist/shared/constants/addresses.js +39 -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 +4 -1
- package/dist/shared/constants/index.js +2 -1
- 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 +3 -4
- 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 +4 -5
- package/dist/shared/flap/index.js +4 -5
- package/dist/shared/flap/launch-v6.d.ts +0 -5
- package/dist/shared/flap/launch-v6.js +2 -16
- package/dist/shared/flap/meta.d.ts +22 -18
- package/dist/shared/flap/meta.js +32 -24
- package/dist/shared/flap/permit.js +10 -3
- 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 +168 -175
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.d.ts +17 -4
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +96 -117
- package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +104 -122
- 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-batch.d.ts +8 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-batch.js +227 -0
- 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 +69 -288
- package/dist/shared/flap/portal-bundle-merkle/swap-cross.d.ts +9 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-cross.js +139 -0
- 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-planning.d.ts +70 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-planning.js +182 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-quick-batch.d.ts +16 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-quick-batch.js +327 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-single.d.ts +2 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-single.js +184 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-types.d.ts +101 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-types.js +1 -0
- package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +6 -199
- package/dist/shared/flap/portal-bundle-merkle/swap.js +5 -1357
- package/dist/shared/flap/portal-bundle-merkle/types.d.ts +88 -12
- 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 +83 -78
- package/dist/shared/flap/portal-create-token.d.ts +39 -21
- package/dist/shared/flap/portal-create-token.js +121 -124
- package/dist/shared/flap/portal.d.ts +1 -2
- package/dist/shared/flap/portal.js +36 -28
- package/dist/shared/flap/vanity.d.ts +6 -6
- package/dist/shared/flap/vanity.js +15 -21
- package/dist/shared/flap/vault.d.ts +25 -93
- package/dist/shared/flap/vault.js +77 -127
- package/dist/shared/foundation/amount/split-by-weight.d.ts +5 -0
- package/dist/shared/foundation/amount/split-by-weight.js +35 -0
- package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
- package/dist/shared/foundation/dex/v3-path.js +35 -0
- package/dist/shared/foundation/erc20/decimals.d.ts +7 -0
- package/dist/shared/foundation/erc20/decimals.js +24 -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 +15 -0
- package/dist/shared/foundation/index.js +14 -0
- package/dist/shared/foundation/nonce/nonce-manager.d.ts +19 -0
- package/dist/shared/foundation/nonce/nonce-manager.js +217 -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/foundation/wallet/generate.d.ts +5 -0
- package/dist/shared/foundation/wallet/generate.js +8 -0
- package/dist/shared/four/tax-token.d.ts +1 -1
- package/dist/shared/four/tax-token.js +31 -10
- 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 +98 -129
- 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 +50 -671
- 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 +78 -293
- 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 +39 -19
- 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 +4 -25
- package/dist/utils/wallet.js +27 -22
- package/dist/vanity/index.d.ts +5 -0
- package/dist/vanity/index.js +5 -0
- package/package.json +100 -2
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* 3. 买到毕业(代币上 DEX)
|
|
8
8
|
* 4. 多个钱包在 PancakeSwap(外盘)继续买入
|
|
9
9
|
*/
|
|
10
|
+
import type { TaxVaultConfig } from '../vault.js';
|
|
10
11
|
import { type FlapSignConfig } from './config.js';
|
|
11
12
|
import type { MerkleSignedResult } from './types.js';
|
|
12
13
|
export type CreateToDexChain = 'bsc' | 'xlayer' | 'base';
|
|
@@ -75,10 +76,22 @@ export interface FlapCreateToDexParams {
|
|
|
75
76
|
dexId?: number;
|
|
76
77
|
/** V4 参数:LP 费率档位(0=STANDARD 0.25%, 1=LOW 0.01%, 2=HIGH 1%) */
|
|
77
78
|
lpFeeProfile?: number;
|
|
78
|
-
/**
|
|
79
|
-
taxV2Config?:
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
/** Tax Token V2/V3 高级税收配置(启用后使用 newTokenV6 TOKEN_TAXED_V3) */
|
|
80
|
+
taxV2Config?: {
|
|
81
|
+
taxDuration: number;
|
|
82
|
+
antiFarmerDuration: number;
|
|
83
|
+
buyTaxRate?: number;
|
|
84
|
+
sellTaxRate?: number;
|
|
85
|
+
dividendToken?: string;
|
|
86
|
+
commissionReceiver?: string;
|
|
87
|
+
mktBps: number;
|
|
88
|
+
deflationBps: number;
|
|
89
|
+
dividendBps: number;
|
|
90
|
+
lpBps: number;
|
|
91
|
+
minimumShareBalance?: number;
|
|
92
|
+
/** ✅ Tax Vault 金库配置(可选) */
|
|
93
|
+
vaultConfig?: TaxVaultConfig;
|
|
94
|
+
};
|
|
82
95
|
/** V3 扩展 ID */
|
|
83
96
|
extensionID?: string;
|
|
84
97
|
/** V3 扩展数据 */
|
|
@@ -8,102 +8,103 @@
|
|
|
8
8
|
* 4. 多个钱包在 PancakeSwap(外盘)继续买入
|
|
9
9
|
*/
|
|
10
10
|
import { ethers, Contract, Wallet } from 'ethers';
|
|
11
|
-
import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../../../utils/bundle-helpers.js';
|
|
11
|
+
import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../../utils/bundle-helpers.js';
|
|
12
12
|
import { FLAP_PORTAL_ADDRESSES, FLAP_ORIGINAL_PORTAL_ADDRESSES } from '../constants.js';
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
13
|
+
import { normalizeTaxLaunchConfig, populateCreateTokenTransaction, } from '../portal-create-token.js';
|
|
14
|
+
import { MigratorType } from '../portal.js';
|
|
15
|
+
import { ADDRESSES, ZERO_ADDRESS, CHAINS } from '../../../shared/constants/index.js';
|
|
15
16
|
import { GAS_LIMITS } from '../../constants/index.js';
|
|
16
|
-
import { getGasPriceConfig, getTxType, getProfitRecipient, getBribeAmount, BLOCKRAZOR_BUILDER_EOA, PORTAL_ABI } from './config.js';
|
|
17
|
+
import { getGasPriceConfig, getTxType, getProfitRecipient, getProfitRateBps, getBribeAmount, BLOCKRAZOR_BUILDER_EOA, PORTAL_ABI, } from './config.js';
|
|
18
|
+
import { splitAmountByWeight as splitAmount } from '../../foundation/amount/split-by-weight.js';
|
|
17
19
|
// ==================== ERC20 ABI ====================
|
|
18
20
|
const ERC20_ABI = [
|
|
19
21
|
{
|
|
20
|
-
type:
|
|
21
|
-
name:
|
|
22
|
+
type: 'function',
|
|
23
|
+
name: 'approve',
|
|
22
24
|
inputs: [
|
|
23
|
-
{ name:
|
|
24
|
-
{ name:
|
|
25
|
+
{ name: 'spender', type: 'address' },
|
|
26
|
+
{ name: 'amount', type: 'uint256' },
|
|
25
27
|
],
|
|
26
|
-
outputs: [{ name:
|
|
27
|
-
stateMutability:
|
|
28
|
-
}
|
|
28
|
+
outputs: [{ name: '', type: 'bool' }],
|
|
29
|
+
stateMutability: 'nonpayable',
|
|
30
|
+
},
|
|
29
31
|
];
|
|
30
32
|
// ==================== PancakeSwap Router ABI ====================
|
|
31
33
|
const PANCAKE_ROUTER_ABI = [
|
|
32
34
|
{
|
|
33
|
-
type:
|
|
34
|
-
name:
|
|
35
|
+
type: 'function',
|
|
36
|
+
name: 'exactInputSingle',
|
|
35
37
|
inputs: [
|
|
36
38
|
{
|
|
37
|
-
name:
|
|
38
|
-
type:
|
|
39
|
+
name: 'params',
|
|
40
|
+
type: 'tuple',
|
|
39
41
|
components: [
|
|
40
|
-
{ name:
|
|
41
|
-
{ name:
|
|
42
|
-
{ name:
|
|
43
|
-
{ name:
|
|
44
|
-
{ name:
|
|
45
|
-
{ name:
|
|
46
|
-
{ name:
|
|
47
|
-
]
|
|
48
|
-
}
|
|
42
|
+
{ name: 'tokenIn', type: 'address' },
|
|
43
|
+
{ name: 'tokenOut', type: 'address' },
|
|
44
|
+
{ name: 'fee', type: 'uint24' },
|
|
45
|
+
{ name: 'recipient', type: 'address' },
|
|
46
|
+
{ name: 'amountIn', type: 'uint256' },
|
|
47
|
+
{ name: 'amountOutMinimum', type: 'uint256' },
|
|
48
|
+
{ name: 'sqrtPriceLimitX96', type: 'uint160' },
|
|
49
|
+
],
|
|
50
|
+
},
|
|
49
51
|
],
|
|
50
|
-
outputs: [{ name:
|
|
51
|
-
stateMutability:
|
|
52
|
+
outputs: [{ name: 'amountOut', type: 'uint256' }],
|
|
53
|
+
stateMutability: 'payable',
|
|
52
54
|
},
|
|
53
55
|
{
|
|
54
|
-
type:
|
|
55
|
-
name:
|
|
56
|
-
inputs: [{ name:
|
|
57
|
-
outputs: [{ name:
|
|
58
|
-
stateMutability:
|
|
56
|
+
type: 'function',
|
|
57
|
+
name: 'multicall',
|
|
58
|
+
inputs: [{ name: 'data', type: 'bytes[]' }],
|
|
59
|
+
outputs: [{ name: 'results', type: 'bytes[]' }],
|
|
60
|
+
stateMutability: 'payable',
|
|
59
61
|
},
|
|
60
62
|
{
|
|
61
|
-
type:
|
|
62
|
-
name:
|
|
63
|
+
type: 'function',
|
|
64
|
+
name: 'swapExactTokensForTokens',
|
|
63
65
|
inputs: [
|
|
64
|
-
{ name:
|
|
65
|
-
{ name:
|
|
66
|
-
{ name:
|
|
67
|
-
{ name:
|
|
66
|
+
{ name: 'amountIn', type: 'uint256' },
|
|
67
|
+
{ name: 'amountOutMin', type: 'uint256' },
|
|
68
|
+
{ name: 'path', type: 'address[]' },
|
|
69
|
+
{ name: 'to', type: 'address' },
|
|
68
70
|
],
|
|
69
|
-
outputs: [{ name:
|
|
70
|
-
stateMutability:
|
|
71
|
-
}
|
|
71
|
+
outputs: [{ name: 'amountOut', type: 'uint256' }],
|
|
72
|
+
stateMutability: 'payable',
|
|
73
|
+
},
|
|
72
74
|
];
|
|
73
75
|
// ==================== DEX 地址常量 ====================
|
|
74
76
|
const DEX_ADDRESSES = {
|
|
75
77
|
BSC: {
|
|
76
|
-
PANCAKE_SMART_ROUTER:
|
|
77
|
-
WBNB:
|
|
78
|
+
PANCAKE_SMART_ROUTER: ADDRESSES.BSC.PancakeV3Router,
|
|
79
|
+
WBNB: ADDRESSES.BSC.WBNB,
|
|
78
80
|
},
|
|
79
81
|
XLAYER: {
|
|
80
82
|
// xLayer 使用 PotatoSwap
|
|
81
|
-
PANCAKE_SMART_ROUTER:
|
|
82
|
-
WBNB:
|
|
83
|
+
PANCAKE_SMART_ROUTER: ADDRESSES.XLAYER.PotatoSwapSwapRouter02,
|
|
84
|
+
WBNB: ADDRESSES.XLAYER.WOKB,
|
|
83
85
|
},
|
|
84
86
|
BASE: {
|
|
85
87
|
// ✅ Base 使用 Uniswap V3 SwapRouter02
|
|
86
|
-
UNISWAP_SMART_ROUTER:
|
|
87
|
-
WETH:
|
|
88
|
-
}
|
|
88
|
+
UNISWAP_SMART_ROUTER: ADDRESSES.BASE.UniswapV3Router,
|
|
89
|
+
WETH: ADDRESSES.BASE.WETH,
|
|
90
|
+
},
|
|
89
91
|
};
|
|
90
92
|
// ==================== 链常量 ====================
|
|
91
93
|
// 获取链配置
|
|
92
94
|
function getChainConfig(chain) {
|
|
93
95
|
switch (chain) {
|
|
94
96
|
case 'xlayer':
|
|
95
|
-
return { chainId:
|
|
97
|
+
return { chainId: CHAINS.XLAYER.chainId, nativeSymbol: 'OKB' };
|
|
96
98
|
case 'base':
|
|
97
|
-
return { chainId:
|
|
99
|
+
return { chainId: CHAINS.BASE.chainId, nativeSymbol: 'ETH' };
|
|
98
100
|
case 'bsc':
|
|
99
101
|
default:
|
|
100
|
-
return { chainId:
|
|
102
|
+
return { chainId: CHAINS.BSC.chainId, nativeSymbol: 'BNB' };
|
|
101
103
|
}
|
|
102
104
|
}
|
|
103
105
|
// ==================== 工具函数 ====================
|
|
104
106
|
/** 构建 ERC20 approve 交易 */
|
|
105
|
-
async function buildApproveTransaction(wallet, tokenAddress, spenderAddress, amount, nonce, gasPrice, txType, chainId =
|
|
106
|
-
) {
|
|
107
|
+
async function buildApproveTransaction(wallet, tokenAddress, spenderAddress, amount, nonce, gasPrice, txType, chainId = CHAINS.BSC.chainId) {
|
|
107
108
|
const erc20Interface = new ethers.Interface(ERC20_ABI);
|
|
108
109
|
const data = erc20Interface.encodeFunctionData('approve', [spenderAddress, amount]);
|
|
109
110
|
const tx = {
|
|
@@ -111,9 +112,9 @@ async function buildApproveTransaction(wallet, tokenAddress, spenderAddress, amo
|
|
|
111
112
|
data,
|
|
112
113
|
from: wallet.address,
|
|
113
114
|
nonce,
|
|
114
|
-
gasLimit: BigInt(
|
|
115
|
+
gasLimit: BigInt(100_000), // approve 交易 gas 较低
|
|
115
116
|
chainId,
|
|
116
|
-
type: txType
|
|
117
|
+
type: txType,
|
|
117
118
|
};
|
|
118
119
|
if (txType === 2) {
|
|
119
120
|
const priorityFee = gasPrice / 10n === 0n ? 1n : gasPrice / 10n;
|
|
@@ -132,28 +133,6 @@ function getGasLimit(config, defaultGas = 800000) {
|
|
|
132
133
|
const multiplier = config.gasLimitMultiplier ?? 1.0;
|
|
133
134
|
return BigInt(Math.ceil(defaultGas * multiplier));
|
|
134
135
|
}
|
|
135
|
-
/** 将金额拆分成多份(权重随机) */
|
|
136
|
-
function splitAmount(totalAmount, count) {
|
|
137
|
-
if (count <= 0)
|
|
138
|
-
throw new Error('拆分份数必须大于 0');
|
|
139
|
-
if (count === 1)
|
|
140
|
-
return [totalAmount];
|
|
141
|
-
const weights = [];
|
|
142
|
-
for (let i = 0; i < count; i++) {
|
|
143
|
-
weights.push(0.5 + Math.random());
|
|
144
|
-
}
|
|
145
|
-
const totalWeight = weights.reduce((a, b) => a + b, 0);
|
|
146
|
-
const amounts = [];
|
|
147
|
-
let allocated = 0n;
|
|
148
|
-
for (let i = 0; i < count - 1; i++) {
|
|
149
|
-
const ratio = weights[i] / totalWeight;
|
|
150
|
-
const amount = BigInt(Math.floor(Number(totalAmount) * ratio));
|
|
151
|
-
amounts.push(amount);
|
|
152
|
-
allocated += amount;
|
|
153
|
-
}
|
|
154
|
-
amounts.push(totalAmount - allocated);
|
|
155
|
-
return amounts;
|
|
156
|
-
}
|
|
157
136
|
/** 解析输入金额字符串为 bigint(按是否原生币选择 parseEther / parseUnits) */
|
|
158
137
|
function parseQuoteAmount(amount, useNativeToken, quoteTokenDecimals) {
|
|
159
138
|
const v = String(amount ?? '').trim();
|
|
@@ -167,11 +146,11 @@ function parseQuoteAmount(amount, useNativeToken, quoteTokenDecimals) {
|
|
|
167
146
|
* 若 SDK 这里再次 splitAmount,会导致实际 buyAmount 与 UI/预期不一致,并引发余额不足(insufficient funds)。
|
|
168
147
|
*/
|
|
169
148
|
function resolveBuyerAmounts(buyers, totalAmountStr, useNativeToken, quoteTokenDecimals) {
|
|
170
|
-
const provided = buyers.map(b => b?.buyAmount).filter(v => v != null && String(v).trim() !== '');
|
|
149
|
+
const provided = buyers.map((b) => b?.buyAmount).filter((v) => v != null && String(v).trim() !== '');
|
|
171
150
|
const allProvided = provided.length === buyers.length;
|
|
172
151
|
if (allProvided) {
|
|
173
152
|
// ✅ 所有买家都显式提供了 buyAmount:按传入金额构建,但要修正“浮点/四舍五入导致总和偏差”
|
|
174
|
-
const amounts = buyers.map(b => parseQuoteAmount(String(b.buyAmount), useNativeToken, quoteTokenDecimals));
|
|
153
|
+
const amounts = buyers.map((b) => parseQuoteAmount(String(b.buyAmount), useNativeToken, quoteTokenDecimals));
|
|
175
154
|
const totalWei = parseQuoteAmount(totalAmountStr, useNativeToken, quoteTokenDecimals);
|
|
176
155
|
const sum = amounts.reduce((a, b) => a + b, 0n);
|
|
177
156
|
const delta = totalWei - sum;
|
|
@@ -201,7 +180,7 @@ function resolveBuyerAmounts(buyers, totalAmountStr, useNativeToken, quoteTokenD
|
|
|
201
180
|
* 5. 利润多跳转账
|
|
202
181
|
*/
|
|
203
182
|
export async function flapBundleCreateToDex(params) {
|
|
204
|
-
const { chain, devPrivateKey, tokenInfo, tokenAddress, quoteToken, quoteTokenDecimals = 18, curveBuyers, curveTotalBuyAmount, enableDexBuy = false, dexBuyers = [], dexTotalBuyAmount, dexPoolType = 'v3', v3Fee = 2500, config } = params;
|
|
183
|
+
const { chain, devPrivateKey, tokenInfo, tokenAddress, quoteToken, quoteTokenDecimals = 18, curveBuyers, curveTotalBuyAmount, enableDexBuy = false, dexBuyers = [], dexTotalBuyAmount, dexPoolType = 'v3', v3Fee = 2500, config, } = params;
|
|
205
184
|
// 验证参数
|
|
206
185
|
if (curveBuyers.length === 0) {
|
|
207
186
|
throw new Error('至少需要一个内盘买入钱包');
|
|
@@ -235,34 +214,30 @@ export async function flapBundleCreateToDex(params) {
|
|
|
235
214
|
// 创建 Provider
|
|
236
215
|
const provider = new ethers.JsonRpcProvider(config.rpcUrl, {
|
|
237
216
|
chainId,
|
|
238
|
-
name: chain.toUpperCase()
|
|
217
|
+
name: chain.toUpperCase(),
|
|
239
218
|
});
|
|
240
219
|
const portalAddress = FLAP_PORTAL_ADDRESSES[chain.toUpperCase()];
|
|
241
220
|
const originalPortalAddress = FLAP_ORIGINAL_PORTAL_ADDRESSES[chain.toUpperCase()];
|
|
242
221
|
const nonceManager = new NonceManager(provider);
|
|
243
222
|
// 创建钱包实例
|
|
244
223
|
const devWallet = new Wallet(devPrivateKey, provider);
|
|
245
|
-
const curveWallets = curveBuyers.map(b => ({
|
|
224
|
+
const curveWallets = curveBuyers.map((b) => ({
|
|
246
225
|
wallet: new Wallet(b.privateKey, provider),
|
|
247
|
-
buyAmount: b.buyAmount
|
|
226
|
+
buyAmount: b.buyAmount,
|
|
248
227
|
}));
|
|
249
|
-
const dexWallets = (enableDexBuy ? dexBuyers : []).map(b => ({
|
|
228
|
+
const dexWallets = (enableDexBuy ? dexBuyers : []).map((b) => ({
|
|
250
229
|
wallet: new Wallet(b.privateKey, provider),
|
|
251
|
-
buyAmount: b.buyAmount
|
|
230
|
+
buyAmount: b.buyAmount,
|
|
252
231
|
}));
|
|
253
232
|
// ✅ 并行获取 gasPrice + 所有钱包 nonces
|
|
254
|
-
const allWallets = [
|
|
255
|
-
devWallet,
|
|
256
|
-
...curveWallets.map(c => c.wallet),
|
|
257
|
-
...dexWallets.map(d => d.wallet)
|
|
258
|
-
];
|
|
233
|
+
const allWallets = [devWallet, ...curveWallets.map((c) => c.wallet), ...dexWallets.map((d) => d.wallet)];
|
|
259
234
|
const uniqueWallets = allWallets.filter((w, i) => {
|
|
260
235
|
const addr = w.address.toLowerCase();
|
|
261
|
-
return allWallets.findIndex(x => x.address.toLowerCase() === addr) === i;
|
|
236
|
+
return allWallets.findIndex((x) => x.address.toLowerCase() === addr) === i;
|
|
262
237
|
});
|
|
263
238
|
const [gasPrice, noncesArray] = await Promise.all([
|
|
264
239
|
getOptimizedGasPrice(provider, getGasPriceConfig(config)),
|
|
265
|
-
nonceManager.getNextNoncesForWallets(uniqueWallets)
|
|
240
|
+
nonceManager.getNextNoncesForWallets(uniqueWallets),
|
|
266
241
|
]);
|
|
267
242
|
// 构建 nonces Map
|
|
268
243
|
const noncesMap = new Map();
|
|
@@ -282,9 +257,8 @@ export async function flapBundleCreateToDex(params) {
|
|
|
282
257
|
dexBuyAmounts = resolveBuyerAmounts(dexBuyers, dexTotalBuyAmount, useNativeToken, quoteTokenDecimals);
|
|
283
258
|
}
|
|
284
259
|
// ✅ 计算利润
|
|
285
|
-
const totalBuyAmount = curveBuyAmounts.reduce((a, b) => a + b, 0n)
|
|
286
|
-
|
|
287
|
-
const profitAmount = (totalBuyAmount * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
|
|
260
|
+
const totalBuyAmount = curveBuyAmounts.reduce((a, b) => a + b, 0n) + dexBuyAmounts.reduce((a, b) => a + b, 0n);
|
|
261
|
+
const profitAmount = (totalBuyAmount * BigInt(getProfitRateBps())) / 10000n;
|
|
288
262
|
// ==================== 构建交易 ====================
|
|
289
263
|
const allTransactions = [];
|
|
290
264
|
// 使用第一个内盘买家作为贿赂支付者(提高 bundle 打包优先级)
|
|
@@ -301,7 +275,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
301
275
|
gasPrice,
|
|
302
276
|
gasLimit: GAS_LIMITS.BRIBE,
|
|
303
277
|
chainId,
|
|
304
|
-
type: txType
|
|
278
|
+
type: txType,
|
|
305
279
|
});
|
|
306
280
|
allTransactions.push(bribeTx);
|
|
307
281
|
}
|
|
@@ -311,7 +285,14 @@ export async function flapBundleCreateToDex(params) {
|
|
|
311
285
|
const devNonce = noncesMap.get(devAddr);
|
|
312
286
|
noncesMap.set(devAddr, devNonce + 1);
|
|
313
287
|
const originalPortal = new Contract(originalPortalAddress, PORTAL_ABI, devWallet);
|
|
314
|
-
const
|
|
288
|
+
const normalizedTax = normalizeTaxLaunchConfig(params.taxV2Config, params.taxRate);
|
|
289
|
+
const isTaxLaunch = !!normalizedTax || (params.taxRate ?? 0) > 0;
|
|
290
|
+
const hasVault = !!normalizedTax?.vaultConfig && normalizedTax.vaultConfig.vaultType !== 'none';
|
|
291
|
+
const useV7Portal = !isTaxLaunch &&
|
|
292
|
+
!hasVault &&
|
|
293
|
+
(params.lpFeeProfile !== undefined ||
|
|
294
|
+
params.dexId !== undefined ||
|
|
295
|
+
params.migratorType === MigratorType.PCS_INFINITY_CL_MIGRATOR);
|
|
315
296
|
const createUnsigned = await populateCreateTokenTransaction({
|
|
316
297
|
chain,
|
|
317
298
|
devWallet,
|
|
@@ -323,15 +304,12 @@ export async function flapBundleCreateToDex(params) {
|
|
|
323
304
|
salt: params.salt,
|
|
324
305
|
migratorType: params.migratorType,
|
|
325
306
|
taxRate: params.taxRate,
|
|
326
|
-
buyTaxRate: params.buyTaxRate,
|
|
327
|
-
sellTaxRate: params.sellTaxRate,
|
|
328
307
|
dexId: params.dexId,
|
|
329
308
|
lpFeeProfile: params.lpFeeProfile,
|
|
330
309
|
extensionID: params.extensionID,
|
|
331
310
|
extensionData: params.extensionData,
|
|
332
311
|
useV7Portal,
|
|
333
312
|
taxConfig: normalizedTax,
|
|
334
|
-
initialQuoteAmt: 0n,
|
|
335
313
|
});
|
|
336
314
|
const createTx = {
|
|
337
315
|
...createUnsigned,
|
|
@@ -339,7 +317,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
339
317
|
nonce: devNonce,
|
|
340
318
|
gasLimit: finalGasLimit,
|
|
341
319
|
chainId,
|
|
342
|
-
type: txType
|
|
320
|
+
type: txType,
|
|
343
321
|
};
|
|
344
322
|
if (txType === 2) {
|
|
345
323
|
createTx.maxFeePerGas = gasPrice;
|
|
@@ -361,8 +339,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
361
339
|
if (!useNativeToken) {
|
|
362
340
|
const approveNonce = noncesMap.get(addr);
|
|
363
341
|
noncesMap.set(addr, approveNonce + 1);
|
|
364
|
-
const approveTx = await buildApproveTransaction(wallet, quoteToken, portalAddress, curveBuyAmounts[i], approveNonce, gasPrice, txType, chainId
|
|
365
|
-
);
|
|
342
|
+
const approveTx = await buildApproveTransaction(wallet, quoteToken, portalAddress, curveBuyAmounts[i], approveNonce, gasPrice, txType, chainId);
|
|
366
343
|
signedTxs.push(approveTx);
|
|
367
344
|
}
|
|
368
345
|
// 构建买入交易
|
|
@@ -378,16 +355,18 @@ export async function flapBundleCreateToDex(params) {
|
|
|
378
355
|
inputAmount: curveBuyAmounts[i],
|
|
379
356
|
minOutputAmount: 0n,
|
|
380
357
|
permitData: '0x', // 不使用 permit,使用链上 approve
|
|
381
|
-
extensionData
|
|
358
|
+
extensionData,
|
|
382
359
|
}, useNativeToken ? { value: curveBuyAmounts[i] } : {});
|
|
383
360
|
// 最后一个买家触发毕业,需要更多 gas
|
|
384
361
|
const isLastBuyer = i === curveWallets.length - 1;
|
|
385
362
|
// ⚠️ 触发毕业(创建 Pancake V3 池 + Mint 初始流动性)会非常耗 gas。
|
|
386
363
|
// 链上成功样例 0x29b173... 的 gasLimit=8,000,000,gasUsed≈6,647,149。
|
|
387
364
|
// Flap 官方示例脚本也使用 last_buy=8_000_000。
|
|
388
|
-
const LAST_BUY_GAS_LIMIT = BigInt(
|
|
365
|
+
const LAST_BUY_GAS_LIMIT = BigInt(8_000_000);
|
|
389
366
|
const buyGasLimit = isLastBuyer
|
|
390
|
-
?
|
|
367
|
+
? finalGasLimit > LAST_BUY_GAS_LIMIT
|
|
368
|
+
? finalGasLimit
|
|
369
|
+
: LAST_BUY_GAS_LIMIT
|
|
391
370
|
: finalGasLimit;
|
|
392
371
|
const tx = {
|
|
393
372
|
...unsigned,
|
|
@@ -396,7 +375,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
396
375
|
gasLimit: buyGasLimit,
|
|
397
376
|
chainId,
|
|
398
377
|
type: txType,
|
|
399
|
-
value: useNativeToken ? curveBuyAmounts[i] : 0n
|
|
378
|
+
value: useNativeToken ? curveBuyAmounts[i] : 0n,
|
|
400
379
|
};
|
|
401
380
|
if (txType === 2) {
|
|
402
381
|
tx.maxFeePerGas = gasPrice;
|
|
@@ -411,11 +390,11 @@ export async function flapBundleCreateToDex(params) {
|
|
|
411
390
|
});
|
|
412
391
|
const curveBuyResults = await Promise.all(curveBuyTxPromises);
|
|
413
392
|
// 展平数组:每个钱包可能有 [approve, buy] 或只有 [buy]
|
|
414
|
-
curveBuyResults.forEach(txs => allTransactions.push(...txs));
|
|
393
|
+
curveBuyResults.forEach((txs) => allTransactions.push(...txs));
|
|
415
394
|
// 4. 外盘买入交易(直接调用 PancakeSwap Router)
|
|
416
395
|
// ✅ 重要修改:直接调用 PancakeSwap SmartRouter
|
|
417
396
|
// 参考官方代码: flap-bundle-release/app/v2/pvp/001_launch_buy.ts
|
|
418
|
-
//
|
|
397
|
+
//
|
|
419
398
|
// ⚠️ 关键:税代币(migratorType=1)毕业到 V2 池,必须用 swapExactTokensForTokens
|
|
420
399
|
// 普通代币(migratorType=0)毕业到 V3 池,使用 exactInputSingle
|
|
421
400
|
if (enableDexBuy && dexWallets.length > 0) {
|
|
@@ -438,7 +417,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
438
417
|
// migratorType === 1 (V2_MIGRATOR) → 毕业到 V2 池 → 必须使用 V2 买入
|
|
439
418
|
// migratorType === 0 (V3_MIGRATOR) → 毕业到 V3 池 → 使用 V3 买入
|
|
440
419
|
// 参考: flap-bundle-release 中税代币使用 PoolType.V2,普通代币使用 PoolType.V3
|
|
441
|
-
const effectiveDexPoolType =
|
|
420
|
+
const effectiveDexPoolType = params.migratorType === 1 ? 'v2' : dexPoolType || 'v3';
|
|
442
421
|
// 获取 V3 费率(仅 V3 池使用)
|
|
443
422
|
const dexV3Fee = actualV3Fee;
|
|
444
423
|
const dexBuyTxPromises = dexWallets.map(async ({ wallet }, i) => {
|
|
@@ -467,7 +446,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
467
446
|
buyAmount,
|
|
468
447
|
0n, // amountOutMin: 不设置滑点保护(Bundle 中可以接受)
|
|
469
448
|
[tokenIn, tokenAddress], // path: WBNB/QuoteToken → Token
|
|
470
|
-
wallet.address // recipient
|
|
449
|
+
wallet.address, // recipient
|
|
471
450
|
]);
|
|
472
451
|
multicallData = routerInterface.encodeFunctionData('multicall', [[swapData]]);
|
|
473
452
|
}
|
|
@@ -480,14 +459,14 @@ export async function flapBundleCreateToDex(params) {
|
|
|
480
459
|
recipient: wallet.address,
|
|
481
460
|
amountIn: buyAmount,
|
|
482
461
|
amountOutMinimum: 0n, // 不设置滑点保护(Bundle 中可以接受)
|
|
483
|
-
sqrtPriceLimitX96: 0n
|
|
462
|
+
sqrtPriceLimitX96: 0n,
|
|
484
463
|
};
|
|
485
464
|
const exactInputSingleData = routerInterface.encodeFunctionData('exactInputSingle', [exactInputSingleParams]);
|
|
486
465
|
multicallData = routerInterface.encodeFunctionData('multicall', [[exactInputSingleData]]);
|
|
487
466
|
}
|
|
488
467
|
// ⚠️ Pancake SmartRouter 外盘买的 gas 不能太小,否则 bundle 预执行会直接失败。
|
|
489
468
|
// Flap 官方示例配置 dex_buy=5_000_000(flap-bundle-release/app/configs/global.ts)。
|
|
490
|
-
const DEX_BUY_GAS_LIMIT = BigInt(
|
|
469
|
+
const DEX_BUY_GAS_LIMIT = BigInt(8_000_000);
|
|
491
470
|
const tx = {
|
|
492
471
|
to: smartRouterAddress,
|
|
493
472
|
data: multicallData,
|
|
@@ -495,7 +474,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
495
474
|
gasLimit: DEX_BUY_GAS_LIMIT,
|
|
496
475
|
chainId,
|
|
497
476
|
type: txType,
|
|
498
|
-
value: useNativeToken ? buyAmount : 0n
|
|
477
|
+
value: useNativeToken ? buyAmount : 0n,
|
|
499
478
|
};
|
|
500
479
|
if (txType === 2) {
|
|
501
480
|
tx.maxFeePerGas = gasPrice;
|
|
@@ -510,7 +489,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
510
489
|
});
|
|
511
490
|
const dexBuyResults = await Promise.all(dexBuyTxPromises);
|
|
512
491
|
// 展平数组:每个钱包可能有 [approve, buy] 或只有 [buy]
|
|
513
|
-
dexBuyResults.forEach(txs => allTransactions.push(...txs));
|
|
492
|
+
dexBuyResults.forEach((txs) => allTransactions.push(...txs));
|
|
514
493
|
}
|
|
515
494
|
// 5. 利润多跳转账
|
|
516
495
|
let profitHopWallets;
|
|
@@ -528,7 +507,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
528
507
|
gasPrice,
|
|
529
508
|
chainId,
|
|
530
509
|
txType,
|
|
531
|
-
startNonce: profitNonce
|
|
510
|
+
startNonce: profitNonce,
|
|
532
511
|
});
|
|
533
512
|
allTransactions.push(...profitResult.signedTransactions);
|
|
534
513
|
profitHopWallets = profitResult.hopWallets;
|
|
@@ -545,7 +524,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
545
524
|
enableDexBuy,
|
|
546
525
|
dexBuyerCount: dexBuyers.length,
|
|
547
526
|
dexTotalBuy: dexBuyAmounts.length > 0 ? ethers.formatEther(dexBuyAmounts.reduce((a, b) => a + b, 0n)) : '0',
|
|
548
|
-
profitAmount: profitAmount > 0n ? ethers.formatEther(profitAmount) : undefined
|
|
549
|
-
}
|
|
527
|
+
profitAmount: profitAmount > 0n ? ethers.formatEther(profitAmount) : undefined,
|
|
528
|
+
},
|
|
550
529
|
};
|
|
551
530
|
}
|