four-flap-meme-sdk 2.2.8 → 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 -3
- package/dist/shared/flap/constants.js +4 -5
- 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 -161
- 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 -104
- 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 -8
- package/dist/shared/flap/vanity.js +20 -21
- 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 -81
- package/dist/shared/flap/portal-create-token.js +0 -255
- 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
|
@@ -8,7 +8,7 @@ const PORTAL_ABI = [
|
|
|
8
8
|
'function newTokenV2((string name,string symbol,string meta,uint8 dexThresh,bytes32 salt,uint16 taxRate,uint8 migratorType,address quoteToken,uint256 quoteAmt,address beneficiary,bytes permitData)) external payable returns (address)',
|
|
9
9
|
'function swapExactInputBuy((address inputToken,address outputToken,uint256 inputAmount,uint256 minOutputAmount,bytes permitData)) external payable returns (uint256)',
|
|
10
10
|
'function swapExactInputSell((address inputToken,address outputToken,uint256 inputAmount,uint256 minOutputAmount,bytes permitData)) external returns (uint256)',
|
|
11
|
-
'function quoteExactInput((address inputToken,address outputToken,uint256 inputAmount)) external returns (uint256)'
|
|
11
|
+
'function quoteExactInput((address inputToken,address outputToken,uint256 inputAmount)) external returns (uint256)'
|
|
12
12
|
];
|
|
13
13
|
/**
|
|
14
14
|
* Flap Protocol Bundle 交易方法
|
|
@@ -18,20 +18,20 @@ const PORTAL_ABI = [
|
|
|
18
18
|
const ERRORS = {
|
|
19
19
|
NO_PRIVATE_KEY: {
|
|
20
20
|
en: 'At least 1 private key (creator) is required',
|
|
21
|
-
zh: '至少需要 1 个私钥(创建者)'
|
|
21
|
+
zh: '至少需要 1 个私钥(创建者)'
|
|
22
22
|
},
|
|
23
23
|
AMOUNT_MISMATCH: {
|
|
24
24
|
en: (buyCount, buyerCount) => `Buy amount count (${buyCount}) must equal buyer count (${buyerCount})`,
|
|
25
|
-
zh: (buyCount, buyerCount) => `购买金额数量(${buyCount})必须等于买家数量(${buyerCount})
|
|
25
|
+
zh: (buyCount, buyerCount) => `购买金额数量(${buyCount})必须等于买家数量(${buyerCount})`
|
|
26
26
|
},
|
|
27
27
|
KEY_AMOUNT_MISMATCH: {
|
|
28
28
|
en: 'Private key count and amount count must match',
|
|
29
|
-
zh: '私钥和购买金额数量必须一致'
|
|
29
|
+
zh: '私钥和购买金额数量必须一致'
|
|
30
30
|
},
|
|
31
31
|
SELL_KEY_AMOUNT_MISMATCH: {
|
|
32
32
|
en: 'Private key count and sell amount count must match',
|
|
33
|
-
zh: '私钥和卖出数量必须一致'
|
|
34
|
-
}
|
|
33
|
+
zh: '私钥和卖出数量必须一致'
|
|
34
|
+
}
|
|
35
35
|
};
|
|
36
36
|
// 获取错误信息(根据环境语言)
|
|
37
37
|
function getErrorMessage(key, ...args) {
|
|
@@ -56,11 +56,28 @@ async function estimateGasWithMultiplier(provider, txRequest, multiplier) {
|
|
|
56
56
|
function getTxType(config) {
|
|
57
57
|
return config.txType ?? 0; // 默认 Legacy (type 0),适用于 48.club/BSC
|
|
58
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* 构建完整的交易请求(包含 gas 估算和交易类型)
|
|
61
|
+
*/
|
|
62
|
+
async function buildTxRequest(provider, unsigned, from, nonce, gasPrice, config, value) {
|
|
63
|
+
const gasLimit = await estimateGasWithMultiplier(provider, { ...unsigned, from, value }, config.gasLimitMultiplier);
|
|
64
|
+
return {
|
|
65
|
+
...unsigned,
|
|
66
|
+
from,
|
|
67
|
+
nonce,
|
|
68
|
+
gasLimit,
|
|
69
|
+
gasPrice,
|
|
70
|
+
chainId: 56,
|
|
71
|
+
type: getTxType(config)
|
|
72
|
+
};
|
|
73
|
+
}
|
|
59
74
|
/**
|
|
60
75
|
* Flap Protocol: 创建代币 + 捆绑购买
|
|
61
76
|
*/
|
|
62
77
|
export async function createTokenWithBundleBuy(params) {
|
|
63
|
-
const { chain, privateKeys, buyAmounts, tokenInfo, tokenAddress, config } = params;
|
|
78
|
+
const { chain, privateKeys, buyAmounts, tokenInfo, quoteToken, tokenAddress, config } = params;
|
|
79
|
+
// 默认使用 BNB (0地址)
|
|
80
|
+
const quoteTokenAddress = quoteToken || '0x0000000000000000000000000000000000000000';
|
|
64
81
|
if (privateKeys.length === 0) {
|
|
65
82
|
throw new Error(getErrorMessage('NO_PRIVATE_KEY'));
|
|
66
83
|
}
|
|
@@ -71,7 +88,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
71
88
|
const devWallet = new Wallet(privateKeys[0], provider);
|
|
72
89
|
const club48 = new Club48Client({
|
|
73
90
|
endpoint: config.club48Endpoint,
|
|
74
|
-
explorerEndpoint: config.club48ExplorerEndpoint
|
|
91
|
+
explorerEndpoint: config.club48ExplorerEndpoint
|
|
75
92
|
});
|
|
76
93
|
const blockOffset = config.bundleBlockOffset ?? 100;
|
|
77
94
|
// 1. 构建交易(为重复地址分配顺序 nonce)
|
|
@@ -105,7 +122,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
105
122
|
quoteToken: params.quoteToken || '0x0000000000000000000000000000000000000000',
|
|
106
123
|
quoteAmt: 0n,
|
|
107
124
|
beneficiary: new Wallet(privateKeys[0]).address,
|
|
108
|
-
permitData: '0x'
|
|
125
|
+
permitData: '0x'
|
|
109
126
|
});
|
|
110
127
|
// 估算 gas 并应用用户配置的安全余量
|
|
111
128
|
const createGasLimit = await estimateGasWithMultiplier(provider, { ...createTxUnsigned, from: devWallet.address }, config.gasLimitMultiplier);
|
|
@@ -116,7 +133,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
116
133
|
gasLimit: createGasLimit,
|
|
117
134
|
gasPrice: gasPrice,
|
|
118
135
|
chainId: 56, // BSC
|
|
119
|
-
type: getTxType(config)
|
|
136
|
+
type: getTxType(config) // 用户可配置:0=Legacy(默认),2=EIP-1559
|
|
120
137
|
};
|
|
121
138
|
const signedCreateTx = await devWallet.signTransaction(createTxRequest);
|
|
122
139
|
signedTxs.push(signedCreateTx);
|
|
@@ -129,7 +146,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
129
146
|
gasLimit: GAS_LIMITS.BRIBE,
|
|
130
147
|
chainId: 56,
|
|
131
148
|
type: 0, // Legacy transaction
|
|
132
|
-
nonce: await getNextNonce(devWallet)
|
|
149
|
+
nonce: await getNextNonce(devWallet)
|
|
133
150
|
});
|
|
134
151
|
signedTxs.push(tipTx);
|
|
135
152
|
}
|
|
@@ -146,7 +163,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
146
163
|
const exactOut = await quote.quoteExactInput.staticCall({
|
|
147
164
|
inputToken: '0x0000000000000000000000000000000000000000',
|
|
148
165
|
outputToken: tokenAddress,
|
|
149
|
-
inputAmount: amountIn
|
|
166
|
+
inputAmount: amountIn
|
|
150
167
|
});
|
|
151
168
|
const keep = BigInt(10000 - slippageBps);
|
|
152
169
|
minAmountOut = (exactOut * keep) / 10000n;
|
|
@@ -176,7 +193,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
176
193
|
gasLimit: buyGasLimit,
|
|
177
194
|
gasPrice: gasPrice,
|
|
178
195
|
chainId: 56, // BSC
|
|
179
|
-
type: getTxType(config)
|
|
196
|
+
type: getTxType(config) // 用户可配置
|
|
180
197
|
};
|
|
181
198
|
const signedBuyTx = await buyerWallet.signTransaction(buyTxRequest);
|
|
182
199
|
signedTxs.push(signedBuyTx);
|
|
@@ -186,11 +203,11 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
186
203
|
const bundleUuid = await club48.sendBundle({
|
|
187
204
|
txs: signedTxs,
|
|
188
205
|
maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
|
|
189
|
-
noMerge: config.noMerge
|
|
206
|
+
noMerge: config.noMerge
|
|
190
207
|
}, {
|
|
191
208
|
spMode: params.config.spMode ?? 'timestampPersonalSign',
|
|
192
209
|
spPrivateKey: params.config.spPrivateKey || privateKeys[0],
|
|
193
|
-
spVMode: params.config.spVMode
|
|
210
|
+
spVMode: params.config.spVMode
|
|
194
211
|
});
|
|
195
212
|
// 3. 等待完成
|
|
196
213
|
const status = await club48.waitForBundle(bundleUuid, params.config.waitTimeoutMs ?? 60000);
|
|
@@ -199,7 +216,7 @@ export async function createTokenWithBundleBuy(params) {
|
|
|
199
216
|
tokenAddress,
|
|
200
217
|
status,
|
|
201
218
|
createTx: signedCreateTx,
|
|
202
|
-
buyTxs
|
|
219
|
+
buyTxs
|
|
203
220
|
};
|
|
204
221
|
}
|
|
205
222
|
/**
|
|
@@ -213,7 +230,7 @@ export async function batchBuyWithBundle(params) {
|
|
|
213
230
|
const provider = new JsonRpcProvider(config.rpcUrl);
|
|
214
231
|
const club48 = new Club48Client({
|
|
215
232
|
endpoint: config.club48Endpoint,
|
|
216
|
-
explorerEndpoint: config.club48ExplorerEndpoint
|
|
233
|
+
explorerEndpoint: config.club48ExplorerEndpoint
|
|
217
234
|
});
|
|
218
235
|
const blockOffset = config.bundleBlockOffset ?? 100;
|
|
219
236
|
const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
|
|
@@ -242,7 +259,7 @@ export async function batchBuyWithBundle(params) {
|
|
|
242
259
|
gasLimit: GAS_LIMITS.BRIBE,
|
|
243
260
|
chainId: 56,
|
|
244
261
|
type: 0, // Legacy transaction
|
|
245
|
-
nonce: await getNextNonce(tipWallet)
|
|
262
|
+
nonce: await getNextNonce(tipWallet)
|
|
246
263
|
});
|
|
247
264
|
signedTxs.unshift(tipTx);
|
|
248
265
|
}
|
|
@@ -257,7 +274,7 @@ export async function batchBuyWithBundle(params) {
|
|
|
257
274
|
const exactOut = await quote.quoteExactInput.staticCall({
|
|
258
275
|
inputToken: '0x0000000000000000000000000000000000000000',
|
|
259
276
|
outputToken: tokenAddress,
|
|
260
|
-
inputAmount: amountIn
|
|
277
|
+
inputAmount: amountIn
|
|
261
278
|
});
|
|
262
279
|
const keep = BigInt(10000 - slippageBps);
|
|
263
280
|
minAmountOut = (exactOut * keep) / 10000n;
|
|
@@ -275,7 +292,7 @@ export async function batchBuyWithBundle(params) {
|
|
|
275
292
|
const estimatedGas = await provider.estimateGas({
|
|
276
293
|
...buyTxUnsigned,
|
|
277
294
|
from: buyerWallet.address,
|
|
278
|
-
value: amountIn
|
|
295
|
+
value: amountIn
|
|
279
296
|
});
|
|
280
297
|
const gasLimit = (estimatedGas * 120n) / 100n;
|
|
281
298
|
const buyTxRequest = {
|
|
@@ -285,7 +302,7 @@ export async function batchBuyWithBundle(params) {
|
|
|
285
302
|
gasLimit: gasLimit,
|
|
286
303
|
gasPrice: gasPrice,
|
|
287
304
|
chainId: 56, // BSC
|
|
288
|
-
type: 0
|
|
305
|
+
type: 0 // Legacy transaction
|
|
289
306
|
};
|
|
290
307
|
const signedBuyTx = await buyerWallet.signTransaction(buyTxRequest);
|
|
291
308
|
signedTxs.push(signedBuyTx);
|
|
@@ -293,11 +310,11 @@ export async function batchBuyWithBundle(params) {
|
|
|
293
310
|
const bundleUuid = await club48.sendBundle({
|
|
294
311
|
txs: signedTxs,
|
|
295
312
|
maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
|
|
296
|
-
noMerge: config.noMerge
|
|
313
|
+
noMerge: config.noMerge
|
|
297
314
|
}, {
|
|
298
315
|
spMode: params.config.spMode ?? 'timestampPersonalSign',
|
|
299
316
|
spPrivateKey: params.config.spPrivateKey || privateKeys[0],
|
|
300
|
-
spVMode: params.config.spVMode
|
|
317
|
+
spVMode: params.config.spVMode
|
|
301
318
|
});
|
|
302
319
|
const status = await club48.waitForBundle(bundleUuid);
|
|
303
320
|
return { bundleUuid, status, buyTxs: signedTxs };
|
|
@@ -313,7 +330,7 @@ export async function batchSellWithBundle(params) {
|
|
|
313
330
|
const provider = new JsonRpcProvider(config.rpcUrl);
|
|
314
331
|
const club48 = new Club48Client({
|
|
315
332
|
endpoint: config.club48Endpoint,
|
|
316
|
-
explorerEndpoint: config.club48ExplorerEndpoint
|
|
333
|
+
explorerEndpoint: config.club48ExplorerEndpoint
|
|
317
334
|
});
|
|
318
335
|
const blockOffset = config.bundleBlockOffset ?? 100;
|
|
319
336
|
const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
|
|
@@ -342,7 +359,7 @@ export async function batchSellWithBundle(params) {
|
|
|
342
359
|
gasLimit: GAS_LIMITS.BRIBE,
|
|
343
360
|
chainId: 56,
|
|
344
361
|
type: 0, // Legacy transaction
|
|
345
|
-
nonce: await getNextNonce(tipWallet)
|
|
362
|
+
nonce: await getNextNonce(tipWallet)
|
|
346
363
|
});
|
|
347
364
|
signedTxs.unshift(tipTx);
|
|
348
365
|
}
|
|
@@ -361,7 +378,7 @@ export async function batchSellWithBundle(params) {
|
|
|
361
378
|
// 估算 gas 并添加 20% 安全余量
|
|
362
379
|
const estimatedGas = await provider.estimateGas({
|
|
363
380
|
...sellTxUnsigned,
|
|
364
|
-
from: sellerWallet.address
|
|
381
|
+
from: sellerWallet.address
|
|
365
382
|
});
|
|
366
383
|
const gasLimit = (estimatedGas * 120n) / 100n;
|
|
367
384
|
const sellTxRequest = {
|
|
@@ -371,7 +388,7 @@ export async function batchSellWithBundle(params) {
|
|
|
371
388
|
gasLimit: gasLimit,
|
|
372
389
|
gasPrice: gasPrice,
|
|
373
390
|
chainId: 56, // BSC
|
|
374
|
-
type: 0
|
|
391
|
+
type: 0 // Legacy transaction
|
|
375
392
|
};
|
|
376
393
|
const signedSellTx = await sellerWallet.signTransaction(sellTxRequest);
|
|
377
394
|
signedTxs.push(signedSellTx);
|
|
@@ -379,17 +396,17 @@ export async function batchSellWithBundle(params) {
|
|
|
379
396
|
const bundleUuid = await club48.sendBundle({
|
|
380
397
|
txs: signedTxs,
|
|
381
398
|
maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
|
|
382
|
-
noMerge: config.noMerge
|
|
399
|
+
noMerge: config.noMerge
|
|
383
400
|
}, {
|
|
384
401
|
spMode: params.config.spMode ?? 'timestampPersonalSign',
|
|
385
402
|
spPrivateKey: params.config.spPrivateKey || privateKeys[0],
|
|
386
|
-
spVMode: params.config.spVMode
|
|
403
|
+
spVMode: params.config.spVMode
|
|
387
404
|
});
|
|
388
405
|
const status = await club48.waitForBundle(bundleUuid);
|
|
389
406
|
return { bundleUuid, status, sellTxs: signedTxs };
|
|
390
407
|
}
|
|
391
408
|
export async function flapPrivateBuy(params) {
|
|
392
|
-
const { chain, privateKey, tokenAddress, amountIn, config, spPrivateKey } = params;
|
|
409
|
+
const { chain, privateKey, tokenAddress, amountIn, to, config, spPrivateKey } = params;
|
|
393
410
|
const provider = new JsonRpcProvider(config.rpcUrl);
|
|
394
411
|
const wallet = new Wallet(privateKey, provider);
|
|
395
412
|
const club48 = new Club48Client({ endpoint: config.club48Endpoint, explorerEndpoint: config.club48ExplorerEndpoint });
|
|
@@ -409,7 +426,7 @@ export async function flapPrivateBuy(params) {
|
|
|
409
426
|
const estimatedGas = await provider.estimateGas({
|
|
410
427
|
...unsigned,
|
|
411
428
|
from: wallet.address,
|
|
412
|
-
value: amountWei
|
|
429
|
+
value: amountWei
|
|
413
430
|
});
|
|
414
431
|
const gasLimit = (estimatedGas * 120n) / 100n;
|
|
415
432
|
const req = {
|
|
@@ -419,7 +436,7 @@ export async function flapPrivateBuy(params) {
|
|
|
419
436
|
gasLimit: gasLimit,
|
|
420
437
|
gasPrice,
|
|
421
438
|
chainId: 56,
|
|
422
|
-
type: 0
|
|
439
|
+
type: 0 // Legacy transaction
|
|
423
440
|
};
|
|
424
441
|
const signed = await wallet.signTransaction(req);
|
|
425
442
|
if (spPrivateKey)
|
|
@@ -446,7 +463,7 @@ export async function flapPrivateSell(params) {
|
|
|
446
463
|
// 估算 gas 并添加 20% 安全余量
|
|
447
464
|
const estimatedGas = await provider.estimateGas({
|
|
448
465
|
...unsigned,
|
|
449
|
-
from: wallet.address
|
|
466
|
+
from: wallet.address
|
|
450
467
|
});
|
|
451
468
|
const gasLimit = (estimatedGas * 120n) / 100n;
|
|
452
469
|
const req = {
|
|
@@ -456,7 +473,7 @@ export async function flapPrivateSell(params) {
|
|
|
456
473
|
gasLimit: gasLimit,
|
|
457
474
|
gasPrice,
|
|
458
475
|
chainId: 56,
|
|
459
|
-
type: 0
|
|
476
|
+
type: 0 // Legacy transaction
|
|
460
477
|
};
|
|
461
478
|
const signed = await wallet.signTransaction(req);
|
|
462
479
|
if (spPrivateKey)
|
|
@@ -499,21 +516,13 @@ export async function flapBatchPrivateBuy(params) {
|
|
|
499
516
|
// 估算 gas 并添加 20% 安全余量
|
|
500
517
|
const estimatedGas = await provider.estimateGas({ ...unsigned, from: w.address, value: amountWei });
|
|
501
518
|
const gasLimit = (estimatedGas * 120n) / 100n;
|
|
502
|
-
const req = {
|
|
503
|
-
...unsigned,
|
|
504
|
-
from: w.address,
|
|
505
|
-
nonce: await getNextNonce(w),
|
|
506
|
-
gasLimit,
|
|
507
|
-
gasPrice,
|
|
508
|
-
chainId: 56,
|
|
509
|
-
type: 0,
|
|
510
|
-
};
|
|
519
|
+
const req = { ...unsigned, from: w.address, nonce: await getNextNonce(w), gasLimit, gasPrice, chainId: 56, type: 0 };
|
|
511
520
|
signedTxs.push(await w.signTransaction(req));
|
|
512
521
|
}
|
|
513
522
|
return await sendBatchPrivateTransactions(signedTxs, spPrivateKey, config.club48Endpoint || 'https://puissant-bsc.48.club');
|
|
514
523
|
}
|
|
515
524
|
export async function flapBatchPrivateSell(params) {
|
|
516
|
-
const { chain, privateKeys, amounts, tokenAddress, config, minEthEach } = params;
|
|
525
|
+
const { chain, privateKeys, amounts, tokenAddress, config, spPrivateKey, minEthEach } = params;
|
|
517
526
|
if (privateKeys.length !== amounts.length)
|
|
518
527
|
throw new Error('privateKeys and amounts length mismatch');
|
|
519
528
|
const provider = new JsonRpcProvider(config.rpcUrl);
|
|
@@ -549,15 +558,7 @@ export async function flapBatchPrivateSell(params) {
|
|
|
549
558
|
// 估算 gas 并添加 20% 安全余量
|
|
550
559
|
const estimatedGas = await provider.estimateGas({ ...unsigned, from: w.address });
|
|
551
560
|
const gasLimit = (estimatedGas * 120n) / 100n;
|
|
552
|
-
const req = {
|
|
553
|
-
...unsigned,
|
|
554
|
-
from: w.address,
|
|
555
|
-
nonce: await getNextNonce(w),
|
|
556
|
-
gasLimit,
|
|
557
|
-
gasPrice,
|
|
558
|
-
chainId: 56,
|
|
559
|
-
type: 0,
|
|
560
|
-
};
|
|
561
|
+
const req = { ...unsigned, from: w.address, nonce: await getNextNonce(w), gasLimit, gasPrice, chainId: 56, type: 0 };
|
|
561
562
|
signedTxs.push(await w.signTransaction(req));
|
|
562
563
|
}
|
|
563
564
|
// 使用 bundle 通道提交(统一与捆绑买保持一致)
|
|
@@ -565,12 +566,12 @@ export async function flapBatchPrivateSell(params) {
|
|
|
565
566
|
const bundleUuid = await club48.sendBundle({
|
|
566
567
|
txs: signedTxs,
|
|
567
568
|
maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
|
|
568
|
-
noMerge: config.noMerge
|
|
569
|
+
noMerge: config.noMerge
|
|
569
570
|
}, {
|
|
570
571
|
// 若传入 sp 配置,则用于生成 48SP 签名提升打包优先级(与批量买一致)
|
|
571
572
|
spMode: params.config.spMode ?? 'timestampPersonalSign',
|
|
572
573
|
spPrivateKey: params.config.spPrivateKey || 'https://puissant-bsc.48.club',
|
|
573
|
-
spVMode: params.config.spVMode
|
|
574
|
+
spVMode: params.config.spVMode
|
|
574
575
|
});
|
|
575
576
|
try {
|
|
576
577
|
const status = await club48.waitForBundle(bundleUuid);
|
|
@@ -12,17 +12,8 @@ export declare enum TokenVersion {
|
|
|
12
12
|
TOKEN_V2_PERMIT = 2,
|
|
13
13
|
TOKEN_GOPLUS = 3,
|
|
14
14
|
TOKEN_TAXED = 4,
|
|
15
|
-
|
|
16
|
-
TOKEN_TAXED_V3 = 6
|
|
17
|
-
TOKEN_V3_PERMIT = 7
|
|
18
|
-
}
|
|
19
|
-
/** newTokenV7 feeConfigs 槽位类型 */
|
|
20
|
-
export declare enum FeeType {
|
|
21
|
-
NONE = 0,
|
|
22
|
-
MARKETING_OR_VAULT = 1,
|
|
23
|
-
DIVIDEND = 2,
|
|
24
|
-
DEFLATION = 3,
|
|
25
|
-
LP_BPS = 4
|
|
15
|
+
/** FlapTaxTokenV3 — 推荐税币;配合 newTokenV6 / newTokenV6WithVault */
|
|
16
|
+
TOKEN_TAXED_V3 = 6
|
|
26
17
|
}
|
|
27
18
|
export declare enum DexThreshType {
|
|
28
19
|
TWO_THIRDS = 0,
|
|
@@ -34,9 +25,7 @@ export declare enum DexThreshType {
|
|
|
34
25
|
}
|
|
35
26
|
export declare enum MigratorType {
|
|
36
27
|
V3_MIGRATOR = 0,
|
|
37
|
-
V2_MIGRATOR = 1
|
|
38
|
-
/** PCS Infinity CL 迁移(newTokenV7 / TOKEN_V3_PERMIT) */
|
|
39
|
-
PCS_INFINITY_CL_MIGRATOR = 3
|
|
28
|
+
V2_MIGRATOR = 1
|
|
40
29
|
}
|
|
41
30
|
/**
|
|
42
31
|
* V3 LP 费率档位
|
|
@@ -16,19 +16,9 @@ export var TokenVersion;
|
|
|
16
16
|
TokenVersion[TokenVersion["TOKEN_V2_PERMIT"] = 2] = "TOKEN_V2_PERMIT";
|
|
17
17
|
TokenVersion[TokenVersion["TOKEN_GOPLUS"] = 3] = "TOKEN_GOPLUS";
|
|
18
18
|
TokenVersion[TokenVersion["TOKEN_TAXED"] = 4] = "TOKEN_TAXED";
|
|
19
|
-
|
|
19
|
+
/** FlapTaxTokenV3 — 推荐税币;配合 newTokenV6 / newTokenV6WithVault */
|
|
20
20
|
TokenVersion[TokenVersion["TOKEN_TAXED_V3"] = 6] = "TOKEN_TAXED_V3";
|
|
21
|
-
TokenVersion[TokenVersion["TOKEN_V3_PERMIT"] = 7] = "TOKEN_V3_PERMIT";
|
|
22
21
|
})(TokenVersion || (TokenVersion = {}));
|
|
23
|
-
/** newTokenV7 feeConfigs 槽位类型 */
|
|
24
|
-
export var FeeType;
|
|
25
|
-
(function (FeeType) {
|
|
26
|
-
FeeType[FeeType["NONE"] = 0] = "NONE";
|
|
27
|
-
FeeType[FeeType["MARKETING_OR_VAULT"] = 1] = "MARKETING_OR_VAULT";
|
|
28
|
-
FeeType[FeeType["DIVIDEND"] = 2] = "DIVIDEND";
|
|
29
|
-
FeeType[FeeType["DEFLATION"] = 3] = "DEFLATION";
|
|
30
|
-
FeeType[FeeType["LP_BPS"] = 4] = "LP_BPS";
|
|
31
|
-
})(FeeType || (FeeType = {}));
|
|
32
22
|
export var DexThreshType;
|
|
33
23
|
(function (DexThreshType) {
|
|
34
24
|
DexThreshType[DexThreshType["TWO_THIRDS"] = 0] = "TWO_THIRDS";
|
|
@@ -42,8 +32,6 @@ export var MigratorType;
|
|
|
42
32
|
(function (MigratorType) {
|
|
43
33
|
MigratorType[MigratorType["V3_MIGRATOR"] = 0] = "V3_MIGRATOR";
|
|
44
34
|
MigratorType[MigratorType["V2_MIGRATOR"] = 1] = "V2_MIGRATOR";
|
|
45
|
-
/** PCS Infinity CL 迁移(newTokenV7 / TOKEN_V3_PERMIT) */
|
|
46
|
-
MigratorType[MigratorType["PCS_INFINITY_CL_MIGRATOR"] = 3] = "PCS_INFINITY_CL_MIGRATOR";
|
|
47
35
|
})(MigratorType || (MigratorType = {}));
|
|
48
36
|
/**
|
|
49
37
|
* V3 LP 费率档位
|
|
@@ -95,12 +83,10 @@ const PORTAL_ABI = [
|
|
|
95
83
|
'function newTokenV2((string name,string symbol,string meta,uint8 dexThresh,bytes32 salt,uint16 taxRate,uint8 migratorType,address quoteToken,uint256 quoteAmt,address beneficiary,bytes permitData)) external payable returns (address)',
|
|
96
84
|
'function newTokenV3((string name,string symbol,string meta,uint8 dexThresh,bytes32 salt,uint16 taxRate,uint8 migratorType,address quoteToken,uint256 quoteAmt,address beneficiary,bytes permitData,bytes32 extensionID,bytes extensionData)) external payable returns (address)',
|
|
97
85
|
'function newTokenV4((string name,string symbol,string meta,uint8 dexThresh,bytes32 salt,uint16 taxRate,uint8 migratorType,address quoteToken,uint256 quoteAmt,address beneficiary,bytes permitData,bytes32 extensionID,bytes extensionData,uint8 dexId,uint8 lpFeeProfile)) external payable returns (address)',
|
|
98
|
-
// newTokenV5: 支持 Tax Token V2 高级税收分配(
|
|
86
|
+
// newTokenV5: 支持 Tax Token V2 高级税收分配(taxRate > 0 时使用,Legacy)
|
|
99
87
|
'function newTokenV5((string name,string symbol,string meta,uint8 dexThresh,bytes32 salt,uint16 taxRate,uint8 migratorType,address quoteToken,uint256 quoteAmt,address beneficiary,bytes permitData,bytes32 extensionID,bytes extensionData,uint8 dexId,uint8 lpFeeProfile,uint64 taxDuration,uint64 antiFarmerDuration,uint16 mktBps,uint16 deflationBps,uint16 dividendBps,uint16 lpBps,uint256 minimumShareBalance)) external payable returns (address)',
|
|
100
|
-
// newTokenV6:
|
|
88
|
+
// newTokenV6: 统一发射入口(标准 TOKEN_V2_PERMIT / 税币 TOKEN_TAXED_V3)
|
|
101
89
|
'function newTokenV6((string name,string symbol,string meta,uint8 dexThresh,bytes32 salt,uint8 migratorType,address quoteToken,uint256 quoteAmt,address beneficiary,bytes permitData,bytes32 extensionID,bytes extensionData,uint8 dexId,uint8 lpFeeProfile,uint16 buyTaxRate,uint16 sellTaxRate,uint64 taxDuration,uint64 antiFarmerDuration,uint16 mktBps,uint16 deflationBps,uint16 dividendBps,uint16 lpBps,uint256 minimumShareBalance,address dividendToken,address commissionReceiver,uint8 tokenVersion)) external payable returns (address)',
|
|
102
|
-
// newTokenV7: TOKEN_V3_PERMIT + CL 迁移
|
|
103
|
-
'function newTokenV7((string name,string symbol,string meta,uint8 dexThresh,bytes32 salt,uint8 migratorType,address quoteToken,uint256 quoteAmt,bytes permitData,bytes32 extensionID,bytes extensionData,uint8 dexId,uint16 buyTaxRate,uint16 sellTaxRate,uint64 taxDuration,uint64 antiFarmerDuration,address commissionReceiver,uint8 tokenVersion,(uint8 feeType,uint16 bps,address marketingAddress,address dividendToken,uint256 minimumShareBalance)[4] feeConfigs)) external payable returns (address)',
|
|
104
90
|
// 受益人领取
|
|
105
91
|
'function claim(address token) external returns (uint256,uint256)',
|
|
106
92
|
'function delegateClaim(address token) external returns (uint256,uint256)',
|
|
@@ -108,21 +94,17 @@ const PORTAL_ABI = [
|
|
|
108
94
|
'function getFeeRate() external view returns (uint256,uint256)',
|
|
109
95
|
'function nonce() external view returns (uint256)',
|
|
110
96
|
'function version() external pure returns (string)',
|
|
111
|
-
'function getLocks(address token) external view returns (uint256[])'
|
|
97
|
+
'function getLocks(address token) external view returns (uint256[])'
|
|
112
98
|
];
|
|
113
99
|
/**
|
|
114
100
|
* 将 lpFeeProfile 转换为 V3 fee 值
|
|
115
101
|
*/
|
|
116
102
|
export function lpFeeProfileToV3Fee(profile) {
|
|
117
103
|
switch (profile) {
|
|
118
|
-
case V3LPFeeProfile.LP_FEE_PROFILE_STANDARD:
|
|
119
|
-
|
|
120
|
-
case V3LPFeeProfile.
|
|
121
|
-
|
|
122
|
-
case V3LPFeeProfile.LP_FEE_PROFILE_HIGH:
|
|
123
|
-
return 10000;
|
|
124
|
-
default:
|
|
125
|
-
return 2500; // 默认 STANDARD
|
|
104
|
+
case V3LPFeeProfile.LP_FEE_PROFILE_STANDARD: return 2500;
|
|
105
|
+
case V3LPFeeProfile.LP_FEE_PROFILE_LOW: return 100;
|
|
106
|
+
case V3LPFeeProfile.LP_FEE_PROFILE_HIGH: return 10000;
|
|
107
|
+
default: return 2500; // 默认 STANDARD
|
|
126
108
|
}
|
|
127
109
|
}
|
|
128
110
|
/**
|
|
@@ -139,11 +121,6 @@ export function validateTaxDistribution(config) {
|
|
|
139
121
|
return { valid: true };
|
|
140
122
|
}
|
|
141
123
|
export class FlapPortal {
|
|
142
|
-
rpcUrl;
|
|
143
|
-
portal;
|
|
144
|
-
contract;
|
|
145
|
-
buyFeeRate;
|
|
146
|
-
sellFeeRate;
|
|
147
124
|
constructor(cfg) {
|
|
148
125
|
this.rpcUrl = cfg.rpcUrl;
|
|
149
126
|
this.portal = cfg.addressOverride ?? FLAP_PORTAL_ADDRESSES[cfg.chain];
|
|
@@ -158,27 +135,13 @@ export class FlapPortal {
|
|
|
158
135
|
async getTokenV2(token) {
|
|
159
136
|
const r = await this.contract.getTokenV2(token);
|
|
160
137
|
return {
|
|
161
|
-
status: r[0],
|
|
162
|
-
reserve: r[1],
|
|
163
|
-
circulatingSupply: r[2],
|
|
164
|
-
price: r[3],
|
|
165
|
-
tokenVersion: r[4],
|
|
166
|
-
r: r[5],
|
|
167
|
-
dexSupplyThresh: r[6],
|
|
138
|
+
status: r[0], reserve: r[1], circulatingSupply: r[2], price: r[3], tokenVersion: r[4], r: r[5], dexSupplyThresh: r[6],
|
|
168
139
|
};
|
|
169
140
|
}
|
|
170
141
|
async getTokenV3(token) {
|
|
171
142
|
const r = await this.contract.getTokenV3(token);
|
|
172
143
|
return {
|
|
173
|
-
status: r[0],
|
|
174
|
-
reserve: r[1],
|
|
175
|
-
circulatingSupply: r[2],
|
|
176
|
-
price: r[3],
|
|
177
|
-
tokenVersion: r[4],
|
|
178
|
-
r: r[5],
|
|
179
|
-
dexSupplyThresh: r[6],
|
|
180
|
-
quoteTokenAddress: r[7],
|
|
181
|
-
nativeToQuoteSwapEnabled: r[8],
|
|
144
|
+
status: r[0], reserve: r[1], circulatingSupply: r[2], price: r[3], tokenVersion: r[4], r: r[5], dexSupplyThresh: r[6], quoteTokenAddress: r[7], nativeToQuoteSwapEnabled: r[8],
|
|
182
145
|
};
|
|
183
146
|
}
|
|
184
147
|
async getTokenV4(token) {
|
|
@@ -250,6 +213,7 @@ export class FlapPortal {
|
|
|
250
213
|
const curve = new CDPV2(r, h, k);
|
|
251
214
|
const currentReserve = formatEther(state.reserve);
|
|
252
215
|
const dexSupplyThresh = formatEther(state.dexSupplyThresh);
|
|
216
|
+
const circulatingSupply = formatEther(state.circulatingSupply);
|
|
253
217
|
// 计算毕业时的储备
|
|
254
218
|
const graduationReserve = curve.estimateReserve(dexSupplyThresh);
|
|
255
219
|
const graduationReserveNum = parseFloat(graduationReserve.toString());
|
|
@@ -261,7 +225,9 @@ export class FlapPortal {
|
|
|
261
225
|
// 含手续费(1% buy fee)
|
|
262
226
|
const remainingWithFee = remainingNet / (1 - this.buyFeeRate);
|
|
263
227
|
// 计算进度
|
|
264
|
-
const progressPercent = isGraduated
|
|
228
|
+
const progressPercent = isGraduated
|
|
229
|
+
? '100.00'
|
|
230
|
+
: (currentReserveNum / graduationReserveNum * 100).toFixed(2);
|
|
265
231
|
return {
|
|
266
232
|
remainingOkb: remainingWithFee.toFixed(6),
|
|
267
233
|
graduationReserve: graduationReserveNum.toFixed(6),
|
|
@@ -369,7 +335,6 @@ export class FlapPortal {
|
|
|
369
335
|
}
|
|
370
336
|
}
|
|
371
337
|
export class FlapPortalWriter extends FlapPortal {
|
|
372
|
-
wallet;
|
|
373
338
|
constructor(cfg, privateKey) {
|
|
374
339
|
super(cfg);
|
|
375
340
|
// 使用 ethers v6 创建钱包
|
|
@@ -618,3 +583,15 @@ export class FlapPortalWriter extends FlapPortal {
|
|
|
618
583
|
return this.portal;
|
|
619
584
|
}
|
|
620
585
|
}
|
|
586
|
+
/**
|
|
587
|
+
* 获取 Flap Portal 合约地址(内部使用)
|
|
588
|
+
* 注意:此方法不对外导出,用户应使用 FlapPortal 实例而非直接获取地址
|
|
589
|
+
* @internal
|
|
590
|
+
*/
|
|
591
|
+
function getFlapPortalAddress(chain) {
|
|
592
|
+
const address = FLAP_PORTAL_ADDRESSES[chain];
|
|
593
|
+
if (!address) {
|
|
594
|
+
throw new Error(`Flap Portal not deployed on ${chain}`);
|
|
595
|
+
}
|
|
596
|
+
return address;
|
|
597
|
+
}
|
|
@@ -8,12 +8,10 @@ export declare function predictVanityTokenAddress(salt: string, portal: string,
|
|
|
8
8
|
* SDK 自动使用该链的 Portal 和 TokenImpl 地址
|
|
9
9
|
* 注意:使用 Flap 平台的原始 Portal 地址进行 CREATE2 计算
|
|
10
10
|
* BSC/MONAD 默认使用 NORMAL 实现(非税版)
|
|
11
|
-
* @param taxedV5 -
|
|
11
|
+
* @param taxedV5 - Legacy V5 税币 impl(不推荐,请用 taxedV3)
|
|
12
|
+
* @param taxedV3 - TOKEN_TAXED_V3(newTokenV6 / newTokenV6WithVault)
|
|
12
13
|
*/
|
|
13
|
-
export declare function predictVanityTokenAddressByChain(chain: 'BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD', salt: string, taxed?: boolean, taxedV5?: boolean,
|
|
14
|
-
taxedV3?: boolean, // ✅ V5 + Vault 金库税代币标识
|
|
15
|
-
/** BSC 标准币 + newTokenV7 / TOKEN_V3_PERMIT */
|
|
16
|
-
useV3Permit?: boolean): string;
|
|
14
|
+
export declare function predictVanityTokenAddressByChain(chain: 'BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD', salt: string, taxed?: boolean, taxedV5?: boolean, taxedV3?: boolean): string;
|
|
17
15
|
/**
|
|
18
16
|
* 寻找满足后缀的 salt(默认 8888)
|
|
19
17
|
* 注意:该方法为同步 CPU 搜索,谨慎设置迭代限制
|
|
@@ -35,7 +33,8 @@ export declare function findSaltEnding(opts: {
|
|
|
35
33
|
* 注意:使用 Flap 平台的原始 Portal 地址进行 CREATE2 计算
|
|
36
34
|
* BSC/MONAD 默认使用 NORMAL 实现(非税版)
|
|
37
35
|
* XLayer 只有标准版,后缀是 1111
|
|
38
|
-
* @param taxedV5 -
|
|
36
|
+
* @param taxedV5 - Legacy V5 impl
|
|
37
|
+
* @param taxedV3 - TOKEN_TAXED_V3 impl(推荐)
|
|
39
38
|
*/
|
|
40
39
|
export declare function findSaltEndingByChain(opts: {
|
|
41
40
|
chain: 'BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD';
|
|
@@ -45,8 +44,6 @@ export declare function findSaltEndingByChain(opts: {
|
|
|
45
44
|
taxed?: boolean;
|
|
46
45
|
taxedV5?: boolean;
|
|
47
46
|
taxedV3?: boolean;
|
|
48
|
-
/** BSC 标准币 UI「V3」/ newTokenV7 */
|
|
49
|
-
useV3Permit?: boolean;
|
|
50
47
|
}): Promise<{
|
|
51
48
|
salt: string;
|
|
52
49
|
address: string;
|
|
@@ -6,7 +6,9 @@ import { FLAP_ORIGINAL_PORTAL_ADDRESSES, FLAP_TOKEN_IMPL_ADDRESSES, getVanitySuf
|
|
|
6
6
|
*/
|
|
7
7
|
export function predictVanityTokenAddress(salt, portal, tokenImpl) {
|
|
8
8
|
// 规范化 salt 到 bytes32(避免前端传入的短字符串导致不可预期行为)
|
|
9
|
-
const normalizedSalt = /^0x[0-9a-fA-F]{64}$/.test(salt)
|
|
9
|
+
const normalizedSalt = /^0x[0-9a-fA-F]{64}$/.test(salt)
|
|
10
|
+
? salt.toLowerCase()
|
|
11
|
+
: keccak256(salt);
|
|
10
12
|
// 构建 EIP-1167 minimal proxy bytecode
|
|
11
13
|
const bytecode = '0x3d602d80600a3d3981f3363d3d373d3d3d363d73' + tokenImpl.slice(2).toLowerCase() + '5af43d82803e903d91602b57fd5bf3';
|
|
12
14
|
const bytecodeHash = keccak256(bytecode);
|
|
@@ -17,22 +19,19 @@ export function predictVanityTokenAddress(salt, portal, tokenImpl) {
|
|
|
17
19
|
* SDK 自动使用该链的 Portal 和 TokenImpl 地址
|
|
18
20
|
* 注意:使用 Flap 平台的原始 Portal 地址进行 CREATE2 计算
|
|
19
21
|
* BSC/MONAD 默认使用 NORMAL 实现(非税版)
|
|
20
|
-
* @param taxedV5 -
|
|
22
|
+
* @param taxedV5 - Legacy V5 税币 impl(不推荐,请用 taxedV3)
|
|
23
|
+
* @param taxedV3 - TOKEN_TAXED_V3(newTokenV6 / newTokenV6WithVault)
|
|
21
24
|
*/
|
|
22
|
-
export function predictVanityTokenAddressByChain(chain, salt, taxed = false, taxedV5 = false,
|
|
23
|
-
taxedV3 = false, // ✅ V5 + Vault 金库税代币标识
|
|
24
|
-
/** BSC 标准币 + newTokenV7 / TOKEN_V3_PERMIT */
|
|
25
|
-
useV3Permit = false) {
|
|
25
|
+
export function predictVanityTokenAddressByChain(chain, salt, taxed = false, taxedV5 = false, taxedV3 = false) {
|
|
26
26
|
// 使用 Flap 平台的原始 Portal 地址(用于 CREATE2)
|
|
27
27
|
const portal = FLAP_ORIGINAL_PORTAL_ADDRESSES[chain];
|
|
28
28
|
let tokenImpl;
|
|
29
29
|
if (chain === 'BSC') {
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
tokenImpl = FLAP_TOKEN_IMPL_ADDRESSES.BSC_TAXED_V5;
|
|
30
|
+
if (taxedV3) {
|
|
31
|
+
tokenImpl = FLAP_TOKEN_IMPL_ADDRESSES.BSC_TAXED_V3;
|
|
33
32
|
}
|
|
34
|
-
else if (
|
|
35
|
-
tokenImpl = FLAP_TOKEN_IMPL_ADDRESSES.
|
|
33
|
+
else if (taxedV5) {
|
|
34
|
+
tokenImpl = FLAP_TOKEN_IMPL_ADDRESSES.BSC_TAXED_V5;
|
|
36
35
|
}
|
|
37
36
|
else {
|
|
38
37
|
tokenImpl = taxed ? FLAP_TOKEN_IMPL_ADDRESSES.BSC_TAXED : FLAP_TOKEN_IMPL_ADDRESSES.BSC_NORMAL;
|
|
@@ -59,7 +58,7 @@ export async function findSaltEnding(opts) {
|
|
|
59
58
|
// 若未提供 seed,默认使用随机种子,避免每次结果都相同
|
|
60
59
|
let salt = opts.seed ?? keccak256(randomBytes(32));
|
|
61
60
|
let iterations = 0;
|
|
62
|
-
const limit = opts.maxIterations ??
|
|
61
|
+
const limit = opts.maxIterations ?? 1000000;
|
|
63
62
|
while (iterations < limit) {
|
|
64
63
|
const addr = predictVanityTokenAddress(salt, opts.portal, opts.tokenImpl);
|
|
65
64
|
if (addr.toLowerCase().endsWith(suffix)) {
|
|
@@ -76,19 +75,19 @@ export async function findSaltEnding(opts) {
|
|
|
76
75
|
* 注意:使用 Flap 平台的原始 Portal 地址进行 CREATE2 计算
|
|
77
76
|
* BSC/MONAD 默认使用 NORMAL 实现(非税版)
|
|
78
77
|
* XLayer 只有标准版,后缀是 1111
|
|
79
|
-
* @param taxedV5 -
|
|
78
|
+
* @param taxedV5 - Legacy V5 impl
|
|
79
|
+
* @param taxedV3 - TOKEN_TAXED_V3 impl(推荐)
|
|
80
80
|
*/
|
|
81
81
|
export async function findSaltEndingByChain(opts) {
|
|
82
82
|
// 使用 Flap 平台的原始 Portal 地址(用于 CREATE2)
|
|
83
83
|
const portal = FLAP_ORIGINAL_PORTAL_ADDRESSES[opts.chain];
|
|
84
84
|
let tokenImpl;
|
|
85
85
|
if (opts.chain === 'BSC') {
|
|
86
|
-
if (opts.
|
|
87
|
-
|
|
88
|
-
tokenImpl = FLAP_TOKEN_IMPL_ADDRESSES.BSC_TAXED_V5;
|
|
86
|
+
if (opts.taxedV3) {
|
|
87
|
+
tokenImpl = FLAP_TOKEN_IMPL_ADDRESSES.BSC_TAXED_V3;
|
|
89
88
|
}
|
|
90
|
-
else if (opts.
|
|
91
|
-
tokenImpl = FLAP_TOKEN_IMPL_ADDRESSES.
|
|
89
|
+
else if (opts.taxedV5) {
|
|
90
|
+
tokenImpl = FLAP_TOKEN_IMPL_ADDRESSES.BSC_TAXED_V5;
|
|
92
91
|
}
|
|
93
92
|
else {
|
|
94
93
|
tokenImpl = opts.taxed ? FLAP_TOKEN_IMPL_ADDRESSES.BSC_TAXED : FLAP_TOKEN_IMPL_ADDRESSES.BSC_NORMAL;
|
|
@@ -104,13 +103,13 @@ export async function findSaltEndingByChain(opts) {
|
|
|
104
103
|
if (!portal || !tokenImpl) {
|
|
105
104
|
throw new Error(`Flap Protocol not fully deployed on ${opts.chain}`);
|
|
106
105
|
}
|
|
107
|
-
// ✅
|
|
108
|
-
const suffix = opts.suffix ?? getVanitySuffix(opts.chain, opts.taxed
|
|
106
|
+
// ✅ 如果未指定后缀,根据链自动选择正确的后缀
|
|
107
|
+
const suffix = opts.suffix ?? getVanitySuffix(opts.chain, opts.taxed);
|
|
109
108
|
return findSaltEnding({
|
|
110
109
|
portal,
|
|
111
110
|
tokenImpl,
|
|
112
111
|
suffix,
|
|
113
112
|
maxIterations: opts.maxIterations,
|
|
114
|
-
seed: opts.seed
|
|
113
|
+
seed: opts.seed
|
|
115
114
|
});
|
|
116
115
|
}
|