four-flap-meme-sdk 1.9.49 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +41 -6
- package/README.md +31 -0
- package/README.zh-CN.md +41 -6
- package/dist/abis/common.js +74 -68
- package/dist/abis/flap/vault.js +9 -7
- package/dist/abis/index.d.ts +3 -4
- package/dist/abis/index.js +3 -4
- package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
- package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
- package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
- package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
- package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
- package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
- package/dist/bundle-core/config-helpers.d.ts +36 -0
- package/dist/bundle-core/config-helpers.js +57 -0
- package/dist/bundle-core/errors.d.ts +50 -0
- package/dist/bundle-core/errors.js +34 -0
- package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
- package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
- package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
- package/dist/bundle-core/four-meme/core-helpers.js +40 -0
- package/dist/bundle-core/four-meme/core.d.ts +4 -0
- package/dist/bundle-core/four-meme/core.js +515 -0
- package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
- package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
- package/dist/bundle-core/four-meme/private.d.ts +27 -0
- package/dist/bundle-core/four-meme/private.js +465 -0
- package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
- package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
- package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
- package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
- package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
- package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
- package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
- package/dist/bundle-core/four-meme/swap-internal.js +18 -0
- package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
- package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
- package/dist/bundle-core/four-meme/swap.d.ts +17 -0
- package/dist/bundle-core/four-meme/swap.js +505 -0
- package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
- package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
- package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
- package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
- package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
- package/dist/bundle-core/four-meme/types/index.js +1 -0
- package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
- package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
- package/dist/bundle-core/four-meme/types.d.ts +1 -0
- package/dist/bundle-core/four-meme/types.js +1 -0
- package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
- package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
- package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
- package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
- package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
- package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
- package/dist/bundle-core/index.d.ts +8 -0
- package/dist/bundle-core/index.js +8 -0
- package/dist/bundle-core/internal.d.ts +21 -0
- package/dist/bundle-core/internal.js +182 -0
- package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
- package/dist/bundle-core/sign-context-helpers.js +67 -0
- package/dist/bundle-core/submit.d.ts +293 -0
- package/dist/bundle-core/submit.js +727 -0
- package/dist/bundle-core/types/index.d.ts +8 -0
- package/dist/bundle-core/types/index.js +1 -0
- package/dist/bundle-core/types.d.ts +1 -0
- package/dist/bundle-core/types.js +1 -0
- package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
- package/dist/chains/bsc/four/approve-tokenmanager.js +1 -116
- package/dist/chains/bsc/four/config.d.ts +5 -70
- package/dist/chains/bsc/four/config.js +2 -115
- package/dist/chains/bsc/four/core.d.ts +1 -4
- package/dist/chains/bsc/four/core.js +1 -589
- package/dist/chains/bsc/four/disperse.d.ts +12 -0
- package/dist/chains/bsc/four/disperse.js +470 -0
- 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 -50
- package/dist/chains/bsc/four/internal.js +2 -237
- package/dist/chains/bsc/four/pairwise.d.ts +7 -0
- package/dist/chains/bsc/four/pairwise.js +308 -0
- package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
- package/dist/chains/bsc/four/pancake-proxy.js +1 -688
- 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 -746
- package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
- package/dist/chains/bsc/four/swap-buy-first.js +2 -506
- 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 -760
- package/dist/chains/bsc/four/sweep.d.ts +13 -0
- package/dist/chains/bsc/four/sweep.js +788 -0
- 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 -1534
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
- package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
- package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -207
- 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 +111 -686
- 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.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 +54 -23
- package/dist/chains/eni/batch-router/utils.js +32 -6
- package/dist/chains/eni/bundler/sign.js +4 -4
- package/dist/chains/eni/bundler/submit.js +1 -4
- package/dist/chains/eni/constants.js +1 -1
- package/dist/chains/eni/index.d.ts +1 -1
- package/dist/chains/eni/platforms/daoaas/create.js +2 -2
- package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
- package/dist/chains/eni/platforms/daoaas/index.js +3 -3
- package/dist/chains/eni/platforms/daoaas/meta.js +8 -4
- package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -43
- 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 -47
- 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.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.js +5 -13
- package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
- package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -20
- package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
- package/dist/chains/xlayer/eip7702/bundle-create.js +93 -56
- package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-sell.js +26 -74
- package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
- package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -68
- package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
- package/dist/chains/xlayer/eip7702/constants.js +3 -21
- package/dist/chains/xlayer/eip7702/index.d.ts +27 -46
- package/dist/chains/xlayer/eip7702/index.js +27 -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 +58 -291
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
- package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
- package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
- package/dist/chains/xlayer/eip7702/utils.js +23 -28
- package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
- package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
- package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
- package/dist/chains/xlayer/eip7702/volume.js +83 -158
- package/dist/chains/xlayer/eoa/constants.js +1 -1
- package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +64 -276
- package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
- package/dist/chains/xlayer/eoa/eoa-wash-volume.js +14 -14
- package/dist/chains/xlayer/eoa/index.d.ts +10 -6
- package/dist/chains/xlayer/eoa/index.js +8 -23
- package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
- package/dist/chains/xlayer/eoa/router-manager.js +3 -3
- package/dist/chains/xlayer/eoa/types-core.d.ts +363 -0
- package/dist/chains/xlayer/eoa/types-core.js +53 -0
- package/dist/chains/xlayer/eoa/types-create.d.ts +413 -0
- package/dist/chains/xlayer/eoa/types-create.js +9 -0
- package/dist/chains/xlayer/eoa/types-volume.d.ts +209 -0
- package/dist/chains/xlayer/eoa/types-volume.js +13 -0
- package/dist/chains/xlayer/eoa/types.d.ts +2 -2
- package/dist/chains/xlayer/eoa/types.js +1 -3
- package/dist/contracts/helper3.d.ts +20 -17
- package/dist/contracts/helper3.js +56 -20
- package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
- package/dist/contracts/tm-bundle-helpers.js +72 -0
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -117
- package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -70
- package/dist/contracts/tm-bundle-merkle/config.js +2 -115
- package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
- package/dist/contracts/tm-bundle-merkle/core.js +1 -588
- 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 -50
- package/dist/contracts/tm-bundle-merkle/internal.js +2 -236
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -687
- 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 -919
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -505
- 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 -757
- 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 +5 -6
- package/dist/contracts/tm-bundle-merkle/utils.js +5 -6
- package/dist/contracts/tm-bundle.d.ts +3 -51
- package/dist/contracts/tm-bundle.js +102 -142
- package/dist/contracts/tm.d.ts +3 -2
- package/dist/contracts/tm.js +36 -32
- package/dist/contracts/tm1.js +9 -4
- package/dist/contracts/tm2.js +9 -4
- package/dist/dex/direct-router-helpers.d.ts +264 -0
- package/dist/dex/direct-router-helpers.js +539 -0
- package/dist/dex/direct-router.d.ts +3 -125
- package/dist/dex/direct-router.js +237 -652
- 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/flows/create.d.ts +2 -2
- package/dist/flows/create.js +6 -6
- package/dist/flows/index.d.ts +1 -0
- package/dist/flows/index.js +1 -0
- package/dist/index.d.ts +20 -91
- package/dist/index.js +20 -215
- package/dist/shared/abis/common.d.ts +2 -83
- package/dist/shared/abis/common.js +2 -252
- package/dist/shared/abis/index.d.ts +5 -6
- package/dist/shared/abis/index.js +5 -7
- package/dist/shared/clients/blockrazor.js +41 -24
- package/dist/shared/clients/club48.js +30 -26
- package/dist/shared/clients/emitservice.js +2 -0
- package/dist/shared/clients/four.js +23 -18
- package/dist/shared/clients/index.d.ts +8 -0
- package/dist/shared/clients/index.js +8 -0
- package/dist/shared/clients/merkle.js +26 -30
- package/dist/shared/constants/addresses.d.ts +1 -1
- package/dist/shared/constants/addresses.js +11 -2
- package/dist/shared/constants/chains.d.ts +1 -1
- package/dist/shared/constants/chains.js +1 -1
- package/dist/shared/constants/gas.d.ts +1 -1
- package/dist/shared/constants/gas.js +2 -6
- package/dist/shared/constants/index.d.ts +1 -0
- package/dist/shared/constants/index.js +1 -0
- package/dist/shared/constants/quote.d.ts +30 -0
- package/dist/shared/constants/quote.js +37 -0
- package/dist/shared/flap/__tests__/curve.test.js +3 -3
- package/dist/shared/flap/abi.js +1 -1
- package/dist/shared/flap/constants.d.ts +1 -1
- package/dist/shared/flap/constants.js +2 -2
- package/dist/shared/flap/curve.js +3 -0
- package/dist/shared/flap/errors.d.ts +1 -4
- package/dist/shared/flap/errors.js +21 -3
- package/dist/shared/flap/index.d.ts +2 -2
- package/dist/shared/flap/index.js +2 -2
- package/dist/shared/flap/meta.d.ts +16 -18
- package/dist/shared/flap/meta.js +14 -26
- package/dist/shared/flap/permit.js +6 -5
- package/dist/shared/flap/pinata.d.ts +9 -2
- package/dist/shared/flap/pinata.js +20 -18
- 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 +66 -156
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +81 -86
- package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
- package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
- package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
- package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
- package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
- package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
- package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
- package/dist/shared/flap/portal-bundle-merkle/types.d.ts +73 -3
- package/dist/shared/flap/portal-bundle-merkle/utils-helpers.d.ts +100 -0
- package/dist/shared/flap/portal-bundle-merkle/utils-helpers.js +133 -0
- 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 +54 -42
- package/dist/shared/flap/portal.js +32 -10
- package/dist/shared/flap/vanity.js +4 -7
- package/dist/shared/flap/vault.d.ts +1 -1
- package/dist/shared/flap/vault.js +54 -48
- package/dist/shared/flap 2/__tests__/curve.test.d.ts +1 -0
- package/dist/shared/flap 2/portal-bundle-merkle/types.js +1 -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/gas/bundle-gas.d.ts +39 -0
- package/dist/shared/foundation/gas/bundle-gas.js +93 -0
- package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
- package/dist/shared/foundation/gas/profit-hop.js +72 -0
- package/dist/shared/foundation/index.d.ts +13 -0
- package/dist/shared/foundation/index.js +12 -0
- package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
- package/dist/shared/foundation/nonce/nonce-manager.js +180 -0
- package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
- package/dist/shared/foundation/normalize-unknown.js +29 -0
- package/dist/shared/foundation/sdk-logger.d.ts +13 -0
- package/dist/shared/foundation/sdk-logger.js +12 -0
- package/dist/shared/foundation/tx/build-request.d.ts +17 -0
- package/dist/shared/foundation/tx/build-request.js +25 -0
- package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
- package/dist/shared/foundation/tx/sign-batch.js +26 -0
- package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
- package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
- package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
- package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
- package/dist/shared/foundation/types/erc20.d.ts +65 -0
- package/dist/shared/foundation/types/erc20.js +1 -0
- package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
- package/dist/shared/foundation/types/holders-maker.js +1 -0
- package/dist/shared/foundation/types/index.d.ts +7 -0
- package/dist/shared/foundation/types/index.js +1 -0
- package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
- package/dist/shared/foundation/types/lp-inspect.js +1 -0
- package/dist/shared/foundation/types/multicall.d.ts +5 -0
- package/dist/shared/foundation/types/multicall.js +1 -0
- package/dist/shared/foundation/types/private-sale.d.ts +35 -0
- package/dist/shared/foundation/types/private-sale.js +1 -0
- package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
- package/dist/shared/foundation/types/quote-helpers.js +1 -0
- package/dist/shared/four/tax-token.d.ts +1 -1
- package/dist/shared/four/tax-token.js +27 -7
- package/dist/shared/index.d.ts +4 -0
- package/dist/shared/index.js +4 -0
- package/dist/types/distribute.d.ts +72 -0
- package/dist/types/distribute.js +1 -0
- package/dist/types 2/errors.d.ts +27 -0
- package/dist/types 2/errors.js +34 -0
- package/dist/utils/airdrop-sweep-types.d.ts +1 -0
- package/dist/utils/airdrop-sweep-types.js +1 -0
- package/dist/utils/airdrop-sweep.d.ts +4 -76
- package/dist/utils/airdrop-sweep.js +38 -52
- 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-types.d.ts +1 -0
- package/dist/utils/erc20-types.js +1 -0
- package/dist/utils/erc20.d.ts +8 -90
- package/dist/utils/erc20.js +94 -153
- package/dist/utils/errors.d.ts +10 -22
- package/dist/utils/errors.js +61 -79
- 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-types.d.ts +1 -0
- package/dist/utils/holders-maker-types.js +1 -0
- package/dist/utils/holders-maker.d.ts +2 -138
- package/dist/utils/holders-maker.js +23 -651
- 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-types.d.ts +1 -0
- package/dist/utils/lp-inspect-types.js +1 -0
- package/dist/utils/lp-inspect.d.ts +2 -112
- package/dist/utils/lp-inspect.js +63 -195
- package/dist/utils/mpcExclusive.d.ts +2 -5
- package/dist/utils/mpcExclusive.js +4 -3
- package/dist/utils/private-sale-types.d.ts +1 -0
- package/dist/utils/private-sale-types.js +1 -0
- package/dist/utils/private-sale.d.ts +2 -58
- package/dist/utils/private-sale.js +2 -7
- package/dist/utils/provider-factory.d.ts +4 -0
- package/dist/utils/provider-factory.js +10 -0
- package/dist/utils/quote-helpers-types.d.ts +1 -0
- package/dist/utils/quote-helpers-types.js +1 -0
- package/dist/utils/quote-helpers.d.ts +4 -45
- package/dist/utils/quote-helpers.js +15 -65
- package/dist/utils/stealth-transfer.d.ts +2 -28
- package/dist/utils/stealth-transfer.js +30 -14
- package/dist/utils/swap-helpers.d.ts +0 -3
- package/dist/utils/swap-helpers.js +6 -9
- package/dist/utils/types/airdrop-sweep.d.ts +1 -0
- package/dist/utils/types/airdrop-sweep.js +1 -0
- package/dist/utils/types/contract-factory.d.ts +1 -0
- package/dist/utils/types/contract-factory.js +1 -0
- package/dist/utils/types/erc20.d.ts +1 -0
- package/dist/utils/types/erc20.js +1 -0
- package/dist/utils/types/errors.d.ts +1 -0
- package/dist/utils/types/errors.js +1 -0
- package/dist/utils/types/holders-maker.d.ts +1 -0
- package/dist/utils/types/holders-maker.js +1 -0
- package/dist/utils/types/hop-chains.d.ts +8 -0
- package/dist/utils/types/hop-chains.js +1 -0
- package/dist/utils/types/index.d.ts +13 -0
- package/dist/utils/types/index.js +1 -0
- package/dist/utils/types/lp-inspect.d.ts +1 -0
- package/dist/utils/types/lp-inspect.js +1 -0
- package/dist/utils/types/mpc-exclusive.d.ts +5 -0
- package/dist/utils/types/mpc-exclusive.js +1 -0
- package/dist/utils/types/private-sale.d.ts +1 -0
- package/dist/utils/types/private-sale.js +1 -0
- package/dist/utils/types/quote-helpers.d.ts +1 -0
- package/dist/utils/types/quote-helpers.js +1 -0
- package/dist/utils/types/stealth-transfer.d.ts +44 -0
- package/dist/utils/types/stealth-transfer.js +1 -0
- package/dist/utils/types/wallet.d.ts +25 -0
- package/dist/utils/types/wallet.js +1 -0
- package/dist/utils/wallet.d.ts +2 -25
- package/dist/utils/wallet.js +9 -10
- package/package.json +55 -2
- package/src/abis/contracts/TaxToken.json +969 -0
- package/src/abis/contracts/TokenManager.json +836 -0
- package/src/abis/contracts/TokenManager2.json +136 -0
- package/src/abis/contracts/TokenManagerHelper3.json +993 -0
- /package/dist/{shared 2/flap/__tests__/curve.test.d.ts → bundle-core/__tests__/config-helpers.test.d.ts} +0 -0
- /package/dist/{shared 2/flap/portal-bundle-merkle/types.js → bundle-core/__tests__/facade-parity.test.d.ts} +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/TaxToken.json +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/TokenManager.json +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/TokenManager2.json +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/TokenManagerHelper3.json +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/common.d.ts +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/common.js +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/index.d.ts +0 -0
- /package/dist/{shared 2/abis → shared/abis 2}/index.js +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/blockrazor.d.ts +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/blockrazor.js +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/club48.d.ts +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/club48.js +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/emitservice.d.ts +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/emitservice.js +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/four.d.ts +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/four.js +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/merkle.d.ts +0 -0
- /package/dist/{shared 2/clients → shared/clients 2}/merkle.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/__tests__/curve.test.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/abi.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/abi.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/constants.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/constants.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/curve.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/curve.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/errors.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/errors.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/index.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/index.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/ipfs.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/ipfs.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/meta.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/meta.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/permit.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/permit.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/pinata.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/pinata.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/config.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/config.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/core.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/core.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/create-to-dex.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/create-to-dex.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/curve-to-dex.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/curve-to-dex.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/index.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/index.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/pancake-proxy.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/pancake-proxy.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/private.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/private.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap-buy-first.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap-buy-first.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/types.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/utils.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/utils.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/portal.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/vanity.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/vanity.js +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/vault.d.ts +0 -0
- /package/dist/{shared 2/flap → shared/flap 2}/vault.js +0 -0
- /package/dist/{shared 2/four → shared/four 2}/index.d.ts +0 -0
- /package/dist/{shared 2/four → shared/four 2}/index.js +0 -0
- /package/dist/{shared 2/four → shared/four 2}/tax-token.d.ts +0 -0
- /package/dist/{shared 2/four → shared/four 2}/tax-token.js +0 -0
- /package/dist/{shared 2/index.d.ts → shared/index 2.js} +0 -0
- /package/dist/{shared 2/index.js → shared/index.d 2.ts} +0 -0
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
* 需要使用 executeApprove 函数
|
|
9
9
|
*/
|
|
10
10
|
import { ethers, Contract } from 'ethers';
|
|
11
|
-
import { getCachedProvider, createWallet, signAuthorizationsBatch, buildEIP7702Transaction
|
|
12
|
-
import { UNIFIED_DELEGATE_ADDRESS, UNIFIED_DELEGATE_ABI, ERC20_ABI
|
|
11
|
+
import { getCachedProvider, createWallet, signAuthorizationsBatch, buildEIP7702Transaction } from './utils.js';
|
|
12
|
+
import { UNIFIED_DELEGATE_ADDRESS, UNIFIED_DELEGATE_ABI, ERC20_ABI } from './constants.js';
|
|
13
13
|
// 扩展 ABI 包含 executeApprove
|
|
14
14
|
const EXTENDED_DELEGATE_ABI = [
|
|
15
15
|
...UNIFIED_DELEGATE_ABI,
|
|
@@ -22,11 +22,7 @@ function buildApproveCalls(wallets, tokenAddress, spenderAddress, amount) {
|
|
|
22
22
|
const delegateInterface = new ethers.Interface(EXTENDED_DELEGATE_ABI);
|
|
23
23
|
const calls = [];
|
|
24
24
|
for (const wallet of wallets) {
|
|
25
|
-
const callData = delegateInterface.encodeFunctionData('executeApprove', [
|
|
26
|
-
tokenAddress,
|
|
27
|
-
spenderAddress,
|
|
28
|
-
amount,
|
|
29
|
-
]);
|
|
25
|
+
const callData = delegateInterface.encodeFunctionData('executeApprove', [tokenAddress, spenderAddress, amount]);
|
|
30
26
|
calls.push({
|
|
31
27
|
target: wallet.address,
|
|
32
28
|
allowFailure: false,
|
|
@@ -43,20 +39,19 @@ function buildApproveCalls(wallets, tokenAddress, spenderAddress, amount) {
|
|
|
43
39
|
* @returns 签名后的交易和元数据
|
|
44
40
|
*/
|
|
45
41
|
export async function bundleApprove(params) {
|
|
46
|
-
const { mainPrivateKey, privateKeys, tokenAddress, spenderAddress, amount = ethers.MaxUint256, config
|
|
42
|
+
const { mainPrivateKey, privateKeys, tokenAddress, spenderAddress, amount = ethers.MaxUint256, config } = params;
|
|
47
43
|
if (privateKeys.length === 0) {
|
|
48
44
|
throw new Error('privateKeys 不能为空');
|
|
49
45
|
}
|
|
50
46
|
const provider = getCachedProvider(config?.rpcUrl);
|
|
51
47
|
const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
|
|
52
48
|
const mainWallet = createWallet(mainPrivateKey, provider);
|
|
53
|
-
const wallets = privateKeys.map(pk => createWallet(pk, provider));
|
|
49
|
+
const wallets = privateKeys.map((pk) => createWallet(pk, provider));
|
|
54
50
|
// 检查 mainWallet 是否在 wallets 中
|
|
55
|
-
const mainWalletIndex = wallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
51
|
+
const mainWalletIndex = wallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
56
52
|
// 只为需要执行授权操作的钱包生成 authorization
|
|
57
53
|
// mainWallet 如果不在 privateKeys 中,只是支付 gas,不需要 authorization
|
|
58
|
-
const authorizations = await signAuthorizationsBatch(wallets, delegateAddress, provider, mainWalletIndex
|
|
59
|
-
);
|
|
54
|
+
const authorizations = await signAuthorizationsBatch(wallets, delegateAddress, provider, mainWalletIndex);
|
|
60
55
|
const calls = buildApproveCalls(wallets, tokenAddress, spenderAddress, amount);
|
|
61
56
|
const signedTransaction = await buildEIP7702Transaction(mainWallet, authorizations, calls, 0n, config);
|
|
62
57
|
return {
|
|
@@ -78,11 +73,7 @@ function buildApproveCallsMultiSpenders(wallets, tokenAddress, spenderAddresses,
|
|
|
78
73
|
// 对每个钱包,授权所有 spender
|
|
79
74
|
for (const wallet of wallets) {
|
|
80
75
|
for (const spender of spenderAddresses) {
|
|
81
|
-
const callData = delegateInterface.encodeFunctionData('executeApprove', [
|
|
82
|
-
tokenAddress,
|
|
83
|
-
spender,
|
|
84
|
-
amount,
|
|
85
|
-
]);
|
|
76
|
+
const callData = delegateInterface.encodeFunctionData('executeApprove', [tokenAddress, spender, amount]);
|
|
86
77
|
calls.push({
|
|
87
78
|
target: wallet.address,
|
|
88
79
|
allowFailure: false,
|
|
@@ -103,7 +94,7 @@ function buildApproveCallsMultiSpenders(wallets, tokenAddress, spenderAddresses,
|
|
|
103
94
|
* @returns 签名后的交易和元数据
|
|
104
95
|
*/
|
|
105
96
|
export async function bundleApproveMultiSpenders(params) {
|
|
106
|
-
const { mainPrivateKey, privateKeys, tokenAddress, spenderAddresses, amount = ethers.MaxUint256, config
|
|
97
|
+
const { mainPrivateKey, privateKeys, tokenAddress, spenderAddresses, amount = ethers.MaxUint256, config } = params;
|
|
107
98
|
if (privateKeys.length === 0) {
|
|
108
99
|
throw new Error('privateKeys 不能为空');
|
|
109
100
|
}
|
|
@@ -113,9 +104,9 @@ export async function bundleApproveMultiSpenders(params) {
|
|
|
113
104
|
const provider = getCachedProvider(config?.rpcUrl);
|
|
114
105
|
const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
|
|
115
106
|
const mainWallet = createWallet(mainPrivateKey, provider);
|
|
116
|
-
const wallets = privateKeys.map(pk => createWallet(pk, provider));
|
|
107
|
+
const wallets = privateKeys.map((pk) => createWallet(pk, provider));
|
|
117
108
|
// 检查 mainWallet 是否在 wallets 中
|
|
118
|
-
const mainWalletIndex = wallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
109
|
+
const mainWalletIndex = wallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
119
110
|
// 只为需要执行授权操作的钱包生成 authorization
|
|
120
111
|
const authorizations = await signAuthorizationsBatch(wallets, delegateAddress, provider, mainWalletIndex);
|
|
121
112
|
// ✅ 关键:一次性构建所有 approve 调用
|
|
@@ -6,12 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* 只生成签名,由调用方决定如何提交
|
|
8
8
|
*/
|
|
9
|
-
import type { BundleBuyParams
|
|
10
|
-
import { type UserType } from './utils.js';
|
|
11
|
-
export interface BundleBuyParams extends BaseBundleBuyParams {
|
|
12
|
-
/** 用户类型(影响利润率) */
|
|
13
|
-
userType?: UserType;
|
|
14
|
-
}
|
|
9
|
+
import type { BundleBuyParams, BundleBuyResult } from './types.js';
|
|
15
10
|
/**
|
|
16
11
|
* 批量买入 - 生成签名后的交易
|
|
17
12
|
*
|
|
@@ -49,4 +44,5 @@ export interface BundleBuyParams extends BaseBundleBuyParams {
|
|
|
49
44
|
* fee: 2500, // 0.25%
|
|
50
45
|
* });
|
|
51
46
|
*/
|
|
47
|
+
export type { BundleBuyParams } from './types.js';
|
|
52
48
|
export declare function bundleBuy(params: BundleBuyParams): Promise<BundleBuyResult>;
|
|
@@ -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),
|
|
@@ -24,10 +24,14 @@ const ZERO_HASH = '0x00000000000000000000000000000000000000000000000000000000000
|
|
|
24
24
|
*/
|
|
25
25
|
function lpFeeProfileToV3Fee(lpFeeProfile) {
|
|
26
26
|
switch (lpFeeProfile) {
|
|
27
|
-
case 0:
|
|
28
|
-
|
|
29
|
-
case
|
|
30
|
-
|
|
27
|
+
case 0:
|
|
28
|
+
return V3_FEE_TIERS.MEDIUM; // 0.25%
|
|
29
|
+
case 1:
|
|
30
|
+
return V3_FEE_TIERS.LOWEST; // 0.01%
|
|
31
|
+
case 2:
|
|
32
|
+
return V3_FEE_TIERS.HIGH; // 1%
|
|
33
|
+
default:
|
|
34
|
+
return V3_FEE_TIERS.MEDIUM;
|
|
31
35
|
}
|
|
32
36
|
}
|
|
33
37
|
/**
|
|
@@ -69,24 +73,28 @@ function encodeFlapBuyCall(tokenAddress, inputAmount, useV3OrV4 = false, extensi
|
|
|
69
73
|
const portalIface = new Interface(FLAP_PORTAL_ABI);
|
|
70
74
|
if (useV3OrV4) {
|
|
71
75
|
// V3/V4 代币使用 swapExactInputV3(支持 extensionData)
|
|
72
|
-
return portalIface.encodeFunctionData('swapExactInputV3', [
|
|
76
|
+
return portalIface.encodeFunctionData('swapExactInputV3', [
|
|
77
|
+
{
|
|
73
78
|
inputToken: ZERO_ADDRESS,
|
|
74
79
|
outputToken: tokenAddress,
|
|
75
80
|
inputAmount,
|
|
76
81
|
minOutputAmount: 0n,
|
|
77
82
|
permitData: '0x',
|
|
78
83
|
extensionData,
|
|
79
|
-
}
|
|
84
|
+
},
|
|
85
|
+
]);
|
|
80
86
|
}
|
|
81
87
|
else {
|
|
82
88
|
// V2 代币使用 swapExactInput
|
|
83
|
-
return portalIface.encodeFunctionData('swapExactInput', [
|
|
89
|
+
return portalIface.encodeFunctionData('swapExactInput', [
|
|
90
|
+
{
|
|
84
91
|
inputToken: ZERO_ADDRESS,
|
|
85
92
|
outputToken: tokenAddress,
|
|
86
93
|
inputAmount,
|
|
87
94
|
minOutputAmount: 0n,
|
|
88
95
|
permitData: '0x',
|
|
89
|
-
}
|
|
96
|
+
},
|
|
97
|
+
]);
|
|
90
98
|
}
|
|
91
99
|
}
|
|
92
100
|
/**
|
|
@@ -98,7 +106,8 @@ function encodeV3BuyCall(tokenAddress, fee, recipient, deadline, amountIn) {
|
|
|
98
106
|
'function multicall(uint256 deadline, bytes[] data) external payable returns (bytes[])',
|
|
99
107
|
'function refundETH() external payable',
|
|
100
108
|
]);
|
|
101
|
-
const exactInputData = routerIface.encodeFunctionData('exactInputSingle', [
|
|
109
|
+
const exactInputData = routerIface.encodeFunctionData('exactInputSingle', [
|
|
110
|
+
{
|
|
102
111
|
tokenIn: WOKB_ADDRESS,
|
|
103
112
|
tokenOut: tokenAddress,
|
|
104
113
|
fee,
|
|
@@ -106,7 +115,8 @@ function encodeV3BuyCall(tokenAddress, fee, recipient, deadline, amountIn) {
|
|
|
106
115
|
amountIn,
|
|
107
116
|
amountOutMinimum: 0n,
|
|
108
117
|
sqrtPriceLimitX96: 0n,
|
|
109
|
-
}
|
|
118
|
+
},
|
|
119
|
+
]);
|
|
110
120
|
const refundEthData = routerIface.encodeFunctionData('refundETH', []);
|
|
111
121
|
return routerIface.encodeFunctionData('multicall', [deadline, [exactInputData, refundEthData]]);
|
|
112
122
|
}
|
|
@@ -160,22 +170,21 @@ export async function bundleCreateBuy(params) {
|
|
|
160
170
|
const delegateInterface = new Interface(UNIFIED_DELEGATE_ABI);
|
|
161
171
|
// 创建钱包
|
|
162
172
|
const devWallet = createWallet(devPrivateKey, provider);
|
|
163
|
-
const buyerWallets = buyerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
173
|
+
const buyerWallets = buyerPrivateKeys.map((pk) => createWallet(pk, provider));
|
|
164
174
|
const allWallets = [devWallet, ...buyerWallets];
|
|
165
175
|
const mainWallet = devWallet;
|
|
166
176
|
// 计算买入金额和利润(单边模式:只有买入)
|
|
167
|
-
const buyAmountsWei = buyAmounts.map(amt => ethers.parseEther(amt));
|
|
177
|
+
const buyAmountsWei = buyAmounts.map((amt) => ethers.parseEther(amt));
|
|
168
178
|
const totalBuyAmount = buyAmountsWei.reduce((sum, amt) => sum + amt, 0n);
|
|
169
179
|
const profitAmount = calculateProfitAmountByUserType(totalBuyAmount, userType, false); // ✅ 支持 userType
|
|
170
180
|
const profitRecipient = getProfitRecipient(config);
|
|
171
181
|
// 并行获取 nonce 和 fee data
|
|
172
182
|
const [nonces, feeData] = await Promise.all([
|
|
173
|
-
batchGetNonces(allWallets.map(w => w.address), provider),
|
|
183
|
+
batchGetNonces(allWallets.map((w) => w.address), provider),
|
|
174
184
|
provider.getFeeData(),
|
|
175
185
|
]);
|
|
176
186
|
// 签名授权
|
|
177
|
-
const authorizations = signAuthorizationsWithNonces(allWallets, nonces, delegateAddress, 0
|
|
178
|
-
);
|
|
187
|
+
const authorizations = signAuthorizationsWithNonces(allWallets, nonces, delegateAddress, 0);
|
|
179
188
|
// 构建调用
|
|
180
189
|
const calls = [];
|
|
181
190
|
// 1. 利润转账(从开发者钱包)
|
|
@@ -216,7 +225,7 @@ export async function bundleCreateBuy(params) {
|
|
|
216
225
|
deflationBps: tv2.deflationBps,
|
|
217
226
|
dividendBps: tv2.dividendBps,
|
|
218
227
|
lpBps: tv2.lpBps,
|
|
219
|
-
minimumShareBalance: BigInt(tv2.minimumShareBalance ?? 10000) *
|
|
228
|
+
minimumShareBalance: BigInt(tv2.minimumShareBalance ?? 10000) * 10n ** 18n,
|
|
220
229
|
});
|
|
221
230
|
}
|
|
222
231
|
else if (useV4) {
|
|
@@ -271,11 +280,15 @@ export async function bundleCreateBuy(params) {
|
|
|
271
280
|
});
|
|
272
281
|
}
|
|
273
282
|
// 使用 executeBatch 从 devWallet 调用 Portal.newToken
|
|
274
|
-
const createBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
283
|
+
const createBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
284
|
+
[
|
|
285
|
+
{
|
|
275
286
|
target: FLAP_PORTAL_ADDRESS,
|
|
276
287
|
value: params.quoteAmt ?? 0n,
|
|
277
288
|
data: createData,
|
|
278
|
-
}
|
|
289
|
+
},
|
|
290
|
+
],
|
|
291
|
+
]);
|
|
279
292
|
calls.push({
|
|
280
293
|
target: devWallet.address,
|
|
281
294
|
allowFailure: false,
|
|
@@ -290,11 +303,15 @@ export async function bundleCreateBuy(params) {
|
|
|
290
303
|
const buyAmount = buyAmountsWei[i];
|
|
291
304
|
// 使用 executeBatch 从 buyerWallet 调用 Portal
|
|
292
305
|
const buyData = encodeFlapBuyCall(tokenAddress, buyAmount, useV3OrV4, extensionData);
|
|
293
|
-
const buyBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
306
|
+
const buyBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
307
|
+
[
|
|
308
|
+
{
|
|
294
309
|
target: FLAP_PORTAL_ADDRESS,
|
|
295
310
|
value: buyAmount,
|
|
296
311
|
data: buyData,
|
|
297
|
-
}
|
|
312
|
+
},
|
|
313
|
+
],
|
|
314
|
+
]);
|
|
298
315
|
// ✅ 修复:value 设为 0n,让钱包使用自己余额买入
|
|
299
316
|
calls.push({
|
|
300
317
|
target: buyerWallet.address,
|
|
@@ -346,19 +363,19 @@ export async function bundleCreateToDex(params) {
|
|
|
346
363
|
const delegateInterface = new Interface(UNIFIED_DELEGATE_ABI);
|
|
347
364
|
// 创建钱包
|
|
348
365
|
const payerWallet = createWallet(payerPrivateKey, provider);
|
|
349
|
-
const curveBuyerWallets = curveBuyerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
350
|
-
const dexBuyerWallets = dexBuyerPrivateKeys.map(pk => createWallet(pk, provider));
|
|
366
|
+
const curveBuyerWallets = curveBuyerPrivateKeys.map((pk) => createWallet(pk, provider));
|
|
367
|
+
const dexBuyerWallets = dexBuyerPrivateKeys.map((pk) => createWallet(pk, provider));
|
|
351
368
|
// 合并所有钱包(去重)
|
|
352
369
|
const allWalletsMap = new Map();
|
|
353
370
|
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));
|
|
371
|
+
curveBuyerWallets.forEach((w) => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
372
|
+
dexBuyerWallets.forEach((w) => allWalletsMap.set(w.address.toLowerCase(), w));
|
|
356
373
|
const allWallets = Array.from(allWalletsMap.values());
|
|
357
374
|
const mainWallet = payerWallet;
|
|
358
|
-
const mainWalletIndex = allWallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
375
|
+
const mainWalletIndex = allWallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
359
376
|
// 计算金额和利润(单边模式:只有买入)
|
|
360
|
-
const curveBuyAmountsWei = curveBuyAmounts.map(amt => ethers.parseEther(amt));
|
|
361
|
-
const dexBuyAmountsWei = dexBuyAmounts.map(amt => ethers.parseEther(amt));
|
|
377
|
+
const curveBuyAmountsWei = curveBuyAmounts.map((amt) => ethers.parseEther(amt));
|
|
378
|
+
const dexBuyAmountsWei = dexBuyAmounts.map((amt) => ethers.parseEther(amt));
|
|
362
379
|
const totalCurveBuyAmount = curveBuyAmountsWei.reduce((sum, amt) => sum + amt, 0n);
|
|
363
380
|
const totalDexBuyAmount = dexBuyAmountsWei.reduce((sum, amt) => sum + amt, 0n);
|
|
364
381
|
const totalBuyAmount = totalCurveBuyAmount + totalDexBuyAmount;
|
|
@@ -366,7 +383,7 @@ export async function bundleCreateToDex(params) {
|
|
|
366
383
|
const profitRecipient = getProfitRecipient(config);
|
|
367
384
|
// 并行获取 nonce 和 fee data
|
|
368
385
|
const [nonces, feeData] = await Promise.all([
|
|
369
|
-
batchGetNonces(allWallets.map(w => w.address), provider),
|
|
386
|
+
batchGetNonces(allWallets.map((w) => w.address), provider),
|
|
370
387
|
provider.getFeeData(),
|
|
371
388
|
]);
|
|
372
389
|
// 签名授权
|
|
@@ -410,7 +427,7 @@ export async function bundleCreateToDex(params) {
|
|
|
410
427
|
deflationBps: tv2.deflationBps,
|
|
411
428
|
dividendBps: tv2.dividendBps,
|
|
412
429
|
lpBps: tv2.lpBps,
|
|
413
|
-
minimumShareBalance: BigInt(tv2.minimumShareBalance ?? 10000) *
|
|
430
|
+
minimumShareBalance: BigInt(tv2.minimumShareBalance ?? 10000) * 10n ** 18n,
|
|
414
431
|
});
|
|
415
432
|
}
|
|
416
433
|
else {
|
|
@@ -432,11 +449,15 @@ export async function bundleCreateToDex(params) {
|
|
|
432
449
|
lpFeeProfile: params.lpFeeProfile ?? 0,
|
|
433
450
|
});
|
|
434
451
|
}
|
|
435
|
-
const createBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
452
|
+
const createBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
453
|
+
[
|
|
454
|
+
{
|
|
436
455
|
target: FLAP_PORTAL_ADDRESS,
|
|
437
456
|
value: params.quoteAmt ?? 0n,
|
|
438
457
|
data: createData,
|
|
439
|
-
}
|
|
458
|
+
},
|
|
459
|
+
],
|
|
460
|
+
]);
|
|
440
461
|
calls.push({
|
|
441
462
|
target: payerWallet.address,
|
|
442
463
|
allowFailure: false,
|
|
@@ -449,11 +470,15 @@ export async function bundleCreateToDex(params) {
|
|
|
449
470
|
const buyerWallet = curveBuyerWallets[i];
|
|
450
471
|
const buyAmount = curveBuyAmountsWei[i];
|
|
451
472
|
const buyData = encodeFlapBuyCall(tokenAddress, buyAmount, true, extensionData);
|
|
452
|
-
const buyBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
473
|
+
const buyBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
474
|
+
[
|
|
475
|
+
{
|
|
453
476
|
target: FLAP_PORTAL_ADDRESS,
|
|
454
477
|
value: buyAmount,
|
|
455
478
|
data: buyData,
|
|
456
|
-
}
|
|
479
|
+
},
|
|
480
|
+
],
|
|
481
|
+
]);
|
|
457
482
|
// ✅ 修复:value 设为 0n,让钱包使用自己余额买入
|
|
458
483
|
calls.push({
|
|
459
484
|
target: buyerWallet.address,
|
|
@@ -464,7 +489,7 @@ export async function bundleCreateToDex(params) {
|
|
|
464
489
|
}
|
|
465
490
|
// 4. 外盘买入(如果启用)
|
|
466
491
|
if (enableDexBuy && dexBuyerWallets.length > 0) {
|
|
467
|
-
const dexType =
|
|
492
|
+
const dexType = params.lpFeeProfile !== undefined && params.lpFeeProfile >= 0 ? 'V3' : 'V2';
|
|
468
493
|
const v3Fee = lpFeeProfileToV3Fee(params.lpFeeProfile);
|
|
469
494
|
for (let i = 0; i < dexBuyerWallets.length; i++) {
|
|
470
495
|
const buyerWallet = dexBuyerWallets[i];
|
|
@@ -480,11 +505,15 @@ export async function bundleCreateToDex(params) {
|
|
|
480
505
|
swapData = encodeV2BuyCall(tokenAddress, buyerWallet.address, deadline);
|
|
481
506
|
}
|
|
482
507
|
// 使用 executeBatch 调用 DEX Router
|
|
483
|
-
const dexBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
508
|
+
const dexBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
509
|
+
[
|
|
510
|
+
{
|
|
484
511
|
target: routerAddress,
|
|
485
512
|
value: buyAmount,
|
|
486
513
|
data: swapData,
|
|
487
|
-
}
|
|
514
|
+
},
|
|
515
|
+
],
|
|
516
|
+
]);
|
|
488
517
|
// ✅ 修复:value 设为 0n,让钱包使用自己余额买入
|
|
489
518
|
calls.push({
|
|
490
519
|
target: buyerWallet.address,
|
|
@@ -498,13 +527,13 @@ export async function bundleCreateToDex(params) {
|
|
|
498
527
|
const totalValue = params.quoteAmt ?? 0n;
|
|
499
528
|
// ✅ 动态计算 Gas Limit:基础操作 + 毕业额外 gas
|
|
500
529
|
// 毕业操作需要约 800 万 gas,加上其他操作的 gas
|
|
501
|
-
const baseGas = GAS_ESTIMATE.BASE
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
530
|
+
const baseGas = GAS_ESTIMATE.BASE +
|
|
531
|
+
BigInt(allWallets.length) * GAS_ESTIMATE.PER_AUTHORIZATION +
|
|
532
|
+
BigInt(calls.length) * GAS_ESTIMATE.PER_CALL_BASE +
|
|
533
|
+
BigInt(curveBuyerWallets.length) * GAS_ESTIMATE.BUY_EXTRA + // 内盘买入
|
|
534
|
+
BigInt(dexBuyerWallets.length) * GAS_ESTIMATE.BUY_EXTRA + // 外盘买入
|
|
535
|
+
GAS_ESTIMATE.CREATE_TOKEN + // 创建代币
|
|
536
|
+
GAS_ESTIMATE.GRADUATE; // 毕业操作 (800万)
|
|
508
537
|
const dynamicGasLimit = BigInt(Math.ceil(Number(baseGas) * GAS_ESTIMATE.SAFETY_MULTIPLIER));
|
|
509
538
|
const finalGasLimit = dynamicGasLimit > GAS_ESTIMATE.MAX ? GAS_ESTIMATE.MAX : dynamicGasLimit;
|
|
510
539
|
const toDexConfig = {
|
|
@@ -547,7 +576,7 @@ export async function bundleGraduateBuy(params) {
|
|
|
547
576
|
const delegateInterface = new Interface(UNIFIED_DELEGATE_ABI);
|
|
548
577
|
// 创建钱包
|
|
549
578
|
const payerWallet = createWallet(payerPrivateKey, provider);
|
|
550
|
-
const wallets = privateKeys.map(pk => createWallet(pk, provider));
|
|
579
|
+
const wallets = privateKeys.map((pk) => createWallet(pk, provider));
|
|
551
580
|
// 获取代币状态
|
|
552
581
|
const portalContract = new Contract(FLAP_PORTAL_ADDRESS, FLAP_PORTAL_ABI, provider);
|
|
553
582
|
const tokenState = await portalContract.getTokenV7(tokenAddress);
|
|
@@ -556,7 +585,7 @@ export async function bundleGraduateBuy(params) {
|
|
|
556
585
|
const k = tokenState[6];
|
|
557
586
|
const lpFeeProfile = Number(tokenState[15]);
|
|
558
587
|
// 计算毕业容量
|
|
559
|
-
const graduationReserveWei = (h * k) /
|
|
588
|
+
const graduationReserveWei = (h * k) / 10n ** 18n;
|
|
560
589
|
const poolReserveOkb = Number(ethers.formatEther(reserve));
|
|
561
590
|
const graduateCapacity = graduationAmount ?? Number(ethers.formatEther(graduationReserveWei));
|
|
562
591
|
const remainingToGraduate = Math.max(0, graduateCapacity - poolReserveOkb);
|
|
@@ -588,8 +617,8 @@ export async function bundleGraduateBuy(params) {
|
|
|
588
617
|
const dexBuyers = [];
|
|
589
618
|
const hasFrontendGrouping = curveAddresses && curveAddresses.length > 0;
|
|
590
619
|
if (hasFrontendGrouping) {
|
|
591
|
-
const curveSet = new Set(curveAddresses.map(a => a.toLowerCase()));
|
|
592
|
-
const dexSet = dexAddresses ? new Set(dexAddresses.map(a => a.toLowerCase())) : new Set();
|
|
620
|
+
const curveSet = new Set(curveAddresses.map((a) => a.toLowerCase()));
|
|
621
|
+
const dexSet = dexAddresses ? new Set(dexAddresses.map((a) => a.toLowerCase())) : new Set();
|
|
593
622
|
for (let i = 0; i < wallets.length; i++) {
|
|
594
623
|
const wallet = wallets[i];
|
|
595
624
|
const ownerAddr = wallet.address.toLowerCase();
|
|
@@ -627,11 +656,11 @@ export async function bundleGraduateBuy(params) {
|
|
|
627
656
|
// 合并所有参与的钱包
|
|
628
657
|
const allWalletsMap = new Map();
|
|
629
658
|
allWalletsMap.set(payerWallet.address.toLowerCase(), payerWallet);
|
|
630
|
-
curveBuyers.forEach(b => allWalletsMap.set(b.wallet.address.toLowerCase(), b.wallet));
|
|
631
|
-
dexBuyers.forEach(b => allWalletsMap.set(b.wallet.address.toLowerCase(), b.wallet));
|
|
659
|
+
curveBuyers.forEach((b) => allWalletsMap.set(b.wallet.address.toLowerCase(), b.wallet));
|
|
660
|
+
dexBuyers.forEach((b) => allWalletsMap.set(b.wallet.address.toLowerCase(), b.wallet));
|
|
632
661
|
const allWallets = Array.from(allWalletsMap.values());
|
|
633
662
|
const mainWallet = payerWallet;
|
|
634
|
-
const mainWalletIndex = allWallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
663
|
+
const mainWalletIndex = allWallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
|
|
635
664
|
// 计算金额和利润(单边模式:只有买入)
|
|
636
665
|
const curveTotalWei = curveBuyers.reduce((sum, b) => sum + b.amount, 0n);
|
|
637
666
|
const dexTotalWei = dexBuyers.reduce((sum, b) => sum + b.amount, 0n);
|
|
@@ -640,7 +669,7 @@ export async function bundleGraduateBuy(params) {
|
|
|
640
669
|
const profitRecipient = getProfitRecipient(config);
|
|
641
670
|
// 并行获取 nonce 和 fee data
|
|
642
671
|
const [nonces, feeData] = await Promise.all([
|
|
643
|
-
batchGetNonces(allWallets.map(w => w.address), provider),
|
|
672
|
+
batchGetNonces(allWallets.map((w) => w.address), provider),
|
|
644
673
|
provider.getFeeData(),
|
|
645
674
|
]);
|
|
646
675
|
// 签名授权
|
|
@@ -658,11 +687,15 @@ export async function bundleGraduateBuy(params) {
|
|
|
658
687
|
for (let i = 0; i < curveBuyers.length; i++) {
|
|
659
688
|
const { wallet, amount } = curveBuyers[i];
|
|
660
689
|
const buyData = encodeFlapBuyCall(tokenAddress, amount, useV3OrV4, extensionData);
|
|
661
|
-
const buyBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
690
|
+
const buyBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
691
|
+
[
|
|
692
|
+
{
|
|
662
693
|
target: FLAP_PORTAL_ADDRESS,
|
|
663
694
|
value: amount,
|
|
664
695
|
data: buyData,
|
|
665
|
-
}
|
|
696
|
+
},
|
|
697
|
+
],
|
|
698
|
+
]);
|
|
666
699
|
// ✅ 修复:value 设为 0n,让钱包使用自己余额买入
|
|
667
700
|
calls.push({
|
|
668
701
|
target: wallet.address,
|
|
@@ -673,7 +706,7 @@ export async function bundleGraduateBuy(params) {
|
|
|
673
706
|
}
|
|
674
707
|
// 3. 外盘买入
|
|
675
708
|
if (enableDexBuy && dexBuyers.length > 0) {
|
|
676
|
-
const dexType =
|
|
709
|
+
const dexType = lpFeeProfile >= 0 ? 'V3' : 'V2';
|
|
677
710
|
const v3Fee = lpFeeProfileToV3Fee(lpFeeProfile);
|
|
678
711
|
for (let i = 0; i < dexBuyers.length; i++) {
|
|
679
712
|
const { wallet, amount } = dexBuyers[i];
|
|
@@ -687,11 +720,15 @@ export async function bundleGraduateBuy(params) {
|
|
|
687
720
|
routerAddress = POTATOSWAP_V2_ROUTER;
|
|
688
721
|
swapData = encodeV2BuyCall(tokenAddress, wallet.address, deadline);
|
|
689
722
|
}
|
|
690
|
-
const dexBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
723
|
+
const dexBatchCall = delegateInterface.encodeFunctionData('executeBatch', [
|
|
724
|
+
[
|
|
725
|
+
{
|
|
691
726
|
target: routerAddress,
|
|
692
727
|
value: amount,
|
|
693
728
|
data: swapData,
|
|
694
|
-
}
|
|
729
|
+
},
|
|
730
|
+
],
|
|
731
|
+
]);
|
|
695
732
|
// ✅ 修复:value 设为 0n,让钱包使用自己余额买入
|
|
696
733
|
calls.push({
|
|
697
734
|
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>;
|