four-flap-meme-sdk 2.2.2 → 2.2.4
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 +96 -277
- 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 +107 -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 +88 -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 +80 -0
- package/dist/shared/flap/portal-create-token.js +257 -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
package/dist/utils/erc20.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Contract, Wallet, JsonRpcProvider, Interface, parseUnits } from 'ethers';
|
|
2
|
-
import { ADDRESSES, ZERO_ADDRESS, getMulticall3Address } from '
|
|
2
|
+
import { ADDRESSES, ZERO_ADDRESS, getMulticall3Address } from '../shared/constants/index.js';
|
|
3
3
|
import { NonceManager } from './bundle-helpers.js';
|
|
4
|
-
import { ERC20_ABI, MULTICALL3_ABI } from '../
|
|
4
|
+
import { ERC20_ABI, MULTICALL3_ABI } from '../abis/common.js';
|
|
5
|
+
import { getErrorMessageFromUnknown } from '../shared/foundation/index.js';
|
|
5
6
|
// ============================================================================
|
|
6
7
|
// ✅ Max approval(与 BSC 策略一致:阈值判断,避免频繁重复授权)
|
|
7
8
|
// ============================================================================
|
|
@@ -22,14 +23,15 @@ async function validateContractAddress(provider, address, label) {
|
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
catch (error) {
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
const msg = getErrorMessageFromUnknown(error);
|
|
27
|
+
if (msg.includes('无效或未部署')) {
|
|
28
|
+
throw error instanceof Error ? error : new Error(msg);
|
|
27
29
|
}
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
+
const code = error !== null && typeof error === 'object' && 'code' in error ? error.code : undefined;
|
|
31
|
+
if (msg.includes('bad address checksum') || code === 'INVALID_ARGUMENT') {
|
|
30
32
|
throw new Error(`❌ ${label} 地址格式错误,请使用正确的 checksum 格式: ${address}`);
|
|
31
33
|
}
|
|
32
|
-
throw new Error(`❌ 无法验证 ${label} 地址 ${address}: ${
|
|
34
|
+
throw new Error(`❌ 无法验证 ${label} 地址 ${address}: ${msg}`);
|
|
33
35
|
}
|
|
34
36
|
}
|
|
35
37
|
/**
|
|
@@ -49,7 +51,7 @@ async function ensureAllowance(rpcUrl, privateKey, token, owner, spender, requir
|
|
|
49
51
|
current = await erc20.allowance(owner, spender);
|
|
50
52
|
}
|
|
51
53
|
catch (error) {
|
|
52
|
-
throw new Error(`❌ 调用 allowance 失败(Token 可能不是 ERC20): ${error
|
|
54
|
+
throw new Error(`❌ 调用 allowance 失败(Token 可能不是 ERC20): ${getErrorMessageFromUnknown(error)}`);
|
|
53
55
|
}
|
|
54
56
|
if (current >= required) {
|
|
55
57
|
return {
|
|
@@ -67,27 +69,17 @@ async function ensureAllowance(rpcUrl, privateKey, token, owner, spender, requir
|
|
|
67
69
|
txReceipt: receipt,
|
|
68
70
|
};
|
|
69
71
|
}
|
|
70
|
-
|
|
71
|
-
* 检查代币授权状态 - Four.meme V1(只读,不发送交易)
|
|
72
|
-
* @returns 是否已授权足够的额度
|
|
73
|
-
*/
|
|
74
|
-
export async function checkSellApprovalV1(chain, rpcUrl, token, owner, amount) {
|
|
75
|
-
const proxyAddresses = {
|
|
76
|
-
BSC: ADDRESSES.BSC.TokenManagerV1, // FourMeme 代理合约 V1 (BSC)
|
|
77
|
-
BASE: ADDRESSES.BASE.TokenManagerHelper3, // FourMeme 代理合约 (BASE)
|
|
78
|
-
ARBITRUM_ONE: ADDRESSES.ARBITRUM_ONE.TokenManagerHelper3, // FourMeme 代理合约 (ARBITRUM)
|
|
79
|
-
};
|
|
72
|
+
async function checkAllowanceForSpender(rpcUrl, token, owner, amount, spender, spenderLabel) {
|
|
80
73
|
const provider = new JsonRpcProvider(rpcUrl);
|
|
81
|
-
// ✅ 验证 token 和代理合约地址
|
|
82
74
|
await validateContractAddress(provider, token, 'Token');
|
|
83
|
-
await validateContractAddress(provider,
|
|
75
|
+
await validateContractAddress(provider, spender, spenderLabel);
|
|
84
76
|
const erc20 = new Contract(token, ERC20_ABI, provider);
|
|
85
77
|
let current;
|
|
86
78
|
try {
|
|
87
|
-
current = await erc20.allowance(owner,
|
|
79
|
+
current = await erc20.allowance(owner, spender);
|
|
88
80
|
}
|
|
89
81
|
catch (error) {
|
|
90
|
-
throw new Error(`❌ 调用 allowance 失败(Token 可能不是 ERC20): ${error
|
|
82
|
+
throw new Error(`❌ 调用 allowance 失败(Token 可能不是 ERC20): ${getErrorMessageFromUnknown(error)}`);
|
|
91
83
|
}
|
|
92
84
|
return {
|
|
93
85
|
isApproved: current >= amount,
|
|
@@ -95,61 +87,42 @@ export async function checkSellApprovalV1(chain, rpcUrl, token, owner, amount) {
|
|
|
95
87
|
requiredAllowance: amount,
|
|
96
88
|
};
|
|
97
89
|
}
|
|
90
|
+
async function checkSellApprovalForProxy(_chain, rpcUrl, token, owner, amount, proxyAddress, proxyLabel) {
|
|
91
|
+
return checkAllowanceForSpender(rpcUrl, token, owner, amount, proxyAddress, proxyLabel);
|
|
92
|
+
}
|
|
93
|
+
const FOUR_MEME_V1_PROXY = {
|
|
94
|
+
BSC: ADDRESSES.BSC.TokenManagerV1,
|
|
95
|
+
BASE: ADDRESSES.BASE.TokenManagerHelper3,
|
|
96
|
+
ARBITRUM_ONE: ADDRESSES.ARBITRUM_ONE.TokenManagerHelper3,
|
|
97
|
+
};
|
|
98
|
+
const FOUR_MEME_V2_PROXY = {
|
|
99
|
+
BSC: ADDRESSES.BSC.TokenManagerV2,
|
|
100
|
+
BASE: ADDRESSES.BASE.TokenManagerHelper3,
|
|
101
|
+
ARBITRUM_ONE: ADDRESSES.ARBITRUM_ONE.TokenManagerHelper3,
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* 检查代币授权状态 - Four.meme V1(只读,不发送交易)
|
|
105
|
+
*/
|
|
106
|
+
export async function checkSellApprovalV1(chain, rpcUrl, token, owner, amount) {
|
|
107
|
+
return checkSellApprovalForProxy(chain, rpcUrl, token, owner, amount, FOUR_MEME_V1_PROXY[chain], `Four.meme V1 Proxy (${chain})`);
|
|
108
|
+
}
|
|
98
109
|
/**
|
|
99
110
|
* 确保代币已授权给 Four.meme V1 代理合约
|
|
100
|
-
* 用于 Four.meme V1 代币的卖出操作
|
|
101
|
-
* @returns 授权结果,包含是否已授权、当前额度、交易回执等信息
|
|
102
111
|
*/
|
|
103
112
|
export async function ensureSellApprovalV1(chain, rpcUrl, privateKey, token, owner, amount) {
|
|
104
|
-
|
|
105
|
-
const proxyAddresses = {
|
|
106
|
-
BSC: ADDRESSES.BSC.TokenManagerV1, // FourMeme 代理合约 V1 (BSC)
|
|
107
|
-
BASE: ADDRESSES.BASE.TokenManagerHelper3, // FourMeme 代理合约 (BASE)
|
|
108
|
-
ARBITRUM_ONE: ADDRESSES.ARBITRUM_ONE.TokenManagerHelper3, // FourMeme 代理合约 (ARBITRUM)
|
|
109
|
-
};
|
|
110
|
-
return await ensureAllowance(rpcUrl, privateKey, token, owner, proxyAddresses[chain], amount);
|
|
113
|
+
return ensureAllowance(rpcUrl, privateKey, token, owner, FOUR_MEME_V1_PROXY[chain], amount);
|
|
111
114
|
}
|
|
112
115
|
/**
|
|
113
116
|
* 检查代币授权状态 - Four.meme V2(只读,不发送交易)
|
|
114
|
-
* @returns 是否已授权足够的额度
|
|
115
117
|
*/
|
|
116
118
|
export async function checkSellApprovalV2(chain, rpcUrl, token, owner, amount) {
|
|
117
|
-
|
|
118
|
-
BSC: ADDRESSES.BSC.TokenManagerV2, // FourMeme 代理合约 V2 (BSC)
|
|
119
|
-
BASE: ADDRESSES.BASE.TokenManagerHelper3, // FourMeme 代理合约 (BASE)
|
|
120
|
-
ARBITRUM_ONE: ADDRESSES.ARBITRUM_ONE.TokenManagerHelper3, // FourMeme 代理合约 (ARBITRUM)
|
|
121
|
-
};
|
|
122
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
123
|
-
// ✅ 验证 token 和代理合约地址
|
|
124
|
-
await validateContractAddress(provider, token, 'Token');
|
|
125
|
-
await validateContractAddress(provider, proxyAddresses[chain], `Four.meme V2 Proxy (${chain})`);
|
|
126
|
-
const erc20 = new Contract(token, ERC20_ABI, provider);
|
|
127
|
-
let current;
|
|
128
|
-
try {
|
|
129
|
-
current = await erc20.allowance(owner, proxyAddresses[chain]);
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
throw new Error(`❌ 调用 allowance 失败(Token 可能不是 ERC20): ${error.message}`);
|
|
133
|
-
}
|
|
134
|
-
return {
|
|
135
|
-
isApproved: current >= amount,
|
|
136
|
-
currentAllowance: current,
|
|
137
|
-
requiredAllowance: amount,
|
|
138
|
-
};
|
|
119
|
+
return checkSellApprovalForProxy(chain, rpcUrl, token, owner, amount, FOUR_MEME_V2_PROXY[chain], `Four.meme V2 Proxy (${chain})`);
|
|
139
120
|
}
|
|
140
121
|
/**
|
|
141
122
|
* 确保代币已授权给 Four.meme V2 代理合约
|
|
142
|
-
* 用于 Four.meme V2 代币的卖出操作
|
|
143
|
-
* @returns 授权结果,包含是否已授权、当前额度、交易回执等信息
|
|
144
123
|
*/
|
|
145
124
|
export async function ensureSellApprovalV2(chain, rpcUrl, privateKey, token, owner, amount) {
|
|
146
|
-
|
|
147
|
-
const proxyAddresses = {
|
|
148
|
-
BSC: ADDRESSES.BSC.TokenManagerV2, // FourMeme 代理合约 V2 (BSC)
|
|
149
|
-
BASE: ADDRESSES.BASE.TokenManagerHelper3, // FourMeme 代理合约 (BASE)
|
|
150
|
-
ARBITRUM_ONE: ADDRESSES.ARBITRUM_ONE.TokenManagerHelper3, // FourMeme 代理合约 (ARBITRUM)
|
|
151
|
-
};
|
|
152
|
-
return await ensureAllowance(rpcUrl, privateKey, token, owner, proxyAddresses[chain], amount);
|
|
125
|
+
return ensureAllowance(rpcUrl, privateKey, token, owner, FOUR_MEME_V2_PROXY[chain], amount);
|
|
153
126
|
}
|
|
154
127
|
/**
|
|
155
128
|
* 检查代币授权状态 - Four.meme(通用,默认使用 V2)
|
|
@@ -171,29 +144,13 @@ export async function ensureSellApproval(chain, rpcUrl, privateKey, token, owner
|
|
|
171
144
|
*/
|
|
172
145
|
export async function checkFlapSellApproval(chain, rpcUrl, token, owner, amount) {
|
|
173
146
|
const proxyAddresses = {
|
|
174
|
-
BSC: ADDRESSES.BSC.FlapPortal,
|
|
175
|
-
BASE: ADDRESSES.BASE.FlapPortal,
|
|
176
|
-
XLAYER: ADDRESSES.XLAYER.FlapPortal,
|
|
177
|
-
MORPH: ADDRESSES.MORPH.FlapPortal,
|
|
178
|
-
MONAD: ADDRESSES.MONAD.FlapPortal,
|
|
179
|
-
};
|
|
180
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
181
|
-
// ✅ 验证 token 和代理合约地址
|
|
182
|
-
await validateContractAddress(provider, token, 'Token');
|
|
183
|
-
await validateContractAddress(provider, proxyAddresses[chain], `Flap Portal (${chain})`);
|
|
184
|
-
const erc20 = new Contract(token, ERC20_ABI, provider);
|
|
185
|
-
let current;
|
|
186
|
-
try {
|
|
187
|
-
current = await erc20.allowance(owner, proxyAddresses[chain]);
|
|
188
|
-
}
|
|
189
|
-
catch (error) {
|
|
190
|
-
throw new Error(`❌ 调用 allowance 失败(Token 可能不是 ERC20): ${error.message}`);
|
|
191
|
-
}
|
|
192
|
-
return {
|
|
193
|
-
isApproved: current >= amount,
|
|
194
|
-
currentAllowance: current,
|
|
195
|
-
requiredAllowance: amount,
|
|
147
|
+
BSC: ADDRESSES.BSC.FlapPortal,
|
|
148
|
+
BASE: ADDRESSES.BASE.FlapPortal,
|
|
149
|
+
XLAYER: ADDRESSES.XLAYER.FlapPortal,
|
|
150
|
+
MORPH: ADDRESSES.MORPH.FlapPortal,
|
|
151
|
+
MONAD: ADDRESSES.MONAD.FlapPortal,
|
|
196
152
|
};
|
|
153
|
+
return checkAllowanceForSpender(rpcUrl, token, owner, amount, proxyAddresses[chain], `Flap Portal (${chain})`);
|
|
197
154
|
}
|
|
198
155
|
/**
|
|
199
156
|
* 确保代币已授权给 Flap Protocol 代理合约
|
|
@@ -245,7 +202,7 @@ export async function checkFlapSellApprovalBatch(chain, rpcUrl, token, owners, r
|
|
|
245
202
|
// ✅ 并行验证 token 和代理合约地址
|
|
246
203
|
await Promise.all([
|
|
247
204
|
validateContractAddress(provider, token, 'Token'),
|
|
248
|
-
validateContractAddress(provider, proxyAddresses[chain], `Flap Portal (${chain})`)
|
|
205
|
+
validateContractAddress(provider, proxyAddresses[chain], `Flap Portal (${chain})`),
|
|
249
206
|
]);
|
|
250
207
|
// ✅ 使用 batchCheckAllowances 批量查询(Multicall3)
|
|
251
208
|
const allowances = await batchCheckAllowances(provider, token, owners, proxyAddresses[chain]);
|
|
@@ -253,7 +210,7 @@ export async function checkFlapSellApprovalBatch(chain, rpcUrl, token, owners, r
|
|
|
253
210
|
owner,
|
|
254
211
|
isApproved: allowances[i] >= required,
|
|
255
212
|
currentAllowance: allowances[i],
|
|
256
|
-
requiredAllowance: required
|
|
213
|
+
requiredAllowance: required,
|
|
257
214
|
}));
|
|
258
215
|
}
|
|
259
216
|
/**
|
|
@@ -270,15 +227,15 @@ export async function batchCheckAllowances(provider, tokenAddress, owners, spend
|
|
|
270
227
|
const multicall3 = new Contract(multicall3Address, MULTICALL3_ABI, provider);
|
|
271
228
|
// 编码 allowance(owner, spender) 调用数据
|
|
272
229
|
const erc20Interface = new Contract(tokenAddress, ERC20_ABI, provider).interface;
|
|
273
|
-
const calls = owners.map(owner => ({
|
|
230
|
+
const calls = owners.map((owner) => ({
|
|
274
231
|
target: tokenAddress,
|
|
275
232
|
allowFailure: true,
|
|
276
|
-
callData: erc20Interface.encodeFunctionData('allowance', [owner, spender])
|
|
233
|
+
callData: erc20Interface.encodeFunctionData('allowance', [owner, spender]),
|
|
277
234
|
}));
|
|
278
235
|
// 批量调用
|
|
279
236
|
const results = await multicall3.aggregate3(calls);
|
|
280
237
|
// 解析结果
|
|
281
|
-
return results.map((result
|
|
238
|
+
return results.map((result) => {
|
|
282
239
|
if (!result.success) {
|
|
283
240
|
return 0n;
|
|
284
241
|
}
|
|
@@ -286,7 +243,7 @@ export async function batchCheckAllowances(provider, tokenAddress, owners, spend
|
|
|
286
243
|
const decoded = erc20Interface.decodeFunctionResult('allowance', result.returnData);
|
|
287
244
|
return decoded[0];
|
|
288
245
|
}
|
|
289
|
-
catch
|
|
246
|
+
catch {
|
|
290
247
|
return 0n;
|
|
291
248
|
}
|
|
292
249
|
});
|
|
@@ -390,7 +347,7 @@ export async function checkAllowanceRaw(rpcUrl, tokenAddress, ownerAddress, spen
|
|
|
390
347
|
return allowance;
|
|
391
348
|
}
|
|
392
349
|
catch (error) {
|
|
393
|
-
throw new Error(`❌ 查询授权额度失败: ${error
|
|
350
|
+
throw new Error(`❌ 查询授权额度失败: ${getErrorMessageFromUnknown(error)}`);
|
|
394
351
|
}
|
|
395
352
|
}
|
|
396
353
|
/**
|
|
@@ -438,15 +395,15 @@ export async function approveTokenRaw(rpcUrl, privateKey, tokenAddress, spenderA
|
|
|
438
395
|
currentAllowance = await erc20.allowance(ownerAddress, normalizedSpender);
|
|
439
396
|
}
|
|
440
397
|
catch (error) {
|
|
441
|
-
throw new Error(`❌ 查询授权额度失败: ${error
|
|
398
|
+
throw new Error(`❌ 查询授权额度失败: ${getErrorMessageFromUnknown(error)}`);
|
|
442
399
|
}
|
|
443
400
|
// 如果已经授权足够,直接返回
|
|
444
401
|
// ✅ max 授权:使用阈值判断,避免每次消耗一点 allowance 都重新授权
|
|
445
|
-
if (isMax ?
|
|
402
|
+
if (isMax ? currentAllowance >= MAX_APPROVAL_THRESHOLD : currentAllowance >= requiredAmount) {
|
|
446
403
|
return {
|
|
447
404
|
alreadyApproved: true,
|
|
448
405
|
currentAllowance,
|
|
449
|
-
requiredAllowance: requiredAmount
|
|
406
|
+
requiredAllowance: requiredAmount,
|
|
450
407
|
};
|
|
451
408
|
}
|
|
452
409
|
// 发送授权交易
|
|
@@ -457,11 +414,11 @@ export async function approveTokenRaw(rpcUrl, privateKey, tokenAddress, spenderA
|
|
|
457
414
|
alreadyApproved: false,
|
|
458
415
|
currentAllowance,
|
|
459
416
|
requiredAllowance: requiredAmount,
|
|
460
|
-
txReceipt: receipt
|
|
417
|
+
txReceipt: receipt,
|
|
461
418
|
};
|
|
462
419
|
}
|
|
463
420
|
catch (error) {
|
|
464
|
-
throw new Error(`❌ 授权交易失败: ${error
|
|
421
|
+
throw new Error(`❌ 授权交易失败: ${getErrorMessageFromUnknown(error)}`);
|
|
465
422
|
}
|
|
466
423
|
}
|
|
467
424
|
/**
|
|
@@ -492,7 +449,7 @@ export async function checkAllowanceBatchRaw(rpcUrl, tokenAddress, ownerAddresse
|
|
|
492
449
|
const provider = new JsonRpcProvider(rpcUrl);
|
|
493
450
|
// ✅ 规范化地址(转为小写,避免 checksum 错误)
|
|
494
451
|
const normalizedToken = tokenAddress.toLowerCase();
|
|
495
|
-
const normalizedOwners = ownerAddresses.map(addr => addr.toLowerCase());
|
|
452
|
+
const normalizedOwners = ownerAddresses.map((addr) => addr.toLowerCase());
|
|
496
453
|
const normalizedSpender = spenderAddress.toLowerCase();
|
|
497
454
|
// 验证地址
|
|
498
455
|
await validateContractAddress(provider, normalizedToken, 'Token');
|
|
@@ -500,12 +457,26 @@ export async function checkAllowanceBatchRaw(rpcUrl, tokenAddress, ownerAddresse
|
|
|
500
457
|
return batchCheckAllowances(provider, normalizedToken, normalizedOwners, normalizedSpender);
|
|
501
458
|
}
|
|
502
459
|
export async function approveTokenBatch(params) {
|
|
503
|
-
const { chain, platform, rpcUrl, privateKeys, tokenAddress, amounts, signOnly, gasPriceGwei, gasLimit, chainId, skipValidation } = params;
|
|
460
|
+
const { chain, platform, rpcUrl, privateKeys, tokenAddress, amounts, signOnly, gasPriceGwei, gasLimit, chainId, skipValidation, } = params;
|
|
504
461
|
const spenderAddress = resolveSpenderAddress(chain, platform);
|
|
505
|
-
|
|
462
|
+
const rawParams = {
|
|
463
|
+
rpcUrl,
|
|
464
|
+
privateKeys,
|
|
465
|
+
tokenAddress,
|
|
466
|
+
spenderAddress,
|
|
467
|
+
amounts,
|
|
468
|
+
gasPriceGwei,
|
|
469
|
+
gasLimit,
|
|
470
|
+
chainId,
|
|
471
|
+
skipValidation,
|
|
472
|
+
};
|
|
473
|
+
if (signOnly === true) {
|
|
474
|
+
return approveTokenBatchRaw({ ...rawParams, signOnly: true });
|
|
475
|
+
}
|
|
476
|
+
return approveTokenBatchRaw({ ...rawParams, signOnly: false });
|
|
506
477
|
}
|
|
507
478
|
export async function approveTokenBatchRaw(params) {
|
|
508
|
-
const { rpcUrl, privateKeys, tokenAddress, spenderAddress, amounts, signOnly, gasPriceGwei, gasLimit, chainId = 56, nonceManager: externalNonceManager, skipValidation } = params;
|
|
479
|
+
const { rpcUrl, privateKeys, tokenAddress, spenderAddress, amounts, signOnly, gasPriceGwei, gasLimit, chainId = 56, nonceManager: externalNonceManager, skipValidation, } = params;
|
|
509
480
|
if (privateKeys.length === 0 || amounts.length !== privateKeys.length) {
|
|
510
481
|
throw new Error('❌ 私钥数量和授权数量必须匹配');
|
|
511
482
|
}
|
|
@@ -519,12 +490,10 @@ export async function approveTokenBatchRaw(params) {
|
|
|
519
490
|
await validateContractAddress(provider, normalizedSpender, 'Spender');
|
|
520
491
|
}
|
|
521
492
|
// ✅ 优化:批量创建钱包和合约实例
|
|
522
|
-
const wallets = privateKeys.map(key => new Wallet(key, provider));
|
|
523
|
-
const ownerAddresses = wallets.map(w => w.address);
|
|
524
|
-
const isMaxApprovals = amounts.map(a => a === 'max');
|
|
525
|
-
const requiredAmounts = amounts.map(amount => amount === 'max'
|
|
526
|
-
? MAX_UINT256
|
|
527
|
-
: amount);
|
|
493
|
+
const wallets = privateKeys.map((key) => new Wallet(key, provider));
|
|
494
|
+
const ownerAddresses = wallets.map((w) => w.address);
|
|
495
|
+
const isMaxApprovals = amounts.map((a) => a === 'max');
|
|
496
|
+
const requiredAmounts = amounts.map((amount) => (amount === 'max' ? MAX_UINT256 : amount));
|
|
528
497
|
// ==================== signOnly=true:只签名不提交 ====================
|
|
529
498
|
if (signOnly) {
|
|
530
499
|
// ✅ 使用 NonceManager 管理 nonce(和买卖交易一样)
|
|
@@ -533,7 +502,9 @@ export async function approveTokenBatchRaw(params) {
|
|
|
533
502
|
const [currentAllowances, nonces, fetchedGasPrice] = await Promise.all([
|
|
534
503
|
batchCheckAllowances(provider, normalizedToken, ownerAddresses, normalizedSpender),
|
|
535
504
|
nonceManager.getNextNoncesForWallets(wallets), // ✅ 使用 NonceManager 批量获取 nonce
|
|
536
|
-
gasPriceGwei
|
|
505
|
+
gasPriceGwei
|
|
506
|
+
? Promise.resolve(parseUnits(gasPriceGwei.toString(), 'gwei'))
|
|
507
|
+
: provider.getFeeData().then((fee) => fee.gasPrice || parseUnits('3', 'gwei')),
|
|
537
508
|
]);
|
|
538
509
|
const finalGasPrice = fetchedGasPrice;
|
|
539
510
|
const finalGasLimit = BigInt(gasLimit || 100000);
|
|
@@ -547,13 +518,13 @@ export async function approveTokenBatchRaw(params) {
|
|
|
547
518
|
const isMax = isMaxApprovals[i];
|
|
548
519
|
// 如果已经授权足够,跳过
|
|
549
520
|
// ✅ max 授权:使用阈值判断(与 BSC 一致)
|
|
550
|
-
if (isMax ?
|
|
521
|
+
if (isMax ? currentAllowance >= MAX_APPROVAL_THRESHOLD : currentAllowance >= requiredAmount) {
|
|
551
522
|
return {
|
|
552
523
|
owner: ownerAddress,
|
|
553
524
|
alreadyApproved: true,
|
|
554
525
|
currentAllowance,
|
|
555
526
|
requiredAllowance: requiredAmount,
|
|
556
|
-
signedTx: undefined
|
|
527
|
+
signedTx: undefined,
|
|
557
528
|
};
|
|
558
529
|
}
|
|
559
530
|
// 构建并签名交易
|
|
@@ -565,28 +536,26 @@ export async function approveTokenBatchRaw(params) {
|
|
|
565
536
|
gasLimit: finalGasLimit,
|
|
566
537
|
gasPrice: finalGasPrice,
|
|
567
538
|
chainId,
|
|
568
|
-
type: 0 // Legacy 交易
|
|
539
|
+
type: 0, // Legacy 交易
|
|
569
540
|
});
|
|
570
541
|
return {
|
|
571
542
|
owner: ownerAddress,
|
|
572
543
|
alreadyApproved: false,
|
|
573
544
|
currentAllowance,
|
|
574
545
|
requiredAllowance: requiredAmount,
|
|
575
|
-
signedTx
|
|
546
|
+
signedTx,
|
|
576
547
|
};
|
|
577
548
|
});
|
|
578
549
|
const results = await Promise.all(signPromises);
|
|
579
550
|
// ✅ 提取所有签名交易(过滤掉已授权的)
|
|
580
|
-
const signedTransactions = results
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
const alreadyApprovedCount = results.filter(r => r.alreadyApproved).length;
|
|
584
|
-
const needApproveCount = results.filter(r => !r.alreadyApproved).length;
|
|
551
|
+
const signedTransactions = results.filter((r) => !r.alreadyApproved && r.signedTx).map((r) => r.signedTx);
|
|
552
|
+
const alreadyApprovedCount = results.filter((r) => r.alreadyApproved).length;
|
|
553
|
+
const needApproveCount = results.filter((r) => !r.alreadyApproved).length;
|
|
585
554
|
return {
|
|
586
555
|
signedTransactions,
|
|
587
556
|
results,
|
|
588
557
|
needApproveCount,
|
|
589
|
-
alreadyApprovedCount
|
|
558
|
+
alreadyApprovedCount,
|
|
590
559
|
};
|
|
591
560
|
}
|
|
592
561
|
// ==================== signOnly=false(默认):直接发送交易 ====================
|
|
@@ -601,12 +570,12 @@ export async function approveTokenBatchRaw(params) {
|
|
|
601
570
|
try {
|
|
602
571
|
// 如果已经授权足够,跳过
|
|
603
572
|
// ✅ max 授权:使用阈值判断(与 BSC 一致)
|
|
604
|
-
if (isMax ?
|
|
573
|
+
if (isMax ? currentAllowance >= MAX_APPROVAL_THRESHOLD : currentAllowance >= requiredAmount) {
|
|
605
574
|
return {
|
|
606
575
|
owner: ownerAddress,
|
|
607
576
|
alreadyApproved: true,
|
|
608
577
|
currentAllowance,
|
|
609
|
-
requiredAllowance: requiredAmount
|
|
578
|
+
requiredAllowance: requiredAmount,
|
|
610
579
|
};
|
|
611
580
|
}
|
|
612
581
|
// 发送授权交易
|
|
@@ -618,7 +587,7 @@ export async function approveTokenBatchRaw(params) {
|
|
|
618
587
|
alreadyApproved: false,
|
|
619
588
|
currentAllowance,
|
|
620
589
|
requiredAllowance: requiredAmount,
|
|
621
|
-
txHash: receipt.hash
|
|
590
|
+
txHash: receipt.hash,
|
|
622
591
|
};
|
|
623
592
|
}
|
|
624
593
|
catch (error) {
|
|
@@ -627,19 +596,19 @@ export async function approveTokenBatchRaw(params) {
|
|
|
627
596
|
alreadyApproved: false,
|
|
628
597
|
currentAllowance,
|
|
629
598
|
requiredAllowance: requiredAmount,
|
|
630
|
-
error: error
|
|
599
|
+
error: getErrorMessageFromUnknown(error),
|
|
631
600
|
};
|
|
632
601
|
}
|
|
633
602
|
});
|
|
634
603
|
// ✅ 优化:并行等待所有授权交易完成
|
|
635
604
|
const results = await Promise.all(approvalPromises);
|
|
636
605
|
// 统计结果
|
|
637
|
-
const approvedCount = results.filter(r => !r.alreadyApproved && !r.error).length;
|
|
638
|
-
const errorCount = results.filter(r => r.error).length;
|
|
606
|
+
const approvedCount = results.filter((r) => !r.alreadyApproved && !r.error).length;
|
|
607
|
+
const errorCount = results.filter((r) => r.error).length;
|
|
639
608
|
// ✅ 只要没有错误,就算成功(包括所有钱包都已授权的情况)
|
|
640
609
|
return {
|
|
641
610
|
success: errorCount === 0,
|
|
642
611
|
approvedCount,
|
|
643
|
-
results
|
|
612
|
+
results,
|
|
644
613
|
};
|
|
645
614
|
}
|
package/dist/utils/errors.d.ts
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
import { SdkErrorCode } from '../types/errors.js';
|
|
2
|
+
import type { FourErrorCode } from './types/errors.js';
|
|
3
|
+
export { SdkErrorCode } from '../types/errors.js';
|
|
4
|
+
export type { FourErrorCode } from './types/errors.js';
|
|
2
5
|
export declare function parseFourError(err: unknown): {
|
|
3
6
|
code?: FourErrorCode;
|
|
4
7
|
message: string;
|
|
5
8
|
};
|
|
9
|
+
/** 统一结构化错误(含错误码,便于上层分支处理) */
|
|
10
|
+
export declare class SdkError extends Error {
|
|
11
|
+
readonly code: SdkErrorCode;
|
|
12
|
+
cause?: unknown;
|
|
13
|
+
constructor(code: SdkErrorCode, message: string, cause?: unknown);
|
|
14
|
+
}
|
|
15
|
+
/** 将任意异常归一为 SdkError */
|
|
16
|
+
export declare function parseSdkError(err: unknown): SdkError;
|
package/dist/utils/errors.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { getErrorMessageFromUnknown } from '../shared/foundation/normalize-unknown.js';
|
|
2
|
+
import { SdkErrorCode } from '../types/errors.js';
|
|
3
|
+
export { SdkErrorCode } from '../types/errors.js';
|
|
1
4
|
const MESSAGES = {
|
|
2
5
|
GW: 'Amount precision is not aligned to GWEI',
|
|
3
6
|
ZA: "The 'to' address should not be address(0)",
|
|
@@ -8,9 +11,65 @@ const MESSAGES = {
|
|
|
8
11
|
SO: 'Order amount is too small',
|
|
9
12
|
};
|
|
10
13
|
export function parseFourError(err) {
|
|
11
|
-
const raw =
|
|
14
|
+
const raw = getErrorMessageFromUnknown(err);
|
|
12
15
|
const found = Object.keys(MESSAGES).find((k) => raw.includes(k));
|
|
13
16
|
if (found)
|
|
14
17
|
return { code: found, message: MESSAGES[found] };
|
|
15
18
|
return { message: raw };
|
|
16
19
|
}
|
|
20
|
+
function mapFourCodeToSdk(code) {
|
|
21
|
+
switch (code) {
|
|
22
|
+
case 'GW':
|
|
23
|
+
return SdkErrorCode.FOUR_GWEI_PRECISION;
|
|
24
|
+
case 'ZA':
|
|
25
|
+
return SdkErrorCode.FOUR_ZERO_ADDRESS;
|
|
26
|
+
case 'TO':
|
|
27
|
+
return SdkErrorCode.FOUR_ZERO_ADDRESS;
|
|
28
|
+
case 'Slippage':
|
|
29
|
+
return SdkErrorCode.FOUR_SLIPPAGE;
|
|
30
|
+
case 'More BNB':
|
|
31
|
+
return SdkErrorCode.FOUR_INSUFFICIENT_FUNDS;
|
|
32
|
+
case 'FR':
|
|
33
|
+
return SdkErrorCode.FOUR_FEE_TOO_HIGH;
|
|
34
|
+
case 'SO':
|
|
35
|
+
return SdkErrorCode.FOUR_ORDER_TOO_SMALL;
|
|
36
|
+
default:
|
|
37
|
+
return SdkErrorCode.UNKNOWN_ERROR;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** 统一结构化错误(含错误码,便于上层分支处理) */
|
|
41
|
+
export class SdkError extends Error {
|
|
42
|
+
code;
|
|
43
|
+
constructor(code, message, cause) {
|
|
44
|
+
super(message, cause !== undefined ? { cause } : undefined);
|
|
45
|
+
this.name = 'SdkError';
|
|
46
|
+
this.code = code;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** 将任意异常归一为 SdkError */
|
|
50
|
+
export function parseSdkError(err) {
|
|
51
|
+
if (err instanceof SdkError)
|
|
52
|
+
return err;
|
|
53
|
+
if (err === null || err === undefined) {
|
|
54
|
+
return new SdkError(SdkErrorCode.UNKNOWN_ERROR, 'Unknown error');
|
|
55
|
+
}
|
|
56
|
+
const raw = getErrorMessageFromUnknown(err);
|
|
57
|
+
const rawLower = raw.toLowerCase();
|
|
58
|
+
const four = parseFourError(err);
|
|
59
|
+
if (four.code) {
|
|
60
|
+
return new SdkError(mapFourCodeToSdk(four.code), four.message);
|
|
61
|
+
}
|
|
62
|
+
if (rawLower.includes('token already exists')) {
|
|
63
|
+
return new SdkError(SdkErrorCode.TOKEN_ALREADY_EXISTS, raw);
|
|
64
|
+
}
|
|
65
|
+
if (rawLower.includes('slippage')) {
|
|
66
|
+
return new SdkError(SdkErrorCode.SLIPPAGE_EXCEEDED, raw);
|
|
67
|
+
}
|
|
68
|
+
if (rawLower.includes('insufficient funds') || rawLower.includes('insufficient balance')) {
|
|
69
|
+
return new SdkError(SdkErrorCode.INSUFFICIENT_BALANCE, raw);
|
|
70
|
+
}
|
|
71
|
+
if (rawLower.includes('permit expired')) {
|
|
72
|
+
return new SdkError(SdkErrorCode.PERMIT_EXPIRED, raw);
|
|
73
|
+
}
|
|
74
|
+
return new SdkError(SdkErrorCode.UNKNOWN_ERROR, raw);
|
|
75
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const FOUR_TM2_ABI: string[];
|
|
2
|
+
export declare const PANCAKE_V2_ROUTER_ADDRESS: "0x10ED43C718714eb63d5aA57B78B54704E256024E";
|
|
3
|
+
export declare const PANCAKE_V3_ROUTER_ADDRESS: "0x13f4EA83D0bd40E75C8222255bc855a974568Dd4";
|
|
4
|
+
export declare const WBNB_ADDRESS: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c";
|
|
5
|
+
export declare const USDT_ADDRESS: "0x55d398326f99059fF775485246999027B3197955";
|
|
6
|
+
export declare const USDC_ADDRESS: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d";
|
|
7
|
+
export declare const XLAYER_V2_ROUTER_ADDRESS: "0x881fb2f98c13d521009464e7d1cbf16e1b394e8e";
|
|
8
|
+
export declare const XLAYER_V3_ROUTER_ADDRESS: "0xBB069e9465BcabC4F488d21e793BDEf0F2d41D41";
|
|
9
|
+
export declare const WOKB_ADDRESS: "0xe538905cf8410324e03a5a23c1c177a474d59b2b";
|
|
10
|
+
export declare const ENI_V2_ROUTER_ADDRESS: "0x97ed8be49d9a8b86247090aa41e908e76b8fcf22";
|
|
11
|
+
export declare const ENI_DAOAAS_PORTAL_ADDRESS: "0x0078341F4CD09D7E6D3125ef6eb4cB2F46CA8310";
|
|
12
|
+
export declare const WEGAS_ADDRESS: "0x6d1e851446f4d004ae2a72f9afed85e8829a205e";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ADDRESSES } from '../constants.js';
|
|
2
|
+
export const FOUR_TM2_ABI = [
|
|
3
|
+
'function buyTokenAMAP(uint256 origin, address token, address to, uint256 funds, uint256 minAmount) payable',
|
|
4
|
+
];
|
|
5
|
+
export const PANCAKE_V2_ROUTER_ADDRESS = ADDRESSES.BSC.PancakeV2Router;
|
|
6
|
+
export const PANCAKE_V3_ROUTER_ADDRESS = ADDRESSES.BSC.PancakeV3Router;
|
|
7
|
+
export const WBNB_ADDRESS = ADDRESSES.BSC.WBNB;
|
|
8
|
+
export const USDT_ADDRESS = ADDRESSES.BSC.USDT;
|
|
9
|
+
export const USDC_ADDRESS = ADDRESSES.BSC.USDC;
|
|
10
|
+
export const XLAYER_V2_ROUTER_ADDRESS = ADDRESSES.XLAYER.PotatoSwapV2Router;
|
|
11
|
+
export const XLAYER_V3_ROUTER_ADDRESS = ADDRESSES.XLAYER.PotatoSwapV3Router;
|
|
12
|
+
export const WOKB_ADDRESS = ADDRESSES.XLAYER.WOKB;
|
|
13
|
+
export const ENI_V2_ROUTER_ADDRESS = ADDRESSES.ENI.DswapV2Router;
|
|
14
|
+
export const ENI_DAOAAS_PORTAL_ADDRESS = ADDRESSES.ENI.DaoaasPortal;
|
|
15
|
+
export const WEGAS_ADDRESS = ADDRESSES.ENI.WEGAS;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Wallet } from 'ethers';
|
|
2
|
+
import type { HoldersMakerChain } from '../../shared/foundation/types/holders-maker.js';
|
|
3
|
+
/**
|
|
4
|
+
* 构建 Flap 买入交易
|
|
5
|
+
* 使用 swapExactInput 方法
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildFlapBuyTx(wallet: Wallet, tokenAddress: string, buyAmount: bigint, nonce: number, gasPrice: bigint, gasLimit: number, chainId: number, txType: 0 | 2, chain: HoldersMakerChain): Promise<string>;
|
|
8
|
+
/**
|
|
9
|
+
* 构建 Four 内盘买入交易
|
|
10
|
+
* 使用 buyTokenAMAP 方法
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildFourBuyTx(wallet: Wallet, tokenAddress: string, buyAmount: bigint, nonce: number, gasPrice: bigint, gasLimit: number, chainId: number, txType: 0 | 2): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* 构建 DAOaaS 内盘买入交易 (ENI 链)
|
|
15
|
+
* EGAS → Token (使用 DAOaaS Portal buy)
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildDaoaasBuyTx(wallet: Wallet, tokenAddress: string, buyAmount: bigint, nonce: number, gasPrice: bigint, gasLimit: number, chainId: number): Promise<string>;
|
|
18
|
+
/**
|
|
19
|
+
* 构建 V2 买入交易
|
|
20
|
+
* BNB/OKB → Token (使用 swapExactETHForTokensSupportingFeeOnTransferTokens)
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildV2BuyTx(wallet: Wallet, tokenAddress: string, buyAmount: bigint, nonce: number, gasPrice: bigint, gasLimit: number, chainId: number, txType: 0 | 2, v2Path?: string[], chain?: HoldersMakerChain, v2RouterOverride?: string): Promise<string>;
|
|
23
|
+
/**
|
|
24
|
+
* 构建 V3 单跳买入交易
|
|
25
|
+
* BNB/OKB → Token (使用 exactInputSingle + multicall)
|
|
26
|
+
*
|
|
27
|
+
* ✅ 修复:根据链类型选择正确的 Router ABI 版本
|
|
28
|
+
* - XLayer/Monad: 旧版 Router(exactInputSingle 包含 deadline,multicall(bytes[]))
|
|
29
|
+
* - BSC: 新版 SwapRouter02(exactInputSingle 不含 deadline,multicall(uint256,bytes[]))
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildV3BuyTx(wallet: Wallet, tokenAddress: string, buyAmount: bigint, nonce: number, gasPrice: bigint, gasLimit: number, chainId: number, txType: 0 | 2, v3Fee?: number, // 默认 0.25% 手续费
|
|
32
|
+
chain?: HoldersMakerChain): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* 构建 V2 买入交易(ERC20 输入)
|
|
35
|
+
* USDT/USDC → Token (使用 swapExactTokensForTokensSupportingFeeOnTransferTokens)
|
|
36
|
+
*/
|
|
37
|
+
export declare function buildV2BuyTxWithERC20(wallet: Wallet, tokenAddress: string, baseTokenAddress: string, buyAmount: bigint, nonce: number, gasPrice: bigint, gasLimit: number, chainId: number, txType: 0 | 2, v2RouterOverride?: string, chain?: HoldersMakerChain): Promise<string>;
|
|
38
|
+
/**
|
|
39
|
+
* 构建 V3 买入交易(ERC20 输入)
|
|
40
|
+
* USDT/USDC → Token (使用 exactInputSingle + multicall)
|
|
41
|
+
*
|
|
42
|
+
* ✅ 修复:使用 ethers.Interface 手动编码 calldata,避免 multicall 重载问题
|
|
43
|
+
*/
|
|
44
|
+
export declare function buildV3BuyTxWithERC20(wallet: Wallet, tokenAddress: string, baseTokenAddress: string, buyAmount: bigint, nonce: number, gasPrice: bigint, gasLimit: number, chainId: number, txType: 0 | 2, v3Fee?: number): Promise<string>;
|