four-flap-meme-sdk 2.2.2 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +41 -6
- package/README.md +31 -0
- package/README.zh-CN.md +41 -6
- package/dist/__tests__/subpath-exports.test.d.ts +1 -0
- package/dist/__tests__/subpath-exports.test.js +64 -0
- package/dist/abis/common.d.ts +85 -0
- package/dist/abis/common.js +264 -0
- package/dist/abis/contracts/TaxToken.json +969 -0
- package/dist/abis/contracts/TokenManager2.json +136 -0
- package/dist/abis/contracts/index.d.ts +5 -0
- package/dist/abis/contracts/index.js +5 -0
- package/dist/abis/flap/index.d.ts +3 -0
- package/dist/abis/flap/index.js +3 -0
- package/dist/abis/flap/portal-events.d.ts +6 -0
- package/dist/abis/flap/portal-events.js +17 -0
- package/dist/abis/flap/portal.d.ts +6 -0
- package/dist/abis/flap/portal.js +37 -0
- package/dist/abis/flap/vault.d.ts +171 -0
- package/dist/abis/flap/vault.js +91 -0
- package/dist/abis/index.d.ts +8 -0
- package/dist/abis/index.js +11 -0
- package/dist/bundle-core/__tests__/config-helpers.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
- package/dist/bundle-core/__tests__/facade-parity.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
- package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
- package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
- package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
- package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
- package/dist/bundle-core/config-helpers.d.ts +36 -0
- package/dist/bundle-core/config-helpers.js +57 -0
- package/dist/bundle-core/errors.d.ts +50 -0
- package/dist/bundle-core/errors.js +35 -0
- package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
- package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
- package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
- package/dist/bundle-core/four-meme/core-helpers.js +40 -0
- package/dist/bundle-core/four-meme/core.d.ts +4 -0
- package/dist/bundle-core/four-meme/core.js +515 -0
- package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
- package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
- package/dist/bundle-core/four-meme/private.d.ts +27 -0
- package/dist/bundle-core/four-meme/private.js +465 -0
- package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
- package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
- package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
- package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
- package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
- package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
- package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
- package/dist/bundle-core/four-meme/swap-internal.js +18 -0
- package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
- package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
- package/dist/bundle-core/four-meme/swap.d.ts +17 -0
- package/dist/bundle-core/four-meme/swap.js +505 -0
- package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
- package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
- package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
- package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
- package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
- package/dist/bundle-core/four-meme/types/index.js +1 -0
- package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
- package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
- package/dist/bundle-core/four-meme/types.d.ts +1 -0
- package/dist/bundle-core/four-meme/types.js +1 -0
- package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
- package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
- package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
- package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
- package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
- package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
- package/dist/bundle-core/index.d.ts +8 -0
- package/dist/bundle-core/index.js +8 -0
- package/dist/bundle-core/internal.d.ts +21 -0
- package/dist/bundle-core/internal.js +182 -0
- package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
- package/dist/bundle-core/sign-context-helpers.js +67 -0
- package/dist/bundle-core/submit.d.ts +293 -0
- package/dist/bundle-core/submit.js +727 -0
- package/dist/bundle-core/types/index.d.ts +8 -0
- package/dist/bundle-core/types/index.js +1 -0
- package/dist/bundle-core/types.d.ts +1 -0
- package/dist/bundle-core/types.js +1 -0
- package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
- package/dist/chains/bsc/four/approve-tokenmanager.js +1 -113
- package/dist/chains/bsc/four/config.d.ts +5 -67
- package/dist/chains/bsc/four/config.js +2 -114
- package/dist/chains/bsc/four/core.d.ts +1 -4
- package/dist/chains/bsc/four/core.js +1 -592
- package/dist/chains/bsc/four/index.d.ts +6 -6
- package/dist/chains/bsc/four/index.js +6 -6
- package/dist/chains/bsc/four/internal.d.ts +2 -46
- package/dist/chains/bsc/four/internal.js +2 -239
- package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
- package/dist/chains/bsc/four/pancake-proxy.js +1 -687
- package/dist/chains/bsc/four/private.d.ts +1 -27
- package/dist/chains/bsc/four/private.js +1 -477
- package/dist/chains/bsc/four/submit.d.ts +2 -315
- package/dist/chains/bsc/four/submit.js +2 -752
- package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
- package/dist/chains/bsc/four/swap-buy-first.js +2 -507
- package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
- package/dist/chains/bsc/four/swap-internal.js +1 -18
- package/dist/chains/bsc/four/swap.d.ts +2 -144
- package/dist/chains/bsc/four/swap.js +2 -766
- package/dist/chains/bsc/four/types.d.ts +1 -476
- package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
- package/dist/chains/bsc/four/utils-disperse.js +1 -0
- package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
- package/dist/chains/bsc/four/utils-pairwise.js +1 -0
- package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
- package/dist/chains/bsc/four/utils-sweep.js +1 -0
- package/dist/chains/bsc/four/utils.d.ts +5 -18
- package/dist/chains/bsc/four/utils.js +5 -1552
- package/dist/chains/bsc/iro.d.ts +5 -0
- package/dist/chains/bsc/iro.js +4 -0
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
- package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
- package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -212
- package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
- package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
- package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
- package/dist/chains/bsc/pancake/bundle-swap.js +114 -726
- package/dist/chains/bsc/pancake/index.d.ts +4 -2
- package/dist/chains/bsc/pancake/index.js +1 -3
- package/dist/chains/bsc/platforms/iro/factory.d.ts +2 -2
- package/dist/chains/bsc/platforms/iro/factory.js +3 -1
- package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
- package/dist/chains/bsc/platforms/iro/index.js +3 -3
- package/dist/chains/bsc/platforms/iro/pool.js +31 -10
- package/dist/chains/bsc/platforms/iro/token.js +4 -1
- package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
- package/dist/chains/eni/batch-router/transfer.js +55 -25
- package/dist/chains/eni/batch-router/utils.js +32 -6
- package/dist/chains/eni/bundler/sign.js +5 -6
- package/dist/chains/eni/bundler/submit.js +1 -4
- package/dist/chains/eni/constants.js +1 -1
- package/dist/chains/eni/flat-aliases.d.ts +10 -0
- package/dist/chains/eni/flat-aliases.js +8 -0
- package/dist/chains/eni/index.d.ts +2 -1
- package/dist/chains/eni/index.js +1 -0
- package/dist/chains/eni/platforms/daoaas/create.js +2 -2
- package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
- package/dist/chains/eni/platforms/daoaas/index.js +3 -3
- package/dist/chains/eni/platforms/daoaas/meta.js +9 -6
- package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -44
- package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
- package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
- package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
- package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
- package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -46
- package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
- package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
- package/dist/chains/eni/platforms/iro/factory.d.ts +2 -2
- package/dist/chains/eni/platforms/iro/factory.js +3 -1
- package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
- package/dist/chains/eni/platforms/iro/index.js +4 -4
- package/dist/chains/eni/platforms/iro/pool.js +90 -26
- package/dist/chains/eni/platforms/iro/token.js +107 -31
- package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
- package/dist/chains/eni/submit.d.ts +43 -0
- package/dist/chains/eni/submit.js +286 -0
- package/dist/chains/index.d.ts +13 -0
- package/dist/chains/index.js +13 -0
- package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
- package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -21
- package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
- package/dist/chains/xlayer/eip7702/bundle-create.js +93 -59
- package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-sell.js +29 -111
- package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
- package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -245
- package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
- package/dist/chains/xlayer/eip7702/constants.js +3 -21
- package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +13 -0
- package/dist/chains/xlayer/eip7702/flat-aliases.js +10 -0
- package/dist/chains/xlayer/eip7702/index.d.ts +28 -46
- package/dist/chains/xlayer/eip7702/index.js +28 -81
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +63 -307
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
- package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
- package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
- package/dist/chains/xlayer/eip7702/utils.js +23 -28
- package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
- package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
- package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
- package/dist/chains/xlayer/eip7702/volume.js +89 -164
- package/dist/chains/xlayer/eoa/constants.js +1 -1
- package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +66 -299
- package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
- package/dist/chains/xlayer/eoa/eoa-wash-volume.js +18 -23
- package/dist/chains/xlayer/eoa/index.d.ts +10 -6
- package/dist/chains/xlayer/eoa/index.js +8 -23
- package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
- package/dist/chains/xlayer/eoa/router-manager.js +3 -3
- package/dist/chains/xlayer/eoa/types.d.ts +2 -2
- package/dist/chains/xlayer/eoa/types.js +1 -3
- package/dist/chains/xlayer/index.d.ts +3 -2
- package/dist/chains/xlayer/index.js +4 -7
- package/dist/contracts/helper3.d.ts +20 -5
- package/dist/contracts/helper3.js +56 -20
- package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
- package/dist/contracts/tm-bundle-helpers.js +72 -0
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -113
- package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -67
- package/dist/contracts/tm-bundle-merkle/config.js +2 -114
- package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
- package/dist/contracts/tm-bundle-merkle/core.js +1 -591
- package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
- package/dist/contracts/tm-bundle-merkle/index.js +5 -5
- package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -46
- package/dist/contracts/tm-bundle-merkle/internal.js +2 -238
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -686
- package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
- package/dist/contracts/tm-bundle-merkle/private.js +1 -476
- package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
- package/dist/contracts/tm-bundle-merkle/submit.js +3 -928
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -506
- package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
- package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
- package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
- package/dist/contracts/tm-bundle-merkle/swap.js +2 -764
- package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
- package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
- package/dist/contracts/tm-bundle-merkle/utils.d.ts +6 -18
- package/dist/contracts/tm-bundle-merkle/utils.js +6 -1501
- package/dist/contracts/tm-bundle.d.ts +3 -51
- package/dist/contracts/tm-bundle.js +108 -177
- package/dist/contracts/tm.d.ts +3 -2
- package/dist/contracts/tm.js +37 -32
- package/dist/contracts/tm1.js +9 -4
- package/dist/contracts/tm2.js +9 -4
- package/dist/dex/direct-router-helpers.d.ts +264 -0
- package/dist/dex/direct-router-helpers.js +539 -0
- package/dist/dex/direct-router.d.ts +3 -125
- package/dist/dex/direct-router.js +237 -666
- package/dist/dex/types.d.ts +81 -0
- package/dist/dex/types.js +1 -0
- package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
- package/dist/exports/root-bundle-and-tooling.js +30 -0
- package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
- package/dist/exports/root-eni-and-bsc-iro.js +66 -0
- package/dist/exports/root-foundations.d.ts +35 -0
- package/dist/exports/root-foundations.js +70 -0
- package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
- package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
- package/dist/flap/index.d.ts +10 -0
- package/dist/flap/index.js +8 -0
- package/dist/flows/create.d.ts +2 -1
- package/dist/flows/create.js +6 -6
- package/dist/flows/index.d.ts +1 -0
- package/dist/flows/index.js +1 -0
- package/dist/index.d.ts +20 -85
- package/dist/index.js +20 -215
- package/dist/merkle/index.d.ts +12 -0
- package/dist/merkle/index.js +11 -0
- package/dist/shared/abis/common.d.ts +2 -83
- package/dist/shared/abis/common.js +2 -252
- package/dist/shared/abis/index.d.ts +5 -6
- package/dist/shared/abis/index.js +5 -7
- package/dist/shared/clients/blockrazor.js +39 -25
- package/dist/shared/clients/club48.d.ts +2 -2
- package/dist/shared/clients/club48.js +34 -29
- package/dist/shared/clients/emitservice.js +2 -0
- package/dist/shared/clients/four.d.ts +21 -6
- package/dist/shared/clients/four.js +29 -24
- package/dist/shared/clients/index.d.ts +8 -0
- package/dist/shared/clients/index.js +8 -0
- package/dist/shared/clients/merkle.js +27 -34
- package/dist/shared/constants/addresses.d.ts +1 -1
- package/dist/shared/constants/addresses.js +11 -2
- package/dist/shared/constants/chains.d.ts +1 -1
- package/dist/shared/constants/chains.js +1 -1
- package/dist/shared/constants/gas.d.ts +1 -1
- package/dist/shared/constants/gas.js +2 -6
- package/dist/shared/constants/index.d.ts +3 -0
- package/dist/shared/constants/index.js +1 -0
- package/dist/shared/constants/quote.d.ts +30 -0
- package/dist/shared/constants/quote.js +37 -0
- package/dist/shared/flap/abi.js +1 -1
- package/dist/shared/flap/constants.d.ts +1 -2
- package/dist/shared/flap/constants.js +2 -3
- package/dist/shared/flap/curve.js +3 -0
- package/dist/shared/flap/errors.d.ts +1 -4
- package/dist/shared/flap/errors.js +20 -1
- package/dist/shared/flap/index.d.ts +5 -4
- package/dist/shared/flap/index.js +5 -4
- package/dist/shared/flap/meta.d.ts +22 -18
- package/dist/shared/flap/meta.js +12 -17
- package/dist/shared/flap/permit.js +5 -2
- package/dist/shared/flap/pinata.d.ts +22 -6
- package/dist/shared/flap/pinata.js +21 -26
- package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
- package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
- package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
- package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
- package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
- package/dist/shared/flap/portal-bundle-merkle/core.js +86 -278
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.d.ts +7 -2
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +101 -206
- package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
- package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
- package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
- package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
- package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
- package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
- package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
- package/dist/shared/flap/portal-bundle-merkle/types.d.ts +83 -9
- package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
- package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
- package/dist/shared/flap/portal-bundle.js +55 -56
- package/dist/shared/flap/portal-create-token.d.ts +77 -0
- package/dist/shared/flap/portal-create-token.js +214 -0
- package/dist/shared/flap/portal.d.ts +14 -3
- package/dist/shared/flap/portal.js +50 -25
- package/dist/shared/flap/vanity.d.ts +1 -5
- package/dist/shared/flap/vanity.js +6 -17
- package/dist/shared/flap/vault.d.ts +17 -124
- package/dist/shared/flap/vault.js +67 -148
- package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
- package/dist/shared/foundation/dex/v3-path.js +35 -0
- package/dist/shared/foundation/gas/bundle-gas.d.ts +49 -0
- package/dist/shared/foundation/gas/bundle-gas.js +93 -0
- package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
- package/dist/shared/foundation/gas/profit-hop.js +72 -0
- package/dist/shared/foundation/index.d.ts +13 -0
- package/dist/shared/foundation/index.js +12 -0
- package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
- package/dist/shared/foundation/nonce/nonce-manager.js +183 -0
- package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
- package/dist/shared/foundation/normalize-unknown.js +29 -0
- package/dist/shared/foundation/sdk-logger.d.ts +13 -0
- package/dist/shared/foundation/sdk-logger.js +12 -0
- package/dist/shared/foundation/tx/build-request.d.ts +17 -0
- package/dist/shared/foundation/tx/build-request.js +25 -0
- package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
- package/dist/shared/foundation/tx/sign-batch.js +26 -0
- package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
- package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
- package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
- package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
- package/dist/shared/foundation/types/erc20.d.ts +65 -0
- package/dist/shared/foundation/types/erc20.js +1 -0
- package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
- package/dist/shared/foundation/types/holders-maker.js +1 -0
- package/dist/shared/foundation/types/index.d.ts +7 -0
- package/dist/shared/foundation/types/index.js +1 -0
- package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
- package/dist/shared/foundation/types/lp-inspect.js +1 -0
- package/dist/shared/foundation/types/multicall.d.ts +5 -0
- package/dist/shared/foundation/types/multicall.js +1 -0
- package/dist/shared/foundation/types/private-sale.d.ts +35 -0
- package/dist/shared/foundation/types/private-sale.js +1 -0
- package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
- package/dist/shared/foundation/types/quote-helpers.js +1 -0
- package/dist/shared/four/tax-token.d.ts +1 -1
- package/dist/shared/four/tax-token.js +27 -7
- package/dist/shared/index.d.ts +6 -0
- package/dist/shared/index.js +4 -0
- package/dist/types/errors.d.ts +27 -0
- package/dist/types/errors.js +34 -0
- package/dist/utils/airdrop-sweep.d.ts +4 -76
- package/dist/utils/airdrop-sweep.js +42 -55
- package/dist/utils/bundle-helpers.d.ts +9 -243
- package/dist/utils/bundle-helpers.js +10 -584
- package/dist/utils/constants.d.ts +5 -61
- package/dist/utils/constants.js +5 -80
- package/dist/utils/contract-factory.d.ts +2 -4
- package/dist/utils/contract-factory.js +25 -18
- package/dist/utils/erc20.d.ts +7 -89
- package/dist/utils/erc20.js +94 -125
- package/dist/utils/errors.d.ts +12 -1
- package/dist/utils/errors.js +60 -1
- package/dist/utils/holders-maker/addresses.d.ts +12 -0
- package/dist/utils/holders-maker/addresses.js +15 -0
- package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
- package/dist/utils/holders-maker/buy-tx.js +278 -0
- package/dist/utils/holders-maker/constants.d.ts +6 -0
- package/dist/utils/holders-maker/constants.js +7 -0
- package/dist/utils/holders-maker/disperse.d.ts +18 -0
- package/dist/utils/holders-maker/disperse.js +90 -0
- package/dist/utils/holders-maker/routing.d.ts +4 -0
- package/dist/utils/holders-maker/routing.js +45 -0
- package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
- package/dist/utils/holders-maker/transfer-tx.js +67 -0
- package/dist/utils/holders-maker-helpers.d.ts +9 -0
- package/dist/utils/holders-maker-helpers.js +9 -0
- package/dist/utils/holders-maker.d.ts +2 -138
- package/dist/utils/holders-maker.js +26 -661
- package/dist/utils/hop-chains.d.ts +35 -0
- package/dist/utils/hop-chains.js +215 -0
- package/dist/utils/lp-inspect-helpers.d.ts +9 -0
- package/dist/utils/lp-inspect-helpers.js +109 -0
- package/dist/utils/lp-inspect.d.ts +2 -112
- package/dist/utils/lp-inspect.js +73 -223
- package/dist/utils/mpcExclusive.d.ts +2 -5
- package/dist/utils/mpcExclusive.js +4 -3
- package/dist/utils/private-sale.d.ts +2 -58
- package/dist/utils/private-sale.js +4 -15
- package/dist/utils/provider-factory.d.ts +4 -0
- package/dist/utils/provider-factory.js +10 -0
- package/dist/utils/quote-helpers.d.ts +4 -45
- package/dist/utils/quote-helpers.js +17 -74
- package/dist/utils/stealth-transfer.d.ts +2 -28
- package/dist/utils/stealth-transfer.js +31 -15
- package/dist/utils/swap-helpers.d.ts +2 -15
- package/dist/utils/swap-helpers.js +6 -11
- package/dist/utils/types/airdrop-sweep.d.ts +1 -0
- package/dist/utils/types/airdrop-sweep.js +1 -0
- package/dist/utils/types/contract-factory.d.ts +1 -0
- package/dist/utils/types/contract-factory.js +1 -0
- package/dist/utils/types/erc20.d.ts +1 -0
- package/dist/utils/types/erc20.js +1 -0
- package/dist/utils/types/errors.d.ts +1 -0
- package/dist/utils/types/errors.js +1 -0
- package/dist/utils/types/holders-maker.d.ts +1 -0
- package/dist/utils/types/holders-maker.js +1 -0
- package/dist/utils/types/hop-chains.d.ts +8 -0
- package/dist/utils/types/hop-chains.js +1 -0
- package/dist/utils/types/index.d.ts +13 -0
- package/dist/utils/types/index.js +1 -0
- package/dist/utils/types/lp-inspect.d.ts +1 -0
- package/dist/utils/types/lp-inspect.js +1 -0
- package/dist/utils/types/mpc-exclusive.d.ts +5 -0
- package/dist/utils/types/mpc-exclusive.js +1 -0
- package/dist/utils/types/private-sale.d.ts +1 -0
- package/dist/utils/types/private-sale.js +1 -0
- package/dist/utils/types/quote-helpers.d.ts +1 -0
- package/dist/utils/types/quote-helpers.js +1 -0
- package/dist/utils/types/stealth-transfer.d.ts +44 -0
- package/dist/utils/types/stealth-transfer.js +1 -0
- package/dist/utils/types/wallet.d.ts +25 -0
- package/dist/utils/types/wallet.js +1 -0
- package/dist/utils/wallet.d.ts +2 -25
- package/dist/utils/wallet.js +13 -10
- package/dist/vanity/index.d.ts +5 -0
- package/dist/vanity/index.js +5 -0
- package/package.json +160 -4
- package/src/abis/contracts/TaxToken.json +969 -0
- package/src/abis/contracts/TokenManager.json +836 -0
- package/src/abis/contracts/TokenManager2.json +136 -0
- package/src/abis/contracts/TokenManagerHelper3.json +993 -0
- package/dist/shared/abis/TaxToken.json +0 -105
- package/dist/shared/abis/TokenManager2.json +0 -60
- /package/dist/{shared/abis → abis/contracts}/TokenManager.json +0 -0
- /package/dist/{shared/abis → abis/contracts}/TokenManagerHelper3.json +0 -0
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* 3. 买到毕业(代币上 DEX)
|
|
8
8
|
* 4. 多个钱包在 PancakeSwap(外盘)继续买入
|
|
9
9
|
*/
|
|
10
|
+
import type { TaxVaultConfig } from '../vault.js';
|
|
10
11
|
import { type FlapSignConfig } from './config.js';
|
|
11
12
|
import type { MerkleSignedResult } from './types.js';
|
|
12
13
|
export type CreateToDexChain = 'bsc' | 'xlayer' | 'base';
|
|
@@ -75,17 +76,21 @@ export interface FlapCreateToDexParams {
|
|
|
75
76
|
dexId?: number;
|
|
76
77
|
/** V4 参数:LP 费率档位(0=STANDARD 0.25%, 1=LOW 0.01%, 2=HIGH 1%) */
|
|
77
78
|
lpFeeProfile?: number;
|
|
78
|
-
/** Tax Token V2 高级税收配置(启用后使用
|
|
79
|
+
/** Tax Token V2/V3 高级税收配置(启用后使用 newTokenV6 TOKEN_TAXED_V3) */
|
|
79
80
|
taxV2Config?: {
|
|
80
81
|
taxDuration: number;
|
|
81
82
|
antiFarmerDuration: number;
|
|
83
|
+
buyTaxRate?: number;
|
|
84
|
+
sellTaxRate?: number;
|
|
85
|
+
dividendToken?: string;
|
|
86
|
+
commissionReceiver?: string;
|
|
82
87
|
mktBps: number;
|
|
83
88
|
deflationBps: number;
|
|
84
89
|
dividendBps: number;
|
|
85
90
|
lpBps: number;
|
|
86
91
|
minimumShareBalance?: number;
|
|
87
92
|
/** ✅ Tax Vault 金库配置(可选) */
|
|
88
|
-
vaultConfig?:
|
|
93
|
+
vaultConfig?: TaxVaultConfig;
|
|
89
94
|
};
|
|
90
95
|
/** V3 扩展 ID */
|
|
91
96
|
extensionID?: string;
|
|
@@ -8,67 +8,67 @@
|
|
|
8
8
|
* 4. 多个钱包在 PancakeSwap(外盘)继续买入
|
|
9
9
|
*/
|
|
10
10
|
import { ethers, Contract, Wallet } from 'ethers';
|
|
11
|
-
import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../../../utils/bundle-helpers.js';
|
|
11
|
+
import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../../utils/bundle-helpers.js';
|
|
12
12
|
import { FLAP_PORTAL_ADDRESSES, FLAP_ORIGINAL_PORTAL_ADDRESSES } from '../constants.js';
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
13
|
+
import { normalizeTaxLaunchConfig, populateCreateTokenTransaction, } from '../portal-create-token.js';
|
|
14
|
+
import { ZERO_ADDRESS } from '../../../shared/constants/index.js';
|
|
15
15
|
import { GAS_LIMITS } from '../../constants/index.js';
|
|
16
|
-
import { getGasPriceConfig, getTxType, getProfitRecipient, getBribeAmount, BLOCKRAZOR_BUILDER_EOA, PORTAL_ABI } from './config.js';
|
|
16
|
+
import { getGasPriceConfig, getTxType, getProfitRecipient, getProfitRateBps, getBribeAmount, BLOCKRAZOR_BUILDER_EOA, PORTAL_ABI, } from './config.js';
|
|
17
17
|
// ==================== ERC20 ABI ====================
|
|
18
18
|
const ERC20_ABI = [
|
|
19
19
|
{
|
|
20
|
-
type:
|
|
21
|
-
name:
|
|
20
|
+
type: 'function',
|
|
21
|
+
name: 'approve',
|
|
22
22
|
inputs: [
|
|
23
|
-
{ name:
|
|
24
|
-
{ name:
|
|
23
|
+
{ name: 'spender', type: 'address' },
|
|
24
|
+
{ name: 'amount', type: 'uint256' },
|
|
25
25
|
],
|
|
26
|
-
outputs: [{ name:
|
|
27
|
-
stateMutability:
|
|
28
|
-
}
|
|
26
|
+
outputs: [{ name: '', type: 'bool' }],
|
|
27
|
+
stateMutability: 'nonpayable',
|
|
28
|
+
},
|
|
29
29
|
];
|
|
30
30
|
// ==================== PancakeSwap Router ABI ====================
|
|
31
31
|
const PANCAKE_ROUTER_ABI = [
|
|
32
32
|
{
|
|
33
|
-
type:
|
|
34
|
-
name:
|
|
33
|
+
type: 'function',
|
|
34
|
+
name: 'exactInputSingle',
|
|
35
35
|
inputs: [
|
|
36
36
|
{
|
|
37
|
-
name:
|
|
38
|
-
type:
|
|
37
|
+
name: 'params',
|
|
38
|
+
type: 'tuple',
|
|
39
39
|
components: [
|
|
40
|
-
{ name:
|
|
41
|
-
{ name:
|
|
42
|
-
{ name:
|
|
43
|
-
{ name:
|
|
44
|
-
{ name:
|
|
45
|
-
{ name:
|
|
46
|
-
{ name:
|
|
47
|
-
]
|
|
48
|
-
}
|
|
40
|
+
{ name: 'tokenIn', type: 'address' },
|
|
41
|
+
{ name: 'tokenOut', type: 'address' },
|
|
42
|
+
{ name: 'fee', type: 'uint24' },
|
|
43
|
+
{ name: 'recipient', type: 'address' },
|
|
44
|
+
{ name: 'amountIn', type: 'uint256' },
|
|
45
|
+
{ name: 'amountOutMinimum', type: 'uint256' },
|
|
46
|
+
{ name: 'sqrtPriceLimitX96', type: 'uint160' },
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
49
|
],
|
|
50
|
-
outputs: [{ name:
|
|
51
|
-
stateMutability:
|
|
50
|
+
outputs: [{ name: 'amountOut', type: 'uint256' }],
|
|
51
|
+
stateMutability: 'payable',
|
|
52
52
|
},
|
|
53
53
|
{
|
|
54
|
-
type:
|
|
55
|
-
name:
|
|
56
|
-
inputs: [{ name:
|
|
57
|
-
outputs: [{ name:
|
|
58
|
-
stateMutability:
|
|
54
|
+
type: 'function',
|
|
55
|
+
name: 'multicall',
|
|
56
|
+
inputs: [{ name: 'data', type: 'bytes[]' }],
|
|
57
|
+
outputs: [{ name: 'results', type: 'bytes[]' }],
|
|
58
|
+
stateMutability: 'payable',
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
|
-
type:
|
|
62
|
-
name:
|
|
61
|
+
type: 'function',
|
|
62
|
+
name: 'swapExactTokensForTokens',
|
|
63
63
|
inputs: [
|
|
64
|
-
{ name:
|
|
65
|
-
{ name:
|
|
66
|
-
{ name:
|
|
67
|
-
{ name:
|
|
64
|
+
{ name: 'amountIn', type: 'uint256' },
|
|
65
|
+
{ name: 'amountOutMin', type: 'uint256' },
|
|
66
|
+
{ name: 'path', type: 'address[]' },
|
|
67
|
+
{ name: 'to', type: 'address' },
|
|
68
68
|
],
|
|
69
|
-
outputs: [{ name:
|
|
70
|
-
stateMutability:
|
|
71
|
-
}
|
|
69
|
+
outputs: [{ name: 'amountOut', type: 'uint256' }],
|
|
70
|
+
stateMutability: 'payable',
|
|
71
|
+
},
|
|
72
72
|
];
|
|
73
73
|
// ==================== DEX 地址常量 ====================
|
|
74
74
|
const DEX_ADDRESSES = {
|
|
@@ -85,7 +85,7 @@ const DEX_ADDRESSES = {
|
|
|
85
85
|
// ✅ Base 使用 Uniswap V3 SwapRouter02
|
|
86
86
|
UNISWAP_SMART_ROUTER: '0x2626664c2603336E57B271c5C0b26F421741e481',
|
|
87
87
|
WETH: '0x4200000000000000000000000000000000000006',
|
|
88
|
-
}
|
|
88
|
+
},
|
|
89
89
|
};
|
|
90
90
|
// ==================== 链常量 ====================
|
|
91
91
|
// 获取链配置
|
|
@@ -102,8 +102,7 @@ function getChainConfig(chain) {
|
|
|
102
102
|
}
|
|
103
103
|
// ==================== 工具函数 ====================
|
|
104
104
|
/** 构建 ERC20 approve 交易 */
|
|
105
|
-
async function buildApproveTransaction(wallet, tokenAddress, spenderAddress, amount, nonce, gasPrice, txType, chainId = 56
|
|
106
|
-
) {
|
|
105
|
+
async function buildApproveTransaction(wallet, tokenAddress, spenderAddress, amount, nonce, gasPrice, txType, chainId = 56) {
|
|
107
106
|
const erc20Interface = new ethers.Interface(ERC20_ABI);
|
|
108
107
|
const data = erc20Interface.encodeFunctionData('approve', [spenderAddress, amount]);
|
|
109
108
|
const tx = {
|
|
@@ -111,9 +110,9 @@ async function buildApproveTransaction(wallet, tokenAddress, spenderAddress, amo
|
|
|
111
110
|
data,
|
|
112
111
|
from: wallet.address,
|
|
113
112
|
nonce,
|
|
114
|
-
gasLimit: BigInt(
|
|
113
|
+
gasLimit: BigInt(100_000), // approve 交易 gas 较低
|
|
115
114
|
chainId,
|
|
116
|
-
type: txType
|
|
115
|
+
type: txType,
|
|
117
116
|
};
|
|
118
117
|
if (txType === 2) {
|
|
119
118
|
const priorityFee = gasPrice / 10n === 0n ? 1n : gasPrice / 10n;
|
|
@@ -167,11 +166,11 @@ function parseQuoteAmount(amount, useNativeToken, quoteTokenDecimals) {
|
|
|
167
166
|
* 若 SDK 这里再次 splitAmount,会导致实际 buyAmount 与 UI/预期不一致,并引发余额不足(insufficient funds)。
|
|
168
167
|
*/
|
|
169
168
|
function resolveBuyerAmounts(buyers, totalAmountStr, useNativeToken, quoteTokenDecimals) {
|
|
170
|
-
const provided = buyers.map(b => b?.buyAmount).filter(v => v != null && String(v).trim() !== '');
|
|
169
|
+
const provided = buyers.map((b) => b?.buyAmount).filter((v) => v != null && String(v).trim() !== '');
|
|
171
170
|
const allProvided = provided.length === buyers.length;
|
|
172
171
|
if (allProvided) {
|
|
173
172
|
// ✅ 所有买家都显式提供了 buyAmount:按传入金额构建,但要修正“浮点/四舍五入导致总和偏差”
|
|
174
|
-
const amounts = buyers.map(b => parseQuoteAmount(String(b.buyAmount), useNativeToken, quoteTokenDecimals));
|
|
173
|
+
const amounts = buyers.map((b) => parseQuoteAmount(String(b.buyAmount), useNativeToken, quoteTokenDecimals));
|
|
175
174
|
const totalWei = parseQuoteAmount(totalAmountStr, useNativeToken, quoteTokenDecimals);
|
|
176
175
|
const sum = amounts.reduce((a, b) => a + b, 0n);
|
|
177
176
|
const delta = totalWei - sum;
|
|
@@ -201,7 +200,7 @@ function resolveBuyerAmounts(buyers, totalAmountStr, useNativeToken, quoteTokenD
|
|
|
201
200
|
* 5. 利润多跳转账
|
|
202
201
|
*/
|
|
203
202
|
export async function flapBundleCreateToDex(params) {
|
|
204
|
-
const { chain, devPrivateKey, tokenInfo, tokenAddress, quoteToken, quoteTokenDecimals = 18, curveBuyers, curveTotalBuyAmount, enableDexBuy = false, dexBuyers = [], dexTotalBuyAmount, dexPoolType = 'v3', v3Fee = 2500, config } = params;
|
|
203
|
+
const { chain, devPrivateKey, tokenInfo, tokenAddress, quoteToken, quoteTokenDecimals = 18, curveBuyers, curveTotalBuyAmount, enableDexBuy = false, dexBuyers = [], dexTotalBuyAmount, dexPoolType = 'v3', v3Fee = 2500, config, } = params;
|
|
205
204
|
// 验证参数
|
|
206
205
|
if (curveBuyers.length === 0) {
|
|
207
206
|
throw new Error('至少需要一个内盘买入钱包');
|
|
@@ -235,34 +234,30 @@ export async function flapBundleCreateToDex(params) {
|
|
|
235
234
|
// 创建 Provider
|
|
236
235
|
const provider = new ethers.JsonRpcProvider(config.rpcUrl, {
|
|
237
236
|
chainId,
|
|
238
|
-
name: chain.toUpperCase()
|
|
237
|
+
name: chain.toUpperCase(),
|
|
239
238
|
});
|
|
240
239
|
const portalAddress = FLAP_PORTAL_ADDRESSES[chain.toUpperCase()];
|
|
241
240
|
const originalPortalAddress = FLAP_ORIGINAL_PORTAL_ADDRESSES[chain.toUpperCase()];
|
|
242
241
|
const nonceManager = new NonceManager(provider);
|
|
243
242
|
// 创建钱包实例
|
|
244
243
|
const devWallet = new Wallet(devPrivateKey, provider);
|
|
245
|
-
const curveWallets = curveBuyers.map(b => ({
|
|
244
|
+
const curveWallets = curveBuyers.map((b) => ({
|
|
246
245
|
wallet: new Wallet(b.privateKey, provider),
|
|
247
|
-
buyAmount: b.buyAmount
|
|
246
|
+
buyAmount: b.buyAmount,
|
|
248
247
|
}));
|
|
249
|
-
const dexWallets = (enableDexBuy ? dexBuyers : []).map(b => ({
|
|
248
|
+
const dexWallets = (enableDexBuy ? dexBuyers : []).map((b) => ({
|
|
250
249
|
wallet: new Wallet(b.privateKey, provider),
|
|
251
|
-
buyAmount: b.buyAmount
|
|
250
|
+
buyAmount: b.buyAmount,
|
|
252
251
|
}));
|
|
253
252
|
// ✅ 并行获取 gasPrice + 所有钱包 nonces
|
|
254
|
-
const allWallets = [
|
|
255
|
-
devWallet,
|
|
256
|
-
...curveWallets.map(c => c.wallet),
|
|
257
|
-
...dexWallets.map(d => d.wallet)
|
|
258
|
-
];
|
|
253
|
+
const allWallets = [devWallet, ...curveWallets.map((c) => c.wallet), ...dexWallets.map((d) => d.wallet)];
|
|
259
254
|
const uniqueWallets = allWallets.filter((w, i) => {
|
|
260
255
|
const addr = w.address.toLowerCase();
|
|
261
|
-
return allWallets.findIndex(x => x.address.toLowerCase() === addr) === i;
|
|
256
|
+
return allWallets.findIndex((x) => x.address.toLowerCase() === addr) === i;
|
|
262
257
|
});
|
|
263
258
|
const [gasPrice, noncesArray] = await Promise.all([
|
|
264
259
|
getOptimizedGasPrice(provider, getGasPriceConfig(config)),
|
|
265
|
-
nonceManager.getNextNoncesForWallets(uniqueWallets)
|
|
260
|
+
nonceManager.getNextNoncesForWallets(uniqueWallets),
|
|
266
261
|
]);
|
|
267
262
|
// 构建 nonces Map
|
|
268
263
|
const noncesMap = new Map();
|
|
@@ -282,9 +277,8 @@ export async function flapBundleCreateToDex(params) {
|
|
|
282
277
|
dexBuyAmounts = resolveBuyerAmounts(dexBuyers, dexTotalBuyAmount, useNativeToken, quoteTokenDecimals);
|
|
283
278
|
}
|
|
284
279
|
// ✅ 计算利润
|
|
285
|
-
const totalBuyAmount = curveBuyAmounts.reduce((a, b) => a + b, 0n)
|
|
286
|
-
|
|
287
|
-
const profitAmount = (totalBuyAmount * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
|
|
280
|
+
const totalBuyAmount = curveBuyAmounts.reduce((a, b) => a + b, 0n) + dexBuyAmounts.reduce((a, b) => a + b, 0n);
|
|
281
|
+
const profitAmount = (totalBuyAmount * BigInt(getProfitRateBps())) / 10000n;
|
|
288
282
|
// ==================== 构建交易 ====================
|
|
289
283
|
const allTransactions = [];
|
|
290
284
|
// 使用第一个内盘买家作为贿赂支付者(提高 bundle 打包优先级)
|
|
@@ -301,7 +295,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
301
295
|
gasPrice,
|
|
302
296
|
gasLimit: GAS_LIMITS.BRIBE,
|
|
303
297
|
chainId,
|
|
304
|
-
type: txType
|
|
298
|
+
type: txType,
|
|
305
299
|
});
|
|
306
300
|
allTransactions.push(bribeTx);
|
|
307
301
|
}
|
|
@@ -311,137 +305,37 @@ export async function flapBundleCreateToDex(params) {
|
|
|
311
305
|
const devNonce = noncesMap.get(devAddr);
|
|
312
306
|
noncesMap.set(devAddr, devNonce + 1);
|
|
313
307
|
const originalPortal = new Contract(originalPortalAddress, PORTAL_ABI, devWallet);
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
const
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
throw new Error(`链 "${chain}" 不支持 Tax Vault 金库功能`);
|
|
339
|
-
}
|
|
340
|
-
const vaultPortal = new Contract(vaultPortalAddr, VAULT_PORTAL_ABI, devWallet);
|
|
341
|
-
const v6Params = buildNewTokenV6WithVaultParams({
|
|
342
|
-
tokenInfo,
|
|
343
|
-
taxV2: tv2,
|
|
344
|
-
chain: chainKey,
|
|
345
|
-
salt: params.salt ?? ('0x' + '00'.repeat(32)),
|
|
346
|
-
taxRate: params.taxRate ?? 0,
|
|
347
|
-
dexThresh: params.dexThresh,
|
|
348
|
-
migratorType: params.migratorType,
|
|
349
|
-
quoteToken: inputToken,
|
|
350
|
-
quoteAmt: 0n,
|
|
351
|
-
dexId: params.dexId,
|
|
352
|
-
lpFeeProfile: params.lpFeeProfile,
|
|
353
|
-
});
|
|
354
|
-
createUnsigned = await vaultPortal.newTokenV6WithVault.populateTransaction(v6Params);
|
|
355
|
-
}
|
|
356
|
-
else {
|
|
357
|
-
// 标准 V5: Portal.newTokenV5(无金库)
|
|
358
|
-
createUnsigned = await originalPortal.newTokenV5.populateTransaction({
|
|
359
|
-
name: tokenInfo.name,
|
|
360
|
-
symbol: tokenInfo.symbol,
|
|
361
|
-
meta: tokenInfo.meta,
|
|
362
|
-
dexThresh: (params.dexThresh ?? 1) & 0xff,
|
|
363
|
-
salt: params.salt ?? '0x' + '00'.repeat(32),
|
|
364
|
-
taxRate: (params.taxRate ?? 0) & 0xffff,
|
|
365
|
-
migratorType: (params.migratorType ?? 0) & 0xff,
|
|
366
|
-
quoteToken: inputToken,
|
|
367
|
-
quoteAmt: 0n,
|
|
368
|
-
beneficiary: devWallet.address,
|
|
369
|
-
permitData: '0x',
|
|
370
|
-
extensionID: params.extensionID ?? '0x' + '00'.repeat(32),
|
|
371
|
-
extensionData: params.extensionData ?? '0x',
|
|
372
|
-
dexId: (params.dexId ?? 0) & 0xff,
|
|
373
|
-
lpFeeProfile: (params.lpFeeProfile ?? 0) & 0xff,
|
|
374
|
-
taxDuration: BigInt(tv2.taxDuration),
|
|
375
|
-
antiFarmerDuration: BigInt(tv2.antiFarmerDuration),
|
|
376
|
-
mktBps: tv2.mktBps & 0xffff,
|
|
377
|
-
deflationBps: tv2.deflationBps & 0xffff,
|
|
378
|
-
dividendBps: tv2.dividendBps & 0xffff,
|
|
379
|
-
lpBps: tv2.lpBps & 0xffff,
|
|
380
|
-
minimumShareBalance: BigInt(tv2.minimumShareBalance ?? 10000) * (10n ** 18n),
|
|
381
|
-
});
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
else if (useV4) {
|
|
385
|
-
// V4: 支持 DEX ID 和 LP 费率配置(用于选择池子费率)
|
|
386
|
-
createUnsigned = await originalPortal.newTokenV4.populateTransaction({
|
|
387
|
-
name: tokenInfo.name,
|
|
388
|
-
symbol: tokenInfo.symbol,
|
|
389
|
-
meta: tokenInfo.meta,
|
|
390
|
-
dexThresh: (params.dexThresh ?? 1) & 0xff,
|
|
391
|
-
salt: params.salt ?? '0x' + '00'.repeat(32),
|
|
392
|
-
taxRate: (params.taxRate ?? 0) & 0xffff,
|
|
393
|
-
migratorType: (params.migratorType ?? 0) & 0xff,
|
|
394
|
-
quoteToken: inputToken,
|
|
395
|
-
quoteAmt: 0n,
|
|
396
|
-
beneficiary: devWallet.address,
|
|
397
|
-
permitData: '0x',
|
|
398
|
-
extensionID: params.extensionID ?? '0x' + '00'.repeat(32),
|
|
399
|
-
extensionData: params.extensionData ?? '0x',
|
|
400
|
-
dexId: (params.dexId ?? 0) & 0xff,
|
|
401
|
-
lpFeeProfile: (params.lpFeeProfile ?? 0) & 0xff
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
else if (useV3) {
|
|
405
|
-
// V3: 支持扩展数据
|
|
406
|
-
createUnsigned = await originalPortal.newTokenV3.populateTransaction({
|
|
407
|
-
name: tokenInfo.name,
|
|
408
|
-
symbol: tokenInfo.symbol,
|
|
409
|
-
meta: tokenInfo.meta,
|
|
410
|
-
dexThresh: (params.dexThresh ?? 1) & 0xff,
|
|
411
|
-
salt: params.salt ?? '0x' + '00'.repeat(32),
|
|
412
|
-
taxRate: (params.taxRate ?? 0) & 0xffff,
|
|
413
|
-
migratorType: (params.migratorType ?? 0) & 0xff,
|
|
414
|
-
quoteToken: inputToken,
|
|
415
|
-
quoteAmt: 0n,
|
|
416
|
-
beneficiary: devWallet.address,
|
|
417
|
-
permitData: '0x',
|
|
418
|
-
extensionID: params.extensionID,
|
|
419
|
-
extensionData: params.extensionData ?? '0x'
|
|
420
|
-
});
|
|
421
|
-
}
|
|
422
|
-
else {
|
|
423
|
-
// V2: 基础版本
|
|
424
|
-
createUnsigned = await originalPortal.newTokenV2.populateTransaction({
|
|
425
|
-
name: tokenInfo.name,
|
|
426
|
-
symbol: tokenInfo.symbol,
|
|
427
|
-
meta: tokenInfo.meta,
|
|
428
|
-
dexThresh: (params.dexThresh ?? 1) & 0xff,
|
|
429
|
-
salt: params.salt ?? '0x' + '00'.repeat(32),
|
|
430
|
-
taxRate: (params.taxRate ?? 0) & 0xffff,
|
|
431
|
-
migratorType: (params.migratorType ?? 0) & 0xff,
|
|
432
|
-
quoteToken: inputToken,
|
|
433
|
-
quoteAmt: 0n,
|
|
434
|
-
beneficiary: devWallet.address,
|
|
435
|
-
permitData: '0x'
|
|
436
|
-
});
|
|
437
|
-
}
|
|
308
|
+
const normalizedTax = normalizeTaxLaunchConfig(params.taxV2Config, params.taxRate);
|
|
309
|
+
const isTaxLaunch = !!normalizedTax || (params.taxRate ?? 0) > 0;
|
|
310
|
+
const hasVault = !!normalizedTax?.vaultConfig && normalizedTax.vaultConfig.vaultType !== 'none';
|
|
311
|
+
const useV3Standard = !isTaxLaunch &&
|
|
312
|
+
!hasVault &&
|
|
313
|
+
(params.lpFeeProfile !== undefined || params.dexId !== undefined);
|
|
314
|
+
const createUnsigned = await populateCreateTokenTransaction({
|
|
315
|
+
chain,
|
|
316
|
+
devWallet,
|
|
317
|
+
originalPortal,
|
|
318
|
+
tokenInfo,
|
|
319
|
+
quoteToken: inputToken,
|
|
320
|
+
beneficiary: devWallet.address,
|
|
321
|
+
dexThresh: params.dexThresh,
|
|
322
|
+
salt: params.salt,
|
|
323
|
+
migratorType: params.migratorType,
|
|
324
|
+
taxRate: params.taxRate,
|
|
325
|
+
dexId: params.dexId,
|
|
326
|
+
lpFeeProfile: params.lpFeeProfile,
|
|
327
|
+
extensionID: params.extensionID,
|
|
328
|
+
extensionData: params.extensionData,
|
|
329
|
+
useV3Standard,
|
|
330
|
+
taxConfig: normalizedTax,
|
|
331
|
+
});
|
|
438
332
|
const createTx = {
|
|
439
333
|
...createUnsigned,
|
|
440
334
|
from: devWallet.address,
|
|
441
335
|
nonce: devNonce,
|
|
442
336
|
gasLimit: finalGasLimit,
|
|
443
337
|
chainId,
|
|
444
|
-
type: txType
|
|
338
|
+
type: txType,
|
|
445
339
|
};
|
|
446
340
|
if (txType === 2) {
|
|
447
341
|
createTx.maxFeePerGas = gasPrice;
|
|
@@ -463,8 +357,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
463
357
|
if (!useNativeToken) {
|
|
464
358
|
const approveNonce = noncesMap.get(addr);
|
|
465
359
|
noncesMap.set(addr, approveNonce + 1);
|
|
466
|
-
const approveTx = await buildApproveTransaction(wallet, quoteToken, portalAddress, curveBuyAmounts[i], approveNonce, gasPrice, txType, chainId
|
|
467
|
-
);
|
|
360
|
+
const approveTx = await buildApproveTransaction(wallet, quoteToken, portalAddress, curveBuyAmounts[i], approveNonce, gasPrice, txType, chainId);
|
|
468
361
|
signedTxs.push(approveTx);
|
|
469
362
|
}
|
|
470
363
|
// 构建买入交易
|
|
@@ -480,16 +373,18 @@ export async function flapBundleCreateToDex(params) {
|
|
|
480
373
|
inputAmount: curveBuyAmounts[i],
|
|
481
374
|
minOutputAmount: 0n,
|
|
482
375
|
permitData: '0x', // 不使用 permit,使用链上 approve
|
|
483
|
-
extensionData
|
|
376
|
+
extensionData,
|
|
484
377
|
}, useNativeToken ? { value: curveBuyAmounts[i] } : {});
|
|
485
378
|
// 最后一个买家触发毕业,需要更多 gas
|
|
486
379
|
const isLastBuyer = i === curveWallets.length - 1;
|
|
487
380
|
// ⚠️ 触发毕业(创建 Pancake V3 池 + Mint 初始流动性)会非常耗 gas。
|
|
488
381
|
// 链上成功样例 0x29b173... 的 gasLimit=8,000,000,gasUsed≈6,647,149。
|
|
489
382
|
// Flap 官方示例脚本也使用 last_buy=8_000_000。
|
|
490
|
-
const LAST_BUY_GAS_LIMIT = BigInt(
|
|
383
|
+
const LAST_BUY_GAS_LIMIT = BigInt(8_000_000);
|
|
491
384
|
const buyGasLimit = isLastBuyer
|
|
492
|
-
?
|
|
385
|
+
? finalGasLimit > LAST_BUY_GAS_LIMIT
|
|
386
|
+
? finalGasLimit
|
|
387
|
+
: LAST_BUY_GAS_LIMIT
|
|
493
388
|
: finalGasLimit;
|
|
494
389
|
const tx = {
|
|
495
390
|
...unsigned,
|
|
@@ -498,7 +393,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
498
393
|
gasLimit: buyGasLimit,
|
|
499
394
|
chainId,
|
|
500
395
|
type: txType,
|
|
501
|
-
value: useNativeToken ? curveBuyAmounts[i] : 0n
|
|
396
|
+
value: useNativeToken ? curveBuyAmounts[i] : 0n,
|
|
502
397
|
};
|
|
503
398
|
if (txType === 2) {
|
|
504
399
|
tx.maxFeePerGas = gasPrice;
|
|
@@ -513,11 +408,11 @@ export async function flapBundleCreateToDex(params) {
|
|
|
513
408
|
});
|
|
514
409
|
const curveBuyResults = await Promise.all(curveBuyTxPromises);
|
|
515
410
|
// 展平数组:每个钱包可能有 [approve, buy] 或只有 [buy]
|
|
516
|
-
curveBuyResults.forEach(txs => allTransactions.push(...txs));
|
|
411
|
+
curveBuyResults.forEach((txs) => allTransactions.push(...txs));
|
|
517
412
|
// 4. 外盘买入交易(直接调用 PancakeSwap Router)
|
|
518
413
|
// ✅ 重要修改:直接调用 PancakeSwap SmartRouter
|
|
519
414
|
// 参考官方代码: flap-bundle-release/app/v2/pvp/001_launch_buy.ts
|
|
520
|
-
//
|
|
415
|
+
//
|
|
521
416
|
// ⚠️ 关键:税代币(migratorType=1)毕业到 V2 池,必须用 swapExactTokensForTokens
|
|
522
417
|
// 普通代币(migratorType=0)毕业到 V3 池,使用 exactInputSingle
|
|
523
418
|
if (enableDexBuy && dexWallets.length > 0) {
|
|
@@ -540,7 +435,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
540
435
|
// migratorType === 1 (V2_MIGRATOR) → 毕业到 V2 池 → 必须使用 V2 买入
|
|
541
436
|
// migratorType === 0 (V3_MIGRATOR) → 毕业到 V3 池 → 使用 V3 买入
|
|
542
437
|
// 参考: flap-bundle-release 中税代币使用 PoolType.V2,普通代币使用 PoolType.V3
|
|
543
|
-
const effectiveDexPoolType =
|
|
438
|
+
const effectiveDexPoolType = params.migratorType === 1 ? 'v2' : dexPoolType || 'v3';
|
|
544
439
|
// 获取 V3 费率(仅 V3 池使用)
|
|
545
440
|
const dexV3Fee = actualV3Fee;
|
|
546
441
|
const dexBuyTxPromises = dexWallets.map(async ({ wallet }, i) => {
|
|
@@ -569,7 +464,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
569
464
|
buyAmount,
|
|
570
465
|
0n, // amountOutMin: 不设置滑点保护(Bundle 中可以接受)
|
|
571
466
|
[tokenIn, tokenAddress], // path: WBNB/QuoteToken → Token
|
|
572
|
-
wallet.address // recipient
|
|
467
|
+
wallet.address, // recipient
|
|
573
468
|
]);
|
|
574
469
|
multicallData = routerInterface.encodeFunctionData('multicall', [[swapData]]);
|
|
575
470
|
}
|
|
@@ -582,14 +477,14 @@ export async function flapBundleCreateToDex(params) {
|
|
|
582
477
|
recipient: wallet.address,
|
|
583
478
|
amountIn: buyAmount,
|
|
584
479
|
amountOutMinimum: 0n, // 不设置滑点保护(Bundle 中可以接受)
|
|
585
|
-
sqrtPriceLimitX96: 0n
|
|
480
|
+
sqrtPriceLimitX96: 0n,
|
|
586
481
|
};
|
|
587
482
|
const exactInputSingleData = routerInterface.encodeFunctionData('exactInputSingle', [exactInputSingleParams]);
|
|
588
483
|
multicallData = routerInterface.encodeFunctionData('multicall', [[exactInputSingleData]]);
|
|
589
484
|
}
|
|
590
485
|
// ⚠️ Pancake SmartRouter 外盘买的 gas 不能太小,否则 bundle 预执行会直接失败。
|
|
591
486
|
// Flap 官方示例配置 dex_buy=5_000_000(flap-bundle-release/app/configs/global.ts)。
|
|
592
|
-
const DEX_BUY_GAS_LIMIT = BigInt(
|
|
487
|
+
const DEX_BUY_GAS_LIMIT = BigInt(8_000_000);
|
|
593
488
|
const tx = {
|
|
594
489
|
to: smartRouterAddress,
|
|
595
490
|
data: multicallData,
|
|
@@ -597,7 +492,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
597
492
|
gasLimit: DEX_BUY_GAS_LIMIT,
|
|
598
493
|
chainId,
|
|
599
494
|
type: txType,
|
|
600
|
-
value: useNativeToken ? buyAmount : 0n
|
|
495
|
+
value: useNativeToken ? buyAmount : 0n,
|
|
601
496
|
};
|
|
602
497
|
if (txType === 2) {
|
|
603
498
|
tx.maxFeePerGas = gasPrice;
|
|
@@ -612,7 +507,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
612
507
|
});
|
|
613
508
|
const dexBuyResults = await Promise.all(dexBuyTxPromises);
|
|
614
509
|
// 展平数组:每个钱包可能有 [approve, buy] 或只有 [buy]
|
|
615
|
-
dexBuyResults.forEach(txs => allTransactions.push(...txs));
|
|
510
|
+
dexBuyResults.forEach((txs) => allTransactions.push(...txs));
|
|
616
511
|
}
|
|
617
512
|
// 5. 利润多跳转账
|
|
618
513
|
let profitHopWallets;
|
|
@@ -630,7 +525,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
630
525
|
gasPrice,
|
|
631
526
|
chainId,
|
|
632
527
|
txType,
|
|
633
|
-
startNonce: profitNonce
|
|
528
|
+
startNonce: profitNonce,
|
|
634
529
|
});
|
|
635
530
|
allTransactions.push(...profitResult.signedTransactions);
|
|
636
531
|
profitHopWallets = profitResult.hopWallets;
|
|
@@ -647,7 +542,7 @@ export async function flapBundleCreateToDex(params) {
|
|
|
647
542
|
enableDexBuy,
|
|
648
543
|
dexBuyerCount: dexBuyers.length,
|
|
649
544
|
dexTotalBuy: dexBuyAmounts.length > 0 ? ethers.formatEther(dexBuyAmounts.reduce((a, b) => a + b, 0n)) : '0',
|
|
650
|
-
profitAmount: profitAmount > 0n ? ethers.formatEther(profitAmount) : undefined
|
|
651
|
-
}
|
|
545
|
+
profitAmount: profitAmount > 0n ? ethers.formatEther(profitAmount) : undefined,
|
|
546
|
+
},
|
|
652
547
|
};
|
|
653
548
|
}
|