four-flap-meme-sdk 2.2.8 → 2.2.11
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 +6 -41
- package/README.md +0 -31
- package/README.zh-CN.md +6 -41
- package/dist/chains/bsc/four/approve-tokenmanager.d.ts +26 -1
- package/dist/chains/bsc/four/approve-tokenmanager.js +113 -1
- package/dist/chains/bsc/four/config.d.ts +67 -5
- package/dist/chains/bsc/four/config.js +114 -2
- package/dist/chains/bsc/four/core.d.ts +4 -1
- package/dist/chains/bsc/four/core.js +592 -1
- 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 +46 -2
- package/dist/chains/bsc/four/internal.js +239 -2
- package/dist/chains/bsc/four/pancake-proxy.d.ts +28 -1
- package/dist/chains/bsc/four/pancake-proxy.js +687 -1
- package/dist/chains/bsc/four/private.d.ts +27 -1
- package/dist/chains/bsc/four/private.js +477 -1
- package/dist/chains/bsc/four/submit.d.ts +315 -2
- package/dist/chains/bsc/four/submit.js +752 -2
- package/dist/chains/bsc/four/swap-buy-first.d.ts +55 -2
- package/dist/chains/bsc/four/swap-buy-first.js +507 -2
- package/dist/chains/bsc/four/swap-internal.d.ts +3 -1
- package/dist/chains/bsc/four/swap-internal.js +18 -1
- package/dist/chains/bsc/four/swap.d.ts +144 -2
- package/dist/chains/bsc/four/swap.js +766 -2
- package/dist/chains/bsc/four/types.d.ts +476 -1
- package/dist/chains/bsc/four/utils.d.ts +18 -5
- package/dist/chains/bsc/four/utils.js +1552 -5
- package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +91 -1
- package/dist/chains/bsc/pancake/bundle-buy-first.js +212 -97
- package/dist/chains/bsc/pancake/bundle-swap.d.ts +79 -1
- package/dist/chains/bsc/pancake/bundle-swap.js +726 -114
- package/dist/chains/bsc/pancake/index.d.ts +2 -4
- package/dist/chains/bsc/pancake/index.js +3 -1
- package/dist/chains/bsc/platforms/iro/factory.d.ts +2 -2
- package/dist/chains/bsc/platforms/iro/factory.js +1 -3
- 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 +10 -31
- package/dist/chains/bsc/platforms/iro/token.js +1 -4
- package/dist/chains/eni/batch-router/bundle-approve.js +3 -4
- package/dist/chains/eni/batch-router/transfer.js +25 -55
- package/dist/chains/eni/batch-router/utils.js +6 -32
- package/dist/chains/eni/bundler/sign.js +6 -5
- package/dist/chains/eni/bundler/submit.js +4 -1
- package/dist/chains/eni/constants.js +1 -1
- package/dist/chains/eni/index.d.ts +1 -2
- package/dist/chains/eni/index.js +0 -1
- package/dist/chains/eni/platforms/daoaas/create.js +2 -2
- package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
- package/dist/chains/eni/platforms/daoaas/index.js +3 -3
- package/dist/chains/eni/platforms/daoaas/meta.js +6 -9
- package/dist/chains/eni/platforms/daoaas/portal-direct.js +44 -28
- package/dist/chains/eni/platforms/daoaas/portal.js +6 -10
- package/dist/chains/eni/platforms/dswap/liquidity.js +26 -58
- 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 +46 -87
- package/dist/chains/eni/platforms/fair-launch/pool.js +1 -4
- 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 +1 -3
- 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 +26 -90
- package/dist/chains/eni/platforms/iro/token.js +31 -107
- package/dist/chains/eni/platforms/iro/whitelist.js +18 -6
- package/dist/chains/index.d.ts +0 -13
- package/dist/chains/index.js +0 -13
- package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +26 -2
- package/dist/chains/xlayer/eip7702/bundle-approve.js +21 -11
- package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +6 -2
- package/dist/chains/xlayer/eip7702/bundle-buy.js +51 -13
- package/dist/chains/xlayer/eip7702/bundle-create.js +59 -93
- package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +6 -2
- package/dist/chains/xlayer/eip7702/bundle-sell.js +111 -29
- package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +65 -3
- package/dist/chains/xlayer/eip7702/bundle-swap.js +245 -51
- package/dist/chains/xlayer/eip7702/constants.d.ts +16 -1
- package/dist/chains/xlayer/eip7702/constants.js +21 -3
- package/dist/chains/xlayer/eip7702/index.d.ts +46 -28
- package/dist/chains/xlayer/eip7702/index.js +81 -28
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +203 -2
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +307 -63
- package/dist/chains/xlayer/eip7702/types.d.ts +0 -88
- package/dist/chains/xlayer/eip7702/utils.d.ts +3 -0
- package/dist/chains/xlayer/eip7702/utils.js +28 -23
- package/dist/chains/xlayer/eip7702/volume.d.ts +184 -6
- package/dist/chains/xlayer/eip7702/volume.js +164 -89
- 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.d.ts +95 -1
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +299 -66
- package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
- package/dist/chains/xlayer/eoa/eoa-wash-volume.js +23 -18
- package/dist/chains/xlayer/eoa/index.d.ts +6 -10
- package/dist/chains/xlayer/eoa/index.js +23 -8
- package/dist/chains/xlayer/eoa/portal-ops.js +2 -7
- 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 +3 -1
- package/dist/chains/xlayer/index.d.ts +2 -3
- package/dist/chains/xlayer/index.js +7 -4
- package/dist/contracts/helper3.d.ts +5 -20
- package/dist/contracts/helper3.js +20 -56
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +26 -1
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +113 -1
- package/dist/contracts/tm-bundle-merkle/config.d.ts +67 -5
- package/dist/contracts/tm-bundle-merkle/config.js +114 -2
- package/dist/contracts/tm-bundle-merkle/core.d.ts +4 -1
- package/dist/contracts/tm-bundle-merkle/core.js +591 -1
- 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 +46 -2
- package/dist/contracts/tm-bundle-merkle/internal.js +238 -2
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +28 -1
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +686 -1
- package/dist/contracts/tm-bundle-merkle/private.d.ts +27 -1
- package/dist/contracts/tm-bundle-merkle/private.js +476 -1
- package/dist/contracts/tm-bundle-merkle/submit.d.ts +314 -3
- package/dist/contracts/tm-bundle-merkle/submit.js +928 -3
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +55 -2
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +506 -2
- package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +3 -1
- package/dist/contracts/tm-bundle-merkle/swap-internal.js +18 -1
- package/dist/contracts/tm-bundle-merkle/swap.d.ts +144 -2
- package/dist/contracts/tm-bundle-merkle/swap.js +764 -2
- package/dist/contracts/tm-bundle-merkle/types.d.ts +476 -1
- package/dist/contracts/tm-bundle-merkle/utils.d.ts +18 -6
- package/dist/contracts/tm-bundle-merkle/utils.js +1501 -6
- package/dist/contracts/tm-bundle.d.ts +51 -3
- package/dist/contracts/tm-bundle.js +177 -108
- package/dist/contracts/tm.d.ts +2 -3
- package/dist/contracts/tm.js +32 -37
- package/dist/contracts/tm1.js +4 -9
- package/dist/contracts/tm2.js +4 -9
- package/dist/dex/direct-router.d.ts +125 -3
- package/dist/dex/direct-router.js +666 -237
- package/dist/flows/create.d.ts +1 -2
- package/dist/flows/create.js +6 -6
- package/dist/index.d.ts +87 -20
- package/dist/index.js +217 -20
- package/dist/shared/abis/TaxToken.json +105 -0
- package/dist/shared/abis/TokenManager2.json +60 -0
- package/dist/shared/abis/common.d.ts +83 -2
- package/dist/shared/abis/common.js +254 -2
- package/dist/shared/abis/index.d.ts +6 -5
- package/dist/shared/abis/index.js +7 -5
- package/dist/shared/clients/blockrazor.js +25 -39
- package/dist/shared/clients/club48.d.ts +2 -2
- package/dist/shared/clients/club48.js +29 -34
- package/dist/shared/clients/emitservice.js +0 -2
- package/dist/shared/clients/four.d.ts +6 -21
- package/dist/shared/clients/four.js +24 -29
- package/dist/shared/clients/merkle.js +34 -27
- package/dist/shared/constants/addresses.d.ts +1 -1
- package/dist/shared/constants/addresses.js +2 -11
- 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 +6 -2
- package/dist/shared/constants/index.d.ts +0 -3
- package/dist/shared/constants/index.js +0 -1
- package/dist/shared/flap/abi.js +1 -1
- package/dist/shared/flap/constants.d.ts +2 -1
- package/dist/shared/flap/constants.js +4 -3
- package/dist/shared/flap/curve.js +0 -3
- package/dist/shared/flap/errors.d.ts +4 -1
- package/dist/shared/flap/errors.js +1 -20
- package/dist/shared/flap/index.d.ts +5 -4
- package/dist/shared/flap/index.js +5 -4
- package/dist/shared/flap/launch-v6.d.ts +127 -0
- package/dist/shared/flap/launch-v6.js +123 -0
- package/dist/shared/flap/meta.d.ts +18 -22
- package/dist/shared/flap/meta.js +17 -12
- package/dist/shared/flap/permit.js +2 -5
- package/dist/shared/flap/pinata.d.ts +6 -22
- package/dist/shared/flap/pinata.js +26 -21
- package/dist/shared/flap/portal-bundle-merkle/config.d.ts +72 -3
- package/dist/shared/flap/portal-bundle-merkle/config.js +124 -4
- package/dist/shared/flap/portal-bundle-merkle/core.d.ts +4 -0
- package/dist/shared/flap/portal-bundle-merkle/core.js +151 -142
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.d.ts +4 -17
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +86 -86
- package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +92 -100
- package/dist/shared/flap/portal-bundle-merkle/index.d.ts +7 -11
- package/dist/shared/flap/portal-bundle-merkle/index.js +7 -4
- package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +68 -71
- package/dist/shared/flap/portal-bundle-merkle/private.js +114 -61
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +64 -1
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +247 -66
- package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +71 -2
- package/dist/shared/flap/portal-bundle-merkle/swap.js +410 -103
- package/dist/shared/flap/portal-bundle-merkle/types.d.ts +12 -88
- package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +80 -1
- package/dist/shared/flap/portal-bundle-merkle/utils.js +265 -145
- package/dist/shared/flap/portal-bundle.js +56 -55
- package/dist/shared/flap/portal-create-token.d.ts +19 -37
- package/dist/shared/flap/portal-create-token.js +124 -121
- package/dist/shared/flap/portal.d.ts +2 -1
- package/dist/shared/flap/portal.js +28 -36
- package/dist/shared/flap/vanity.d.ts +6 -6
- package/dist/shared/flap/vanity.js +21 -15
- package/dist/shared/flap/vault.d.ts +93 -25
- package/dist/shared/flap/vault.js +126 -75
- package/dist/shared/four/tax-token.d.ts +1 -1
- package/dist/shared/four/tax-token.js +7 -27
- package/dist/shared/index.d.ts +0 -6
- package/dist/shared/index.js +0 -4
- package/dist/utils/airdrop-sweep.d.ts +76 -4
- package/dist/utils/airdrop-sweep.js +55 -42
- package/dist/utils/bundle-helpers.d.ts +243 -9
- package/dist/utils/bundle-helpers.js +584 -10
- package/dist/utils/constants.d.ts +61 -5
- package/dist/utils/constants.js +80 -5
- package/dist/utils/contract-factory.d.ts +4 -2
- package/dist/utils/contract-factory.js +18 -25
- package/dist/utils/erc20.d.ts +89 -7
- package/dist/utils/erc20.js +125 -94
- package/dist/utils/errors.d.ts +1 -12
- package/dist/utils/errors.js +1 -60
- package/dist/utils/holders-maker.d.ts +138 -2
- package/dist/utils/holders-maker.js +661 -26
- package/dist/utils/lp-inspect.d.ts +112 -2
- package/dist/utils/lp-inspect.js +223 -73
- package/dist/utils/mpcExclusive.d.ts +5 -2
- package/dist/utils/mpcExclusive.js +3 -4
- package/dist/utils/private-sale.d.ts +58 -2
- package/dist/utils/private-sale.js +15 -4
- package/dist/utils/provider-factory.d.ts +0 -4
- package/dist/utils/provider-factory.js +0 -10
- package/dist/utils/quote-helpers.d.ts +45 -4
- package/dist/utils/quote-helpers.js +74 -17
- package/dist/utils/stealth-transfer.d.ts +28 -2
- package/dist/utils/stealth-transfer.js +15 -31
- package/dist/utils/swap-helpers.d.ts +15 -2
- package/dist/utils/swap-helpers.js +11 -6
- package/dist/utils/wallet.d.ts +25 -2
- package/dist/utils/wallet.js +10 -13
- package/package.json +4 -160
- package/dist/__tests__/subpath-exports.test.d.ts +0 -1
- package/dist/__tests__/subpath-exports.test.js +0 -64
- package/dist/abis/common.d.ts +0 -85
- package/dist/abis/common.js +0 -264
- package/dist/abis/contracts/TaxToken.json +0 -969
- package/dist/abis/contracts/TokenManager2.json +0 -136
- package/dist/abis/contracts/index.d.ts +0 -5
- package/dist/abis/contracts/index.js +0 -5
- package/dist/abis/flap/index.d.ts +0 -3
- package/dist/abis/flap/index.js +0 -3
- package/dist/abis/flap/portal-events.d.ts +0 -6
- package/dist/abis/flap/portal-events.js +0 -17
- package/dist/abis/flap/portal.d.ts +0 -6
- package/dist/abis/flap/portal.js +0 -37
- package/dist/abis/flap/vault.d.ts +0 -171
- package/dist/abis/flap/vault.js +0 -91
- package/dist/abis/index.d.ts +0 -8
- package/dist/abis/index.js +0 -11
- package/dist/bundle-core/__tests__/config-helpers.test.d.ts +0 -1
- package/dist/bundle-core/__tests__/config-helpers.test.js +0 -28
- package/dist/bundle-core/__tests__/facade-parity.test.d.ts +0 -1
- package/dist/bundle-core/__tests__/facade-parity.test.js +0 -33
- package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +0 -1
- package/dist/bundle-core/__tests__/sign-context-helpers.test.js +0 -60
- package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +0 -1
- package/dist/bundle-core/__tests__/sign-fixture.test.js +0 -220
- package/dist/bundle-core/__tests__/sign-fixtures.d.ts +0 -10
- package/dist/bundle-core/__tests__/sign-fixtures.js +0 -16
- package/dist/bundle-core/config-helpers.d.ts +0 -36
- package/dist/bundle-core/config-helpers.js +0 -57
- package/dist/bundle-core/errors.d.ts +0 -50
- package/dist/bundle-core/errors.js +0 -35
- package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +0 -7
- package/dist/bundle-core/four-meme/approve-tokenmanager.js +0 -99
- package/dist/bundle-core/four-meme/core-helpers.d.ts +0 -8
- package/dist/bundle-core/four-meme/core-helpers.js +0 -40
- package/dist/bundle-core/four-meme/core.d.ts +0 -4
- package/dist/bundle-core/four-meme/core.js +0 -515
- package/dist/bundle-core/four-meme/pancake-proxy.d.ts +0 -28
- package/dist/bundle-core/four-meme/pancake-proxy.js +0 -679
- package/dist/bundle-core/four-meme/private.d.ts +0 -27
- package/dist/bundle-core/four-meme/private.js +0 -465
- package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +0 -2
- package/dist/bundle-core/four-meme/sign-context-helpers.js +0 -2
- package/dist/bundle-core/four-meme/swap-buy-first.d.ts +0 -8
- package/dist/bundle-core/four-meme/swap-buy-first.js +0 -493
- package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +0 -6
- package/dist/bundle-core/four-meme/swap-hop-helpers.js +0 -63
- package/dist/bundle-core/four-meme/swap-internal.d.ts +0 -3
- package/dist/bundle-core/four-meme/swap-internal.js +0 -18
- package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +0 -27
- package/dist/bundle-core/four-meme/swap-sign-helpers.js +0 -105
- package/dist/bundle-core/four-meme/swap.d.ts +0 -17
- package/dist/bundle-core/four-meme/swap.js +0 -505
- package/dist/bundle-core/four-meme/types/buy-first.d.ts +0 -50
- package/dist/bundle-core/four-meme/types/buy-first.js +0 -1
- package/dist/bundle-core/four-meme/types/core-flow.d.ts +0 -63
- package/dist/bundle-core/four-meme/types/core-flow.js +0 -1
- package/dist/bundle-core/four-meme/types/index.d.ts +0 -600
- package/dist/bundle-core/four-meme/types/index.js +0 -1
- package/dist/bundle-core/four-meme/types/swap-internal.d.ts +0 -19
- package/dist/bundle-core/four-meme/types/swap-internal.js +0 -1
- package/dist/bundle-core/four-meme/types.d.ts +0 -1
- package/dist/bundle-core/four-meme/types.js +0 -1
- package/dist/bundle-core/four-meme/utils-disperse.d.ts +0 -7
- package/dist/bundle-core/four-meme/utils-disperse.js +0 -396
- package/dist/bundle-core/four-meme/utils-pairwise.d.ts +0 -8
- package/dist/bundle-core/four-meme/utils-pairwise.js +0 -328
- package/dist/bundle-core/four-meme/utils-sweep.d.ts +0 -8
- package/dist/bundle-core/four-meme/utils-sweep.js +0 -744
- package/dist/bundle-core/index.d.ts +0 -8
- package/dist/bundle-core/index.js +0 -8
- package/dist/bundle-core/internal.d.ts +0 -21
- package/dist/bundle-core/internal.js +0 -182
- package/dist/bundle-core/sign-context-helpers.d.ts +0 -25
- package/dist/bundle-core/sign-context-helpers.js +0 -67
- package/dist/bundle-core/submit.d.ts +0 -293
- package/dist/bundle-core/submit.js +0 -727
- package/dist/bundle-core/types/index.d.ts +0 -8
- package/dist/bundle-core/types/index.js +0 -1
- package/dist/bundle-core/types.d.ts +0 -1
- package/dist/bundle-core/types.js +0 -1
- package/dist/chains/bsc/four/utils-disperse.d.ts +0 -1
- package/dist/chains/bsc/four/utils-disperse.js +0 -1
- package/dist/chains/bsc/four/utils-pairwise.d.ts +0 -1
- package/dist/chains/bsc/four/utils-pairwise.js +0 -1
- package/dist/chains/bsc/four/utils-sweep.d.ts +0 -1
- package/dist/chains/bsc/four/utils-sweep.js +0 -1
- package/dist/chains/bsc/iro.d.ts +0 -5
- package/dist/chains/bsc/iro.js +0 -4
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +0 -159
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +0 -117
- package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +0 -241
- package/dist/chains/bsc/pancake/bundle-swap-helpers.js +0 -565
- package/dist/chains/eni/flat-aliases.d.ts +0 -10
- package/dist/chains/eni/flat-aliases.js +0 -8
- package/dist/chains/eni/submit.d.ts +0 -43
- package/dist/chains/eni/submit.js +0 -286
- package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +0 -13
- package/dist/chains/xlayer/eip7702/flat-aliases.js +0 -10
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +0 -79
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +0 -1
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +0 -26
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +0 -57
- package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +0 -148
- package/dist/chains/xlayer/eip7702/volume-helpers.js +0 -48
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +0 -126
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +0 -228
- package/dist/contracts/tm-bundle-helpers.d.ts +0 -88
- package/dist/contracts/tm-bundle-helpers.js +0 -72
- package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +0 -1
- package/dist/contracts/tm-bundle-merkle/utils-disperse.js +0 -1
- package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +0 -1
- package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +0 -1
- package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +0 -1
- package/dist/contracts/tm-bundle-merkle/utils-sweep.js +0 -1
- package/dist/dex/direct-router-helpers.d.ts +0 -264
- package/dist/dex/direct-router-helpers.js +0 -539
- package/dist/dex/types.d.ts +0 -81
- package/dist/dex/types.js +0 -1
- package/dist/exports/root-bundle-and-tooling.d.ts +0 -27
- package/dist/exports/root-bundle-and-tooling.js +0 -30
- package/dist/exports/root-eni-and-bsc-iro.d.ts +0 -26
- package/dist/exports/root-eni-and-bsc-iro.js +0 -66
- package/dist/exports/root-foundations.d.ts +0 -35
- package/dist/exports/root-foundations.js +0 -70
- package/dist/exports/root-swap-dex-and-xlayer.d.ts +0 -30
- package/dist/exports/root-swap-dex-and-xlayer.js +0 -78
- package/dist/flap/index.d.ts +0 -10
- package/dist/flap/index.js +0 -8
- package/dist/flows/index.d.ts +0 -1
- package/dist/flows/index.js +0 -1
- package/dist/merkle/index.d.ts +0 -12
- package/dist/merkle/index.js +0 -11
- package/dist/shared/clients/index.d.ts +0 -8
- package/dist/shared/clients/index.js +0 -8
- package/dist/shared/constants/quote.d.ts +0 -30
- package/dist/shared/constants/quote.js +0 -37
- package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +0 -32
- package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +0 -83
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +0 -125
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +0 -113
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +0 -149
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +0 -259
- package/dist/shared/foundation/dex/v3-path.d.ts +0 -6
- package/dist/shared/foundation/dex/v3-path.js +0 -35
- package/dist/shared/foundation/gas/bundle-gas.d.ts +0 -49
- package/dist/shared/foundation/gas/bundle-gas.js +0 -93
- package/dist/shared/foundation/gas/profit-hop.d.ts +0 -20
- package/dist/shared/foundation/gas/profit-hop.js +0 -72
- package/dist/shared/foundation/index.d.ts +0 -13
- package/dist/shared/foundation/index.js +0 -12
- package/dist/shared/foundation/nonce/nonce-manager.d.ts +0 -17
- package/dist/shared/foundation/nonce/nonce-manager.js +0 -183
- package/dist/shared/foundation/normalize-unknown.d.ts +0 -9
- package/dist/shared/foundation/normalize-unknown.js +0 -29
- package/dist/shared/foundation/sdk-logger.d.ts +0 -13
- package/dist/shared/foundation/sdk-logger.js +0 -12
- package/dist/shared/foundation/tx/build-request.d.ts +0 -17
- package/dist/shared/foundation/tx/build-request.js +0 -25
- package/dist/shared/foundation/tx/sign-batch.d.ts +0 -5
- package/dist/shared/foundation/tx/sign-batch.js +0 -26
- package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +0 -1
- package/dist/shared/foundation/tx/wallet-sign-patch.js +0 -18
- package/dist/shared/foundation/types/airdrop-sweep.d.ts +0 -79
- package/dist/shared/foundation/types/airdrop-sweep.js +0 -1
- package/dist/shared/foundation/types/erc20.d.ts +0 -65
- package/dist/shared/foundation/types/erc20.js +0 -1
- package/dist/shared/foundation/types/holders-maker.d.ts +0 -64
- package/dist/shared/foundation/types/holders-maker.js +0 -1
- package/dist/shared/foundation/types/index.d.ts +0 -7
- package/dist/shared/foundation/types/index.js +0 -1
- package/dist/shared/foundation/types/lp-inspect.d.ts +0 -102
- package/dist/shared/foundation/types/lp-inspect.js +0 -1
- package/dist/shared/foundation/types/multicall.d.ts +0 -5
- package/dist/shared/foundation/types/multicall.js +0 -1
- package/dist/shared/foundation/types/private-sale.d.ts +0 -35
- package/dist/shared/foundation/types/private-sale.js +0 -1
- package/dist/shared/foundation/types/quote-helpers.d.ts +0 -17
- package/dist/shared/foundation/types/quote-helpers.js +0 -1
- package/dist/types/errors.d.ts +0 -27
- package/dist/types/errors.js +0 -34
- package/dist/utils/holders-maker/addresses.d.ts +0 -12
- package/dist/utils/holders-maker/addresses.js +0 -15
- package/dist/utils/holders-maker/buy-tx.d.ts +0 -44
- package/dist/utils/holders-maker/buy-tx.js +0 -278
- package/dist/utils/holders-maker/constants.d.ts +0 -6
- package/dist/utils/holders-maker/constants.js +0 -7
- package/dist/utils/holders-maker/disperse.d.ts +0 -18
- package/dist/utils/holders-maker/disperse.js +0 -90
- package/dist/utils/holders-maker/routing.d.ts +0 -4
- package/dist/utils/holders-maker/routing.js +0 -45
- package/dist/utils/holders-maker/transfer-tx.d.ts +0 -4
- package/dist/utils/holders-maker/transfer-tx.js +0 -67
- package/dist/utils/holders-maker-helpers.d.ts +0 -9
- package/dist/utils/holders-maker-helpers.js +0 -9
- package/dist/utils/hop-chains.d.ts +0 -35
- package/dist/utils/hop-chains.js +0 -215
- package/dist/utils/lp-inspect-helpers.d.ts +0 -9
- package/dist/utils/lp-inspect-helpers.js +0 -109
- package/dist/utils/types/airdrop-sweep.d.ts +0 -1
- package/dist/utils/types/airdrop-sweep.js +0 -1
- package/dist/utils/types/contract-factory.d.ts +0 -1
- package/dist/utils/types/contract-factory.js +0 -1
- package/dist/utils/types/erc20.d.ts +0 -1
- package/dist/utils/types/erc20.js +0 -1
- package/dist/utils/types/errors.d.ts +0 -1
- package/dist/utils/types/errors.js +0 -1
- package/dist/utils/types/holders-maker.d.ts +0 -1
- package/dist/utils/types/holders-maker.js +0 -1
- package/dist/utils/types/hop-chains.d.ts +0 -8
- package/dist/utils/types/hop-chains.js +0 -1
- package/dist/utils/types/index.d.ts +0 -13
- package/dist/utils/types/index.js +0 -1
- package/dist/utils/types/lp-inspect.d.ts +0 -1
- package/dist/utils/types/lp-inspect.js +0 -1
- package/dist/utils/types/mpc-exclusive.d.ts +0 -5
- package/dist/utils/types/mpc-exclusive.js +0 -1
- package/dist/utils/types/private-sale.d.ts +0 -1
- package/dist/utils/types/private-sale.js +0 -1
- package/dist/utils/types/quote-helpers.d.ts +0 -1
- package/dist/utils/types/quote-helpers.js +0 -1
- package/dist/utils/types/stealth-transfer.d.ts +0 -44
- package/dist/utils/types/stealth-transfer.js +0 -1
- package/dist/utils/types/wallet.d.ts +0 -25
- package/dist/utils/types/wallet.js +0 -1
- package/dist/vanity/index.d.ts +0 -5
- package/dist/vanity/index.js +0 -5
- package/src/abis/contracts/TaxToken.json +0 -969
- package/src/abis/contracts/TokenManager.json +0 -836
- package/src/abis/contracts/TokenManager2.json +0 -136
- package/src/abis/contracts/TokenManagerHelper3.json +0 -993
- /package/dist/{abis/contracts → shared/abis}/TokenManager.json +0 -0
- /package/dist/{abis/contracts → shared/abis}/TokenManagerHelper3.json +0 -0
|
@@ -6,8 +6,11 @@
|
|
|
6
6
|
* - 利润提取:千分之三(30 bps)
|
|
7
7
|
*/
|
|
8
8
|
import { ethers, Wallet, JsonRpcProvider } from 'ethers';
|
|
9
|
-
import {
|
|
9
|
+
import { PROFIT_CONFIG, BLOCKRAZOR_BUILDER_EOA } from './constants.js';
|
|
10
10
|
import { NonceManager, buildProfitHopTransactions, PROFIT_HOP_COUNT } from './bundle-helpers.js';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// 核心功能
|
|
13
|
+
// ============================================================================
|
|
11
14
|
/**
|
|
12
15
|
* 生成私募转账签名交易(带贿赂和利润提取)
|
|
13
16
|
*
|
|
@@ -35,7 +38,7 @@ export async function batchPrivateSaleMerkle(params) {
|
|
|
35
38
|
const gasPrice = ethers.parseUnits(String(config.gasPriceGwei || 0.1), 'gwei');
|
|
36
39
|
const bribeAmount = ethers.parseEther(String(config.bribeAmount || 0.000001));
|
|
37
40
|
const extractProfit = config.extractProfit !== false;
|
|
38
|
-
const profitBps = config.profitBps ??
|
|
41
|
+
const profitBps = config.profitBps ?? PROFIT_CONFIG.RATE_BPS;
|
|
39
42
|
// 创建 Provider
|
|
40
43
|
const provider = new JsonRpcProvider(config.rpcUrl);
|
|
41
44
|
const nonceManager = new NonceManager(provider);
|
|
@@ -65,8 +68,16 @@ export async function batchPrivateSaleMerkle(params) {
|
|
|
65
68
|
uniqueWallets.forEach((wallet, i) => {
|
|
66
69
|
nonceMap.set(wallet.address.toLowerCase(), noncesArray[i]);
|
|
67
70
|
});
|
|
71
|
+
// ✅ 预计算每个钱包的 nonce 分配
|
|
68
72
|
// 第一个钱包:baseNonce(贿赂) → baseNonce+1...+N(转账) → 最后(利润)
|
|
69
73
|
const firstWalletBaseNonce = nonceMap.get(firstWalletKey);
|
|
74
|
+
// 统计第一个钱包的转账数量
|
|
75
|
+
let firstWalletTransferCount = 0;
|
|
76
|
+
for (let i = 0; i < transfers.length; i++) {
|
|
77
|
+
if (transferWallets[i].address.toLowerCase() === firstWalletKey) {
|
|
78
|
+
firstWalletTransferCount++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
70
81
|
// ✅ 为每个转账预分配 nonce
|
|
71
82
|
const transferNonces = [];
|
|
72
83
|
const currentNonces = new Map();
|
|
@@ -121,12 +132,12 @@ export async function batchPrivateSaleMerkle(params) {
|
|
|
121
132
|
provider,
|
|
122
133
|
payerWallet: firstWallet,
|
|
123
134
|
profitAmount: profitWei,
|
|
124
|
-
profitRecipient:
|
|
135
|
+
profitRecipient: PROFIT_CONFIG.RECIPIENT,
|
|
125
136
|
hopCount: PROFIT_HOP_COUNT,
|
|
126
137
|
gasPrice,
|
|
127
138
|
chainId,
|
|
128
139
|
txType: 0,
|
|
129
|
-
startNonce: profitNonce
|
|
140
|
+
startNonce: profitNonce
|
|
130
141
|
});
|
|
131
142
|
signedTransactions.push(...profitHopResult.signedTransactions);
|
|
132
143
|
profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
|
|
@@ -25,10 +25,6 @@ export declare function createCachedProvider(rpcUrl: string, chainId: number, ch
|
|
|
25
25
|
* 清除 Provider 缓存
|
|
26
26
|
*/
|
|
27
27
|
export declare function clearProviderCache(): void;
|
|
28
|
-
/**
|
|
29
|
-
* ENI 专用 Provider(staticNetwork,适合批量 RPC)
|
|
30
|
-
*/
|
|
31
|
-
export declare function createEniProvider(rpcUrl: string, chainId?: number): JsonRpcProvider;
|
|
32
28
|
/**
|
|
33
29
|
* XLayer 专用 Provider 创建函数
|
|
34
30
|
*/
|
|
@@ -72,16 +72,6 @@ export function createCachedProvider(rpcUrl, chainId, chainName) {
|
|
|
72
72
|
export function clearProviderCache() {
|
|
73
73
|
providerCache.clear();
|
|
74
74
|
}
|
|
75
|
-
/**
|
|
76
|
-
* ENI 专用 Provider(staticNetwork,适合批量 RPC)
|
|
77
|
-
*/
|
|
78
|
-
export function createEniProvider(rpcUrl, chainId = 173) {
|
|
79
|
-
return new JsonRpcProvider(rpcUrl, chainId, {
|
|
80
|
-
staticNetwork: true,
|
|
81
|
-
batchMaxCount: 20,
|
|
82
|
-
batchStallTime: 30,
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
75
|
/**
|
|
86
76
|
* XLayer 专用 Provider 创建函数
|
|
87
77
|
*/
|
|
@@ -7,9 +7,51 @@
|
|
|
7
7
|
* - ERC20 → 原生代币转换报价
|
|
8
8
|
*/
|
|
9
9
|
import { JsonRpcProvider } from 'ethers';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
/** V3 常用费率档位 */
|
|
11
|
+
export declare const V3_FEE_TIERS: number[];
|
|
12
|
+
/** 各链的报价配置 */
|
|
13
|
+
export declare const QUOTE_CONFIG: {
|
|
14
|
+
readonly BSC: {
|
|
15
|
+
readonly v2Router: "0x10ED43C718714eb63d5aA57B78B54704E256024E";
|
|
16
|
+
readonly v3Quoter: "0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997";
|
|
17
|
+
readonly wrappedNative: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c";
|
|
18
|
+
readonly stableCoins: readonly ["0x55d398326f99059fF775485246999027B3197955", "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"];
|
|
19
|
+
};
|
|
20
|
+
readonly MONAD: {
|
|
21
|
+
readonly v2Router: "0xb1bc24c34e88f7d43d5923034e3a14b24daacff9";
|
|
22
|
+
readonly v3Quoter: "";
|
|
23
|
+
readonly wrappedNative: "0x3bd359c1119da7da1d913d1c4d2b7c461115433a";
|
|
24
|
+
readonly stableCoins: readonly [];
|
|
25
|
+
};
|
|
26
|
+
readonly XLAYER: {
|
|
27
|
+
readonly v2Router: "0x881fb2f98c13d521009464e7d1cbf16e1b394e8e";
|
|
28
|
+
readonly v3Quoter: "0x5A6f3723346aF54a4D0693bfC1718D64d4915C3e";
|
|
29
|
+
readonly wrappedNative: "0xe538905cf8410324e03a5a23c1c177a474d59b2b";
|
|
30
|
+
readonly stableCoins: readonly ["0x1E4a5963aBFD975d8c9021ce480b42188849D41d", "0x74b7f16337b8972027f6196a17a631ac6de26d22", "0x779ded0c9e1022225f8e0630b35a9b54be713736"];
|
|
31
|
+
};
|
|
32
|
+
readonly ENI: {
|
|
33
|
+
readonly v2Router: "0x97ed8be49d9a8b86247090aa41e908e76b8fcf22";
|
|
34
|
+
readonly v3Quoter: "";
|
|
35
|
+
readonly wrappedNative: "0x6d1e851446f4d004ae2a72f9afed85e8829a205e";
|
|
36
|
+
readonly stableCoins: readonly ["0xDC1a8A35b0BaA3229b13f348ED708a2fd50b5e3a", "0xaFF944b96c1BAEA587159ec446280E468B32ee15"];
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export type SupportedChain = keyof typeof QUOTE_CONFIG;
|
|
40
|
+
export interface QuoteParams {
|
|
41
|
+
provider: JsonRpcProvider;
|
|
42
|
+
tokenIn: string;
|
|
43
|
+
tokenOut: string;
|
|
44
|
+
amountIn: bigint;
|
|
45
|
+
chain: string;
|
|
46
|
+
version?: 'v2' | 'v3';
|
|
47
|
+
fee?: number;
|
|
48
|
+
routerOverride?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface QuoteResult {
|
|
51
|
+
amountOut: bigint;
|
|
52
|
+
path?: string[];
|
|
53
|
+
fee?: number;
|
|
54
|
+
}
|
|
13
55
|
/**
|
|
14
56
|
* V2 报价(直接路径 + 多跳路径)
|
|
15
57
|
* ✅ 优化:并行尝试直接路径和多跳路径
|
|
@@ -75,4 +117,3 @@ export declare function getWrappedNativeAddress(chain: string): string;
|
|
|
75
117
|
* 获取链的稳定币列表
|
|
76
118
|
*/
|
|
77
119
|
export declare function getStableCoins(chain: string): string[];
|
|
78
|
-
export type { SupportedChain, QuoteParams, QuoteResult } from './types/quote-helpers.js';
|
|
@@ -6,11 +6,56 @@
|
|
|
6
6
|
* - V3 Quoter 报价(多费率尝试 + 多跳路径)
|
|
7
7
|
* - ERC20 → 原生代币转换报价
|
|
8
8
|
*/
|
|
9
|
-
import { Contract } from 'ethers';
|
|
10
|
-
import { V2_ROUTER_QUOTE_ABI, V3_QUOTER_ABI } from '../abis/common.js';
|
|
11
|
-
|
|
9
|
+
import { ethers, Contract } from 'ethers';
|
|
10
|
+
import { V2_ROUTER_QUOTE_ABI, V3_QUOTER_ABI } from '../shared/abis/common.js';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// 常量配置
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// ✅ V2_ROUTER_ABI 和 V3_QUOTER_ABI 从公共模块导入
|
|
12
15
|
const V2_ROUTER_ABI = V2_ROUTER_QUOTE_ABI;
|
|
13
|
-
|
|
16
|
+
/** V3 常用费率档位 */
|
|
17
|
+
export const V3_FEE_TIERS = [100, 500, 2500, 10000]; // 0.01%, 0.05%, 0.25%, 1%
|
|
18
|
+
/** 各链的报价配置 */
|
|
19
|
+
export const QUOTE_CONFIG = {
|
|
20
|
+
BSC: {
|
|
21
|
+
v2Router: '0x10ED43C718714eb63d5aA57B78B54704E256024E', // PancakeSwap V2 Router
|
|
22
|
+
v3Quoter: '0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997', // PancakeSwap V3 Quoter
|
|
23
|
+
wrappedNative: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB
|
|
24
|
+
stableCoins: [
|
|
25
|
+
'0x55d398326f99059fF775485246999027B3197955', // USDT
|
|
26
|
+
'0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', // USDC
|
|
27
|
+
'0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', // BUSD
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
MONAD: {
|
|
31
|
+
v2Router: '0xb1bc24c34e88f7d43d5923034e3a14b24daacff9', // PancakeSwap V2
|
|
32
|
+
v3Quoter: '', // TODO: 添加 Monad V3 Quoter
|
|
33
|
+
wrappedNative: '0x3bd359c1119da7da1d913d1c4d2b7c461115433a', // WMON
|
|
34
|
+
stableCoins: [],
|
|
35
|
+
},
|
|
36
|
+
XLAYER: {
|
|
37
|
+
v2Router: '0x881fb2f98c13d521009464e7d1cbf16e1b394e8e', // PotatoSwap V2
|
|
38
|
+
v3Quoter: '0x5A6f3723346aF54a4D0693bfC1718D64d4915C3e', // ✅ PotatoSwap V3 QuoterV2
|
|
39
|
+
wrappedNative: '0xe538905cf8410324e03a5a23c1c177a474d59b2b', // WOKB
|
|
40
|
+
stableCoins: [
|
|
41
|
+
'0x1E4a5963aBFD975d8c9021ce480b42188849D41d', // USDT
|
|
42
|
+
'0x74b7f16337b8972027f6196a17a631ac6de26d22', // USDC
|
|
43
|
+
'0x779ded0c9e1022225f8e0630b35a9b54be713736', // USD₮0
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
ENI: {
|
|
47
|
+
v2Router: '0x97ed8be49d9a8b86247090aa41e908e76b8fcf22', // DSWAP V2 Router
|
|
48
|
+
v3Quoter: '',
|
|
49
|
+
wrappedNative: '0x6d1e851446f4d004ae2a72f9afed85e8829a205e', // WEGAS
|
|
50
|
+
stableCoins: [
|
|
51
|
+
'0xDC1a8A35b0BaA3229b13f348ED708a2fd50b5e3a', // USDT (18 decimals)
|
|
52
|
+
'0xaFF944b96c1BAEA587159ec446280E468B32ee15', // USDC (18 decimals)
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
// ============================================================================
|
|
57
|
+
// V2 报价
|
|
58
|
+
// ============================================================================
|
|
14
59
|
/**
|
|
15
60
|
* V2 报价(直接路径 + 多跳路径)
|
|
16
61
|
* ✅ 优化:并行尝试直接路径和多跳路径
|
|
@@ -29,6 +74,7 @@ export async function quoteV2(provider, tokenIn, tokenOut, amountIn, chain, rout
|
|
|
29
74
|
const chainUpper = chain.toUpperCase();
|
|
30
75
|
const config = QUOTE_CONFIG[chainUpper];
|
|
31
76
|
if (!config) {
|
|
77
|
+
console.warn(`[quoteV2] 不支持的链: ${chain}`);
|
|
32
78
|
return { amountOut: 0n };
|
|
33
79
|
}
|
|
34
80
|
const routerAddress = routerOverride || config.v2Router;
|
|
@@ -47,13 +93,16 @@ export async function quoteV2(provider, tokenIn, tokenOut, amountIn, chain, rout
|
|
|
47
93
|
}
|
|
48
94
|
}
|
|
49
95
|
// ✅ 并行尝试所有路径
|
|
96
|
+
console.log(`[quoteV2] 输入: ${amountIn} wei, tokenIn=${tokenIn}, tokenOut=${tokenOut}`);
|
|
50
97
|
const quotePromises = paths.map(async (path) => {
|
|
51
98
|
try {
|
|
52
99
|
const amounts = await router.getAmountsOut(amountIn, path);
|
|
53
100
|
const amountOut = amounts[amounts.length - 1];
|
|
101
|
+
console.log(`[quoteV2] 路径 ${path.map(p => p.slice(0, 10) + '...').join(' → ')}: ${amountOut} wei`);
|
|
54
102
|
return { amountOut, path, success: amountOut > 0n };
|
|
55
103
|
}
|
|
56
|
-
catch {
|
|
104
|
+
catch (e) {
|
|
105
|
+
console.log(`[quoteV2] 路径失败 ${path.map(p => p.slice(0, 10) + '...').join(' → ')}: ${e.message?.slice(0, 50)}`);
|
|
57
106
|
return { amountOut: 0n, path, success: false };
|
|
58
107
|
}
|
|
59
108
|
});
|
|
@@ -61,9 +110,11 @@ export async function quoteV2(provider, tokenIn, tokenOut, amountIn, chain, rout
|
|
|
61
110
|
// 找到第一个成功的结果(优先直接路径)
|
|
62
111
|
for (const result of results) {
|
|
63
112
|
if (result.success) {
|
|
113
|
+
console.log(`[quoteV2] 路径成功 (${result.path.length === 2 ? '直接' : '多跳'}): ${ethers.formatEther(result.amountOut)}`);
|
|
64
114
|
return { amountOut: result.amountOut, path: result.path };
|
|
65
115
|
}
|
|
66
116
|
}
|
|
117
|
+
console.warn(`[quoteV2] 所有路径均失败`);
|
|
67
118
|
return { amountOut: 0n };
|
|
68
119
|
}
|
|
69
120
|
// ============================================================================
|
|
@@ -88,18 +139,19 @@ export async function quoteV3(provider, tokenIn, tokenOut, amountIn, chain, pref
|
|
|
88
139
|
const chainUpper = chain.toUpperCase();
|
|
89
140
|
const config = QUOTE_CONFIG[chainUpper];
|
|
90
141
|
if (!config) {
|
|
142
|
+
console.warn(`[quoteV3] 不支持的链: ${chain}`);
|
|
91
143
|
return { amountOut: 0n };
|
|
92
144
|
}
|
|
93
145
|
if (!config.v3Quoter) {
|
|
146
|
+
console.warn(`[quoteV3] 该链不支持 V3 Quoter: ${chain}`);
|
|
94
147
|
return { amountOut: 0n };
|
|
95
148
|
}
|
|
96
149
|
const quoter = new Contract(config.v3Quoter, V3_QUOTER_ABI, provider);
|
|
97
150
|
const tokenInLower = tokenIn.toLowerCase();
|
|
98
151
|
const tokenOutLower = tokenOut.toLowerCase();
|
|
99
152
|
// 如果指定了费率,优先尝试;否则尝试所有费率
|
|
100
|
-
const feesToTry = preferredFee
|
|
101
|
-
|
|
102
|
-
: [...QUOTE_V3_FEE_TIERS];
|
|
153
|
+
const feesToTry = preferredFee ? [preferredFee, ...V3_FEE_TIERS.filter(f => f !== preferredFee)] : V3_FEE_TIERS;
|
|
154
|
+
console.log(`[quoteV3] 开始报价: tokenIn=${tokenIn.slice(0, 10)}..., tokenOut=${tokenOut.slice(0, 10)}..., feesToTry=${feesToTry}`);
|
|
103
155
|
// ✅ 策略 1:并行尝试所有费率的直接路径
|
|
104
156
|
const directQuotePromises = feesToTry.map(async (fee) => {
|
|
105
157
|
try {
|
|
@@ -108,7 +160,7 @@ export async function quoteV3(provider, tokenIn, tokenOut, amountIn, chain, pref
|
|
|
108
160
|
tokenOut,
|
|
109
161
|
amountIn,
|
|
110
162
|
fee,
|
|
111
|
-
sqrtPriceLimitX96: 0n
|
|
163
|
+
sqrtPriceLimitX96: 0n
|
|
112
164
|
});
|
|
113
165
|
const amountOut = Array.isArray(result) ? result[0] : result;
|
|
114
166
|
return { amountOut: amountOut || 0n, fee, success: amountOut && amountOut > 0n };
|
|
@@ -121,23 +173,24 @@ export async function quoteV3(provider, tokenIn, tokenOut, amountIn, chain, pref
|
|
|
121
173
|
// 按费率优先级返回第一个成功的结果
|
|
122
174
|
for (const result of directResults) {
|
|
123
175
|
if (result.success) {
|
|
176
|
+
console.log(`[quoteV3] 直接路径成功 (fee=${result.fee}): ${ethers.formatEther(result.amountOut)}`);
|
|
124
177
|
return { amountOut: result.amountOut, fee: result.fee };
|
|
125
178
|
}
|
|
126
179
|
}
|
|
127
180
|
// ✅ 策略 2:并行尝试多跳路径(通过稳定币)
|
|
128
|
-
const validStableCoins = config.stableCoins.filter(
|
|
181
|
+
const validStableCoins = config.stableCoins.filter(sc => {
|
|
129
182
|
const stableLower = sc.toLowerCase();
|
|
130
183
|
return tokenInLower !== stableLower && tokenOutLower !== stableLower;
|
|
131
184
|
});
|
|
132
185
|
// 并行尝试所有稳定币的第一跳
|
|
133
|
-
const firstHopPromises = validStableCoins.flatMap(
|
|
186
|
+
const firstHopPromises = validStableCoins.flatMap(stableCoin => feesToTry.map(async (fee1) => {
|
|
134
187
|
try {
|
|
135
188
|
const midResult = await quoter.quoteExactInputSingle.staticCall({
|
|
136
189
|
tokenIn,
|
|
137
190
|
tokenOut: stableCoin,
|
|
138
191
|
amountIn,
|
|
139
192
|
fee: fee1,
|
|
140
|
-
sqrtPriceLimitX96: 0n
|
|
193
|
+
sqrtPriceLimitX96: 0n
|
|
141
194
|
});
|
|
142
195
|
const midAmount = Array.isArray(midResult) ? midResult[0] : midResult;
|
|
143
196
|
return { midAmount: midAmount || 0n, stableCoin, fee1, success: midAmount && midAmount > 0n };
|
|
@@ -147,17 +200,17 @@ export async function quoteV3(provider, tokenIn, tokenOut, amountIn, chain, pref
|
|
|
147
200
|
}
|
|
148
201
|
}));
|
|
149
202
|
const firstHopResults = await Promise.all(firstHopPromises);
|
|
150
|
-
const successfulFirstHops = firstHopResults.filter(
|
|
203
|
+
const successfulFirstHops = firstHopResults.filter(r => r.success);
|
|
151
204
|
// 对成功的第一跳,并行尝试第二跳
|
|
152
205
|
const stableFees = [100, 500, 2500];
|
|
153
|
-
const secondHopPromises = successfulFirstHops.flatMap(
|
|
206
|
+
const secondHopPromises = successfulFirstHops.flatMap(hop => stableFees.map(async (fee2) => {
|
|
154
207
|
try {
|
|
155
208
|
const finalResult = await quoter.quoteExactInputSingle.staticCall({
|
|
156
209
|
tokenIn: hop.stableCoin,
|
|
157
210
|
tokenOut,
|
|
158
211
|
amountIn: hop.midAmount,
|
|
159
212
|
fee: fee2,
|
|
160
|
-
sqrtPriceLimitX96: 0n
|
|
213
|
+
sqrtPriceLimitX96: 0n
|
|
161
214
|
});
|
|
162
215
|
const amountOut = Array.isArray(finalResult) ? finalResult[0] : finalResult;
|
|
163
216
|
return { amountOut: amountOut || 0n, fee1: hop.fee1, fee2, success: amountOut && amountOut > 0n };
|
|
@@ -170,9 +223,11 @@ export async function quoteV3(provider, tokenIn, tokenOut, amountIn, chain, pref
|
|
|
170
223
|
// 返回第一个成功的多跳结果
|
|
171
224
|
for (const result of secondHopResults) {
|
|
172
225
|
if (result.success) {
|
|
226
|
+
console.log(`[quoteV3] 多跳路径成功 (${result.fee1}→${result.fee2}): ${ethers.formatEther(result.amountOut)}`);
|
|
173
227
|
return { amountOut: result.amountOut, fee: result.fee1 };
|
|
174
228
|
}
|
|
175
229
|
}
|
|
230
|
+
console.warn(`[quoteV3] 所有路径均失败`);
|
|
176
231
|
return { amountOut: 0n };
|
|
177
232
|
}
|
|
178
233
|
// ============================================================================
|
|
@@ -212,6 +267,7 @@ export async function getTokenToNativeQuote(provider, tokenAddress, tokenAmount,
|
|
|
212
267
|
const chainUpper = chain.toUpperCase();
|
|
213
268
|
const config = QUOTE_CONFIG[chainUpper];
|
|
214
269
|
if (!config) {
|
|
270
|
+
console.warn(`[getTokenToNativeQuote] 不支持的链: ${chain}`);
|
|
215
271
|
return 0n;
|
|
216
272
|
}
|
|
217
273
|
const tokenLower = tokenAddress.toLowerCase();
|
|
@@ -228,7 +284,7 @@ export async function getTokenToNativeQuote(provider, tokenAddress, tokenAmount,
|
|
|
228
284
|
chain,
|
|
229
285
|
version,
|
|
230
286
|
fee,
|
|
231
|
-
routerOverride
|
|
287
|
+
routerOverride
|
|
232
288
|
});
|
|
233
289
|
return result.amountOut;
|
|
234
290
|
}
|
|
@@ -249,6 +305,7 @@ export async function getNativeToTokenQuote(provider, tokenAddress, nativeAmount
|
|
|
249
305
|
const chainUpper = chain.toUpperCase();
|
|
250
306
|
const config = QUOTE_CONFIG[chainUpper];
|
|
251
307
|
if (!config) {
|
|
308
|
+
console.warn(`[getNativeToTokenQuote] 不支持的链: ${chain}`);
|
|
252
309
|
return 0n;
|
|
253
310
|
}
|
|
254
311
|
const tokenLower = tokenAddress.toLowerCase();
|
|
@@ -264,7 +321,7 @@ export async function getNativeToTokenQuote(provider, tokenAddress, nativeAmount
|
|
|
264
321
|
amountIn: nativeAmount,
|
|
265
322
|
chain,
|
|
266
323
|
version,
|
|
267
|
-
fee
|
|
324
|
+
fee
|
|
268
325
|
});
|
|
269
326
|
return result.amountOut;
|
|
270
327
|
}
|
|
@@ -1,5 +1,31 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export type
|
|
1
|
+
import type { SoulPointSignatureMode, VNormalizationMode } from '../shared/clients/club48.js';
|
|
2
|
+
export type StealthTransferResult = {
|
|
3
|
+
bundleUuid: string;
|
|
4
|
+
txs: string[];
|
|
5
|
+
hopAddresses: string[];
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* 简化版隐秘转账参数
|
|
9
|
+
* - 仅需人类可读金额与(可选)代币地址,其余自动处理
|
|
10
|
+
* - 未提供 tokenAddress → 原生币模式;提供 tokenAddress → 自动读取 decimals 转换为 wei 的代币模式
|
|
11
|
+
*/
|
|
12
|
+
export type StealthTransferSimpleParams = {
|
|
13
|
+
rpcUrl: string;
|
|
14
|
+
chainId: number;
|
|
15
|
+
rootPrivateKey: string;
|
|
16
|
+
finalTo: string;
|
|
17
|
+
hopCount: number;
|
|
18
|
+
amount: string;
|
|
19
|
+
tokenAddress?: string;
|
|
20
|
+
tokenHolderPrivateKey?: string;
|
|
21
|
+
bundleEndpoint?: string;
|
|
22
|
+
gasPriceGwei?: string;
|
|
23
|
+
gasLimit?: bigint;
|
|
24
|
+
blockOffset?: number;
|
|
25
|
+
spMode?: SoulPointSignatureMode;
|
|
26
|
+
spPrivateKey?: string;
|
|
27
|
+
spVMode?: VNormalizationMode;
|
|
28
|
+
};
|
|
3
29
|
/**
|
|
4
30
|
* 隐秘转账(简化版)
|
|
5
31
|
* - 原生模式:amount 按 parseEther 转 wei
|
|
@@ -54,8 +54,8 @@ async function _stealthTransferInternal(params) {
|
|
|
54
54
|
throw new Error(`insufficient balance: need ${needed.toString()}, have ${rootBal.toString()}`);
|
|
55
55
|
}
|
|
56
56
|
// ✅ 并行预取所有 nonce
|
|
57
|
-
const allAddresses = [rootAddr, ...hops.map(
|
|
58
|
-
const nonces = await Promise.all(allAddresses.map(
|
|
57
|
+
const allAddresses = [rootAddr, ...hops.map(w => w.address)];
|
|
58
|
+
const nonces = await Promise.all(allAddresses.map(addr => provider.getTransactionCount(addr, 'pending')));
|
|
59
59
|
const signed = [];
|
|
60
60
|
const hopAddresses = [];
|
|
61
61
|
if (mode !== 'erc20') {
|
|
@@ -95,7 +95,7 @@ async function _stealthTransferInternal(params) {
|
|
|
95
95
|
const erc20Iface = new ethers.Interface(['function transfer(address,uint256) returns (bool)']);
|
|
96
96
|
const transferGas = erc20?.transferGasLimit ?? GAS_LIMITS.ERC20_TRANSFER;
|
|
97
97
|
// 填充 hopAddresses
|
|
98
|
-
hops.forEach(
|
|
98
|
+
hops.forEach(hop => hopAddresses.push(hop.address));
|
|
99
99
|
// ✅ 并行签名所有 gas 注资交易(root -> hop[i])
|
|
100
100
|
const fundTxs = await Promise.all(hops.map((hop, i) => root.signTransaction({
|
|
101
101
|
to: hop.address,
|
|
@@ -108,7 +108,7 @@ async function _stealthTransferInternal(params) {
|
|
|
108
108
|
})));
|
|
109
109
|
signed.push(...fundTxs);
|
|
110
110
|
// 代币持有者:可选独立私钥,未提供则用 root
|
|
111
|
-
const tokenOwner = erc20?.holderPrivateKey && erc20.holderPrivateKey.length > 0
|
|
111
|
+
const tokenOwner = (erc20?.holderPrivateKey && erc20.holderPrivateKey.length > 0)
|
|
112
112
|
? new ethers.Wallet(erc20.holderPrivateKey, provider)
|
|
113
113
|
: root;
|
|
114
114
|
// tokenOwner -> hop0: ERC20 transfer 全量 token
|
|
@@ -148,7 +148,9 @@ async function _stealthTransferInternal(params) {
|
|
|
148
148
|
const bundleUuid = await club48.sendBundle({
|
|
149
149
|
txs: signed,
|
|
150
150
|
maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
|
|
151
|
-
}, spPrivateKey
|
|
151
|
+
}, spPrivateKey
|
|
152
|
+
? { spMode: spMode ?? 'timestampPersonalSign', spPrivateKey, spVMode }
|
|
153
|
+
: undefined);
|
|
152
154
|
return { bundleUuid, txs: signed, hopAddresses };
|
|
153
155
|
}
|
|
154
156
|
/**
|
|
@@ -158,30 +160,21 @@ async function _stealthTransferInternal(params) {
|
|
|
158
160
|
* - 自动生成 hopCount 个中转地址,并通过 48.club Bundle 原子提交
|
|
159
161
|
*/
|
|
160
162
|
export async function stealthTransfer(params) {
|
|
161
|
-
const { rpcUrl, chainId, rootPrivateKey, finalTo, hopCount, amount, tokenAddress, tokenHolderPrivateKey, bundleEndpoint, gasPriceGwei, gasLimit, blockOffset, spMode, spPrivateKey, spVMode
|
|
163
|
+
const { rpcUrl, chainId, rootPrivateKey, finalTo, hopCount, amount, tokenAddress, tokenHolderPrivateKey, bundleEndpoint, gasPriceGwei, gasLimit, blockOffset, spMode, spPrivateKey, spVMode } = params;
|
|
162
164
|
if (!tokenAddress) {
|
|
163
165
|
// 原生:直接 parseEther
|
|
164
166
|
const amountWei = ethers.parseEther(amount);
|
|
165
167
|
return await _stealthTransferInternal({
|
|
166
|
-
rpcUrl,
|
|
167
|
-
chainId,
|
|
168
|
-
rootPrivateKey,
|
|
169
|
-
finalTo,
|
|
170
|
-
hopCount,
|
|
168
|
+
rpcUrl, chainId, rootPrivateKey, finalTo, hopCount,
|
|
171
169
|
amountWei,
|
|
172
170
|
mode: 'native',
|
|
173
|
-
bundleEndpoint,
|
|
174
|
-
|
|
175
|
-
gasLimit,
|
|
176
|
-
blockOffset,
|
|
177
|
-
spMode,
|
|
178
|
-
spPrivateKey,
|
|
179
|
-
spVMode,
|
|
171
|
+
bundleEndpoint, gasPriceGwei, gasLimit, blockOffset,
|
|
172
|
+
spMode, spPrivateKey, spVMode
|
|
180
173
|
});
|
|
181
174
|
}
|
|
182
175
|
// ERC20:自动读取 decimals(读取失败则回退 18)
|
|
183
176
|
const provider = new JsonRpcProvider(rpcUrl, chainId);
|
|
184
|
-
let decimals;
|
|
177
|
+
let decimals = 18;
|
|
185
178
|
try {
|
|
186
179
|
const erc20 = new ethers.Contract(tokenAddress, ['function decimals() view returns (uint8)'], provider);
|
|
187
180
|
decimals = Number(await erc20.decimals());
|
|
@@ -193,20 +186,11 @@ export async function stealthTransfer(params) {
|
|
|
193
186
|
}
|
|
194
187
|
const amountWei = ethers.parseUnits(amount, decimals);
|
|
195
188
|
return await _stealthTransferInternal({
|
|
196
|
-
rpcUrl,
|
|
197
|
-
chainId,
|
|
198
|
-
rootPrivateKey,
|
|
199
|
-
finalTo,
|
|
200
|
-
hopCount,
|
|
189
|
+
rpcUrl, chainId, rootPrivateKey, finalTo, hopCount,
|
|
201
190
|
amountWei,
|
|
202
191
|
mode: 'erc20',
|
|
203
192
|
erc20: { address: tokenAddress, holderPrivateKey: tokenHolderPrivateKey },
|
|
204
|
-
bundleEndpoint,
|
|
205
|
-
|
|
206
|
-
gasLimit,
|
|
207
|
-
blockOffset,
|
|
208
|
-
spMode,
|
|
209
|
-
spPrivateKey,
|
|
210
|
-
spVMode,
|
|
193
|
+
bundleEndpoint, gasPriceGwei, gasLimit, blockOffset,
|
|
194
|
+
spMode, spPrivateKey, spVMode
|
|
211
195
|
});
|
|
212
196
|
}
|
|
@@ -2,12 +2,11 @@
|
|
|
2
2
|
* 换手交易通用工具函数
|
|
3
3
|
*/
|
|
4
4
|
import { Wallet, JsonRpcProvider } from 'ethers';
|
|
5
|
-
import type { MerkleClient } from '../shared/clients/merkle.js';
|
|
6
5
|
/**
|
|
7
6
|
* 检查并执行代币授权(如果需要)
|
|
8
7
|
* ✅ 与 pancake-proxy.ts 的授权逻辑一致
|
|
9
8
|
*/
|
|
10
|
-
export declare function ensureTokenApproval(provider: JsonRpcProvider, merkle:
|
|
9
|
+
export declare function ensureTokenApproval(provider: JsonRpcProvider, merkle: any, wallet: Wallet, tokenAddress: string, spenderAddress: string, config: {
|
|
11
10
|
gasLimit?: number;
|
|
12
11
|
gasLimitMultiplier?: number;
|
|
13
12
|
minGasPriceGwei?: number;
|
|
@@ -39,3 +38,17 @@ export declare function calculateSwapLoss(sellAmount: bigint, buyAmount: bigint)
|
|
|
39
38
|
* 验证钱包BNB余额
|
|
40
39
|
*/
|
|
41
40
|
export declare function validateBNBBalance(provider: JsonRpcProvider, walletAddress: string, requiredBNB: bigint, purpose: string): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* 格式化换手结果日志
|
|
43
|
+
*/
|
|
44
|
+
export declare function logSwapResult(params: {
|
|
45
|
+
sellerAddress: string;
|
|
46
|
+
buyerAddress: string;
|
|
47
|
+
tokenAddress: string;
|
|
48
|
+
sellAmount: bigint;
|
|
49
|
+
buyAmount: bigint;
|
|
50
|
+
decimals: number;
|
|
51
|
+
sellerGotBNB: bigint;
|
|
52
|
+
buyerSpentBNB: bigint;
|
|
53
|
+
swapType: string;
|
|
54
|
+
}): void;
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { ethers, Contract } from 'ethers';
|
|
5
5
|
import { batchCheckAllowances } from './erc20.js';
|
|
6
|
-
import { ERC20_ABI } from '../abis/common.js';
|
|
7
|
-
import { NonceManager, getOptimizedGasPrice } from './bundle-helpers.js';
|
|
6
|
+
import { ERC20_ABI } from '../shared/abis/common.js';
|
|
8
7
|
const APPROVAL_THRESHOLD = ethers.MaxUint256 / 2n;
|
|
9
8
|
/**
|
|
10
9
|
* 获取 Gas Limit(授权专用)
|
|
@@ -36,6 +35,7 @@ export async function ensureTokenApproval(provider, merkle, wallet, tokenAddress
|
|
|
36
35
|
return;
|
|
37
36
|
}
|
|
38
37
|
// ✅ 使用 NonceManager(与 pancake-proxy.ts 一致)
|
|
38
|
+
const { NonceManager, getOptimizedGasPrice } = await import('./bundle-helpers.js');
|
|
39
39
|
const nonceManager = new NonceManager(provider);
|
|
40
40
|
// 构建授权交易
|
|
41
41
|
const tokenContract = new Contract(tokenAddress, ERC20_ABI, wallet);
|
|
@@ -65,7 +65,7 @@ export async function ensureTokenApproval(provider, merkle, wallet, tokenAddress
|
|
|
65
65
|
gasLimit: approveGasLimit,
|
|
66
66
|
gasPrice,
|
|
67
67
|
chainId,
|
|
68
|
-
type: config.txType ?? 0
|
|
68
|
+
type: config.txType ?? 0
|
|
69
69
|
});
|
|
70
70
|
// 清理临时 nonce 缓存
|
|
71
71
|
nonceManager.clearTemp();
|
|
@@ -75,7 +75,7 @@ export async function ensureTokenApproval(provider, merkle, wallet, tokenAddress
|
|
|
75
75
|
transactions: [signedTx],
|
|
76
76
|
blockOffset,
|
|
77
77
|
minTimestamp: 0,
|
|
78
|
-
maxTimestamp: 0
|
|
78
|
+
maxTimestamp: 0
|
|
79
79
|
});
|
|
80
80
|
// 等待确认
|
|
81
81
|
const results = await merkle.waitForBundleConfirmation(bundleResult.txHashes, 1, config.waitTimeoutMs ?? 120000);
|
|
@@ -112,7 +112,7 @@ export async function calculateSellAmount(provider, tokenAddress, walletAddress,
|
|
|
112
112
|
const decimals = await getTokenDecimals(provider, tokenAddress);
|
|
113
113
|
return {
|
|
114
114
|
amount: ethers.parseUnits(sellAmount, decimals),
|
|
115
|
-
decimals
|
|
115
|
+
decimals
|
|
116
116
|
};
|
|
117
117
|
}
|
|
118
118
|
// 百分比:需要 decimals 和 balance
|
|
@@ -123,7 +123,7 @@ export async function calculateSellAmount(provider, tokenAddress, walletAddress,
|
|
|
123
123
|
// ✅ 并行获取 decimals 和 balance
|
|
124
124
|
const [decimals, balance] = await Promise.all([
|
|
125
125
|
getTokenDecimals(provider, tokenAddress),
|
|
126
|
-
getTokenBalance(provider, tokenAddress, walletAddress)
|
|
126
|
+
getTokenBalance(provider, tokenAddress, walletAddress)
|
|
127
127
|
]);
|
|
128
128
|
const amount = (balance * BigInt(Math.floor(sellPercentage * 100))) / 10000n;
|
|
129
129
|
return { amount, decimals };
|
|
@@ -150,3 +150,8 @@ export async function validateBNBBalance(provider, walletAddress, requiredBNB, p
|
|
|
150
150
|
`实际 ${ethers.formatEther(balance)} BNB`);
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* 格式化换手结果日志
|
|
155
|
+
*/
|
|
156
|
+
export function logSwapResult(params) {
|
|
157
|
+
}
|
package/dist/utils/wallet.d.ts
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export type GeneratedWallet = {
|
|
2
|
+
address: string;
|
|
3
|
+
privateKey: string;
|
|
4
|
+
};
|
|
5
|
+
export type PrivateKeyValidation = {
|
|
6
|
+
privateKey: string;
|
|
7
|
+
valid: boolean;
|
|
8
|
+
address?: string;
|
|
9
|
+
normalized?: string;
|
|
10
|
+
error?: string;
|
|
11
|
+
};
|
|
12
|
+
export type MulticallResult = {
|
|
13
|
+
address: string;
|
|
14
|
+
balance: bigint;
|
|
15
|
+
success: boolean;
|
|
16
|
+
};
|
|
17
|
+
export type MultiTokenBalancesResult = {
|
|
18
|
+
address: string;
|
|
19
|
+
native: string;
|
|
20
|
+
tokens: Array<{
|
|
21
|
+
token: string;
|
|
22
|
+
balance: string;
|
|
23
|
+
}>;
|
|
24
|
+
success: boolean;
|
|
25
|
+
};
|
|
3
26
|
/**
|
|
4
27
|
* 批量生成钱包(并行优化)
|
|
5
28
|
*/
|