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
|
@@ -36,18 +36,22 @@ function buildFlapBuyCalls(wallets, buyAmounts, tokenAddress) {
|
|
|
36
36
|
continue;
|
|
37
37
|
// ✅ 修复:使用 swapExactInput 代替 buy 函数,与 bundle-create.ts 保持一致
|
|
38
38
|
// buy(token) 是旧 API,swapExactInput 是新的标准 API
|
|
39
|
-
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
|
|
39
|
+
const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
|
|
40
|
+
{
|
|
40
41
|
inputToken: ethers.ZeroAddress, // 0x0 = OKB (原生代币)
|
|
41
42
|
outputToken: tokenAddress,
|
|
42
43
|
inputAmount: amount,
|
|
43
44
|
minOutputAmount: 0n, // 无滑点保护
|
|
44
45
|
permitData: '0x',
|
|
45
|
-
}
|
|
46
|
-
|
|
46
|
+
},
|
|
47
|
+
]);
|
|
48
|
+
const batchCalls = [
|
|
49
|
+
{
|
|
47
50
|
target: FLAP_PORTAL_ADDRESS,
|
|
48
51
|
value: amount,
|
|
49
52
|
data: portalCallData,
|
|
50
|
-
}
|
|
53
|
+
},
|
|
54
|
+
];
|
|
51
55
|
const callData = delegateInterface.encodeFunctionData('executeBatch', [batchCalls]);
|
|
52
56
|
calls.push({
|
|
53
57
|
target: wallet.address, // 以钱包身份调用,代币会到钱包
|
|
@@ -142,46 +146,6 @@ function buildProfitCall(mainWallet, profitAmount, profitRecipient) {
|
|
|
142
146
|
callData,
|
|
143
147
|
};
|
|
144
148
|
}
|
|
145
|
-
// ========================================
|
|
146
|
-
// 批量买入主函数
|
|
147
|
-
// ========================================
|
|
148
|
-
/**
|
|
149
|
-
* 批量买入 - 生成签名后的交易
|
|
150
|
-
*
|
|
151
|
-
* @param params 买入参数
|
|
152
|
-
* @returns 签名后的交易和元数据
|
|
153
|
-
*
|
|
154
|
-
* @example
|
|
155
|
-
* // FLAP 内盘买入
|
|
156
|
-
* const result = await bundleBuy({
|
|
157
|
-
* mainPrivateKey: '0x...',
|
|
158
|
-
* privateKeys: ['0x...', '0x...'],
|
|
159
|
-
* buyAmounts: ['0.01', '0.02'],
|
|
160
|
-
* tokenAddress: '0x...',
|
|
161
|
-
* tradeType: 'FLAP',
|
|
162
|
-
* });
|
|
163
|
-
*
|
|
164
|
-
* @example
|
|
165
|
-
* // V2 买入
|
|
166
|
-
* const result = await bundleBuy({
|
|
167
|
-
* mainPrivateKey: '0x...',
|
|
168
|
-
* privateKeys: ['0x...', '0x...'],
|
|
169
|
-
* buyAmounts: ['0.01', '0.02'],
|
|
170
|
-
* tokenAddress: '0x...',
|
|
171
|
-
* tradeType: 'V2',
|
|
172
|
-
* });
|
|
173
|
-
*
|
|
174
|
-
* @example
|
|
175
|
-
* // V3 买入(默认)
|
|
176
|
-
* const result = await bundleBuy({
|
|
177
|
-
* mainPrivateKey: '0x...',
|
|
178
|
-
* privateKeys: ['0x...', '0x...'],
|
|
179
|
-
* buyAmounts: ['0.01', '0.02'],
|
|
180
|
-
* tokenAddress: '0x...',
|
|
181
|
-
* tradeType: 'V3',
|
|
182
|
-
* fee: 2500, // 0.25%
|
|
183
|
-
* });
|
|
184
|
-
*/
|
|
185
149
|
export async function bundleBuy(params) {
|
|
186
150
|
const { mainPrivateKey, privateKeys, buyAmounts, tokenAddress, tradeType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, userType = 'v0', // ✅ 用户类型(影响利润率)
|
|
187
151
|
config, } = params;
|
|
@@ -195,22 +159,20 @@ export async function bundleBuy(params) {
|
|
|
195
159
|
// 同步操作 - 批量创建钱包和解析金额
|
|
196
160
|
// ========================================
|
|
197
161
|
const mainWallet = createWallet(mainPrivateKey, provider);
|
|
198
|
-
const wallets = privateKeys.map(pk => createWallet(pk, provider));
|
|
162
|
+
const wallets = privateKeys.map((pk) => createWallet(pk, provider));
|
|
199
163
|
// 批量解析金额(同步)
|
|
200
|
-
const buyAmountsWei = buyAmounts.map(amt => ethers.parseEther(amt));
|
|
164
|
+
const buyAmountsWei = buyAmounts.map((amt) => ethers.parseEther(amt));
|
|
201
165
|
const totalBuyAmount = buyAmountsWei.reduce((sum, amt) => sum + amt, 0n);
|
|
202
166
|
// ✅ 使用 userType 计算利润
|
|
203
167
|
const profitAmount = calculateProfitAmountByTxCount(totalBuyAmount, wallets.length, userType);
|
|
204
168
|
const profitRecipient = getProfitRecipient(config);
|
|
205
169
|
// 确定需要授权的钱包
|
|
206
|
-
const mainWalletIndex = wallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
207
|
-
const allWallets = mainWalletIndex === -1
|
|
208
|
-
? [mainWallet, ...wallets]
|
|
209
|
-
: wallets;
|
|
170
|
+
const mainWalletIndex = wallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
171
|
+
const allWallets = mainWalletIndex === -1 ? [mainWallet, ...wallets] : wallets;
|
|
210
172
|
// ========================================
|
|
211
173
|
// 并行获取所有异步数据
|
|
212
174
|
// ========================================
|
|
213
|
-
const allAddresses = allWallets.map(w => w.address);
|
|
175
|
+
const allAddresses = allWallets.map((w) => w.address);
|
|
214
176
|
const [walletNonces, mainNonce, feeData] = await Promise.all([
|
|
215
177
|
// 1. 批量获取授权钱包的 nonce
|
|
216
178
|
batchGetNonces(allAddresses, provider),
|
|
@@ -9,14 +9,10 @@
|
|
|
9
9
|
* 所有函数只返回签名后的交易,由调用方决定如何提交
|
|
10
10
|
*/
|
|
11
11
|
import { ethers, Interface, Contract } from 'ethers';
|
|
12
|
+
import { ZERO_ADDRESS, ZERO_BYTES32 } from '../../../shared/constants/index.js';
|
|
12
13
|
import { FLAP_PORTAL_ADDRESS, UNIFIED_DELEGATE_ADDRESS, UNIFIED_DELEGATE_ABI, FLAP_PORTAL_ABI, WOKB_ADDRESS, POTATOSWAP_V2_ROUTER, POTATOSWAP_V3_ROUTER, V3_FEE_TIERS, GAS_ESTIMATE, } from './constants.js';
|
|
13
14
|
import { getCachedProvider, createWallet, signAuthorizationsWithNonces, batchGetNonces, buildEIP7702TransactionSync, calculateProfitAmountByUserType, getProfitRecipient, } from './utils.js';
|
|
14
15
|
// ========================================
|
|
15
|
-
// 常量
|
|
16
|
-
// ========================================
|
|
17
|
-
const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
|
|
18
|
-
const ZERO_HASH = '0x0000000000000000000000000000000000000000000000000000000000000000';
|
|
19
|
-
// ========================================
|
|
20
16
|
// 辅助函数
|
|
21
17
|
// ========================================
|
|
22
18
|
/**
|
|
@@ -24,10 +20,14 @@ const ZERO_HASH = '0x00000000000000000000000000000000000000000000000000000000000
|
|
|
24
20
|
*/
|
|
25
21
|
function lpFeeProfileToV3Fee(lpFeeProfile) {
|
|
26
22
|
switch (lpFeeProfile) {
|
|
27
|
-
case 0:
|
|
28
|
-
|
|
29
|
-
case
|
|
30
|
-
|
|
23
|
+
case 0:
|
|
24
|
+
return V3_FEE_TIERS.MEDIUM; // 0.25%
|
|
25
|
+
case 1:
|
|
26
|
+
return V3_FEE_TIERS.LOWEST; // 0.01%
|
|
27
|
+
case 2:
|
|
28
|
+
return V3_FEE_TIERS.HIGH; // 1%
|
|
29
|
+
default:
|
|
30
|
+
return V3_FEE_TIERS.MEDIUM;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
@@ -69,24 +69,28 @@ function encodeFlapBuyCall(tokenAddress, inputAmount, useV3OrV4 = false, extensi
|
|
|
69
69
|
const portalIface = new Interface(FLAP_PORTAL_ABI);
|
|
70
70
|
if (useV3OrV4) {
|
|
71
71
|
// V3/V4 代币使用 swapExactInputV3(支持 extensionData)
|
|
72
|
-
return portalIface.encodeFunctionData('swapExactInputV3', [
|
|
72
|
+
return portalIface.encodeFunctionData('swapExactInputV3', [
|
|
73
|
+
{
|
|
73
74
|
inputToken: ZERO_ADDRESS,
|
|
74
75
|
outputToken: tokenAddress,
|
|
75
76
|
inputAmount,
|
|
76
77
|
minOutputAmount: 0n,
|
|
77
78
|
permitData: '0x',
|
|
78
79
|
extensionData,
|
|
79
|
-
}
|
|
80
|
+
},
|
|
81
|
+
]);
|
|
80
82
|
}
|
|
81
83
|
else {
|
|
82
84
|
// V2 代币使用 swapExactInput
|
|
83
|
-
return portalIface.encodeFunctionData('swapExactInput', [
|
|
85
|
+
return portalIface.encodeFunctionData('swapExactInput', [
|
|
86
|
+
{
|
|
84
87
|
inputToken: ZERO_ADDRESS,
|
|
85
88
|
outputToken: tokenAddress,
|
|
86
89
|
inputAmount,
|
|
87
90
|
minOutputAmount: 0n,
|
|
88
91
|
permitData: '0x',
|
|
89
|
-
}
|
|
92
|
+
},
|
|
93
|
+
]);
|
|
90
94
|
}
|
|
91
95
|
}
|
|
92
96
|
/**
|
|
@@ -98,7 +102,8 @@ function encodeV3BuyCall(tokenAddress, fee, recipient, deadline, amountIn) {
|
|
|
98
102
|
'function multicall(uint256 deadline, bytes[] data) external payable returns (bytes[])',
|
|
99
103
|
'function refundETH() external payable',
|
|
100
104
|
]);
|
|
101
|
-
const exactInputData = routerIface.encodeFunctionData('exactInputSingle', [
|
|
105
|
+
const exactInputData = routerIface.encodeFunctionData('exactInputSingle', [
|
|
106
|
+
{
|
|
102
107
|
tokenIn: WOKB_ADDRESS,
|
|
103
108
|
tokenOut: tokenAddress,
|
|
104
109
|
fee,
|
|
@@ -106,7 +111,8 @@ function encodeV3BuyCall(tokenAddress, fee, recipient, deadline, amountIn) {
|
|
|
106
111
|
amountIn,
|
|
107
112
|
amountOutMinimum: 0n,
|
|
108
113
|
sqrtPriceLimitX96: 0n,
|
|
109
|
-
}
|
|
114
|
+
},
|
|
115
|
+
]);
|
|
110
116
|
const refundEthData = routerIface.encodeFunctionData('refundETH', []);
|
|
111
117
|
return routerIface.encodeFunctionData('multicall', [deadline, [exactInputData, refundEthData]]);
|
|
112
118
|
}
|
|
@@ -160,22 +166,21 @@ export async function bundleCreateBuy(params) {
|
|
|
160
166
|
const delegateInterface = new Interface(UNIFIED_DELEGATE_ABI);
|
|
161
167
|
// 创建钱包
|
|
162
168
|
const devWallet = createWallet(devPrivateKey, provider);
|
|
163
|
-
const buyerWallets = buyerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
169
|
+
const buyerWallets = buyerPrivateKeys.map((pk) => createWallet(pk, provider));
|
|
164
170
|
const allWallets = [devWallet, ...buyerWallets];
|
|
165
171
|
const mainWallet = devWallet;
|
|
166
172
|
// 计算买入金额和利润(单边模式:只有买入)
|
|
167
|
-
const buyAmountsWei = buyAmounts.map(amt => ethers.parseEther(amt));
|
|
173
|
+
const buyAmountsWei = buyAmounts.map((amt) => ethers.parseEther(amt));
|
|
168
174
|
const totalBuyAmount = buyAmountsWei.reduce((sum, amt) => sum + amt, 0n);
|
|
169
175
|
const profitAmount = calculateProfitAmountByUserType(totalBuyAmount, userType, false); // ✅ 支持 userType
|
|
170
176
|
const profitRecipient = getProfitRecipient(config);
|
|
171
177
|
// 并行获取 nonce 和 fee data
|
|
172
178
|
const [nonces, feeData] = await Promise.all([
|
|
173
|
-
batchGetNonces(allWallets.map(w => w.address), provider),
|
|
179
|
+
batchGetNonces(allWallets.map((w) => w.address), provider),
|
|
174
180
|
provider.getFeeData(),
|
|
175
181
|
]);
|
|
176
182
|
// 签名授权
|
|
177
|
-
const authorizations = signAuthorizationsWithNonces(allWallets, nonces, delegateAddress, 0
|
|
178
|
-
);
|
|
183
|
+
const authorizations = signAuthorizationsWithNonces(allWallets, nonces, delegateAddress, 0);
|
|
179
184
|
// 构建调用
|
|
180
185
|
const calls = [];
|
|
181
186
|
// 1. 利润转账(从开发者钱包)
|
|
@@ -199,14 +204,14 @@ export async function bundleCreateBuy(params) {
|
|
|
199
204
|
symbol: tokenInfo.symbol,
|
|
200
205
|
meta: tokenInfo.meta,
|
|
201
206
|
dexThresh: params.dexThresh ?? 1,
|
|
202
|
-
salt: params.salt ??
|
|
207
|
+
salt: params.salt ?? ZERO_BYTES32,
|
|
203
208
|
taxRate: params.taxRate ?? 0,
|
|
204
209
|
migratorType: params.migratorType ?? 0,
|
|
205
210
|
quoteToken: params.quoteToken ?? ZERO_ADDRESS,
|
|
206
211
|
quoteAmt: params.quoteAmt ?? 0n,
|
|
207
212
|
beneficiary: params.beneficiary ?? devWallet.address,
|
|
208
213
|
permitData: params.permitData ?? '0x',
|
|
209
|
-
extensionID: params.extensionID ??
|
|
214
|
+
extensionID: params.extensionID ?? ZERO_BYTES32,
|
|
210
215
|
extensionData: params.extensionData ?? '0x',
|
|
211
216
|
dexId: params.dexId ?? 0,
|
|
212
217
|
lpFeeProfile: params.lpFeeProfile ?? 0,
|
|
@@ -216,7 +221,7 @@ export async function bundleCreateBuy(params) {
|
|
|
216
221
|
deflationBps: tv2.deflationBps,
|
|
217
222
|
dividendBps: tv2.dividendBps,
|
|
218
223
|
lpBps: tv2.lpBps,
|
|
219
|
-
minimumShareBalance: BigInt(tv2.minimumShareBalance ?? 10000) *
|
|
224
|
+
minimumShareBalance: BigInt(tv2.minimumShareBalance ?? 10000) * 10n ** 18n,
|
|
220
225
|
});
|
|
221
226
|
}
|
|
222
227
|
else if (useV4) {
|
|
@@ -225,14 +230,14 @@ export async function bundleCreateBuy(params) {
|
|
|
225
230
|
symbol: tokenInfo.symbol,
|
|
226
231
|
meta: tokenInfo.meta,
|
|
227
232
|
dexThresh: params.dexThresh ?? 1,
|
|
228
|
-
salt: params.salt ??
|
|
233
|
+
salt: params.salt ?? ZERO_BYTES32,
|
|
229
234
|
taxRate: params.taxRate ?? 0,
|
|
230
235
|
migratorType: params.migratorType ?? 0,
|
|
231
236
|
quoteToken: params.quoteToken ?? ZERO_ADDRESS,
|
|
232
237
|
quoteAmt: params.quoteAmt ?? 0n,
|
|
233
238
|
beneficiary: params.beneficiary ?? devWallet.address,
|
|
234
239
|
permitData: params.permitData ?? '0x',
|
|
235
|
-
extensionID: params.extensionID ??
|
|
240
|
+
extensionID: params.extensionID ?? ZERO_BYTES32,
|
|
236
241
|
extensionData: params.extensionData ?? '0x',
|
|
237
242
|
dexId: params.dexId ?? 0,
|
|
238
243
|
lpFeeProfile: params.lpFeeProfile ?? 0,
|
|
@@ -244,7 +249,7 @@ export async function bundleCreateBuy(params) {
|
|
|
244
249
|
symbol: tokenInfo.symbol,
|
|
245
250
|
meta: tokenInfo.meta,
|
|
246
251
|
dexThresh: params.dexThresh ?? 1,
|
|
247
|
-
salt: params.salt ??
|
|
252
|
+
salt: params.salt ?? ZERO_BYTES32,
|
|
248
253
|
taxRate: params.taxRate ?? 0,
|
|
249
254
|
migratorType: params.migratorType ?? 0,
|
|
250
255
|
quoteToken: params.quoteToken ?? ZERO_ADDRESS,
|
|
@@ -261,7 +266,7 @@ export async function bundleCreateBuy(params) {
|
|
|
261
266
|
symbol: tokenInfo.symbol,
|
|
262
267
|
meta: tokenInfo.meta,
|
|
263
268
|
dexThresh: params.dexThresh ?? 1,
|
|
264
|
-
salt: params.salt ??
|
|
269
|
+
salt: params.salt ?? ZERO_BYTES32,
|
|
265
270
|
taxRate: params.taxRate ?? 0,
|
|
266
271
|
migratorType: params.migratorType ?? 0,
|
|
267
272
|
quoteToken: params.quoteToken ?? ZERO_ADDRESS,
|
|
@@ -271,11 +276,15 @@ export async function bundleCreateBuy(params) {
|
|
|
271
276
|
});
|
|
272
277
|
}
|
|
273
278
|
// 使用 executeBatch 从 devWallet 调用 Portal.newToken
|
|
274
|
-
const createBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
279
|
+
const createBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
280
|
+
[
|
|
281
|
+
{
|
|
275
282
|
target: FLAP_PORTAL_ADDRESS,
|
|
276
283
|
value: params.quoteAmt ?? 0n,
|
|
277
284
|
data: createData,
|
|
278
|
-
}
|
|
285
|
+
},
|
|
286
|
+
],
|
|
287
|
+
]);
|
|
279
288
|
calls.push({
|
|
280
289
|
target: devWallet.address,
|
|
281
290
|
allowFailure: false,
|
|
@@ -290,11 +299,15 @@ export async function bundleCreateBuy(params) {
|
|
|
290
299
|
const buyAmount = buyAmountsWei[i];
|
|
291
300
|
// 使用 executeBatch 从 buyerWallet 调用 Portal
|
|
292
301
|
const buyData = encodeFlapBuyCall(tokenAddress, buyAmount, useV3OrV4, extensionData);
|
|
293
|
-
const buyBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
302
|
+
const buyBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
303
|
+
[
|
|
304
|
+
{
|
|
294
305
|
target: FLAP_PORTAL_ADDRESS,
|
|
295
306
|
value: buyAmount,
|
|
296
307
|
data: buyData,
|
|
297
|
-
}
|
|
308
|
+
},
|
|
309
|
+
],
|
|
310
|
+
]);
|
|
298
311
|
// ✅ 修复:value 设为 0n,让钱包使用自己余额买入
|
|
299
312
|
calls.push({
|
|
300
313
|
target: buyerWallet.address,
|
|
@@ -346,19 +359,19 @@ export async function bundleCreateToDex(params) {
|
|
|
346
359
|
const delegateInterface = new Interface(UNIFIED_DELEGATE_ABI);
|
|
347
360
|
// 创建钱包
|
|
348
361
|
const payerWallet = createWallet(payerPrivateKey, provider);
|
|
349
|
-
const curveBuyerWallets = curveBuyerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
350
|
-
const dexBuyerWallets = dexBuyerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
362
|
+
const curveBuyerWallets = curveBuyerPrivateKeys.map((pk) => createWallet(pk, provider));
|
|
363
|
+
const dexBuyerWallets = dexBuyerPrivateKeys.map((pk) => createWallet(pk, provider));
|
|
351
364
|
// 合并所有钱包(去重)
|
|
352
365
|
const allWalletsMap = new Map();
|
|
353
366
|
allWalletsMap.set(payerWallet.address.toLowerCase(), payerWallet);
|
|
354
|
-
curveBuyerWallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
355
|
-
dexBuyerWallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
367
|
+
curveBuyerWallets.forEach((w) => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
368
|
+
dexBuyerWallets.forEach((w) => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
356
369
|
const allWallets = Array.from(allWalletsMap.values());
|
|
357
370
|
const mainWallet = payerWallet;
|
|
358
|
-
const mainWalletIndex = allWallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
371
|
+
const mainWalletIndex = allWallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
359
372
|
// 计算金额和利润(单边模式:只有买入)
|
|
360
|
-
const curveBuyAmountsWei = curveBuyAmounts.map(amt => ethers.parseEther(amt));
|
|
361
|
-
const dexBuyAmountsWei = dexBuyAmounts.map(amt => ethers.parseEther(amt));
|
|
373
|
+
const curveBuyAmountsWei = curveBuyAmounts.map((amt) => ethers.parseEther(amt));
|
|
374
|
+
const dexBuyAmountsWei = dexBuyAmounts.map((amt) => ethers.parseEther(amt));
|
|
362
375
|
const totalCurveBuyAmount = curveBuyAmountsWei.reduce((sum, amt) => sum + amt, 0n);
|
|
363
376
|
const totalDexBuyAmount = dexBuyAmountsWei.reduce((sum, amt) => sum + amt, 0n);
|
|
364
377
|
const totalBuyAmount = totalCurveBuyAmount + totalDexBuyAmount;
|
|
@@ -366,7 +379,7 @@ export async function bundleCreateToDex(params) {
|
|
|
366
379
|
const profitRecipient = getProfitRecipient(config);
|
|
367
380
|
// 并行获取 nonce 和 fee data
|
|
368
381
|
const [nonces, feeData] = await Promise.all([
|
|
369
|
-
batchGetNonces(allWallets.map(w => w.address), provider),
|
|
382
|
+
batchGetNonces(allWallets.map((w) => w.address), provider),
|
|
370
383
|
provider.getFeeData(),
|
|
371
384
|
]);
|
|
372
385
|
// 签名授权
|
|
@@ -393,14 +406,14 @@ export async function bundleCreateToDex(params) {
|
|
|
393
406
|
symbol: tokenInfo.symbol,
|
|
394
407
|
meta: tokenInfo.meta,
|
|
395
408
|
dexThresh: (params.dexThresh ?? 1) & 0xff,
|
|
396
|
-
salt: params.salt ??
|
|
409
|
+
salt: params.salt ?? ZERO_BYTES32,
|
|
397
410
|
taxRate: params.taxRate ?? 0,
|
|
398
411
|
migratorType: params.migratorType ?? 0,
|
|
399
412
|
quoteToken: params.quoteToken ?? ZERO_ADDRESS,
|
|
400
413
|
quoteAmt: params.quoteAmt ?? 0n,
|
|
401
414
|
beneficiary: params.beneficiary ?? payerWallet.address,
|
|
402
415
|
permitData: params.permitData ?? '0x',
|
|
403
|
-
extensionID: params.extensionID ??
|
|
416
|
+
extensionID: params.extensionID ?? ZERO_BYTES32,
|
|
404
417
|
extensionData: params.extensionData ?? '0x',
|
|
405
418
|
dexId: params.dexId ?? 0,
|
|
406
419
|
lpFeeProfile: params.lpFeeProfile ?? 0,
|
|
@@ -410,7 +423,7 @@ export async function bundleCreateToDex(params) {
|
|
|
410
423
|
deflationBps: tv2.deflationBps,
|
|
411
424
|
dividendBps: tv2.dividendBps,
|
|
412
425
|
lpBps: tv2.lpBps,
|
|
413
|
-
minimumShareBalance: BigInt(tv2.minimumShareBalance ?? 10000) *
|
|
426
|
+
minimumShareBalance: BigInt(tv2.minimumShareBalance ?? 10000) * 10n ** 18n,
|
|
414
427
|
});
|
|
415
428
|
}
|
|
416
429
|
else {
|
|
@@ -419,24 +432,28 @@ export async function bundleCreateToDex(params) {
|
|
|
419
432
|
symbol: tokenInfo.symbol,
|
|
420
433
|
meta: tokenInfo.meta,
|
|
421
434
|
dexThresh: (params.dexThresh ?? 1) & 0xff,
|
|
422
|
-
salt: params.salt ??
|
|
435
|
+
salt: params.salt ?? ZERO_BYTES32,
|
|
423
436
|
taxRate: params.taxRate ?? 0,
|
|
424
437
|
migratorType: params.migratorType ?? 0,
|
|
425
438
|
quoteToken: params.quoteToken ?? ZERO_ADDRESS,
|
|
426
439
|
quoteAmt: params.quoteAmt ?? 0n,
|
|
427
440
|
beneficiary: params.beneficiary ?? payerWallet.address,
|
|
428
441
|
permitData: params.permitData ?? '0x',
|
|
429
|
-
extensionID: params.extensionID ??
|
|
442
|
+
extensionID: params.extensionID ?? ZERO_BYTES32,
|
|
430
443
|
extensionData: params.extensionData ?? '0x',
|
|
431
444
|
dexId: params.dexId ?? 0,
|
|
432
445
|
lpFeeProfile: params.lpFeeProfile ?? 0,
|
|
433
446
|
});
|
|
434
447
|
}
|
|
435
|
-
const createBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
448
|
+
const createBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
449
|
+
[
|
|
450
|
+
{
|
|
436
451
|
target: FLAP_PORTAL_ADDRESS,
|
|
437
452
|
value: params.quoteAmt ?? 0n,
|
|
438
453
|
data: createData,
|
|
439
|
-
}
|
|
454
|
+
},
|
|
455
|
+
],
|
|
456
|
+
]);
|
|
440
457
|
calls.push({
|
|
441
458
|
target: payerWallet.address,
|
|
442
459
|
allowFailure: false,
|
|
@@ -449,11 +466,15 @@ export async function bundleCreateToDex(params) {
|
|
|
449
466
|
const buyerWallet = curveBuyerWallets[i];
|
|
450
467
|
const buyAmount = curveBuyAmountsWei[i];
|
|
451
468
|
const buyData = encodeFlapBuyCall(tokenAddress, buyAmount, true, extensionData);
|
|
452
|
-
const buyBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
469
|
+
const buyBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
470
|
+
[
|
|
471
|
+
{
|
|
453
472
|
target: FLAP_PORTAL_ADDRESS,
|
|
454
473
|
value: buyAmount,
|
|
455
474
|
data: buyData,
|
|
456
|
-
}
|
|
475
|
+
},
|
|
476
|
+
],
|
|
477
|
+
]);
|
|
457
478
|
// ✅ 修复:value 设为 0n,让钱包使用自己余额买入
|
|
458
479
|
calls.push({
|
|
459
480
|
target: buyerWallet.address,
|
|
@@ -464,7 +485,7 @@ export async function bundleCreateToDex(params) {
|
|
|
464
485
|
}
|
|
465
486
|
// 4. 外盘买入(如果启用)
|
|
466
487
|
if (enableDexBuy && dexBuyerWallets.length > 0) {
|
|
467
|
-
const dexType =
|
|
488
|
+
const dexType = params.lpFeeProfile !== undefined && params.lpFeeProfile >= 0 ? 'V3' : 'V2';
|
|
468
489
|
const v3Fee = lpFeeProfileToV3Fee(params.lpFeeProfile);
|
|
469
490
|
for (let i = 0; i < dexBuyerWallets.length; i++) {
|
|
470
491
|
const buyerWallet = dexBuyerWallets[i];
|
|
@@ -480,11 +501,15 @@ export async function bundleCreateToDex(params) {
|
|
|
480
501
|
swapData = encodeV2BuyCall(tokenAddress, buyerWallet.address, deadline);
|
|
481
502
|
}
|
|
482
503
|
// 使用 executeBatch 调用 DEX Router
|
|
483
|
-
const dexBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
504
|
+
const dexBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
505
|
+
[
|
|
506
|
+
{
|
|
484
507
|
target: routerAddress,
|
|
485
508
|
value: buyAmount,
|
|
486
509
|
data: swapData,
|
|
487
|
-
}
|
|
510
|
+
},
|
|
511
|
+
],
|
|
512
|
+
]);
|
|
488
513
|
// ✅ 修复:value 设为 0n,让钱包使用自己余额买入
|
|
489
514
|
calls.push({
|
|
490
515
|
target: buyerWallet.address,
|
|
@@ -498,16 +523,15 @@ export async function bundleCreateToDex(params) {
|
|
|
498
523
|
const totalValue = params.quoteAmt ?? 0n;
|
|
499
524
|
// ✅ 动态计算 Gas Limit:基础操作 + 毕业额外 gas
|
|
500
525
|
// 毕业操作需要约 800 万 gas,加上其他操作的 gas
|
|
501
|
-
const baseGas = GAS_ESTIMATE.BASE
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
526
|
+
const baseGas = GAS_ESTIMATE.BASE +
|
|
527
|
+
BigInt(allWallets.length) * GAS_ESTIMATE.PER_AUTHORIZATION +
|
|
528
|
+
BigInt(calls.length) * GAS_ESTIMATE.PER_CALL_BASE +
|
|
529
|
+
BigInt(curveBuyerWallets.length) * GAS_ESTIMATE.BUY_EXTRA + // 内盘买入
|
|
530
|
+
BigInt(dexBuyerWallets.length) * GAS_ESTIMATE.BUY_EXTRA + // 外盘买入
|
|
531
|
+
GAS_ESTIMATE.CREATE_TOKEN + // 创建代币
|
|
532
|
+
GAS_ESTIMATE.GRADUATE; // 毕业操作 (800万)
|
|
508
533
|
const dynamicGasLimit = BigInt(Math.ceil(Number(baseGas) * GAS_ESTIMATE.SAFETY_MULTIPLIER));
|
|
509
534
|
const finalGasLimit = dynamicGasLimit > GAS_ESTIMATE.MAX ? GAS_ESTIMATE.MAX : dynamicGasLimit;
|
|
510
|
-
console.log(`[bundleCreateToDex] 动态 Gas 计算: 授权=${allWallets.length}, 调用=${calls.length}, 内盘=${curveBuyerWallets.length}, 外盘=${dexBuyerWallets.length}, Gas=${finalGasLimit.toString()}`);
|
|
511
535
|
const toDexConfig = {
|
|
512
536
|
...config,
|
|
513
537
|
gasLimit: finalGasLimit, // ✅ 动态计算的 Gas Limit
|
|
@@ -548,7 +572,7 @@ export async function bundleGraduateBuy(params) {
|
|
|
548
572
|
const delegateInterface = new Interface(UNIFIED_DELEGATE_ABI);
|
|
549
573
|
// 创建钱包
|
|
550
574
|
const payerWallet = createWallet(payerPrivateKey, provider);
|
|
551
|
-
const wallets = privateKeys.map(pk => createWallet(pk, provider));
|
|
575
|
+
const wallets = privateKeys.map((pk) => createWallet(pk, provider));
|
|
552
576
|
// 获取代币状态
|
|
553
577
|
const portalContract = new Contract(FLAP_PORTAL_ADDRESS, FLAP_PORTAL_ABI, provider);
|
|
554
578
|
const tokenState = await portalContract.getTokenV7(tokenAddress);
|
|
@@ -557,12 +581,11 @@ export async function bundleGraduateBuy(params) {
|
|
|
557
581
|
const k = tokenState[6];
|
|
558
582
|
const lpFeeProfile = Number(tokenState[15]);
|
|
559
583
|
// 计算毕业容量
|
|
560
|
-
const graduationReserveWei = (h * k) /
|
|
584
|
+
const graduationReserveWei = (h * k) / 10n ** 18n;
|
|
561
585
|
const poolReserveOkb = Number(ethers.formatEther(reserve));
|
|
562
586
|
const graduateCapacity = graduationAmount ?? Number(ethers.formatEther(graduationReserveWei));
|
|
563
587
|
const remainingToGraduate = Math.max(0, graduateCapacity - poolReserveOkb);
|
|
564
588
|
const remainingToGraduateWei = ethers.parseEther(remainingToGraduate.toFixed(18));
|
|
565
|
-
console.log(`[GraduateBuy] Pool Reserve: ${poolReserveOkb.toFixed(4)} OKB, Graduation: ${graduateCapacity.toFixed(4)} OKB, Remaining: ${remainingToGraduate.toFixed(4)} OKB`);
|
|
566
589
|
// 计算每个钱包的金额
|
|
567
590
|
const normalizedWalletAmounts = {};
|
|
568
591
|
if (walletAmounts) {
|
|
@@ -590,8 +613,8 @@ export async function bundleGraduateBuy(params) {
|
|
|
590
613
|
const dexBuyers = [];
|
|
591
614
|
const hasFrontendGrouping = curveAddresses && curveAddresses.length > 0;
|
|
592
615
|
if (hasFrontendGrouping) {
|
|
593
|
-
const curveSet = new Set(curveAddresses.map(a => a.toLowerCase()));
|
|
594
|
-
const dexSet = dexAddresses ? new Set(dexAddresses.map(a => a.toLowerCase())) : new Set();
|
|
616
|
+
const curveSet = new Set(curveAddresses.map((a) => a.toLowerCase()));
|
|
617
|
+
const dexSet = dexAddresses ? new Set(dexAddresses.map((a) => a.toLowerCase())) : new Set();
|
|
595
618
|
for (let i = 0; i < wallets.length; i++) {
|
|
596
619
|
const wallet = wallets[i];
|
|
597
620
|
const ownerAddr = wallet.address.toLowerCase();
|
|
@@ -626,15 +649,14 @@ export async function bundleGraduateBuy(params) {
|
|
|
626
649
|
}
|
|
627
650
|
}
|
|
628
651
|
}
|
|
629
|
-
console.log(`[GraduateBuy] Curve buyers: ${curveBuyers.length}, DEX buyers: ${dexBuyers.length}`);
|
|
630
652
|
// 合并所有参与的钱包
|
|
631
653
|
const allWalletsMap = new Map();
|
|
632
654
|
allWalletsMap.set(payerWallet.address.toLowerCase(), payerWallet);
|
|
633
|
-
curveBuyers.forEach(b => allWalletsMap.set(b.wallet.address.toLowerCase(), b.wallet));
|
|
634
|
-
dexBuyers.forEach(b => allWalletsMap.set(b.wallet.address.toLowerCase(), b.wallet));
|
|
655
|
+
curveBuyers.forEach((b) => allWalletsMap.set(b.wallet.address.toLowerCase(), b.wallet));
|
|
656
|
+
dexBuyers.forEach((b) => allWalletsMap.set(b.wallet.address.toLowerCase(), b.wallet));
|
|
635
657
|
const allWallets = Array.from(allWalletsMap.values());
|
|
636
658
|
const mainWallet = payerWallet;
|
|
637
|
-
const mainWalletIndex = allWallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
659
|
+
const mainWalletIndex = allWallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
638
660
|
// 计算金额和利润(单边模式:只有买入)
|
|
639
661
|
const curveTotalWei = curveBuyers.reduce((sum, b) => sum + b.amount, 0n);
|
|
640
662
|
const dexTotalWei = dexBuyers.reduce((sum, b) => sum + b.amount, 0n);
|
|
@@ -643,7 +665,7 @@ export async function bundleGraduateBuy(params) {
|
|
|
643
665
|
const profitRecipient = getProfitRecipient(config);
|
|
644
666
|
// 并行获取 nonce 和 fee data
|
|
645
667
|
const [nonces, feeData] = await Promise.all([
|
|
646
|
-
batchGetNonces(allWallets.map(w => w.address), provider),
|
|
668
|
+
batchGetNonces(allWallets.map((w) => w.address), provider),
|
|
647
669
|
provider.getFeeData(),
|
|
648
670
|
]);
|
|
649
671
|
// 签名授权
|
|
@@ -661,11 +683,15 @@ export async function bundleGraduateBuy(params) {
|
|
|
661
683
|
for (let i = 0; i < curveBuyers.length; i++) {
|
|
662
684
|
const { wallet, amount } = curveBuyers[i];
|
|
663
685
|
const buyData = encodeFlapBuyCall(tokenAddress, amount, useV3OrV4, extensionData);
|
|
664
|
-
const buyBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
686
|
+
const buyBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
687
|
+
[
|
|
688
|
+
{
|
|
665
689
|
target: FLAP_PORTAL_ADDRESS,
|
|
666
690
|
value: amount,
|
|
667
691
|
data: buyData,
|
|
668
|
-
}
|
|
692
|
+
},
|
|
693
|
+
],
|
|
694
|
+
]);
|
|
669
695
|
// ✅ 修复:value 设为 0n,让钱包使用自己余额买入
|
|
670
696
|
calls.push({
|
|
671
697
|
target: wallet.address,
|
|
@@ -676,7 +702,7 @@ export async function bundleGraduateBuy(params) {
|
|
|
676
702
|
}
|
|
677
703
|
// 3. 外盘买入
|
|
678
704
|
if (enableDexBuy && dexBuyers.length > 0) {
|
|
679
|
-
const dexType =
|
|
705
|
+
const dexType = lpFeeProfile >= 0 ? 'V3' : 'V2';
|
|
680
706
|
const v3Fee = lpFeeProfileToV3Fee(lpFeeProfile);
|
|
681
707
|
for (let i = 0; i < dexBuyers.length; i++) {
|
|
682
708
|
const { wallet, amount } = dexBuyers[i];
|
|
@@ -690,11 +716,15 @@ export async function bundleGraduateBuy(params) {
|
|
|
690
716
|
routerAddress = POTATOSWAP_V2_ROUTER;
|
|
691
717
|
swapData = encodeV2BuyCall(tokenAddress, wallet.address, deadline);
|
|
692
718
|
}
|
|
693
|
-
const dexBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
719
|
+
const dexBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
720
|
+
[
|
|
721
|
+
{
|
|
694
722
|
target: routerAddress,
|
|
695
723
|
value: amount,
|
|
696
724
|
data: swapData,
|
|
697
|
-
}
|
|
725
|
+
},
|
|
726
|
+
],
|
|
727
|
+
]);
|
|
698
728
|
// ✅ 修复:value 设为 0n,让钱包使用自己余额买入
|
|
699
729
|
calls.push({
|
|
700
730
|
target: wallet.address,
|
|
@@ -6,12 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* 只生成签名,由调用方决定如何提交
|
|
8
8
|
*/
|
|
9
|
-
import type { BundleSellParams
|
|
10
|
-
import { type UserType } from './utils.js';
|
|
11
|
-
export interface BundleSellParams extends BaseBundleSellParams {
|
|
12
|
-
/** 用户类型(影响利润率) */
|
|
13
|
-
userType?: UserType;
|
|
14
|
-
}
|
|
9
|
+
import type { BundleSellParams, BundleSellResult } from './types.js';
|
|
15
10
|
/**
|
|
16
11
|
* 批量卖出 - 生成签名后的交易
|
|
17
12
|
*
|
|
@@ -49,4 +44,5 @@ export interface BundleSellParams extends BaseBundleSellParams {
|
|
|
49
44
|
* fee: 2500,
|
|
50
45
|
* });
|
|
51
46
|
*/
|
|
47
|
+
export type { BundleSellParams } from './types.js';
|
|
52
48
|
export declare function bundleSell(params: BundleSellParams): Promise<BundleSellResult>;
|