four-flap-meme-sdk 2.2.7 → 2.2.10
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 +86 -20
- package/dist/index.js +216 -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 +253 -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 -5
- package/dist/shared/flap/index.js +5 -5
- package/dist/shared/flap/launch-v6.d.ts +117 -0
- package/dist/shared/flap/launch-v6.js +111 -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 +267 -164
- 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 +195 -107
- 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.d.ts +3 -14
- package/dist/shared/flap/portal.js +26 -49
- package/dist/shared/flap/vanity.d.ts +5 -4
- package/dist/shared/flap/vanity.js +20 -13
- 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/flap/portal-create-token.d.ts +0 -79
- package/dist/shared/flap/portal-create-token.js +0 -261
- 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
package/dist/utils/erc20.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { Contract, Wallet, JsonRpcProvider, Interface, parseUnits } from 'ethers';
|
|
2
|
-
import { ADDRESSES, ZERO_ADDRESS, getMulticall3Address } from '
|
|
2
|
+
import { ADDRESSES, ZERO_ADDRESS, getMulticall3Address } from './constants.js';
|
|
3
3
|
import { NonceManager } from './bundle-helpers.js';
|
|
4
|
-
import { ERC20_ABI, MULTICALL3_ABI } from '../abis/common.js';
|
|
5
|
-
import { getErrorMessageFromUnknown } from '../shared/foundation/index.js';
|
|
4
|
+
import { ERC20_ABI, MULTICALL3_ABI } from '../shared/abis/common.js';
|
|
6
5
|
// ============================================================================
|
|
7
6
|
// ✅ Max approval(与 BSC 策略一致:阈值判断,避免频繁重复授权)
|
|
8
7
|
// ============================================================================
|
|
@@ -23,15 +22,14 @@ async function validateContractAddress(provider, address, label) {
|
|
|
23
22
|
}
|
|
24
23
|
}
|
|
25
24
|
catch (error) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
throw error instanceof Error ? error : new Error(msg);
|
|
25
|
+
if (error.message.includes('无效或未部署')) {
|
|
26
|
+
throw error;
|
|
29
27
|
}
|
|
30
|
-
|
|
31
|
-
if (
|
|
28
|
+
// ✅ 如果是 checksum 错误,提供更友好的提示
|
|
29
|
+
if (error.message.includes('bad address checksum') || error.code === 'INVALID_ARGUMENT') {
|
|
32
30
|
throw new Error(`❌ ${label} 地址格式错误,请使用正确的 checksum 格式: ${address}`);
|
|
33
31
|
}
|
|
34
|
-
throw new Error(`❌ 无法验证 ${label} 地址 ${address}: ${
|
|
32
|
+
throw new Error(`❌ 无法验证 ${label} 地址 ${address}: ${error.message}`);
|
|
35
33
|
}
|
|
36
34
|
}
|
|
37
35
|
/**
|
|
@@ -51,7 +49,7 @@ async function ensureAllowance(rpcUrl, privateKey, token, owner, spender, requir
|
|
|
51
49
|
current = await erc20.allowance(owner, spender);
|
|
52
50
|
}
|
|
53
51
|
catch (error) {
|
|
54
|
-
throw new Error(`❌ 调用 allowance 失败(Token 可能不是 ERC20): ${
|
|
52
|
+
throw new Error(`❌ 调用 allowance 失败(Token 可能不是 ERC20): ${error.message}`);
|
|
55
53
|
}
|
|
56
54
|
if (current >= required) {
|
|
57
55
|
return {
|
|
@@ -69,17 +67,27 @@ async function ensureAllowance(rpcUrl, privateKey, token, owner, spender, requir
|
|
|
69
67
|
txReceipt: receipt,
|
|
70
68
|
};
|
|
71
69
|
}
|
|
72
|
-
|
|
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
|
+
};
|
|
73
80
|
const provider = new JsonRpcProvider(rpcUrl);
|
|
81
|
+
// ✅ 验证 token 和代理合约地址
|
|
74
82
|
await validateContractAddress(provider, token, 'Token');
|
|
75
|
-
await validateContractAddress(provider,
|
|
83
|
+
await validateContractAddress(provider, proxyAddresses[chain], `Four.meme V1 Proxy (${chain})`);
|
|
76
84
|
const erc20 = new Contract(token, ERC20_ABI, provider);
|
|
77
85
|
let current;
|
|
78
86
|
try {
|
|
79
|
-
current = await erc20.allowance(owner,
|
|
87
|
+
current = await erc20.allowance(owner, proxyAddresses[chain]);
|
|
80
88
|
}
|
|
81
89
|
catch (error) {
|
|
82
|
-
throw new Error(`❌ 调用 allowance 失败(Token 可能不是 ERC20): ${
|
|
90
|
+
throw new Error(`❌ 调用 allowance 失败(Token 可能不是 ERC20): ${error.message}`);
|
|
83
91
|
}
|
|
84
92
|
return {
|
|
85
93
|
isApproved: current >= amount,
|
|
@@ -87,42 +95,61 @@ async function checkAllowanceForSpender(rpcUrl, token, owner, amount, spender, s
|
|
|
87
95
|
requiredAllowance: amount,
|
|
88
96
|
};
|
|
89
97
|
}
|
|
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
|
-
}
|
|
109
98
|
/**
|
|
110
99
|
* 确保代币已授权给 Four.meme V1 代理合约
|
|
100
|
+
* 用于 Four.meme V1 代币的卖出操作
|
|
101
|
+
* @returns 授权结果,包含是否已授权、当前额度、交易回执等信息
|
|
111
102
|
*/
|
|
112
103
|
export async function ensureSellApprovalV1(chain, rpcUrl, privateKey, token, owner, amount) {
|
|
113
|
-
|
|
104
|
+
// ✅ 授权给 FourMeme 代理合约 V1(收费版)
|
|
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);
|
|
114
111
|
}
|
|
115
112
|
/**
|
|
116
113
|
* 检查代币授权状态 - Four.meme V2(只读,不发送交易)
|
|
114
|
+
* @returns 是否已授权足够的额度
|
|
117
115
|
*/
|
|
118
116
|
export async function checkSellApprovalV2(chain, rpcUrl, token, owner, amount) {
|
|
119
|
-
|
|
117
|
+
const proxyAddresses = {
|
|
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
|
+
};
|
|
120
139
|
}
|
|
121
140
|
/**
|
|
122
141
|
* 确保代币已授权给 Four.meme V2 代理合约
|
|
142
|
+
* 用于 Four.meme V2 代币的卖出操作
|
|
143
|
+
* @returns 授权结果,包含是否已授权、当前额度、交易回执等信息
|
|
123
144
|
*/
|
|
124
145
|
export async function ensureSellApprovalV2(chain, rpcUrl, privateKey, token, owner, amount) {
|
|
125
|
-
|
|
146
|
+
// ✅ 授权给 FourMeme 代理合约 V2(收费版)
|
|
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);
|
|
126
153
|
}
|
|
127
154
|
/**
|
|
128
155
|
* 检查代币授权状态 - Four.meme(通用,默认使用 V2)
|
|
@@ -144,13 +171,29 @@ export async function ensureSellApproval(chain, rpcUrl, privateKey, token, owner
|
|
|
144
171
|
*/
|
|
145
172
|
export async function checkFlapSellApproval(chain, rpcUrl, token, owner, amount) {
|
|
146
173
|
const proxyAddresses = {
|
|
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,
|
|
174
|
+
BSC: ADDRESSES.BSC.FlapPortal, // Flap Portal 代理合约 (BSC)
|
|
175
|
+
BASE: ADDRESSES.BASE.FlapPortal, // Flap Portal 代理合约 (BASE)
|
|
176
|
+
XLAYER: ADDRESSES.XLAYER.FlapPortal, // Flap Portal 代理合约 (XLAYER)
|
|
177
|
+
MORPH: ADDRESSES.MORPH.FlapPortal, // Flap Portal 代理合约 (MORPH)
|
|
178
|
+
MONAD: ADDRESSES.MONAD.FlapPortal, // Flap Portal 代理合约 (MONAD)
|
|
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,
|
|
152
196
|
};
|
|
153
|
-
return checkAllowanceForSpender(rpcUrl, token, owner, amount, proxyAddresses[chain], `Flap Portal (${chain})`);
|
|
154
197
|
}
|
|
155
198
|
/**
|
|
156
199
|
* 确保代币已授权给 Flap Protocol 代理合约
|
|
@@ -202,7 +245,7 @@ export async function checkFlapSellApprovalBatch(chain, rpcUrl, token, owners, r
|
|
|
202
245
|
// ✅ 并行验证 token 和代理合约地址
|
|
203
246
|
await Promise.all([
|
|
204
247
|
validateContractAddress(provider, token, 'Token'),
|
|
205
|
-
validateContractAddress(provider, proxyAddresses[chain], `Flap Portal (${chain})`)
|
|
248
|
+
validateContractAddress(provider, proxyAddresses[chain], `Flap Portal (${chain})`)
|
|
206
249
|
]);
|
|
207
250
|
// ✅ 使用 batchCheckAllowances 批量查询(Multicall3)
|
|
208
251
|
const allowances = await batchCheckAllowances(provider, token, owners, proxyAddresses[chain]);
|
|
@@ -210,7 +253,7 @@ export async function checkFlapSellApprovalBatch(chain, rpcUrl, token, owners, r
|
|
|
210
253
|
owner,
|
|
211
254
|
isApproved: allowances[i] >= required,
|
|
212
255
|
currentAllowance: allowances[i],
|
|
213
|
-
requiredAllowance: required
|
|
256
|
+
requiredAllowance: required
|
|
214
257
|
}));
|
|
215
258
|
}
|
|
216
259
|
/**
|
|
@@ -227,15 +270,15 @@ export async function batchCheckAllowances(provider, tokenAddress, owners, spend
|
|
|
227
270
|
const multicall3 = new Contract(multicall3Address, MULTICALL3_ABI, provider);
|
|
228
271
|
// 编码 allowance(owner, spender) 调用数据
|
|
229
272
|
const erc20Interface = new Contract(tokenAddress, ERC20_ABI, provider).interface;
|
|
230
|
-
const calls = owners.map(
|
|
273
|
+
const calls = owners.map(owner => ({
|
|
231
274
|
target: tokenAddress,
|
|
232
275
|
allowFailure: true,
|
|
233
|
-
callData: erc20Interface.encodeFunctionData('allowance', [owner, spender])
|
|
276
|
+
callData: erc20Interface.encodeFunctionData('allowance', [owner, spender])
|
|
234
277
|
}));
|
|
235
278
|
// 批量调用
|
|
236
279
|
const results = await multicall3.aggregate3(calls);
|
|
237
280
|
// 解析结果
|
|
238
|
-
return results.map((result) => {
|
|
281
|
+
return results.map((result, index) => {
|
|
239
282
|
if (!result.success) {
|
|
240
283
|
return 0n;
|
|
241
284
|
}
|
|
@@ -243,7 +286,7 @@ export async function batchCheckAllowances(provider, tokenAddress, owners, spend
|
|
|
243
286
|
const decoded = erc20Interface.decodeFunctionResult('allowance', result.returnData);
|
|
244
287
|
return decoded[0];
|
|
245
288
|
}
|
|
246
|
-
catch {
|
|
289
|
+
catch (error) {
|
|
247
290
|
return 0n;
|
|
248
291
|
}
|
|
249
292
|
});
|
|
@@ -347,7 +390,7 @@ export async function checkAllowanceRaw(rpcUrl, tokenAddress, ownerAddress, spen
|
|
|
347
390
|
return allowance;
|
|
348
391
|
}
|
|
349
392
|
catch (error) {
|
|
350
|
-
throw new Error(`❌ 查询授权额度失败: ${
|
|
393
|
+
throw new Error(`❌ 查询授权额度失败: ${error.message}`);
|
|
351
394
|
}
|
|
352
395
|
}
|
|
353
396
|
/**
|
|
@@ -395,15 +438,15 @@ export async function approveTokenRaw(rpcUrl, privateKey, tokenAddress, spenderA
|
|
|
395
438
|
currentAllowance = await erc20.allowance(ownerAddress, normalizedSpender);
|
|
396
439
|
}
|
|
397
440
|
catch (error) {
|
|
398
|
-
throw new Error(`❌ 查询授权额度失败: ${
|
|
441
|
+
throw new Error(`❌ 查询授权额度失败: ${error.message}`);
|
|
399
442
|
}
|
|
400
443
|
// 如果已经授权足够,直接返回
|
|
401
444
|
// ✅ max 授权:使用阈值判断,避免每次消耗一点 allowance 都重新授权
|
|
402
|
-
if (isMax ? currentAllowance >= MAX_APPROVAL_THRESHOLD : currentAllowance >= requiredAmount) {
|
|
445
|
+
if (isMax ? (currentAllowance >= MAX_APPROVAL_THRESHOLD) : (currentAllowance >= requiredAmount)) {
|
|
403
446
|
return {
|
|
404
447
|
alreadyApproved: true,
|
|
405
448
|
currentAllowance,
|
|
406
|
-
requiredAllowance: requiredAmount
|
|
449
|
+
requiredAllowance: requiredAmount
|
|
407
450
|
};
|
|
408
451
|
}
|
|
409
452
|
// 发送授权交易
|
|
@@ -414,11 +457,11 @@ export async function approveTokenRaw(rpcUrl, privateKey, tokenAddress, spenderA
|
|
|
414
457
|
alreadyApproved: false,
|
|
415
458
|
currentAllowance,
|
|
416
459
|
requiredAllowance: requiredAmount,
|
|
417
|
-
txReceipt: receipt
|
|
460
|
+
txReceipt: receipt
|
|
418
461
|
};
|
|
419
462
|
}
|
|
420
463
|
catch (error) {
|
|
421
|
-
throw new Error(`❌ 授权交易失败: ${
|
|
464
|
+
throw new Error(`❌ 授权交易失败: ${error.message}`);
|
|
422
465
|
}
|
|
423
466
|
}
|
|
424
467
|
/**
|
|
@@ -449,7 +492,7 @@ export async function checkAllowanceBatchRaw(rpcUrl, tokenAddress, ownerAddresse
|
|
|
449
492
|
const provider = new JsonRpcProvider(rpcUrl);
|
|
450
493
|
// ✅ 规范化地址(转为小写,避免 checksum 错误)
|
|
451
494
|
const normalizedToken = tokenAddress.toLowerCase();
|
|
452
|
-
const normalizedOwners = ownerAddresses.map(
|
|
495
|
+
const normalizedOwners = ownerAddresses.map(addr => addr.toLowerCase());
|
|
453
496
|
const normalizedSpender = spenderAddress.toLowerCase();
|
|
454
497
|
// 验证地址
|
|
455
498
|
await validateContractAddress(provider, normalizedToken, 'Token');
|
|
@@ -457,26 +500,12 @@ export async function checkAllowanceBatchRaw(rpcUrl, tokenAddress, ownerAddresse
|
|
|
457
500
|
return batchCheckAllowances(provider, normalizedToken, normalizedOwners, normalizedSpender);
|
|
458
501
|
}
|
|
459
502
|
export async function approveTokenBatch(params) {
|
|
460
|
-
const { chain, platform, rpcUrl, privateKeys, tokenAddress, amounts, signOnly, gasPriceGwei, gasLimit, chainId, skipValidation
|
|
503
|
+
const { chain, platform, rpcUrl, privateKeys, tokenAddress, amounts, signOnly, gasPriceGwei, gasLimit, chainId, skipValidation } = params;
|
|
461
504
|
const spenderAddress = resolveSpenderAddress(chain, platform);
|
|
462
|
-
|
|
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 });
|
|
505
|
+
return approveTokenBatchRaw({ rpcUrl, privateKeys, tokenAddress, spenderAddress, amounts, signOnly, gasPriceGwei, gasLimit, chainId, skipValidation });
|
|
477
506
|
}
|
|
478
507
|
export async function approveTokenBatchRaw(params) {
|
|
479
|
-
const { rpcUrl, privateKeys, tokenAddress, spenderAddress, amounts, signOnly, gasPriceGwei, gasLimit, chainId = 56, nonceManager: externalNonceManager, skipValidation
|
|
508
|
+
const { rpcUrl, privateKeys, tokenAddress, spenderAddress, amounts, signOnly, gasPriceGwei, gasLimit, chainId = 56, nonceManager: externalNonceManager, skipValidation } = params;
|
|
480
509
|
if (privateKeys.length === 0 || amounts.length !== privateKeys.length) {
|
|
481
510
|
throw new Error('❌ 私钥数量和授权数量必须匹配');
|
|
482
511
|
}
|
|
@@ -490,10 +519,12 @@ export async function approveTokenBatchRaw(params) {
|
|
|
490
519
|
await validateContractAddress(provider, normalizedSpender, 'Spender');
|
|
491
520
|
}
|
|
492
521
|
// ✅ 优化:批量创建钱包和合约实例
|
|
493
|
-
const wallets = privateKeys.map(
|
|
494
|
-
const ownerAddresses = wallets.map(
|
|
495
|
-
const isMaxApprovals = amounts.map(
|
|
496
|
-
const requiredAmounts = amounts.map(
|
|
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);
|
|
497
528
|
// ==================== signOnly=true:只签名不提交 ====================
|
|
498
529
|
if (signOnly) {
|
|
499
530
|
// ✅ 使用 NonceManager 管理 nonce(和买卖交易一样)
|
|
@@ -502,9 +533,7 @@ export async function approveTokenBatchRaw(params) {
|
|
|
502
533
|
const [currentAllowances, nonces, fetchedGasPrice] = await Promise.all([
|
|
503
534
|
batchCheckAllowances(provider, normalizedToken, ownerAddresses, normalizedSpender),
|
|
504
535
|
nonceManager.getNextNoncesForWallets(wallets), // ✅ 使用 NonceManager 批量获取 nonce
|
|
505
|
-
gasPriceGwei
|
|
506
|
-
? Promise.resolve(parseUnits(gasPriceGwei.toString(), 'gwei'))
|
|
507
|
-
: provider.getFeeData().then((fee) => fee.gasPrice || parseUnits('3', 'gwei')),
|
|
536
|
+
gasPriceGwei ? Promise.resolve(parseUnits(gasPriceGwei.toString(), 'gwei')) : provider.getFeeData().then(fee => fee.gasPrice || parseUnits('3', 'gwei'))
|
|
508
537
|
]);
|
|
509
538
|
const finalGasPrice = fetchedGasPrice;
|
|
510
539
|
const finalGasLimit = BigInt(gasLimit || 100000);
|
|
@@ -518,13 +547,13 @@ export async function approveTokenBatchRaw(params) {
|
|
|
518
547
|
const isMax = isMaxApprovals[i];
|
|
519
548
|
// 如果已经授权足够,跳过
|
|
520
549
|
// ✅ max 授权:使用阈值判断(与 BSC 一致)
|
|
521
|
-
if (isMax ? currentAllowance >= MAX_APPROVAL_THRESHOLD : currentAllowance >= requiredAmount) {
|
|
550
|
+
if (isMax ? (currentAllowance >= MAX_APPROVAL_THRESHOLD) : (currentAllowance >= requiredAmount)) {
|
|
522
551
|
return {
|
|
523
552
|
owner: ownerAddress,
|
|
524
553
|
alreadyApproved: true,
|
|
525
554
|
currentAllowance,
|
|
526
555
|
requiredAllowance: requiredAmount,
|
|
527
|
-
signedTx: undefined
|
|
556
|
+
signedTx: undefined
|
|
528
557
|
};
|
|
529
558
|
}
|
|
530
559
|
// 构建并签名交易
|
|
@@ -536,26 +565,28 @@ export async function approveTokenBatchRaw(params) {
|
|
|
536
565
|
gasLimit: finalGasLimit,
|
|
537
566
|
gasPrice: finalGasPrice,
|
|
538
567
|
chainId,
|
|
539
|
-
type: 0
|
|
568
|
+
type: 0 // Legacy 交易
|
|
540
569
|
});
|
|
541
570
|
return {
|
|
542
571
|
owner: ownerAddress,
|
|
543
572
|
alreadyApproved: false,
|
|
544
573
|
currentAllowance,
|
|
545
574
|
requiredAllowance: requiredAmount,
|
|
546
|
-
signedTx
|
|
575
|
+
signedTx
|
|
547
576
|
};
|
|
548
577
|
});
|
|
549
578
|
const results = await Promise.all(signPromises);
|
|
550
579
|
// ✅ 提取所有签名交易(过滤掉已授权的)
|
|
551
|
-
const signedTransactions = results
|
|
552
|
-
|
|
553
|
-
|
|
580
|
+
const signedTransactions = results
|
|
581
|
+
.filter(r => !r.alreadyApproved && r.signedTx)
|
|
582
|
+
.map(r => r.signedTx);
|
|
583
|
+
const alreadyApprovedCount = results.filter(r => r.alreadyApproved).length;
|
|
584
|
+
const needApproveCount = results.filter(r => !r.alreadyApproved).length;
|
|
554
585
|
return {
|
|
555
586
|
signedTransactions,
|
|
556
587
|
results,
|
|
557
588
|
needApproveCount,
|
|
558
|
-
alreadyApprovedCount
|
|
589
|
+
alreadyApprovedCount
|
|
559
590
|
};
|
|
560
591
|
}
|
|
561
592
|
// ==================== signOnly=false(默认):直接发送交易 ====================
|
|
@@ -570,12 +601,12 @@ export async function approveTokenBatchRaw(params) {
|
|
|
570
601
|
try {
|
|
571
602
|
// 如果已经授权足够,跳过
|
|
572
603
|
// ✅ max 授权:使用阈值判断(与 BSC 一致)
|
|
573
|
-
if (isMax ? currentAllowance >= MAX_APPROVAL_THRESHOLD : currentAllowance >= requiredAmount) {
|
|
604
|
+
if (isMax ? (currentAllowance >= MAX_APPROVAL_THRESHOLD) : (currentAllowance >= requiredAmount)) {
|
|
574
605
|
return {
|
|
575
606
|
owner: ownerAddress,
|
|
576
607
|
alreadyApproved: true,
|
|
577
608
|
currentAllowance,
|
|
578
|
-
requiredAllowance: requiredAmount
|
|
609
|
+
requiredAllowance: requiredAmount
|
|
579
610
|
};
|
|
580
611
|
}
|
|
581
612
|
// 发送授权交易
|
|
@@ -587,7 +618,7 @@ export async function approveTokenBatchRaw(params) {
|
|
|
587
618
|
alreadyApproved: false,
|
|
588
619
|
currentAllowance,
|
|
589
620
|
requiredAllowance: requiredAmount,
|
|
590
|
-
txHash: receipt.hash
|
|
621
|
+
txHash: receipt.hash
|
|
591
622
|
};
|
|
592
623
|
}
|
|
593
624
|
catch (error) {
|
|
@@ -596,19 +627,19 @@ export async function approveTokenBatchRaw(params) {
|
|
|
596
627
|
alreadyApproved: false,
|
|
597
628
|
currentAllowance,
|
|
598
629
|
requiredAllowance: requiredAmount,
|
|
599
|
-
error:
|
|
630
|
+
error: error.message
|
|
600
631
|
};
|
|
601
632
|
}
|
|
602
633
|
});
|
|
603
634
|
// ✅ 优化:并行等待所有授权交易完成
|
|
604
635
|
const results = await Promise.all(approvalPromises);
|
|
605
636
|
// 统计结果
|
|
606
|
-
const approvedCount = results.filter(
|
|
607
|
-
const errorCount = results.filter(
|
|
637
|
+
const approvedCount = results.filter(r => !r.alreadyApproved && !r.error).length;
|
|
638
|
+
const errorCount = results.filter(r => r.error).length;
|
|
608
639
|
// ✅ 只要没有错误,就算成功(包括所有钱包都已授权的情况)
|
|
609
640
|
return {
|
|
610
641
|
success: errorCount === 0,
|
|
611
642
|
approvedCount,
|
|
612
|
-
results
|
|
643
|
+
results
|
|
613
644
|
};
|
|
614
645
|
}
|
package/dist/utils/errors.d.ts
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import type { FourErrorCode } from './types/errors.js';
|
|
3
|
-
export { SdkErrorCode } from '../types/errors.js';
|
|
4
|
-
export type { FourErrorCode } from './types/errors.js';
|
|
1
|
+
export type FourErrorCode = 'GW' | 'ZA' | 'TO' | 'Slippage' | 'More BNB' | 'FR' | 'SO';
|
|
5
2
|
export declare function parseFourError(err: unknown): {
|
|
6
3
|
code?: FourErrorCode;
|
|
7
4
|
message: string;
|
|
8
5
|
};
|
|
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,6 +1,3 @@
|
|
|
1
|
-
import { getErrorMessageFromUnknown } from '../shared/foundation/normalize-unknown.js';
|
|
2
|
-
import { SdkErrorCode } from '../types/errors.js';
|
|
3
|
-
export { SdkErrorCode } from '../types/errors.js';
|
|
4
1
|
const MESSAGES = {
|
|
5
2
|
GW: 'Amount precision is not aligned to GWEI',
|
|
6
3
|
ZA: "The 'to' address should not be address(0)",
|
|
@@ -11,65 +8,9 @@ const MESSAGES = {
|
|
|
11
8
|
SO: 'Order amount is too small',
|
|
12
9
|
};
|
|
13
10
|
export function parseFourError(err) {
|
|
14
|
-
const raw =
|
|
11
|
+
const raw = String(err?.message ?? err);
|
|
15
12
|
const found = Object.keys(MESSAGES).find((k) => raw.includes(k));
|
|
16
13
|
if (found)
|
|
17
14
|
return { code: found, message: MESSAGES[found] };
|
|
18
15
|
return { message: raw };
|
|
19
16
|
}
|
|
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
|
-
}
|