four-flap-meme-sdk 2.2.19 → 3.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/dist/{shared/abis → abis}/common.d.ts +1 -1
- package/dist/{shared/abis → abis}/common.js +75 -91
- package/dist/abis/contracts/TaxToken.json +969 -0
- package/dist/abis/contracts/TokenManager2.json +136 -0
- package/dist/{shared/abis → abis/contracts}/index.d.ts +0 -1
- package/dist/{shared/abis → abis/contracts}/index.js +0 -2
- package/dist/abis/flap/index.d.ts +5 -0
- package/dist/abis/flap/index.js +5 -0
- package/dist/abis/flap/portal-eip7702.d.ts +4 -0
- package/dist/abis/flap/portal-eip7702.js +39 -0
- package/dist/abis/flap/portal-events.d.ts +6 -0
- package/dist/abis/flap/portal-events.js +17 -0
- package/dist/abis/flap/portal-merkle.d.ts +4 -0
- package/dist/abis/flap/portal-merkle.js +25 -0
- package/dist/abis/flap/portal.d.ts +6 -0
- package/dist/abis/flap/portal.js +37 -0
- package/dist/abis/flap/vault.d.ts +171 -0
- package/dist/abis/flap/vault.js +91 -0
- package/dist/abis/index.d.ts +6 -0
- package/dist/abis/index.js +9 -0
- package/dist/bundle/config-helpers.d.ts +37 -0
- package/dist/bundle/config-helpers.js +58 -0
- package/dist/bundle/errors.d.ts +50 -0
- package/dist/bundle/errors.js +38 -0
- package/dist/bundle/four-meme/approve-tokenmanager.d.ts +7 -0
- package/dist/bundle/four-meme/approve-tokenmanager.js +99 -0
- package/dist/bundle/four-meme/core-helpers.d.ts +8 -0
- package/dist/bundle/four-meme/core-helpers.js +41 -0
- package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/core.d.ts +1 -1
- package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/core.js +74 -150
- package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/pancake-proxy.d.ts +1 -1
- package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/pancake-proxy.js +85 -92
- package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/private.d.ts +1 -1
- package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/private.js +48 -59
- package/dist/bundle/four-meme/sign-context-helpers.d.ts +2 -0
- package/dist/bundle/four-meme/sign-context-helpers.js +2 -0
- package/dist/bundle/four-meme/swap-buy-first.d.ts +8 -0
- package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/swap-buy-first.js +56 -108
- package/dist/bundle/four-meme/swap-hop-helpers.d.ts +6 -0
- package/dist/bundle/four-meme/swap-hop-helpers.js +63 -0
- package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/swap-internal.js +4 -4
- package/dist/bundle/four-meme/swap-sign-helpers.d.ts +28 -0
- package/dist/bundle/four-meme/swap-sign-helpers.js +105 -0
- package/dist/bundle/four-meme/swap.d.ts +17 -0
- package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/swap.js +84 -345
- package/dist/{contracts/tm-bundle-merkle/swap-buy-first.d.ts → bundle/four-meme/types/buy-first.d.ts} +11 -18
- package/dist/bundle/four-meme/types/core-flow.d.ts +63 -0
- package/dist/bundle/four-meme/types/core-flow.js +1 -0
- package/dist/{contracts/tm-bundle-merkle/types.d.ts → bundle/four-meme/types/index.d.ts} +130 -6
- package/dist/bundle/four-meme/types/index.js +1 -0
- package/dist/bundle/four-meme/types/swap-internal.d.ts +19 -0
- package/dist/bundle/four-meme/types/swap-internal.js +1 -0
- package/dist/bundle/four-meme/types.d.ts +1 -0
- package/dist/bundle/four-meme/utils-disperse.d.ts +7 -0
- package/dist/bundle/four-meme/utils-disperse.js +396 -0
- package/dist/bundle/four-meme/utils-pairwise.d.ts +8 -0
- package/dist/bundle/four-meme/utils-pairwise.js +328 -0
- package/dist/bundle/four-meme/utils-sweep.d.ts +8 -0
- package/dist/bundle/four-meme/utils-sweep.js +744 -0
- package/dist/bundle/index.d.ts +8 -0
- package/dist/bundle/index.js +8 -0
- package/dist/bundle/internal.d.ts +16 -0
- package/dist/bundle/internal.js +160 -0
- package/dist/bundle/sign-context-helpers.d.ts +26 -0
- package/dist/bundle/sign-context-helpers.js +63 -0
- package/dist/{contracts/tm-bundle-merkle → bundle}/submit.d.ts +6 -27
- package/dist/{contracts/tm-bundle-merkle → bundle}/submit.js +116 -313
- package/dist/bundle/types/index.d.ts +8 -0
- package/dist/bundle/types/index.js +1 -0
- package/dist/bundle/types.d.ts +1 -0
- package/dist/bundle/types.js +1 -0
- package/dist/chains/bsc/constants.js +1 -1
- package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
- package/dist/chains/bsc/four/approve-tokenmanager.js +1 -113
- package/dist/chains/bsc/four/config.d.ts +5 -67
- package/dist/chains/bsc/four/config.js +2 -114
- package/dist/chains/bsc/four/core.d.ts +1 -4
- package/dist/chains/bsc/four/core.js +1 -592
- package/dist/chains/bsc/four/index.d.ts +6 -6
- package/dist/chains/bsc/four/index.js +6 -6
- package/dist/chains/bsc/four/internal.d.ts +2 -46
- package/dist/chains/bsc/four/internal.js +2 -239
- package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
- package/dist/chains/bsc/four/pancake-proxy.js +1 -687
- package/dist/chains/bsc/four/private.d.ts +1 -27
- package/dist/chains/bsc/four/private.js +1 -477
- package/dist/chains/bsc/four/submit.d.ts +2 -315
- package/dist/chains/bsc/four/submit.js +2 -752
- package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
- package/dist/chains/bsc/four/swap-buy-first.js +2 -507
- package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
- package/dist/chains/bsc/four/swap-internal.js +1 -18
- package/dist/chains/bsc/four/swap.d.ts +2 -144
- package/dist/chains/bsc/four/swap.js +2 -766
- package/dist/chains/bsc/four/types.d.ts +1 -476
- package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
- package/dist/chains/bsc/four/utils-disperse.js +1 -0
- package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
- package/dist/chains/bsc/four/utils-pairwise.js +1 -0
- package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
- package/dist/chains/bsc/four/utils-sweep.js +1 -0
- package/dist/chains/bsc/four/utils.d.ts +5 -18
- package/dist/chains/bsc/four/utils.js +5 -1552
- package/dist/chains/bsc/iro.d.ts +5 -0
- package/dist/chains/bsc/iro.js +4 -0
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +155 -0
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +80 -0
- package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
- package/dist/chains/bsc/pancake/bundle-buy-first.js +99 -214
- 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/constants.js +1 -1
- 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 +5 -2
- package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
- package/dist/chains/eni/batch-router/transfer.js +57 -27
- 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 +2 -2
- 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 +3 -3
- 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 +29 -45
- package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
- package/dist/chains/eni/platforms/dswap/liquidity.js +59 -27
- package/dist/chains/eni/platforms/fair-launch/constants.js +1 -1
- 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 +88 -47
- package/dist/chains/eni/platforms/fair-launch/pool.js +5 -2
- package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
- package/dist/chains/eni/platforms/iro/constants.d.ts +1 -1
- package/dist/chains/eni/platforms/iro/constants.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 +108 -32
- package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
- package/dist/chains/eni/submit.d.ts +43 -0
- package/dist/chains/eni/submit.js +287 -0
- package/dist/chains/index.d.ts +13 -0
- package/dist/chains/index.js +13 -0
- package/dist/chains/monad/constants.js +1 -1
- package/dist/chains/xlayer/constants.d.ts +5 -0
- package/dist/chains/xlayer/constants.js +1 -1
- package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
- package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -21
- package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
- package/dist/chains/xlayer/eip7702/bundle-create.js +104 -74
- package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-sell.js +30 -112
- package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
- package/dist/chains/xlayer/eip7702/bundle-swap.js +52 -246
- package/dist/chains/xlayer/eip7702/constants.d.ts +11 -26
- package/dist/chains/xlayer/eip7702/constants.js +15 -68
- package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +13 -0
- package/dist/chains/xlayer/eip7702/flat-aliases.js +10 -0
- package/dist/chains/xlayer/eip7702/index.d.ts +28 -46
- package/dist/chains/xlayer/eip7702/index.js +28 -81
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +64 -308
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +58 -0
- package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
- package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
- package/dist/chains/xlayer/eip7702/utils.js +23 -28
- package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
- package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
- package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
- package/dist/chains/xlayer/eip7702/volume.js +89 -164
- package/dist/chains/xlayer/eoa/constants.d.ts +1 -1
- package/dist/chains/xlayer/eoa/constants.js +2 -16
- package/dist/chains/xlayer/eoa/dex-helpers.d.ts +1 -1
- package/dist/chains/xlayer/eoa/dex-helpers.js +7 -37
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +66 -299
- package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
- package/dist/chains/xlayer/eoa/eoa-wash-volume.js +18 -23
- package/dist/chains/xlayer/eoa/index.d.ts +10 -6
- package/dist/chains/xlayer/eoa/index.js +8 -23
- package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
- package/dist/chains/xlayer/eoa/router-manager.js +5 -4
- package/dist/chains/xlayer/eoa/types.d.ts +2 -2
- package/dist/chains/xlayer/eoa/types.js +1 -3
- package/dist/chains/xlayer/index.d.ts +3 -2
- package/dist/chains/xlayer/index.js +4 -7
- package/dist/core/amount/split-by-weight.d.ts +5 -0
- package/dist/core/amount/split-by-weight.js +35 -0
- package/dist/{shared → core}/clients/blockrazor.d.ts +4 -8
- package/dist/{shared → core}/clients/blockrazor.js +43 -35
- package/dist/{shared → core}/clients/club48.d.ts +2 -2
- package/dist/{shared → core}/clients/club48.js +36 -30
- package/dist/{shared → core}/clients/emitservice.js +2 -0
- package/dist/{shared → core}/clients/four.d.ts +21 -6
- package/dist/{shared → core}/clients/four.js +29 -24
- package/dist/core/clients/index.d.ts +8 -0
- package/dist/core/clients/index.js +8 -0
- package/dist/{shared → core}/clients/merkle.d.ts +4 -3
- package/dist/{shared → core}/clients/merkle.js +30 -47
- package/dist/{shared → core}/constants/addresses.d.ts +27 -1
- package/dist/{shared → core}/constants/addresses.js +39 -2
- package/dist/{shared → core}/constants/chains.d.ts +1 -1
- package/dist/{shared → core}/constants/chains.js +1 -1
- package/dist/{shared → core}/constants/gas.d.ts +1 -1
- package/dist/{shared → core}/constants/gas.js +2 -6
- package/dist/{shared → core}/constants/index.d.ts +5 -2
- package/dist/{shared → core}/constants/index.js +3 -2
- package/dist/core/constants/quote.d.ts +30 -0
- package/dist/core/constants/quote.js +37 -0
- package/dist/core/dex/v3-path.d.ts +6 -0
- package/dist/core/dex/v3-path.js +35 -0
- package/dist/core/erc20/decimals.d.ts +7 -0
- package/dist/core/erc20/decimals.js +24 -0
- package/dist/{utils → core}/erc20.d.ts +7 -89
- package/dist/{utils → core}/erc20.js +99 -130
- package/dist/core/foundation.d.ts +15 -0
- package/dist/core/foundation.js +14 -0
- package/dist/core/gas/bundle-gas.d.ts +49 -0
- package/dist/core/gas/bundle-gas.js +93 -0
- package/dist/core/gas/profit-hop.d.ts +20 -0
- package/dist/core/gas/profit-hop.js +72 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.js +5 -0
- package/dist/core/legacy-types/errors.d.ts +27 -0
- package/dist/core/legacy-types/errors.js +34 -0
- package/dist/core/nonce/nonce-manager.d.ts +19 -0
- package/dist/core/nonce/nonce-manager.js +217 -0
- package/dist/core/normalize-unknown.d.ts +9 -0
- package/dist/core/normalize-unknown.js +29 -0
- package/dist/core/sdk-logger.d.ts +13 -0
- package/dist/core/sdk-logger.js +12 -0
- package/dist/core/shared-abis/common.d.ts +4 -0
- package/dist/core/shared-abis/common.js +4 -0
- package/dist/core/shared-abis/index.d.ts +5 -0
- package/dist/core/shared-abis/index.js +5 -0
- package/dist/core/tx/build-request.d.ts +17 -0
- package/dist/core/tx/build-request.js +25 -0
- package/dist/core/tx/sign-batch.d.ts +5 -0
- package/dist/core/tx/sign-batch.js +26 -0
- package/dist/core/tx/wallet-sign-patch.d.ts +1 -0
- package/dist/core/tx/wallet-sign-patch.js +18 -0
- package/dist/core/types/airdrop-sweep.d.ts +79 -0
- package/dist/core/types/airdrop-sweep.js +1 -0
- package/dist/core/types/erc20.d.ts +65 -0
- package/dist/core/types/erc20.js +1 -0
- package/dist/core/types/holders-maker.d.ts +64 -0
- package/dist/core/types/holders-maker.js +1 -0
- package/dist/core/types/index.d.ts +7 -0
- package/dist/core/types/index.js +1 -0
- package/dist/{utils → core/types}/lp-inspect.d.ts +4 -52
- package/dist/core/types/lp-inspect.js +1 -0
- package/dist/core/types/multicall.d.ts +5 -0
- package/dist/core/types/multicall.js +1 -0
- package/dist/core/types/private-sale.d.ts +35 -0
- package/dist/core/types/private-sale.js +1 -0
- package/dist/core/types/quote-helpers.d.ts +17 -0
- package/dist/core/types/quote-helpers.js +1 -0
- package/dist/core/types-erc20.d.ts +1 -0
- package/dist/core/types-erc20.js +1 -0
- package/dist/core/wallet/generate.d.ts +5 -0
- package/dist/core/wallet/generate.js +8 -0
- package/dist/domains/dex/direct-router-helpers.d.ts +269 -0
- package/dist/domains/dex/direct-router-helpers.js +536 -0
- package/dist/domains/dex/direct-router.d.ts +28 -0
- package/dist/{dex → domains/dex}/direct-router.js +246 -674
- package/dist/domains/dex/types.d.ts +81 -0
- package/dist/domains/dex/types.js +1 -0
- package/dist/{shared → domains}/flap/abi.js +1 -1
- package/dist/{shared → domains}/flap/constants.d.ts +1 -2
- package/dist/{shared → domains}/flap/constants.js +3 -4
- package/dist/{shared → domains}/flap/curve.js +3 -0
- package/dist/{shared → domains}/flap/errors.d.ts +1 -4
- package/dist/{shared → domains}/flap/errors.js +20 -1
- package/dist/domains/flap/index.d.ts +7 -0
- package/dist/domains/flap/index.js +5 -0
- package/dist/{shared → domains}/flap/meta.d.ts +22 -18
- package/dist/{shared → domains}/flap/meta.js +32 -24
- package/dist/{shared/flap/index.d.ts → domains/flap/module.d.ts} +4 -5
- package/dist/{shared/flap/index.js → domains/flap/module.js} +4 -5
- package/dist/{shared → domains}/flap/permit.js +10 -3
- package/dist/{shared → domains}/flap/pinata.d.ts +22 -6
- package/dist/{shared → domains}/flap/pinata.js +21 -26
- package/dist/domains/flap/portal-bundle-merkle/config.d.ts +10 -0
- package/dist/domains/flap/portal-bundle-merkle/config.js +13 -0
- package/dist/domains/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
- package/dist/domains/flap/portal-bundle-merkle/core-helpers.js +83 -0
- package/dist/{shared → domains}/flap/portal-bundle-merkle/core.d.ts +0 -4
- package/dist/{shared → domains}/flap/portal-bundle-merkle/core.js +168 -175
- package/dist/{shared → domains}/flap/portal-bundle-merkle/create-to-dex.d.ts +17 -4
- package/dist/{shared → domains}/flap/portal-bundle-merkle/create-to-dex.js +97 -118
- package/dist/{shared → domains}/flap/portal-bundle-merkle/curve-to-dex.js +105 -123
- package/dist/domains/flap/portal-bundle-merkle/index.d.ts +18 -0
- package/dist/{shared → domains}/flap/portal-bundle-merkle/index.js +4 -7
- package/dist/{shared → domains}/flap/portal-bundle-merkle/pancake-proxy.js +73 -70
- package/dist/{shared → domains}/flap/portal-bundle-merkle/private.js +63 -116
- package/dist/domains/flap/portal-bundle-merkle/swap-batch.d.ts +8 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-batch.js +227 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-buy-first.d.ts +2 -0
- package/dist/{shared → domains}/flap/portal-bundle-merkle/swap-buy-first.js +69 -288
- package/dist/domains/flap/portal-bundle-merkle/swap-cross.d.ts +9 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-cross.js +139 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-helpers.js +259 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-planning.d.ts +70 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-planning.js +182 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-quick-batch.d.ts +16 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-quick-batch.js +327 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-single.d.ts +2 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-single.js +184 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-types.d.ts +101 -0
- package/dist/domains/flap/portal-bundle-merkle/swap-types.js +1 -0
- package/dist/domains/flap/portal-bundle-merkle/swap.d.ts +8 -0
- package/dist/domains/flap/portal-bundle-merkle/swap.js +7 -0
- package/dist/{shared → domains}/flap/portal-bundle-merkle/types.d.ts +88 -12
- package/dist/domains/flap/portal-bundle-merkle/types.js +1 -0
- package/dist/domains/flap/portal-bundle-merkle/utils.d.ts +10 -0
- package/dist/{shared → domains}/flap/portal-bundle-merkle/utils.js +145 -265
- package/dist/{shared → domains}/flap/portal-bundle.d.ts +2 -2
- package/dist/{shared → domains}/flap/portal-bundle.js +84 -79
- package/dist/domains/flap/portal-create-token.d.ts +81 -0
- package/dist/domains/flap/portal-create-token.js +255 -0
- package/dist/{shared → domains}/flap/portal.d.ts +1 -2
- package/dist/{shared → domains}/flap/portal.js +36 -28
- package/dist/{shared → domains}/flap/vanity.d.ts +6 -6
- package/dist/{shared → domains}/flap/vanity.js +15 -21
- package/dist/{shared → domains}/flap/vault.d.ts +25 -93
- package/dist/{shared → domains}/flap/vault.js +77 -127
- package/dist/{flows → domains/flows}/create.d.ts +2 -1
- package/dist/{flows → domains/flows}/create.js +8 -8
- package/dist/domains/flows/index.d.ts +9 -0
- package/dist/domains/flows/index.js +9 -0
- package/dist/{contracts → domains/four/contracts}/helper3.d.ts +20 -5
- package/dist/{contracts → domains/four/contracts}/helper3.js +56 -20
- package/dist/domains/four/contracts/tm-bundle-helpers.d.ts +88 -0
- package/dist/domains/four/contracts/tm-bundle-helpers.js +73 -0
- package/dist/{contracts → domains/four/contracts}/tm-bundle.d.ts +4 -52
- package/dist/{contracts → domains/four/contracts}/tm-bundle.js +122 -189
- package/dist/{contracts → domains/four/contracts}/tm.d.ts +10 -8
- package/dist/{contracts → domains/four/contracts}/tm.js +39 -35
- package/dist/{contracts → domains/four/contracts}/tm1.js +9 -4
- package/dist/{contracts → domains/four/contracts}/tm2.js +10 -5
- package/dist/domains/four/index.d.ts +7 -0
- package/dist/domains/four/index.js +7 -0
- package/dist/{shared → domains}/four/tax-token.d.ts +1 -1
- package/dist/{shared → domains}/four/tax-token.js +31 -10
- package/dist/domains/holders/holders-maker-helpers.d.ts +9 -0
- package/dist/domains/holders/holders-maker-helpers.js +9 -0
- package/dist/domains/holders/holders-maker.d.ts +18 -0
- package/dist/domains/holders/holders-maker.js +324 -0
- package/dist/domains/holders/index.d.ts +1 -0
- package/dist/domains/holders/index.js +1 -0
- package/dist/domains/holders/internal/addresses.d.ts +12 -0
- package/dist/domains/holders/internal/addresses.js +15 -0
- package/dist/domains/holders/internal/buy-tx.d.ts +44 -0
- package/dist/domains/holders/internal/buy-tx.js +278 -0
- package/dist/domains/holders/internal/constants.d.ts +6 -0
- package/dist/domains/holders/internal/constants.js +7 -0
- package/dist/domains/holders/internal/disperse.d.ts +18 -0
- package/dist/domains/holders/internal/disperse.js +90 -0
- package/dist/domains/holders/internal/routing.d.ts +4 -0
- package/dist/domains/holders/internal/routing.js +45 -0
- package/dist/domains/holders/internal/transfer-tx.d.ts +4 -0
- package/dist/domains/holders/internal/transfer-tx.js +67 -0
- package/dist/domains/holders/types.d.ts +1 -0
- package/dist/domains/holders/types.js +1 -0
- package/dist/domains/lp-inspect/index.d.ts +1 -0
- package/dist/domains/lp-inspect/index.js +1 -0
- package/dist/domains/lp-inspect/lp-inspect-helpers.d.ts +9 -0
- package/dist/domains/lp-inspect/lp-inspect-helpers.js +109 -0
- package/dist/domains/lp-inspect/lp-inspect.d.ts +40 -0
- package/dist/{utils → domains/lp-inspect}/lp-inspect.js +78 -293
- package/dist/domains/lp-inspect/types.d.ts +1 -0
- package/dist/domains/lp-inspect/types.js +1 -0
- package/dist/domains/merkle/index.d.ts +12 -0
- package/dist/domains/merkle/index.js +11 -0
- package/dist/domains/private-sale/index.d.ts +1 -0
- package/dist/domains/private-sale/index.js +1 -0
- package/dist/domains/private-sale/private-sale.d.ts +34 -0
- package/dist/{utils → domains/private-sale}/private-sale.js +5 -16
- package/dist/domains/private-sale/types.d.ts +1 -0
- package/dist/domains/private-sale/types.js +1 -0
- package/dist/domains/quote/index.d.ts +1 -0
- package/dist/domains/quote/index.js +1 -0
- package/dist/{utils → domains/quote}/quote-helpers.d.ts +4 -45
- package/dist/{utils → domains/quote}/quote-helpers.js +17 -74
- package/dist/domains/quote/types.d.ts +1 -0
- package/dist/domains/quote/types.js +1 -0
- package/dist/domains/vanity/index.d.ts +5 -0
- package/dist/domains/vanity/index.js +5 -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/index.d.ts +17 -88
- package/dist/index.js +17 -218
- 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/errors.d.ts +12 -1
- package/dist/utils/errors.js +60 -1
- package/dist/utils/hop-chains.d.ts +35 -0
- package/dist/utils/hop-chains.js +215 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/mpcExclusive.d.ts +2 -5
- package/dist/utils/mpcExclusive.js +4 -3
- package/dist/utils/provider-factory.d.ts +4 -0
- package/dist/utils/provider-factory.js +10 -0
- package/dist/utils/stealth-transfer.d.ts +2 -28
- package/dist/utils/stealth-transfer.js +41 -21
- package/dist/utils/swap-helpers.d.ts +2 -15
- package/dist/utils/swap-helpers.js +7 -12
- 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/errors.d.ts +1 -0
- package/dist/utils/types/errors.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/mpc-exclusive.d.ts +5 -0
- package/dist/utils/types/mpc-exclusive.js +1 -0
- package/dist/utils/types/stealth-transfer.d.ts +44 -0
- package/dist/utils/types/stealth-transfer.js +1 -0
- package/dist/utils/types/wallet.d.ts +25 -0
- package/dist/utils/types/wallet.js +1 -0
- package/dist/utils/wallet.d.ts +4 -25
- package/dist/utils/wallet.js +27 -22
- package/package.json +96 -2
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +0 -26
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +0 -113
- package/dist/contracts/tm-bundle-merkle/config.d.ts +0 -70
- package/dist/contracts/tm-bundle-merkle/config.js +0 -114
- package/dist/contracts/tm-bundle-merkle/index.d.ts +0 -15
- package/dist/contracts/tm-bundle-merkle/index.js +0 -29
- package/dist/contracts/tm-bundle-merkle/internal.d.ts +0 -48
- package/dist/contracts/tm-bundle-merkle/internal.js +0 -240
- package/dist/contracts/tm-bundle-merkle/swap.d.ts +0 -146
- package/dist/contracts/tm-bundle-merkle/utils.d.ts +0 -20
- package/dist/contracts/tm-bundle-merkle/utils.js +0 -1503
- package/dist/dex/direct-router.d.ts +0 -150
- package/dist/shared/abis/TaxToken.json +0 -105
- package/dist/shared/abis/TokenManager2.json +0 -60
- package/dist/shared/flap/graduated-dex.d.ts +0 -1
- package/dist/shared/flap/graduated-dex.js +0 -1
- package/dist/shared/flap/launch-v6.d.ts +0 -132
- package/dist/shared/flap/launch-v6.js +0 -137
- package/dist/shared/flap/portal-bundle-merkle/config.d.ts +0 -79
- package/dist/shared/flap/portal-bundle-merkle/config.js +0 -133
- package/dist/shared/flap/portal-bundle-merkle/index.d.ts +0 -14
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +0 -65
- package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +0 -201
- package/dist/shared/flap/portal-bundle-merkle/swap.js +0 -1359
- package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +0 -89
- package/dist/shared/flap/portal-create-token.d.ts +0 -63
- package/dist/shared/flap/portal-create-token.js +0 -258
- package/dist/shared/four/index.d.ts +0 -7
- package/dist/shared/four/index.js +0 -22
- package/dist/shared/index.d.ts +0 -10
- package/dist/shared/index.js +0 -10
- package/dist/utils/holders-maker.d.ts +0 -154
- package/dist/utils/holders-maker.js +0 -945
- package/dist/utils/pcs-infinity-cl.d.ts +0 -65
- package/dist/utils/pcs-infinity-cl.js +0 -426
- package/dist/utils/private-sale.d.ts +0 -90
- /package/dist/{shared/abis → abis/contracts}/TokenManager.json +0 -0
- /package/dist/{shared/abis → abis/contracts}/TokenManagerHelper3.json +0 -0
- /package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/swap-internal.d.ts +0 -0
- /package/dist/{shared/flap/portal-bundle-merkle/types.js → bundle/four-meme/types/buy-first.js} +0 -0
- /package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/types.js +0 -0
- /package/dist/{shared → core}/clients/emitservice.d.ts +0 -0
- /package/dist/{shared → core}/constants/profit.d.ts +0 -0
- /package/dist/{shared → core}/constants/profit.js +0 -0
- /package/dist/{dex → domains/dex}/index.d.ts +0 -0
- /package/dist/{dex → domains/dex}/index.js +0 -0
- /package/dist/{shared → domains}/flap/abi.d.ts +0 -0
- /package/dist/{shared → domains}/flap/curve.d.ts +0 -0
- /package/dist/{shared → domains}/flap/ipfs.d.ts +0 -0
- /package/dist/{shared → domains}/flap/ipfs.js +0 -0
- /package/dist/{shared → domains}/flap/permit.d.ts +0 -0
- /package/dist/{shared → domains}/flap/portal-bundle-merkle/curve-to-dex.d.ts +0 -0
- /package/dist/{shared → domains}/flap/portal-bundle-merkle/pancake-proxy.d.ts +0 -0
- /package/dist/{shared → domains}/flap/portal-bundle-merkle/private.d.ts +0 -0
- /package/dist/{contracts → domains/four/contracts}/tm1.d.ts +0 -0
- /package/dist/{contracts → domains/four/contracts}/tm2.d.ts +0 -0
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
* 功能:钱包B先买入代币 → 钱包A卖出相同数量 → 原子执行
|
|
5
5
|
*/
|
|
6
6
|
import { ethers, Contract, Wallet } from 'ethers';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { createSignProvider } from '../sign-context-helpers.js';
|
|
8
|
+
import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../utils/bundle-helpers.js';
|
|
9
|
+
import { ADDRESSES, BLOCKRAZOR_BUILDER_EOA, CHAINS, getProfitRateBps as getSharedProfitRateBps, } from '../../core/constants/index.js';
|
|
9
10
|
import { TM_ABI, HELPER3_ABI, TM_ADDRESS } from './swap-internal.js';
|
|
10
|
-
import { getTxType, getGasPriceConfig, getProfitRecipient, getBribeAmount } from '
|
|
11
|
-
import { trySell } from '
|
|
11
|
+
import { getTxType, getGasPriceConfig, getProfitRecipient, getBribeAmount, } from '../config-helpers.js';
|
|
12
|
+
import { trySell } from '../../domains/four/contracts/tm.js';
|
|
13
|
+
import { splitAmountByWeight as splitAmount } from '../../core/amount/split-by-weight.js';
|
|
12
14
|
// ✅ 本地 getGasLimit(FourAnyConfig 支持 bigint gasLimit)
|
|
13
15
|
function getGasLimit(config, defaultGas = 800000) {
|
|
14
16
|
if (config.gasLimit !== undefined) {
|
|
@@ -31,9 +33,9 @@ const MAX_SWAP_TX_COUNT = MAX_BUNDLE_SIGNATURES - BRIBE_TX_COUNT - PROFIT_TX_COU
|
|
|
31
33
|
*/
|
|
32
34
|
function getProfitRatePerTxBps(userType) {
|
|
33
35
|
if (userType === 'v1') {
|
|
34
|
-
return
|
|
36
|
+
return getSharedProfitRateBps('v1Double');
|
|
35
37
|
}
|
|
36
|
-
return
|
|
38
|
+
return getSharedProfitRateBps('v0Double');
|
|
37
39
|
}
|
|
38
40
|
/**
|
|
39
41
|
* 验证买卖笔数
|
|
@@ -51,49 +53,10 @@ function validateSwapCounts(buyCount, sellCount) {
|
|
|
51
53
|
`最大签名数为 ${MAX_BUNDLE_SIGNATURES}(${BRIBE_TX_COUNT} 贿赂 + ${PROFIT_TX_COUNT} 利润 + ${MAX_SWAP_TX_COUNT} 买卖)`);
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
|
-
/**
|
|
55
|
-
* ✅ 将金额随机拆分成多份(更自然,不像机器人)
|
|
56
|
-
* 每份金额在平均值的 50%-150% 之间随机浮动
|
|
57
|
-
*/
|
|
58
|
-
function splitAmount(totalAmount, count) {
|
|
59
|
-
if (count <= 0) {
|
|
60
|
-
throw new Error('拆分份数必须大于 0');
|
|
61
|
-
}
|
|
62
|
-
if (count === 1) {
|
|
63
|
-
return [totalAmount];
|
|
64
|
-
}
|
|
65
|
-
// 生成随机权重(0.5 - 1.5 之间)
|
|
66
|
-
const weights = [];
|
|
67
|
-
for (let i = 0; i < count; i++) {
|
|
68
|
-
// 随机值在 0.5 - 1.5 之间,使每份金额有 ±50% 的浮动
|
|
69
|
-
weights.push(0.5 + Math.random());
|
|
70
|
-
}
|
|
71
|
-
// 计算权重总和
|
|
72
|
-
const totalWeight = weights.reduce((a, b) => a + b, 0);
|
|
73
|
-
// 根据权重分配金额
|
|
74
|
-
const amounts = [];
|
|
75
|
-
let allocated = 0n;
|
|
76
|
-
for (let i = 0; i < count - 1; i++) {
|
|
77
|
-
// 按权重比例分配
|
|
78
|
-
const ratio = weights[i] / totalWeight;
|
|
79
|
-
const amount = BigInt(Math.floor(Number(totalAmount) * ratio));
|
|
80
|
-
amounts.push(amount);
|
|
81
|
-
allocated += amount;
|
|
82
|
-
}
|
|
83
|
-
// 最后一份分配剩余的全部(确保总和精确)
|
|
84
|
-
amounts.push(totalAmount - allocated);
|
|
85
|
-
// 随机打乱顺序(让大小金额交错出现)
|
|
86
|
-
for (let i = amounts.length - 1; i > 0; i--) {
|
|
87
|
-
const j = Math.floor(Math.random() * (i + 1));
|
|
88
|
-
[amounts[i], amounts[j]] = [amounts[j], amounts[i]];
|
|
89
|
-
}
|
|
90
|
-
return amounts;
|
|
91
|
-
}
|
|
92
56
|
export async function fourBundleBuyFirstMerkle(params) {
|
|
93
|
-
const { buyerPrivateKey, buyerPrivateKeys, buyerFunds, buyerFundsPercentage, sellerPrivateKey, sellerPrivateKeys, tokenAddress, config, buyCount: _buyCount, sellCount: _sellCount } = params;
|
|
57
|
+
const { buyerPrivateKey, buyerPrivateKeys, buyerFunds, buyerFundsPercentage, sellerPrivateKey, sellerPrivateKeys, tokenAddress, config, buyCount: _buyCount, sellCount: _sellCount, } = params;
|
|
94
58
|
// ✅ 判断是否为多钱包模式
|
|
95
|
-
const isMultiWalletMode = !!(buyerPrivateKeys && buyerPrivateKeys.length > 0) ||
|
|
96
|
-
!!(sellerPrivateKeys && sellerPrivateKeys.length > 0);
|
|
59
|
+
const isMultiWalletMode = !!(buyerPrivateKeys && buyerPrivateKeys.length > 0) || !!(sellerPrivateKeys && sellerPrivateKeys.length > 0);
|
|
97
60
|
const buyCount = _buyCount ?? 1;
|
|
98
61
|
const sellCount = _sellCount ?? 1;
|
|
99
62
|
// ✅ 多钱包模式:使用单独的处理逻辑
|
|
@@ -103,7 +66,7 @@ export async function fourBundleBuyFirstMerkle(params) {
|
|
|
103
66
|
sellerPrivateKeys: sellerPrivateKeys || (sellerPrivateKey ? [sellerPrivateKey] : []),
|
|
104
67
|
tokenAddress,
|
|
105
68
|
buyerFunds,
|
|
106
|
-
config
|
|
69
|
+
config,
|
|
107
70
|
});
|
|
108
71
|
}
|
|
109
72
|
// ✅ 单钱包模式(向后兼容)
|
|
@@ -114,11 +77,8 @@ export async function fourBundleBuyFirstMerkle(params) {
|
|
|
114
77
|
// ✅ 计算利润比例(根据 userType 动态调整)
|
|
115
78
|
const totalTxCount = buyCount + sellCount;
|
|
116
79
|
const profitRateBps = getProfitRatePerTxBps(config.userType) * totalTxCount;
|
|
117
|
-
const chainIdNum = config.chainId ??
|
|
118
|
-
const provider =
|
|
119
|
-
chainId: chainIdNum,
|
|
120
|
-
name: 'BSC'
|
|
121
|
-
});
|
|
80
|
+
const chainIdNum = config.chainId ?? CHAINS.BSC.chainId;
|
|
81
|
+
const provider = createSignProvider(config.rpcUrl, chainIdNum, 'BSC');
|
|
122
82
|
const buyer = new Wallet(buyerPrivateKey, provider);
|
|
123
83
|
const seller = new Wallet(sellerPrivateKey, provider);
|
|
124
84
|
const sameAddress = buyer.address.toLowerCase() === seller.address.toLowerCase();
|
|
@@ -129,7 +89,7 @@ export async function fourBundleBuyFirstMerkle(params) {
|
|
|
129
89
|
// ✅ 优化:第一批并行 - buyerBalance、gasPrice
|
|
130
90
|
const [buyerBalance, gasPrice] = await Promise.all([
|
|
131
91
|
provider.getBalance(buyer.address),
|
|
132
|
-
getOptimizedGasPrice(provider, getGasPriceConfig(config))
|
|
92
|
+
getOptimizedGasPrice(provider, getGasPriceConfig(config)),
|
|
133
93
|
]);
|
|
134
94
|
// 计算买方投入资金
|
|
135
95
|
let buyerFundsWei;
|
|
@@ -149,14 +109,11 @@ export async function fourBundleBuyFirstMerkle(params) {
|
|
|
149
109
|
}
|
|
150
110
|
// ✅ 优化:第二批并行 - buyQuote、sellerTokenBal、decimals
|
|
151
111
|
const helper3 = new Contract(ADDRESSES.BSC.TokenManagerHelper3, HELPER3_ABI, provider);
|
|
152
|
-
const erc20 = new Contract(tokenAddress, [
|
|
153
|
-
'function balanceOf(address) view returns (uint256)',
|
|
154
|
-
'function decimals() view returns (uint8)'
|
|
155
|
-
], provider);
|
|
112
|
+
const erc20 = new Contract(tokenAddress, ['function balanceOf(address) view returns (uint256)', 'function decimals() view returns (uint8)'], provider);
|
|
156
113
|
const [buyQuote, sellerTokenBal, decimals] = await Promise.all([
|
|
157
114
|
helper3.tryBuy(tokenAddress, 0n, buyerFundsWei),
|
|
158
115
|
erc20.balanceOf(seller.address),
|
|
159
|
-
erc20.decimals()
|
|
116
|
+
erc20.decimals(),
|
|
160
117
|
]);
|
|
161
118
|
const estimatedTokenAmount = buyQuote.estimatedAmount ?? buyQuote[2];
|
|
162
119
|
if (!estimatedTokenAmount || estimatedTokenAmount <= 0n) {
|
|
@@ -180,8 +137,8 @@ export async function fourBundleBuyFirstMerkle(params) {
|
|
|
180
137
|
const bribeAmount = getBribeAmount(config);
|
|
181
138
|
const needBribeTx = bribeAmount > 0n;
|
|
182
139
|
// ✅ 构建多笔买入和卖出交易
|
|
183
|
-
const buyUnsignedPromises = buyAmountsWei.map(amount => tmBuyer.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyer.address, amount, 0n, { value: amount }));
|
|
184
|
-
const sellUnsignedPromises = sellAmountsWei.map(amount => tmSeller.sellToken.populateTransaction(0n, tokenAddress, amount, 0n));
|
|
140
|
+
const buyUnsignedPromises = buyAmountsWei.map((amount) => tmBuyer.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyer.address, amount, 0n, { value: amount }));
|
|
141
|
+
const sellUnsignedPromises = sellAmountsWei.map((amount) => tmSeller.sellToken.populateTransaction(0n, tokenAddress, amount, 0n));
|
|
185
142
|
// ✅ 规划多笔交易 nonce(与 Flap 一致,不含授权)
|
|
186
143
|
const multiNoncePlan = await planMultiNonces({
|
|
187
144
|
buyer,
|
|
@@ -191,12 +148,12 @@ export async function fourBundleBuyFirstMerkle(params) {
|
|
|
191
148
|
extractProfit,
|
|
192
149
|
needBribeTx,
|
|
193
150
|
sameAddress,
|
|
194
|
-
nonceManager
|
|
151
|
+
nonceManager,
|
|
195
152
|
});
|
|
196
153
|
const [sellResult, buyUnsignedArray, sellUnsignedArray] = await Promise.all([
|
|
197
154
|
trySell('BSC', config.rpcUrl, tokenAddress, sellAmountWei),
|
|
198
155
|
Promise.all(buyUnsignedPromises),
|
|
199
|
-
Promise.all(sellUnsignedPromises)
|
|
156
|
+
Promise.all(sellUnsignedPromises),
|
|
200
157
|
]);
|
|
201
158
|
const estimatedSellFunds = sellResult.funds;
|
|
202
159
|
const profitAmount = extractProfit ? (estimatedSellFunds * BigInt(profitRateBps)) / 10000n : 0n;
|
|
@@ -209,8 +166,8 @@ export async function fourBundleBuyFirstMerkle(params) {
|
|
|
209
166
|
nonce: multiNoncePlan.bribeNonce,
|
|
210
167
|
gasPrice,
|
|
211
168
|
gasLimit: 21000n,
|
|
212
|
-
chainId: chainIdNum,
|
|
213
|
-
type: txType
|
|
169
|
+
chainId: BigInt(chainIdNum),
|
|
170
|
+
type: txType,
|
|
214
171
|
});
|
|
215
172
|
}
|
|
216
173
|
// ✅ 并行签名所有买入和卖出交易
|
|
@@ -220,9 +177,9 @@ export async function fourBundleBuyFirstMerkle(params) {
|
|
|
220
177
|
nonce: multiNoncePlan.buyerNonces[i],
|
|
221
178
|
gasLimit: finalGasLimit,
|
|
222
179
|
gasPrice,
|
|
223
|
-
chainId: chainIdNum,
|
|
180
|
+
chainId: BigInt(chainIdNum),
|
|
224
181
|
type: txType,
|
|
225
|
-
value: buyAmountsWei[i]
|
|
182
|
+
value: buyAmountsWei[i],
|
|
226
183
|
}));
|
|
227
184
|
const sellSignPromises = sellUnsignedArray.map((unsigned, i) => seller.signTransaction({
|
|
228
185
|
...unsigned,
|
|
@@ -230,14 +187,11 @@ export async function fourBundleBuyFirstMerkle(params) {
|
|
|
230
187
|
nonce: multiNoncePlan.sellerNonces[i],
|
|
231
188
|
gasLimit: finalGasLimit,
|
|
232
189
|
gasPrice,
|
|
233
|
-
chainId: chainIdNum,
|
|
190
|
+
chainId: BigInt(chainIdNum),
|
|
234
191
|
type: txType,
|
|
235
|
-
value: 0n
|
|
192
|
+
value: 0n,
|
|
236
193
|
}));
|
|
237
|
-
const [signedBuys, signedSells] = await Promise.all([
|
|
238
|
-
Promise.all(buySignPromises),
|
|
239
|
-
Promise.all(sellSignPromises)
|
|
240
|
-
]);
|
|
194
|
+
const [signedBuys, signedSells] = await Promise.all([Promise.all(buySignPromises), Promise.all(sellSignPromises)]);
|
|
241
195
|
nonceManager.clearTemp();
|
|
242
196
|
// ✅ 组装交易列表:贿赂 → 买入(多笔) → 卖出(多笔)(与 Flap 一致)
|
|
243
197
|
const allTransactions = [];
|
|
@@ -256,7 +210,7 @@ export async function fourBundleBuyFirstMerkle(params) {
|
|
|
256
210
|
gasPrice,
|
|
257
211
|
chainId: chainIdNum,
|
|
258
212
|
txType,
|
|
259
|
-
startNonce: multiNoncePlan.profitNonce
|
|
213
|
+
startNonce: multiNoncePlan.profitNonce,
|
|
260
214
|
});
|
|
261
215
|
allTransactions.push(...profitHopResult.signedTransactions);
|
|
262
216
|
profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
|
|
@@ -274,16 +228,16 @@ export async function fourBundleBuyFirstMerkle(params) {
|
|
|
274
228
|
buyCount,
|
|
275
229
|
sellCount,
|
|
276
230
|
// ✅ 返回每笔交易的具体金额(随机分配后的数组)
|
|
277
|
-
buyAmounts: buyAmountsWei.map(amt => ethers.formatEther(amt)),
|
|
278
|
-
sellAmounts: sellAmountsWei.map(amt => ethers.formatUnits(amt, decimals))
|
|
279
|
-
}
|
|
231
|
+
buyAmounts: buyAmountsWei.map((amt) => ethers.formatEther(amt)),
|
|
232
|
+
sellAmounts: sellAmountsWei.map((amt) => ethers.formatUnits(amt, decimals)),
|
|
233
|
+
},
|
|
280
234
|
};
|
|
281
235
|
}
|
|
282
236
|
/**
|
|
283
237
|
* ✅ 规划多笔交易 nonce(与 Flap 一致)
|
|
284
238
|
* 交易顺序:贿赂 → 买入(多笔) → 卖出(多笔) → 利润
|
|
285
239
|
*/
|
|
286
|
-
async function planMultiNonces({ buyer, seller, buyCount, sellCount, extractProfit, needBribeTx, sameAddress, nonceManager }) {
|
|
240
|
+
async function planMultiNonces({ buyer, seller, buyCount, sellCount, extractProfit, needBribeTx, sameAddress, nonceManager, }) {
|
|
287
241
|
const profitNonceCount = extractProfit ? 1 : 0;
|
|
288
242
|
if (sameAddress) {
|
|
289
243
|
// 同一地址:贿赂(可选) + 买入(多笔) + 卖出(多笔) + 利润(可选)
|
|
@@ -306,7 +260,7 @@ async function planMultiNonces({ buyer, seller, buyCount, sellCount, extractProf
|
|
|
306
260
|
const sellerTxCount = bribeTxCount + sellCount + profitNonceCount;
|
|
307
261
|
const [buyerNonces, sellerNoncesAll] = await Promise.all([
|
|
308
262
|
nonceManager.getNextNonceBatch(buyer, buyCount),
|
|
309
|
-
nonceManager.getNextNonceBatch(seller, sellerTxCount)
|
|
263
|
+
nonceManager.getNextNonceBatch(seller, sellerTxCount),
|
|
310
264
|
]);
|
|
311
265
|
let idx = 0;
|
|
312
266
|
const bribeNonce = needBribeTx ? sellerNoncesAll[idx++] : undefined;
|
|
@@ -335,15 +289,12 @@ async function fourBundleBuyFirstMultiWallet(params) {
|
|
|
335
289
|
// ✅ 计算利润比例(根据 userType 动态调整)
|
|
336
290
|
const totalTxCount = buyCount + sellCount;
|
|
337
291
|
const profitRateBps = getProfitRatePerTxBps(config.userType) * totalTxCount;
|
|
338
|
-
const chainIdNum = config.chainId ??
|
|
339
|
-
const provider =
|
|
340
|
-
chainId: chainIdNum,
|
|
341
|
-
name: 'BSC'
|
|
342
|
-
});
|
|
292
|
+
const chainIdNum = config.chainId ?? CHAINS.BSC.chainId;
|
|
293
|
+
const provider = createSignProvider(config.rpcUrl, chainIdNum, 'BSC');
|
|
343
294
|
const nonceManager = new NonceManager(provider);
|
|
344
295
|
// 创建所有钱包实例
|
|
345
|
-
const buyers = buyerPrivateKeys.map(pk => new Wallet(pk, provider));
|
|
346
|
-
const sellers = sellerPrivateKeys.map(pk => new Wallet(pk, provider));
|
|
296
|
+
const buyers = buyerPrivateKeys.map((pk) => new Wallet(pk, provider));
|
|
297
|
+
const sellers = sellerPrivateKeys.map((pk) => new Wallet(pk, provider));
|
|
347
298
|
// 使用第一个卖方作为主卖方(支付贿赂和利润)
|
|
348
299
|
const mainSeller = sellers[0];
|
|
349
300
|
// ✅ 计算总交易金额
|
|
@@ -360,13 +311,11 @@ async function fourBundleBuyFirstMultiWallet(params) {
|
|
|
360
311
|
const needBribeTx = bribeAmount > 0n;
|
|
361
312
|
// ✅ 第一批并行:报价 + Gas价格 + 代币精度
|
|
362
313
|
const helper3 = new Contract(ADDRESSES.BSC.TokenManagerHelper3, HELPER3_ABI, provider);
|
|
363
|
-
const erc20 = new Contract(tokenAddress, [
|
|
364
|
-
'function decimals() view returns (uint8)'
|
|
365
|
-
], provider);
|
|
314
|
+
const erc20 = new Contract(tokenAddress, ['function decimals() view returns (uint8)'], provider);
|
|
366
315
|
const [buyQuote, gasPrice, decimals] = await Promise.all([
|
|
367
316
|
helper3.tryBuy(tokenAddress, 0n, totalFundsWei),
|
|
368
317
|
getOptimizedGasPrice(provider, getGasPriceConfig(config)),
|
|
369
|
-
erc20.decimals()
|
|
318
|
+
erc20.decimals(),
|
|
370
319
|
]);
|
|
371
320
|
const estimatedTokenAmount = buyQuote.estimatedAmount ?? buyQuote[2];
|
|
372
321
|
if (!estimatedTokenAmount || estimatedTokenAmount <= 0n) {
|
|
@@ -379,15 +328,14 @@ async function fourBundleBuyFirstMultiWallet(params) {
|
|
|
379
328
|
// ✅ 第二批并行:估算利润 + 获取所有钱包 nonces
|
|
380
329
|
// 预先计算所有唯一钱包地址(去重)
|
|
381
330
|
const allWallets = [...sellers, ...buyers];
|
|
382
|
-
const uniqueAddresses = new Set(allWallets.map(w => w.address.toLowerCase()));
|
|
383
331
|
const uniqueWallets = allWallets.filter((w, i) => {
|
|
384
332
|
const addr = w.address.toLowerCase();
|
|
385
|
-
const firstIdx = allWallets.findIndex(x => x.address.toLowerCase() === addr);
|
|
333
|
+
const firstIdx = allWallets.findIndex((x) => x.address.toLowerCase() === addr);
|
|
386
334
|
return firstIdx === i;
|
|
387
335
|
});
|
|
388
336
|
const [sellResult, noncesArray] = await Promise.all([
|
|
389
337
|
trySell('BSC', config.rpcUrl, tokenAddress, estimatedTokenAmount),
|
|
390
|
-
nonceManager.getNextNoncesForWallets(uniqueWallets)
|
|
338
|
+
nonceManager.getNextNoncesForWallets(uniqueWallets),
|
|
391
339
|
]);
|
|
392
340
|
// 构建 nonces Map
|
|
393
341
|
const noncesMap = new Map();
|
|
@@ -411,20 +359,20 @@ async function fourBundleBuyFirstMultiWallet(params) {
|
|
|
411
359
|
nonce: bribeNonce,
|
|
412
360
|
gasPrice,
|
|
413
361
|
gasLimit: 21000n,
|
|
414
|
-
chainId: chainIdNum,
|
|
415
|
-
type: txType
|
|
362
|
+
chainId: BigInt(chainIdNum),
|
|
363
|
+
type: txType,
|
|
416
364
|
});
|
|
417
365
|
}
|
|
418
366
|
// 2. 预分配所有 nonces(同步操作,避免竞态)
|
|
419
367
|
const buyerNonces = [];
|
|
420
368
|
const sellerNonces = [];
|
|
421
|
-
buyers.forEach(buyer => {
|
|
369
|
+
buyers.forEach((buyer) => {
|
|
422
370
|
const addr = buyer.address.toLowerCase();
|
|
423
371
|
const nonce = noncesMap.get(addr);
|
|
424
372
|
buyerNonces.push(nonce);
|
|
425
373
|
noncesMap.set(addr, nonce + 1);
|
|
426
374
|
});
|
|
427
|
-
sellers.forEach(seller => {
|
|
375
|
+
sellers.forEach((seller) => {
|
|
428
376
|
const addr = seller.address.toLowerCase();
|
|
429
377
|
const nonce = noncesMap.get(addr);
|
|
430
378
|
sellerNonces.push(nonce);
|
|
@@ -440,9 +388,9 @@ async function fourBundleBuyFirstMultiWallet(params) {
|
|
|
440
388
|
nonce: buyerNonces[i],
|
|
441
389
|
gasLimit: finalGasLimit,
|
|
442
390
|
gasPrice,
|
|
443
|
-
chainId: chainIdNum,
|
|
391
|
+
chainId: BigInt(chainIdNum),
|
|
444
392
|
type: txType,
|
|
445
|
-
value: buyAmountsWei[i]
|
|
393
|
+
value: buyAmountsWei[i],
|
|
446
394
|
});
|
|
447
395
|
});
|
|
448
396
|
// 4. 并行构建所有卖出交易
|
|
@@ -455,16 +403,16 @@ async function fourBundleBuyFirstMultiWallet(params) {
|
|
|
455
403
|
nonce: sellerNonces[i],
|
|
456
404
|
gasLimit: finalGasLimit,
|
|
457
405
|
gasPrice,
|
|
458
|
-
chainId: chainIdNum,
|
|
406
|
+
chainId: BigInt(chainIdNum),
|
|
459
407
|
type: txType,
|
|
460
|
-
value: 0n
|
|
408
|
+
value: 0n,
|
|
461
409
|
});
|
|
462
410
|
});
|
|
463
411
|
// ✅ 并行签名所有交易(贿赂 + 买入 + 卖出)
|
|
464
412
|
const [bribeTx, signedBuys, signedSells] = await Promise.all([
|
|
465
413
|
bribeTxPromise,
|
|
466
414
|
Promise.all(buyTxPromises),
|
|
467
|
-
Promise.all(sellTxPromises)
|
|
415
|
+
Promise.all(sellTxPromises),
|
|
468
416
|
]);
|
|
469
417
|
// 组装交易顺序:贿赂 → 买入 → 卖出
|
|
470
418
|
if (bribeTx)
|
|
@@ -484,7 +432,7 @@ async function fourBundleBuyFirstMultiWallet(params) {
|
|
|
484
432
|
gasPrice,
|
|
485
433
|
chainId: chainIdNum,
|
|
486
434
|
txType,
|
|
487
|
-
startNonce: profitNonce
|
|
435
|
+
startNonce: profitNonce,
|
|
488
436
|
});
|
|
489
437
|
allTransactions.push(...profitHopResult.signedTransactions);
|
|
490
438
|
profitHopWallets = profitHopResult.hopWallets;
|
|
@@ -494,15 +442,15 @@ async function fourBundleBuyFirstMultiWallet(params) {
|
|
|
494
442
|
signedTransactions: allTransactions,
|
|
495
443
|
profitHopWallets,
|
|
496
444
|
metadata: {
|
|
497
|
-
buyerAddress: buyers.map(b => b.address).join(','),
|
|
498
|
-
sellerAddress: sellers.map(s => s.address).join(','),
|
|
445
|
+
buyerAddress: buyers.map((b) => b.address).join(','),
|
|
446
|
+
sellerAddress: sellers.map((s) => s.address).join(','),
|
|
499
447
|
buyAmount: ethers.formatEther(totalFundsWei),
|
|
500
448
|
sellAmount: ethers.formatUnits(estimatedTokenAmount, decimals),
|
|
501
449
|
profitAmount: profitAmount > 0n ? ethers.formatEther(profitAmount) : undefined,
|
|
502
450
|
buyCount,
|
|
503
451
|
sellCount,
|
|
504
|
-
buyAmounts: buyAmountsWei.map(amt => ethers.formatEther(amt)),
|
|
505
|
-
sellAmounts: sellAmountsWei.map(amt => ethers.formatUnits(amt, decimals))
|
|
506
|
-
}
|
|
452
|
+
buyAmounts: buyAmountsWei.map((amt) => ethers.formatEther(amt)),
|
|
453
|
+
sellAmounts: sellAmountsWei.map((amt) => ethers.formatUnits(amt, decimals)),
|
|
454
|
+
},
|
|
507
455
|
};
|
|
508
456
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Wallet, type JsonRpcProvider } from 'ethers';
|
|
2
|
+
import type { DisperseHopPath } from './types.js';
|
|
3
|
+
export declare const NATIVE_TRANSFER_GAS_LIMIT = 21055n;
|
|
4
|
+
export type { DisperseHopPath } from './types.js';
|
|
5
|
+
export declare function generateDisperseHopPaths(targetAddresses: string[], hopCount: number, provider: JsonRpcProvider): DisperseHopPath[];
|
|
6
|
+
export declare function buildNativeHopChain(payer: Wallet, path: DisperseHopPath, finalAmount: bigint, gasPrice: bigint, chainId: number, txType: 0 | 2, payerNonce: number): Promise<string[]>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Wallet } from 'ethers';
|
|
2
|
+
import { generateWallets } from '../../utils/wallet.js';
|
|
3
|
+
export const NATIVE_TRANSFER_GAS_LIMIT = 21055n;
|
|
4
|
+
export function generateDisperseHopPaths(targetAddresses, hopCount, provider) {
|
|
5
|
+
if (hopCount <= 0) {
|
|
6
|
+
return targetAddresses.map((addr) => ({
|
|
7
|
+
targetAddress: addr,
|
|
8
|
+
hopWallets: [],
|
|
9
|
+
hopWalletsInfo: [],
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
12
|
+
return targetAddresses.map((targetAddress) => {
|
|
13
|
+
const hopWalletsInfo = generateWallets(hopCount);
|
|
14
|
+
const hopWallets = hopWalletsInfo.map((w) => new Wallet(w.privateKey, provider));
|
|
15
|
+
return { targetAddress, hopWallets, hopWalletsInfo };
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export async function buildNativeHopChain(payer, path, finalAmount, gasPrice, chainId, txType, payerNonce) {
|
|
19
|
+
const signedTxs = [];
|
|
20
|
+
const hopCount = path.hopWallets.length;
|
|
21
|
+
if (hopCount === 0) {
|
|
22
|
+
signedTxs.push(await payer.signTransaction({
|
|
23
|
+
to: path.targetAddress,
|
|
24
|
+
value: finalAmount,
|
|
25
|
+
nonce: payerNonce,
|
|
26
|
+
gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
|
|
27
|
+
gasPrice,
|
|
28
|
+
chainId,
|
|
29
|
+
type: txType,
|
|
30
|
+
}));
|
|
31
|
+
return signedTxs;
|
|
32
|
+
}
|
|
33
|
+
const hopGasCost = NATIVE_TRANSFER_GAS_LIMIT * gasPrice;
|
|
34
|
+
const amountsPerHop = [];
|
|
35
|
+
for (let i = 0; i < hopCount; i++) {
|
|
36
|
+
const remainingHops = hopCount - i;
|
|
37
|
+
amountsPerHop.push(finalAmount + hopGasCost * BigInt(remainingHops));
|
|
38
|
+
}
|
|
39
|
+
signedTxs.push(await payer.signTransaction({
|
|
40
|
+
to: path.hopWallets[0].address,
|
|
41
|
+
value: amountsPerHop[0],
|
|
42
|
+
nonce: payerNonce,
|
|
43
|
+
gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
|
|
44
|
+
gasPrice,
|
|
45
|
+
chainId,
|
|
46
|
+
type: txType,
|
|
47
|
+
}));
|
|
48
|
+
for (let i = 0; i < hopCount; i++) {
|
|
49
|
+
const fromWallet = path.hopWallets[i];
|
|
50
|
+
const toAddress = i === hopCount - 1 ? path.targetAddress : path.hopWallets[i + 1].address;
|
|
51
|
+
const amount = i === hopCount - 1 ? finalAmount : amountsPerHop[i + 1];
|
|
52
|
+
signedTxs.push(await fromWallet.signTransaction({
|
|
53
|
+
to: toAddress,
|
|
54
|
+
value: amount,
|
|
55
|
+
nonce: 0,
|
|
56
|
+
gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
|
|
57
|
+
gasPrice,
|
|
58
|
+
chainId,
|
|
59
|
+
type: txType,
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
return signedTxs;
|
|
63
|
+
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
// 共享的 Swap 内部常量与 ABI
|
|
2
2
|
// ✅ 从公共模块重新导出
|
|
3
|
-
import { TM2_ABI, HELPER3_ABI as _HELPER3_ABI } from '../../
|
|
4
|
-
import { ADDRESSES } from '../../
|
|
3
|
+
import { TM2_ABI, HELPER3_ABI as _HELPER3_ABI } from '../../abis/common.js';
|
|
4
|
+
import { ADDRESSES } from '../../core/constants/index.js';
|
|
5
5
|
// ✅ Four.meme 内盘 ABI(与公共 TM2_ABI 扩展)
|
|
6
6
|
export const TM_ABI = [
|
|
7
7
|
...TM2_ABI,
|
|
8
8
|
'function sellToken(uint256 origin, address token, uint256 amount, uint256 minFunds) returns (uint256)',
|
|
9
|
-
'function buyTokenAMAP(uint256 origin, address token, address to, uint256 funds, uint256 minAmount) payable returns (uint256)'
|
|
9
|
+
'function buyTokenAMAP(uint256 origin, address token, address to, uint256 funds, uint256 minAmount) payable returns (uint256)',
|
|
10
10
|
];
|
|
11
11
|
// ✅ Helper3 ABI(与公共 HELPER3_ABI 扩展)
|
|
12
12
|
export const HELPER3_ABI = [
|
|
13
13
|
..._HELPER3_ABI,
|
|
14
14
|
'function tryBuy(address token, uint256 amount, uint256 funds) view returns (address tokenManager, address quote, uint256 estimatedAmount, uint256 estimatedCost, uint256 estimatedFee, uint256 amountMsgValue, uint256 amountApproval, uint256 amountFunds)',
|
|
15
|
-
'function trySell(address token, uint256 amount) view returns (address tokenManager, address quote, uint256 funds, uint256 fee)'
|
|
15
|
+
'function trySell(address token, uint256 amount) view returns (address tokenManager, address quote, uint256 funds, uint256 fee)',
|
|
16
16
|
];
|
|
17
17
|
// ✅ Four.meme 使用 TokenManagerOriginal(代理合约已移除)
|
|
18
18
|
export const TM_ADDRESS = ADDRESSES.BSC.TokenManagerOriginal;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Wallet, type JsonRpcProvider } from 'ethers';
|
|
2
|
+
import { type CommonBundleConfig } from '../../utils/bundle-helpers.js';
|
|
3
|
+
import type { FourSwapSignConfig, SellerNoncePlan, UserType } from './types.js';
|
|
4
|
+
export type { SellerNoncePlan } from './types.js';
|
|
5
|
+
export declare function getFourSwapProfitRateBps(userType?: UserType): number;
|
|
6
|
+
export declare function needsTmTokenApproval(currentAllowance: bigint, decimals: number): boolean;
|
|
7
|
+
export declare function countSellerNonceSlots(needBribeTx: boolean, needApproval: boolean, includeProfit: boolean): number;
|
|
8
|
+
export declare function planSellerNonces(sellerNonces: number[], needBribeTx: boolean, needApproval: boolean, extractProfit: boolean): SellerNoncePlan;
|
|
9
|
+
export declare function signTmMaxApprovalTx(seller: Wallet, tokenAddress: string, approvalNonce: number, gasPrice: bigint, chainIdNum: number, txType: 0 | 2): Promise<string>;
|
|
10
|
+
export declare function quoteFourSwapSellFunds(provider: JsonRpcProvider, tokenAddress: string, sellAmountWei: bigint): Promise<bigint>;
|
|
11
|
+
export declare function fetchFourSwapSellQuoteAndAllowance(provider: JsonRpcProvider, tokenAddress: string, sellerAddress: string, sellAmountWei: bigint): Promise<{
|
|
12
|
+
sellFunds: bigint;
|
|
13
|
+
allowance: bigint;
|
|
14
|
+
}>;
|
|
15
|
+
export declare function fetchFourSwapSellQuoteAllowanceAndBalances(provider: JsonRpcProvider, tokenAddress: string, sellerAddress: string, sellAmountWei: bigint, buyerAddresses: string[]): Promise<{
|
|
16
|
+
sellFunds: bigint;
|
|
17
|
+
allowance: bigint;
|
|
18
|
+
buyerBalances: bigint[];
|
|
19
|
+
}>;
|
|
20
|
+
export declare function toCommonBundleConfig(config: FourSwapSignConfig): CommonBundleConfig;
|
|
21
|
+
export type FourSwapGasContext = {
|
|
22
|
+
chainIdNum: number;
|
|
23
|
+
provider: JsonRpcProvider;
|
|
24
|
+
bundleConfig: CommonBundleConfig;
|
|
25
|
+
finalGasLimit: bigint;
|
|
26
|
+
txType: 0 | 2;
|
|
27
|
+
};
|
|
28
|
+
export declare function createFourSwapGasContext(config: FourSwapSignConfig): FourSwapGasContext;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { ethers, Contract } from 'ethers';
|
|
2
|
+
import { getGasLimit } from '../../utils/bundle-helpers.js';
|
|
3
|
+
import { ADDRESSES, CHAINS } from '../../core/constants/index.js';
|
|
4
|
+
import { getProfitRateBps as getSharedProfitRateBps } from '../../core/constants/index.js';
|
|
5
|
+
import { getTxType } from '../config-helpers.js';
|
|
6
|
+
import { createSignProvider } from '../sign-context-helpers.js';
|
|
7
|
+
import { HELPER3_ABI, TM_ADDRESS } from './swap-internal.js';
|
|
8
|
+
const APPROVE_INTERFACE = new ethers.Interface(['function approve(address,uint256) returns (bool)']);
|
|
9
|
+
const ERC20_ALLOWANCE_ABI = ['function allowance(address,address) view returns (uint256)'];
|
|
10
|
+
export function getFourSwapProfitRateBps(userType) {
|
|
11
|
+
if (userType === 'v0')
|
|
12
|
+
return getSharedProfitRateBps('v0Single');
|
|
13
|
+
if (userType === 'v1')
|
|
14
|
+
return getSharedProfitRateBps('v1Single');
|
|
15
|
+
return getSharedProfitRateBps('v0Single');
|
|
16
|
+
}
|
|
17
|
+
export function needsTmTokenApproval(currentAllowance, decimals) {
|
|
18
|
+
const threshold = ethers.parseUnits('1000000000', decimals);
|
|
19
|
+
return currentAllowance < threshold;
|
|
20
|
+
}
|
|
21
|
+
export function countSellerNonceSlots(needBribeTx, needApproval, includeProfit) {
|
|
22
|
+
let count = 1;
|
|
23
|
+
if (needBribeTx)
|
|
24
|
+
count++;
|
|
25
|
+
if (needApproval)
|
|
26
|
+
count++;
|
|
27
|
+
if (includeProfit)
|
|
28
|
+
count++;
|
|
29
|
+
return count;
|
|
30
|
+
}
|
|
31
|
+
export function planSellerNonces(sellerNonces, needBribeTx, needApproval, extractProfit) {
|
|
32
|
+
let idx = 0;
|
|
33
|
+
const plan = { sellerNonce: sellerNonces[0] };
|
|
34
|
+
if (needBribeTx)
|
|
35
|
+
plan.bribeNonce = sellerNonces[idx++];
|
|
36
|
+
if (needApproval)
|
|
37
|
+
plan.approvalNonce = sellerNonces[idx++];
|
|
38
|
+
plan.sellerNonce = sellerNonces[idx++];
|
|
39
|
+
if (extractProfit)
|
|
40
|
+
plan.profitNonce = sellerNonces[idx];
|
|
41
|
+
return plan;
|
|
42
|
+
}
|
|
43
|
+
export async function signTmMaxApprovalTx(seller, tokenAddress, approvalNonce, gasPrice, chainIdNum, txType) {
|
|
44
|
+
const approveData = APPROVE_INTERFACE.encodeFunctionData('approve', [TM_ADDRESS, ethers.MaxUint256]);
|
|
45
|
+
return seller.signTransaction({
|
|
46
|
+
to: tokenAddress,
|
|
47
|
+
data: approveData,
|
|
48
|
+
value: 0n,
|
|
49
|
+
nonce: approvalNonce,
|
|
50
|
+
gasLimit: 80000n,
|
|
51
|
+
gasPrice,
|
|
52
|
+
chainId: chainIdNum,
|
|
53
|
+
type: txType,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
export async function quoteFourSwapSellFunds(provider, tokenAddress, sellAmountWei) {
|
|
57
|
+
const helper3 = new Contract(ADDRESSES.BSC.TokenManagerHelper3, HELPER3_ABI, provider);
|
|
58
|
+
const sellQuote = await helper3.trySell(tokenAddress, sellAmountWei);
|
|
59
|
+
return sellQuote.funds;
|
|
60
|
+
}
|
|
61
|
+
export async function fetchFourSwapSellQuoteAndAllowance(provider, tokenAddress, sellerAddress, sellAmountWei) {
|
|
62
|
+
const helper3 = new Contract(ADDRESSES.BSC.TokenManagerHelper3, HELPER3_ABI, provider);
|
|
63
|
+
const erc20 = new Contract(tokenAddress, ERC20_ALLOWANCE_ABI, provider);
|
|
64
|
+
const [sellQuote, allowance] = await Promise.all([
|
|
65
|
+
helper3.trySell(tokenAddress, sellAmountWei),
|
|
66
|
+
erc20.allowance(sellerAddress, TM_ADDRESS),
|
|
67
|
+
]);
|
|
68
|
+
return { sellFunds: sellQuote.funds, allowance };
|
|
69
|
+
}
|
|
70
|
+
export async function fetchFourSwapSellQuoteAllowanceAndBalances(provider, tokenAddress, sellerAddress, sellAmountWei, buyerAddresses) {
|
|
71
|
+
const helper3 = new Contract(ADDRESSES.BSC.TokenManagerHelper3, HELPER3_ABI, provider);
|
|
72
|
+
const erc20 = new Contract(tokenAddress, ERC20_ALLOWANCE_ABI, provider);
|
|
73
|
+
const [sellQuote, allowance, ...buyerBalances] = await Promise.all([
|
|
74
|
+
helper3.trySell(tokenAddress, sellAmountWei),
|
|
75
|
+
erc20.allowance(sellerAddress, TM_ADDRESS),
|
|
76
|
+
...buyerAddresses.map((addr) => provider.getBalance(addr)),
|
|
77
|
+
]);
|
|
78
|
+
return {
|
|
79
|
+
sellFunds: sellQuote.funds,
|
|
80
|
+
allowance,
|
|
81
|
+
buyerBalances,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export function toCommonBundleConfig(config) {
|
|
85
|
+
return {
|
|
86
|
+
minGasPriceGwei: config.minGasPriceGwei,
|
|
87
|
+
maxGasPriceGwei: config.maxGasPriceGwei,
|
|
88
|
+
gasLimit: typeof config.gasLimit === 'bigint' ? Number(config.gasLimit) : config.gasLimit,
|
|
89
|
+
gasLimitMultiplier: config.gasLimitMultiplier,
|
|
90
|
+
txType: config.txType,
|
|
91
|
+
chainId: config.chainId,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export function createFourSwapGasContext(config) {
|
|
95
|
+
const chainIdNum = config.chainId ?? CHAINS.BSC.chainId;
|
|
96
|
+
const provider = createSignProvider(config.rpcUrl, chainIdNum, 'BSC');
|
|
97
|
+
const bundleConfig = toCommonBundleConfig(config);
|
|
98
|
+
return {
|
|
99
|
+
chainIdNum,
|
|
100
|
+
provider,
|
|
101
|
+
bundleConfig,
|
|
102
|
+
finalGasLimit: getGasLimit(bundleConfig),
|
|
103
|
+
txType: getTxType(bundleConfig),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Four.meme 内盘捆绑换手(Merkle Bundle)
|
|
3
|
+
*/
|
|
4
|
+
import type { FourBatchSwapResult, FourBatchSwapSignParams, FourBundleSwapSignParams, FourQuickBatchSwapResult, FourQuickBatchSwapSignParams, FourSwapResult } from './types.js';
|
|
5
|
+
export type { UserType, FourSwapSignConfig, FourSwapConfig, FourBundleSwapSignParams, FourBundleSwapParams, FourSwapResult, FourBatchSwapSignParams, FourBatchSwapResult, FourQuickBatchSwapSignParams, FourQuickBatchSwapResult, } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Four内盘捆绑换手
|
|
8
|
+
*/
|
|
9
|
+
export declare function fourBundleSwapMerkle(params: FourBundleSwapSignParams): Promise<FourSwapResult>;
|
|
10
|
+
/**
|
|
11
|
+
* Four 内盘批量换手(一卖多买)
|
|
12
|
+
*/
|
|
13
|
+
export declare function fourBatchSwapMerkle(params: FourBatchSwapSignParams): Promise<FourBatchSwapResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Four 内盘快捷批量换手(资金利用率模式)
|
|
16
|
+
*/
|
|
17
|
+
export declare function fourQuickBatchSwapMerkle(params: FourQuickBatchSwapSignParams): Promise<FourQuickBatchSwapResult>;
|