four-flap-meme-sdk 2.2.2 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +41 -6
- package/README.md +31 -0
- package/README.zh-CN.md +41 -6
- package/dist/__tests__/subpath-exports.test.d.ts +1 -0
- package/dist/__tests__/subpath-exports.test.js +64 -0
- package/dist/abis/common.d.ts +85 -0
- package/dist/abis/common.js +264 -0
- package/dist/abis/contracts/TaxToken.json +969 -0
- package/dist/abis/contracts/TokenManager2.json +136 -0
- package/dist/abis/contracts/index.d.ts +5 -0
- package/dist/abis/contracts/index.js +5 -0
- package/dist/abis/flap/index.d.ts +3 -0
- package/dist/abis/flap/index.js +3 -0
- package/dist/abis/flap/portal-events.d.ts +6 -0
- package/dist/abis/flap/portal-events.js +17 -0
- package/dist/abis/flap/portal.d.ts +6 -0
- package/dist/abis/flap/portal.js +37 -0
- package/dist/abis/flap/vault.d.ts +171 -0
- package/dist/abis/flap/vault.js +91 -0
- package/dist/abis/index.d.ts +8 -0
- package/dist/abis/index.js +11 -0
- package/dist/bundle-core/__tests__/config-helpers.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
- package/dist/bundle-core/__tests__/facade-parity.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
- package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
- package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
- package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
- package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
- package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
- package/dist/bundle-core/config-helpers.d.ts +36 -0
- package/dist/bundle-core/config-helpers.js +57 -0
- package/dist/bundle-core/errors.d.ts +50 -0
- package/dist/bundle-core/errors.js +35 -0
- package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
- package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
- package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
- package/dist/bundle-core/four-meme/core-helpers.js +40 -0
- package/dist/bundle-core/four-meme/core.d.ts +4 -0
- package/dist/bundle-core/four-meme/core.js +515 -0
- package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
- package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
- package/dist/bundle-core/four-meme/private.d.ts +27 -0
- package/dist/bundle-core/four-meme/private.js +465 -0
- package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
- package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
- package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
- package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
- package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
- package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
- package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
- package/dist/bundle-core/four-meme/swap-internal.js +18 -0
- package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
- package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
- package/dist/bundle-core/four-meme/swap.d.ts +17 -0
- package/dist/bundle-core/four-meme/swap.js +505 -0
- package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
- package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
- package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
- package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
- package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
- package/dist/bundle-core/four-meme/types/index.js +1 -0
- package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
- package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
- package/dist/bundle-core/four-meme/types.d.ts +1 -0
- package/dist/bundle-core/four-meme/types.js +1 -0
- package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
- package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
- package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
- package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
- package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
- package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
- package/dist/bundle-core/index.d.ts +8 -0
- package/dist/bundle-core/index.js +8 -0
- package/dist/bundle-core/internal.d.ts +21 -0
- package/dist/bundle-core/internal.js +182 -0
- package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
- package/dist/bundle-core/sign-context-helpers.js +67 -0
- package/dist/bundle-core/submit.d.ts +293 -0
- package/dist/bundle-core/submit.js +727 -0
- package/dist/bundle-core/types/index.d.ts +8 -0
- package/dist/bundle-core/types/index.js +1 -0
- package/dist/bundle-core/types.d.ts +1 -0
- package/dist/bundle-core/types.js +1 -0
- package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
- package/dist/chains/bsc/four/approve-tokenmanager.js +1 -113
- package/dist/chains/bsc/four/config.d.ts +5 -67
- package/dist/chains/bsc/four/config.js +2 -114
- package/dist/chains/bsc/four/core.d.ts +1 -4
- package/dist/chains/bsc/four/core.js +1 -592
- package/dist/chains/bsc/four/index.d.ts +6 -6
- package/dist/chains/bsc/four/index.js +6 -6
- package/dist/chains/bsc/four/internal.d.ts +2 -46
- package/dist/chains/bsc/four/internal.js +2 -239
- package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
- package/dist/chains/bsc/four/pancake-proxy.js +1 -687
- package/dist/chains/bsc/four/private.d.ts +1 -27
- package/dist/chains/bsc/four/private.js +1 -477
- package/dist/chains/bsc/four/submit.d.ts +2 -315
- package/dist/chains/bsc/four/submit.js +2 -752
- package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
- package/dist/chains/bsc/four/swap-buy-first.js +2 -507
- package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
- package/dist/chains/bsc/four/swap-internal.js +1 -18
- package/dist/chains/bsc/four/swap.d.ts +2 -144
- package/dist/chains/bsc/four/swap.js +2 -766
- package/dist/chains/bsc/four/types.d.ts +1 -476
- package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
- package/dist/chains/bsc/four/utils-disperse.js +1 -0
- package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
- package/dist/chains/bsc/four/utils-pairwise.js +1 -0
- package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
- package/dist/chains/bsc/four/utils-sweep.js +1 -0
- package/dist/chains/bsc/four/utils.d.ts +5 -18
- package/dist/chains/bsc/four/utils.js +5 -1552
- package/dist/chains/bsc/iro.d.ts +5 -0
- package/dist/chains/bsc/iro.js +4 -0
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
- package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
- package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
- package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -212
- package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
- package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
- package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
- package/dist/chains/bsc/pancake/bundle-swap.js +114 -726
- package/dist/chains/bsc/pancake/index.d.ts +4 -2
- package/dist/chains/bsc/pancake/index.js +1 -3
- package/dist/chains/bsc/platforms/iro/factory.d.ts +2 -2
- package/dist/chains/bsc/platforms/iro/factory.js +3 -1
- package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
- package/dist/chains/bsc/platforms/iro/index.js +3 -3
- package/dist/chains/bsc/platforms/iro/pool.js +31 -10
- package/dist/chains/bsc/platforms/iro/token.js +4 -1
- package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
- package/dist/chains/eni/batch-router/transfer.js +55 -25
- package/dist/chains/eni/batch-router/utils.js +32 -6
- package/dist/chains/eni/bundler/sign.js +5 -6
- package/dist/chains/eni/bundler/submit.js +1 -4
- package/dist/chains/eni/constants.js +1 -1
- package/dist/chains/eni/flat-aliases.d.ts +10 -0
- package/dist/chains/eni/flat-aliases.js +8 -0
- package/dist/chains/eni/index.d.ts +2 -1
- package/dist/chains/eni/index.js +1 -0
- package/dist/chains/eni/platforms/daoaas/create.js +2 -2
- package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
- package/dist/chains/eni/platforms/daoaas/index.js +3 -3
- package/dist/chains/eni/platforms/daoaas/meta.js +9 -6
- package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -44
- package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
- package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
- package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
- package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
- package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -46
- package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
- package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
- package/dist/chains/eni/platforms/iro/factory.d.ts +2 -2
- package/dist/chains/eni/platforms/iro/factory.js +3 -1
- package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
- package/dist/chains/eni/platforms/iro/index.js +4 -4
- package/dist/chains/eni/platforms/iro/pool.js +90 -26
- package/dist/chains/eni/platforms/iro/token.js +107 -31
- package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
- package/dist/chains/eni/submit.d.ts +43 -0
- package/dist/chains/eni/submit.js +286 -0
- package/dist/chains/index.d.ts +13 -0
- package/dist/chains/index.js +13 -0
- package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
- package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -21
- package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
- package/dist/chains/xlayer/eip7702/bundle-create.js +93 -59
- package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-sell.js +29 -111
- package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
- package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -245
- package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
- package/dist/chains/xlayer/eip7702/constants.js +3 -21
- package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +13 -0
- package/dist/chains/xlayer/eip7702/flat-aliases.js +10 -0
- package/dist/chains/xlayer/eip7702/index.d.ts +28 -46
- package/dist/chains/xlayer/eip7702/index.js +28 -81
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
- package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +63 -307
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
- package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
- package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
- package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
- package/dist/chains/xlayer/eip7702/utils.js +23 -28
- package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
- package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
- package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
- package/dist/chains/xlayer/eip7702/volume.js +89 -164
- package/dist/chains/xlayer/eoa/constants.js +1 -1
- package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
- package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
- package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +66 -299
- package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
- package/dist/chains/xlayer/eoa/eoa-wash-volume.js +18 -23
- package/dist/chains/xlayer/eoa/index.d.ts +10 -6
- package/dist/chains/xlayer/eoa/index.js +8 -23
- package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
- package/dist/chains/xlayer/eoa/router-manager.js +3 -3
- package/dist/chains/xlayer/eoa/types.d.ts +2 -2
- package/dist/chains/xlayer/eoa/types.js +1 -3
- package/dist/chains/xlayer/index.d.ts +3 -2
- package/dist/chains/xlayer/index.js +4 -7
- package/dist/contracts/helper3.d.ts +20 -5
- package/dist/contracts/helper3.js +56 -20
- package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
- package/dist/contracts/tm-bundle-helpers.js +72 -0
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
- package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -113
- package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -67
- package/dist/contracts/tm-bundle-merkle/config.js +2 -114
- package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
- package/dist/contracts/tm-bundle-merkle/core.js +1 -591
- package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
- package/dist/contracts/tm-bundle-merkle/index.js +5 -5
- package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -46
- package/dist/contracts/tm-bundle-merkle/internal.js +2 -238
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -686
- package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
- package/dist/contracts/tm-bundle-merkle/private.js +1 -476
- package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
- package/dist/contracts/tm-bundle-merkle/submit.js +3 -928
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -506
- package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
- package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
- package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
- package/dist/contracts/tm-bundle-merkle/swap.js +2 -764
- package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
- package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
- package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
- package/dist/contracts/tm-bundle-merkle/utils.d.ts +6 -18
- package/dist/contracts/tm-bundle-merkle/utils.js +6 -1501
- package/dist/contracts/tm-bundle.d.ts +3 -51
- package/dist/contracts/tm-bundle.js +108 -177
- package/dist/contracts/tm.d.ts +3 -2
- package/dist/contracts/tm.js +37 -32
- package/dist/contracts/tm1.js +9 -4
- package/dist/contracts/tm2.js +9 -4
- package/dist/dex/direct-router-helpers.d.ts +264 -0
- package/dist/dex/direct-router-helpers.js +539 -0
- package/dist/dex/direct-router.d.ts +3 -125
- package/dist/dex/direct-router.js +237 -666
- package/dist/dex/types.d.ts +81 -0
- package/dist/dex/types.js +1 -0
- package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
- package/dist/exports/root-bundle-and-tooling.js +30 -0
- package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
- package/dist/exports/root-eni-and-bsc-iro.js +66 -0
- package/dist/exports/root-foundations.d.ts +35 -0
- package/dist/exports/root-foundations.js +70 -0
- package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
- package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
- package/dist/flap/index.d.ts +10 -0
- package/dist/flap/index.js +8 -0
- package/dist/flows/create.d.ts +2 -1
- package/dist/flows/create.js +6 -6
- package/dist/flows/index.d.ts +1 -0
- package/dist/flows/index.js +1 -0
- package/dist/index.d.ts +20 -85
- package/dist/index.js +20 -215
- package/dist/merkle/index.d.ts +12 -0
- package/dist/merkle/index.js +11 -0
- package/dist/shared/abis/common.d.ts +2 -83
- package/dist/shared/abis/common.js +2 -252
- package/dist/shared/abis/index.d.ts +5 -6
- package/dist/shared/abis/index.js +5 -7
- package/dist/shared/clients/blockrazor.js +39 -25
- package/dist/shared/clients/club48.d.ts +2 -2
- package/dist/shared/clients/club48.js +34 -29
- package/dist/shared/clients/emitservice.js +2 -0
- package/dist/shared/clients/four.d.ts +21 -6
- package/dist/shared/clients/four.js +29 -24
- package/dist/shared/clients/index.d.ts +8 -0
- package/dist/shared/clients/index.js +8 -0
- package/dist/shared/clients/merkle.js +27 -34
- package/dist/shared/constants/addresses.d.ts +1 -1
- package/dist/shared/constants/addresses.js +11 -2
- package/dist/shared/constants/chains.d.ts +1 -1
- package/dist/shared/constants/chains.js +1 -1
- package/dist/shared/constants/gas.d.ts +1 -1
- package/dist/shared/constants/gas.js +2 -6
- package/dist/shared/constants/index.d.ts +3 -0
- package/dist/shared/constants/index.js +1 -0
- package/dist/shared/constants/quote.d.ts +30 -0
- package/dist/shared/constants/quote.js +37 -0
- package/dist/shared/flap/abi.js +1 -1
- package/dist/shared/flap/constants.d.ts +1 -2
- package/dist/shared/flap/constants.js +2 -3
- package/dist/shared/flap/curve.js +3 -0
- package/dist/shared/flap/errors.d.ts +1 -4
- package/dist/shared/flap/errors.js +20 -1
- package/dist/shared/flap/index.d.ts +5 -4
- package/dist/shared/flap/index.js +5 -4
- package/dist/shared/flap/meta.d.ts +22 -18
- package/dist/shared/flap/meta.js +12 -17
- package/dist/shared/flap/permit.js +5 -2
- package/dist/shared/flap/pinata.d.ts +22 -6
- package/dist/shared/flap/pinata.js +21 -26
- package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
- package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
- package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
- package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
- package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
- package/dist/shared/flap/portal-bundle-merkle/core.js +86 -278
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.d.ts +7 -2
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +101 -206
- package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
- package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
- package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
- package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
- package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
- package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
- package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
- package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
- package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
- package/dist/shared/flap/portal-bundle-merkle/types.d.ts +83 -9
- package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
- package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
- package/dist/shared/flap/portal-bundle.js +55 -56
- package/dist/shared/flap/portal-create-token.d.ts +77 -0
- package/dist/shared/flap/portal-create-token.js +214 -0
- package/dist/shared/flap/portal.d.ts +14 -3
- package/dist/shared/flap/portal.js +50 -25
- package/dist/shared/flap/vanity.d.ts +1 -5
- package/dist/shared/flap/vanity.js +6 -17
- package/dist/shared/flap/vault.d.ts +17 -124
- package/dist/shared/flap/vault.js +67 -148
- package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
- package/dist/shared/foundation/dex/v3-path.js +35 -0
- package/dist/shared/foundation/gas/bundle-gas.d.ts +49 -0
- package/dist/shared/foundation/gas/bundle-gas.js +93 -0
- package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
- package/dist/shared/foundation/gas/profit-hop.js +72 -0
- package/dist/shared/foundation/index.d.ts +13 -0
- package/dist/shared/foundation/index.js +12 -0
- package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
- package/dist/shared/foundation/nonce/nonce-manager.js +183 -0
- package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
- package/dist/shared/foundation/normalize-unknown.js +29 -0
- package/dist/shared/foundation/sdk-logger.d.ts +13 -0
- package/dist/shared/foundation/sdk-logger.js +12 -0
- package/dist/shared/foundation/tx/build-request.d.ts +17 -0
- package/dist/shared/foundation/tx/build-request.js +25 -0
- package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
- package/dist/shared/foundation/tx/sign-batch.js +26 -0
- package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
- package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
- package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
- package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
- package/dist/shared/foundation/types/erc20.d.ts +65 -0
- package/dist/shared/foundation/types/erc20.js +1 -0
- package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
- package/dist/shared/foundation/types/holders-maker.js +1 -0
- package/dist/shared/foundation/types/index.d.ts +7 -0
- package/dist/shared/foundation/types/index.js +1 -0
- package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
- package/dist/shared/foundation/types/lp-inspect.js +1 -0
- package/dist/shared/foundation/types/multicall.d.ts +5 -0
- package/dist/shared/foundation/types/multicall.js +1 -0
- package/dist/shared/foundation/types/private-sale.d.ts +35 -0
- package/dist/shared/foundation/types/private-sale.js +1 -0
- package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
- package/dist/shared/foundation/types/quote-helpers.js +1 -0
- package/dist/shared/four/tax-token.d.ts +1 -1
- package/dist/shared/four/tax-token.js +27 -7
- package/dist/shared/index.d.ts +6 -0
- package/dist/shared/index.js +4 -0
- package/dist/types/errors.d.ts +27 -0
- package/dist/types/errors.js +34 -0
- package/dist/utils/airdrop-sweep.d.ts +4 -76
- package/dist/utils/airdrop-sweep.js +42 -55
- package/dist/utils/bundle-helpers.d.ts +9 -243
- package/dist/utils/bundle-helpers.js +10 -584
- package/dist/utils/constants.d.ts +5 -61
- package/dist/utils/constants.js +5 -80
- package/dist/utils/contract-factory.d.ts +2 -4
- package/dist/utils/contract-factory.js +25 -18
- package/dist/utils/erc20.d.ts +7 -89
- package/dist/utils/erc20.js +94 -125
- package/dist/utils/errors.d.ts +12 -1
- package/dist/utils/errors.js +60 -1
- package/dist/utils/holders-maker/addresses.d.ts +12 -0
- package/dist/utils/holders-maker/addresses.js +15 -0
- package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
- package/dist/utils/holders-maker/buy-tx.js +278 -0
- package/dist/utils/holders-maker/constants.d.ts +6 -0
- package/dist/utils/holders-maker/constants.js +7 -0
- package/dist/utils/holders-maker/disperse.d.ts +18 -0
- package/dist/utils/holders-maker/disperse.js +90 -0
- package/dist/utils/holders-maker/routing.d.ts +4 -0
- package/dist/utils/holders-maker/routing.js +45 -0
- package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
- package/dist/utils/holders-maker/transfer-tx.js +67 -0
- package/dist/utils/holders-maker-helpers.d.ts +9 -0
- package/dist/utils/holders-maker-helpers.js +9 -0
- package/dist/utils/holders-maker.d.ts +2 -138
- package/dist/utils/holders-maker.js +26 -661
- package/dist/utils/hop-chains.d.ts +35 -0
- package/dist/utils/hop-chains.js +215 -0
- package/dist/utils/lp-inspect-helpers.d.ts +9 -0
- package/dist/utils/lp-inspect-helpers.js +109 -0
- package/dist/utils/lp-inspect.d.ts +2 -112
- package/dist/utils/lp-inspect.js +73 -223
- package/dist/utils/mpcExclusive.d.ts +2 -5
- package/dist/utils/mpcExclusive.js +4 -3
- package/dist/utils/private-sale.d.ts +2 -58
- package/dist/utils/private-sale.js +4 -15
- package/dist/utils/provider-factory.d.ts +4 -0
- package/dist/utils/provider-factory.js +10 -0
- package/dist/utils/quote-helpers.d.ts +4 -45
- package/dist/utils/quote-helpers.js +17 -74
- package/dist/utils/stealth-transfer.d.ts +2 -28
- package/dist/utils/stealth-transfer.js +31 -15
- package/dist/utils/swap-helpers.d.ts +2 -15
- package/dist/utils/swap-helpers.js +6 -11
- package/dist/utils/types/airdrop-sweep.d.ts +1 -0
- package/dist/utils/types/airdrop-sweep.js +1 -0
- package/dist/utils/types/contract-factory.d.ts +1 -0
- package/dist/utils/types/contract-factory.js +1 -0
- package/dist/utils/types/erc20.d.ts +1 -0
- package/dist/utils/types/erc20.js +1 -0
- package/dist/utils/types/errors.d.ts +1 -0
- package/dist/utils/types/errors.js +1 -0
- package/dist/utils/types/holders-maker.d.ts +1 -0
- package/dist/utils/types/holders-maker.js +1 -0
- package/dist/utils/types/hop-chains.d.ts +8 -0
- package/dist/utils/types/hop-chains.js +1 -0
- package/dist/utils/types/index.d.ts +13 -0
- package/dist/utils/types/index.js +1 -0
- package/dist/utils/types/lp-inspect.d.ts +1 -0
- package/dist/utils/types/lp-inspect.js +1 -0
- package/dist/utils/types/mpc-exclusive.d.ts +5 -0
- package/dist/utils/types/mpc-exclusive.js +1 -0
- package/dist/utils/types/private-sale.d.ts +1 -0
- package/dist/utils/types/private-sale.js +1 -0
- package/dist/utils/types/quote-helpers.d.ts +1 -0
- package/dist/utils/types/quote-helpers.js +1 -0
- package/dist/utils/types/stealth-transfer.d.ts +44 -0
- package/dist/utils/types/stealth-transfer.js +1 -0
- package/dist/utils/types/wallet.d.ts +25 -0
- package/dist/utils/types/wallet.js +1 -0
- package/dist/utils/wallet.d.ts +2 -25
- package/dist/utils/wallet.js +13 -10
- package/dist/vanity/index.d.ts +5 -0
- package/dist/vanity/index.js +5 -0
- package/package.json +160 -4
- package/src/abis/contracts/TaxToken.json +969 -0
- package/src/abis/contracts/TokenManager.json +836 -0
- package/src/abis/contracts/TokenManager2.json +136 -0
- package/src/abis/contracts/TokenManagerHelper3.json +993 -0
- package/dist/shared/abis/TaxToken.json +0 -105
- package/dist/shared/abis/TokenManager2.json +0 -60
- /package/dist/{shared/abis → abis/contracts}/TokenManager.json +0 -0
- /package/dist/{shared/abis → abis/contracts}/TokenManagerHelper3.json +0 -0
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flap Protocol 错误代码
|
|
3
|
+
*/
|
|
4
|
+
import { getErrorMessageFromUnknown } from '../foundation/normalize-unknown.js';
|
|
1
5
|
/**
|
|
2
6
|
* 解析 Flap Protocol 错误信息
|
|
3
7
|
*
|
|
@@ -17,7 +21,7 @@
|
|
|
17
21
|
* ```
|
|
18
22
|
*/
|
|
19
23
|
export function parseFlapError(error) {
|
|
20
|
-
const msg =
|
|
24
|
+
const msg = getFlapErrorText(error);
|
|
21
25
|
const msgLower = msg.toLowerCase();
|
|
22
26
|
// Token 状态相关错误
|
|
23
27
|
if (msgLower.includes('token already exists') || msgLower.includes('already created')) {
|
|
@@ -60,6 +64,21 @@ export function parseFlapError(error) {
|
|
|
60
64
|
// 无法识别的错误
|
|
61
65
|
return null;
|
|
62
66
|
}
|
|
67
|
+
function getFlapErrorText(error) {
|
|
68
|
+
if (error !== null && typeof error === 'object') {
|
|
69
|
+
const record = error;
|
|
70
|
+
const topLevel = record.message;
|
|
71
|
+
if (typeof topLevel === 'string' && topLevel)
|
|
72
|
+
return topLevel;
|
|
73
|
+
const data = record.data;
|
|
74
|
+
if (data !== null && typeof data === 'object') {
|
|
75
|
+
const nestedMessage = data.message;
|
|
76
|
+
if (typeof nestedMessage === 'string' && nestedMessage)
|
|
77
|
+
return nestedMessage;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return getErrorMessageFromUnknown(error);
|
|
81
|
+
}
|
|
63
82
|
/**
|
|
64
83
|
* 获取错误的友好提示信息(中文)
|
|
65
84
|
*
|
|
@@ -7,16 +7,17 @@
|
|
|
7
7
|
* 使用时请从具体文件导入
|
|
8
8
|
*/
|
|
9
9
|
export { FlapPortal, FlapPortalWriter, type FlapChain, // 主要的 FlapChain 定义
|
|
10
|
-
type PortalConfig, type TokenStateV2, type TokenStateV3, type TokenStateV4, type TokenStateV5, type TokenStateV7, type QuoteExactInputParams, type ExactInputParams, type ExactInputV3Params, type NewTokenV3Params, type NewTokenV4Params, type NewTokenV5Params, type TaxDistributionConfig, validateTaxDistribution, TokenStatus, TokenVersion, DexThreshType, MigratorType, V3LPFeeProfile, lpFeeProfileToV3Fee, DEXId, } from './portal.js';
|
|
10
|
+
type PortalConfig, type TokenStateV2, type TokenStateV3, type TokenStateV4, type TokenStateV5, type TokenStateV7, type QuoteExactInputParams, type ExactInputParams, type ExactInputV3Params, type NewTokenV3Params, type NewTokenV4Params, type NewTokenV5Params, type TaxDistributionConfig, validateTaxDistribution, TokenStatus, TokenVersion, FeeType, DexThreshType, MigratorType, V3LPFeeProfile, lpFeeProfileToV3Fee, DEXId, } from './portal.js';
|
|
11
11
|
export { CDPV2 } from './curve.js';
|
|
12
12
|
export { buildPermitPiggybackAuto } from './permit.js';
|
|
13
13
|
export { uploadTokenMeta, type TokenMetaInput } from './ipfs.js';
|
|
14
|
-
export { PinataClient, type PinataConfig, pinFileToIPFSWithJWT, pinImageByPath, pinFileToIPFSWithJWTWeb, pinDataURLWithJWTWeb, dataURLToBlob, type PinataPinResp } from './pinata.js';
|
|
14
|
+
export { PinataClient, type PinataConfig, pinFileToIPFSWithJWT, pinImageByPath, pinFileToIPFSWithJWTWeb, pinDataURLWithJWTWeb, dataURLToBlob, type PinataPinResp, } from './pinata.js';
|
|
15
15
|
export { predictVanityTokenAddressByChain, findSaltEndingByChain } from './vanity.js';
|
|
16
|
+
export { MAGIC_DIVIDEND_SELF, normalizeTaxLaunchConfig, populateCreateTokenTransaction, type NormalizedTaxLaunchConfig, } from './portal-create-token.js';
|
|
16
17
|
export { getFlapMetaByAddress, getFlapMetasByAddresses } from './meta.js';
|
|
17
18
|
export { parseFlapError, getFlapErrorMessage, getFlapErrorMessageEn, type FlapErrorCode } from './errors.js';
|
|
18
|
-
export { FLAP_DEFAULT_FEE_RATES, FLAP_IPFS_API_URL, FLAP_VANITY_SUFFIX, FLAP_DEX_THRESHOLDS, FLAP_TOTAL_SUPPLY, ZERO_ADDRESS, CHAIN_TAX_SUPPORT, getVanitySuffix, isChainSupportTax, FLAP_PORTAL_ADDRESSES } from './constants.js';
|
|
19
|
+
export { FLAP_DEFAULT_FEE_RATES, FLAP_IPFS_API_URL, FLAP_VANITY_SUFFIX, FLAP_DEX_THRESHOLDS, FLAP_TOTAL_SUPPLY, ZERO_ADDRESS, CHAIN_TAX_SUPPORT, getVanitySuffix, isChainSupportTax, FLAP_PORTAL_ADDRESSES, } from './constants.js';
|
|
19
20
|
export * from './abi.js';
|
|
20
21
|
export { createTokenWithBundleBuy, batchBuyWithBundle, batchSellWithBundle, type FlapBundleConfig, type FlapChainForBundle, type FlapCreateWithBundleBuyParams, type FlapCreateWithBundleBuyResult, type FlapBatchBuyParams, type FlapBatchBuyResult, type FlapBatchSellParams, type FlapBatchSellResult, flapPrivateBuy, flapPrivateSell, flapBatchPrivateBuy, flapBatchPrivateSell, type FlapPrivateBuyParams, type FlapPrivateSellParams, type FlapBatchPrivateBuyParams, type FlapBatchPrivateSellParams, type FlapBatchPrivateSellResult, } from './portal-bundle.js';
|
|
21
22
|
export * from './portal-bundle-merkle/index.js';
|
|
22
|
-
export { NONE_EXTENSION_ID, VAULT_TYPE_LABELS, VAULT_TYPE_CATEGORIES, VAULT_FACTORY_ADDRESSES, VAULT_PORTAL_ADDRESSES, VAULT_PORTAL_ABI, VAULT_EXTRA_CONFIG, FLAP_GUARDIAN_ADDRESSES, VAULT_FACTORY_ABI, VAULT_FACTORY_V2_ABI, VAULT_BASE_ABI, VAULT_BASE_V2_ABI, type VaultType, type TaxVaultConfig, type VaultInfo, type FieldDescriptor, type VaultDataSchema, type ApproveAction, type VaultMethodSchema, type VaultUISchema, encodeVaultData, buildVaultParams,
|
|
23
|
+
export { NONE_EXTENSION_ID, VAULT_TYPE_LABELS, VAULT_TYPE_CATEGORIES, VAULT_FACTORY_ADDRESSES, VAULT_PORTAL_ADDRESSES, VAULT_PORTAL_ABI, VAULT_EXTRA_CONFIG, FLAP_GUARDIAN_ADDRESSES, VAULT_FACTORY_ABI, VAULT_FACTORY_V2_ABI, VAULT_BASE_ABI, VAULT_BASE_V2_ABI, type VaultType, type TaxVaultConfig, type VaultInfo, type FieldDescriptor, type VaultDataSchema, type ApproveAction, type VaultMethodSchema, type VaultUISchema, encodeVaultData, buildVaultParams, buildVaultExtensionParams, getVaultFactoryAddress, getVaultPortalAddress, queryVaultDataSchema, queryVaultUISchema, queryVaultDescription, validateVaultFactory, getVaultInfo, isValidContract, } from './vault.js';
|
|
@@ -7,15 +7,16 @@
|
|
|
7
7
|
* 使用时请从具体文件导入
|
|
8
8
|
*/
|
|
9
9
|
// 核心模块 - 显式导出避免冲突
|
|
10
|
-
export { FlapPortal, FlapPortalWriter, validateTaxDistribution, TokenStatus, TokenVersion, DexThreshType, MigratorType, V3LPFeeProfile, lpFeeProfileToV3Fee, DEXId, } from './portal.js';
|
|
10
|
+
export { FlapPortal, FlapPortalWriter, validateTaxDistribution, TokenStatus, TokenVersion, FeeType, DexThreshType, MigratorType, V3LPFeeProfile, lpFeeProfileToV3Fee, DEXId, } from './portal.js';
|
|
11
11
|
export { CDPV2 } from './curve.js';
|
|
12
12
|
export { buildPermitPiggybackAuto } from './permit.js';
|
|
13
13
|
export { uploadTokenMeta } from './ipfs.js';
|
|
14
|
-
export { PinataClient, pinFileToIPFSWithJWT, pinImageByPath, pinFileToIPFSWithJWTWeb, pinDataURLWithJWTWeb, dataURLToBlob } from './pinata.js';
|
|
14
|
+
export { PinataClient, pinFileToIPFSWithJWT, pinImageByPath, pinFileToIPFSWithJWTWeb, pinDataURLWithJWTWeb, dataURLToBlob, } from './pinata.js';
|
|
15
15
|
export { predictVanityTokenAddressByChain, findSaltEndingByChain } from './vanity.js';
|
|
16
|
+
export { MAGIC_DIVIDEND_SELF, normalizeTaxLaunchConfig, populateCreateTokenTransaction, } from './portal-create-token.js';
|
|
16
17
|
export { getFlapMetaByAddress, getFlapMetasByAddresses } from './meta.js';
|
|
17
18
|
export { parseFlapError, getFlapErrorMessage, getFlapErrorMessageEn } from './errors.js';
|
|
18
|
-
export { FLAP_DEFAULT_FEE_RATES, FLAP_IPFS_API_URL, FLAP_VANITY_SUFFIX, FLAP_DEX_THRESHOLDS, FLAP_TOTAL_SUPPLY, ZERO_ADDRESS, CHAIN_TAX_SUPPORT, getVanitySuffix, isChainSupportTax, FLAP_PORTAL_ADDRESSES } from './constants.js';
|
|
19
|
+
export { FLAP_DEFAULT_FEE_RATES, FLAP_IPFS_API_URL, FLAP_VANITY_SUFFIX, FLAP_DEX_THRESHOLDS, FLAP_TOTAL_SUPPLY, ZERO_ADDRESS, CHAIN_TAX_SUPPORT, getVanitySuffix, isChainSupportTax, FLAP_PORTAL_ADDRESSES, } from './constants.js';
|
|
19
20
|
export * from './abi.js';
|
|
20
21
|
// Bundle 功能
|
|
21
22
|
export { createTokenWithBundleBuy, batchBuyWithBundle, batchSellWithBundle, flapPrivateBuy, flapPrivateSell, flapBatchPrivateBuy, flapBatchPrivateSell, } from './portal-bundle.js';
|
|
@@ -28,6 +29,6 @@ NONE_EXTENSION_ID, VAULT_TYPE_LABELS, VAULT_TYPE_CATEGORIES, VAULT_FACTORY_ADDRE
|
|
|
28
29
|
// ABI
|
|
29
30
|
VAULT_FACTORY_ABI, VAULT_FACTORY_V2_ABI, VAULT_BASE_ABI, VAULT_BASE_V2_ABI,
|
|
30
31
|
// 工具函数
|
|
31
|
-
encodeVaultData, buildVaultParams,
|
|
32
|
+
encodeVaultData, buildVaultParams, buildVaultExtensionParams, getVaultFactoryAddress, getVaultPortalAddress,
|
|
32
33
|
// 链上查询
|
|
33
34
|
queryVaultDataSchema, queryVaultUISchema, queryVaultDescription, validateVaultFactory, getVaultInfo, isValidContract, } from './vault.js';
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
import { JsonRpcProvider } from 'ethers';
|
|
2
2
|
export type FlapChain = 'BSC' | 'BASE' | 'XLAYER' | 'MORPH';
|
|
3
|
+
/** JSON 可序列化值(递归) */
|
|
4
|
+
export type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
5
|
+
[key: string]: JsonValue;
|
|
6
|
+
};
|
|
7
|
+
/** IPFS 元数据 JSON(字段因项目而异) */
|
|
8
|
+
export type FlapTokenMetaJson = {
|
|
9
|
+
[key: string]: JsonValue;
|
|
10
|
+
};
|
|
11
|
+
export type FlapMetaByAddressResult = {
|
|
12
|
+
cid: string;
|
|
13
|
+
data?: FlapTokenMetaJson;
|
|
14
|
+
};
|
|
15
|
+
export type FlapMetaByTokenResult = {
|
|
16
|
+
token: string;
|
|
17
|
+
cid?: string;
|
|
18
|
+
data?: FlapTokenMetaJson;
|
|
19
|
+
imageUrl?: string;
|
|
20
|
+
error?: string;
|
|
21
|
+
};
|
|
3
22
|
export type FetchMetaOptions = {
|
|
4
23
|
ipfsGateway?: string;
|
|
5
24
|
multicall3?: string;
|
|
@@ -7,24 +26,9 @@ export type FetchMetaOptions = {
|
|
|
7
26
|
/**
|
|
8
27
|
* 根据代币地址直接读取合约 metaURI()/meta()(IPFS CID),并拉取元数据 JSON。
|
|
9
28
|
*/
|
|
10
|
-
export declare function getFlapMetaByAddress(chain: FlapChain, rpcUrl: string, tokenAddress: string, opts?: FetchMetaOptions): Promise<
|
|
11
|
-
|
|
12
|
-
data?: any;
|
|
13
|
-
} | undefined>;
|
|
14
|
-
export declare function getFlapMetasByAddresses(chain: FlapChain, rpcUrl: string, tokenAddresses: string[], opts?: FetchMetaOptions): Promise<Array<{
|
|
15
|
-
token: string;
|
|
16
|
-
cid?: string;
|
|
17
|
-
data?: any;
|
|
18
|
-
imageUrl?: string;
|
|
19
|
-
error?: string;
|
|
20
|
-
}>>;
|
|
29
|
+
export declare function getFlapMetaByAddress(chain: FlapChain, rpcUrl: string, tokenAddress: string, opts?: FetchMetaOptions): Promise<FlapMetaByAddressResult | undefined>;
|
|
30
|
+
export declare function getFlapMetasByAddresses(chain: FlapChain, rpcUrl: string, tokenAddresses: string[], opts?: FetchMetaOptions): Promise<FlapMetaByTokenResult[]>;
|
|
21
31
|
/**
|
|
22
32
|
* 使用 Multicall3 批量读取 metaURI()/meta(),metaURI 优先、meta 兜底。
|
|
23
33
|
*/
|
|
24
|
-
export declare function getFlapMetaUrisWithMulticall(provider: JsonRpcProvider, chain: FlapChain, tokenAddresses: string[], multicall3?: string, ipfsGateway?: string): Promise<
|
|
25
|
-
token: string;
|
|
26
|
-
cid?: string;
|
|
27
|
-
data?: any;
|
|
28
|
-
imageUrl?: string;
|
|
29
|
-
error?: string;
|
|
30
|
-
}>>;
|
|
34
|
+
export declare function getFlapMetaUrisWithMulticall(provider: JsonRpcProvider, chain: FlapChain, tokenAddresses: string[], multicall3?: string, ipfsGateway?: string): Promise<FlapMetaByTokenResult[]>;
|
package/dist/shared/flap/meta.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { JsonRpcProvider, Contract, Interface } from 'ethers';
|
|
2
|
-
import { ADDRESSES } from '
|
|
2
|
+
import { ADDRESSES } from '../constants/index.js';
|
|
3
|
+
import { getErrorMessageFromUnknown } from '../foundation/index.js';
|
|
3
4
|
const DEFAULT_GATEWAYS = {
|
|
4
5
|
BSC: 'https://ipfs.io/ipfs/',
|
|
5
6
|
BASE: 'https://ipfs.io/ipfs/',
|
|
6
7
|
XLAYER: 'https://ipfs.io/ipfs/',
|
|
7
|
-
MORPH: 'https://ipfs.io/ipfs/'
|
|
8
|
+
MORPH: 'https://ipfs.io/ipfs/',
|
|
8
9
|
};
|
|
9
10
|
function normalizeCid(cidOrUrl) {
|
|
10
11
|
if (!cidOrUrl)
|
|
@@ -18,13 +19,10 @@ async function fetchIpfsJson(cid, gateway) {
|
|
|
18
19
|
const resp = await fetch(url);
|
|
19
20
|
if (!resp.ok)
|
|
20
21
|
throw new Error(`IPFS fetch failed: ${resp.status} ${await resp.text()}`);
|
|
21
|
-
return await resp.json();
|
|
22
|
+
return (await resp.json());
|
|
22
23
|
}
|
|
23
24
|
async function readCidFromToken(provider, tokenAddress) {
|
|
24
|
-
const abi = [
|
|
25
|
-
'function metaURI() view returns (string)',
|
|
26
|
-
'function meta() view returns (string)'
|
|
27
|
-
];
|
|
25
|
+
const abi = ['function metaURI() view returns (string)', 'function meta() view returns (string)'];
|
|
28
26
|
const c = new Contract(tokenAddress, abi, provider);
|
|
29
27
|
try {
|
|
30
28
|
const v = await c.metaURI();
|
|
@@ -93,17 +91,14 @@ export async function getFlapMetaUrisWithMulticall(provider, chain, tokenAddress
|
|
|
93
91
|
BSC: ADDRESSES.BSC.Multicall3,
|
|
94
92
|
BASE: ADDRESSES.BSC.Multicall3, // 所有链使用相同地址
|
|
95
93
|
XLAYER: ADDRESSES.BSC.Multicall3,
|
|
96
|
-
MORPH: ADDRESSES.BSC.Multicall3
|
|
94
|
+
MORPH: ADDRESSES.BSC.Multicall3,
|
|
97
95
|
};
|
|
98
96
|
const mcAddress = multicall3 || DEFAULT_MULTICALL3[chain];
|
|
99
97
|
const mcAbi = [
|
|
100
|
-
'function tryAggregate(bool requireSuccess, tuple(address target, bytes callData)[] calls) public returns (tuple(bool success, bytes returnData)[])'
|
|
98
|
+
'function tryAggregate(bool requireSuccess, tuple(address target, bytes callData)[] calls) public returns (tuple(bool success, bytes returnData)[])',
|
|
101
99
|
];
|
|
102
100
|
const mc = new Contract(mcAddress, mcAbi, provider);
|
|
103
|
-
const iface = new Interface([
|
|
104
|
-
'function metaURI() view returns (string)',
|
|
105
|
-
'function meta() view returns (string)'
|
|
106
|
-
]);
|
|
101
|
+
const iface = new Interface(['function metaURI() view returns (string)', 'function meta() view returns (string)']);
|
|
107
102
|
// 第一轮:metaURI()
|
|
108
103
|
const callDataMetaURI = iface.encodeFunctionData('metaURI', []);
|
|
109
104
|
const calls1 = tokenAddresses.map((t) => ({ target: t, callData: callDataMetaURI }));
|
|
@@ -111,7 +106,7 @@ export async function getFlapMetaUrisWithMulticall(provider, chain, tokenAddress
|
|
|
111
106
|
try {
|
|
112
107
|
res1 = await mc.tryAggregate(false, calls1);
|
|
113
108
|
}
|
|
114
|
-
catch
|
|
109
|
+
catch {
|
|
115
110
|
// 如果 multicall 不可用,降级为逐个查询
|
|
116
111
|
const fallbacks = await Promise.all(tokenAddresses.map(async (t) => {
|
|
117
112
|
try {
|
|
@@ -119,7 +114,7 @@ export async function getFlapMetaUrisWithMulticall(provider, chain, tokenAddress
|
|
|
119
114
|
return { token: t, cid };
|
|
120
115
|
}
|
|
121
116
|
catch (err) {
|
|
122
|
-
return { token: t, error:
|
|
117
|
+
return { token: t, error: getErrorMessageFromUnknown(err) };
|
|
123
118
|
}
|
|
124
119
|
}));
|
|
125
120
|
return fallbacks;
|
|
@@ -132,7 +127,7 @@ export async function getFlapMetaUrisWithMulticall(provider, chain, tokenAddress
|
|
|
132
127
|
const [uri] = iface.decodeFunctionResult('metaURI', r.returnData);
|
|
133
128
|
return { token: t, cid: String(uri) };
|
|
134
129
|
}
|
|
135
|
-
catch
|
|
130
|
+
catch {
|
|
136
131
|
needMeta.push(t);
|
|
137
132
|
return { token: t };
|
|
138
133
|
}
|
|
@@ -171,7 +166,7 @@ export async function getFlapMetaUrisWithMulticall(provider, chain, tokenAddress
|
|
|
171
166
|
interim[i].cid = String(uri);
|
|
172
167
|
}
|
|
173
168
|
catch (e) {
|
|
174
|
-
interim[i].error =
|
|
169
|
+
interim[i].error = getErrorMessageFromUnknown(e);
|
|
175
170
|
}
|
|
176
171
|
}
|
|
177
172
|
else {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Wallet, AbiCoder, Contract, JsonRpcProvider } from 'ethers';
|
|
2
2
|
import { FLAP_PORTAL_ADDRESSES } from './constants.js';
|
|
3
|
-
import {
|
|
3
|
+
import { CHAIN_ID_MAP } from '../constants/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* 构建 Permit Piggyback 数据
|
|
6
6
|
* 自动签名并使用正确的 Portal 代理地址
|
|
@@ -22,7 +22,10 @@ export async function buildPermitPiggybackAuto(chain, privateKey, tokenAddress,
|
|
|
22
22
|
const wallet = new Wallet(privateKey);
|
|
23
23
|
const owner = wallet.address;
|
|
24
24
|
// 获取 chainId
|
|
25
|
-
const chainId =
|
|
25
|
+
const chainId = CHAIN_ID_MAP[chain];
|
|
26
|
+
if (chainId === undefined) {
|
|
27
|
+
throw new Error(`Unknown chain: ${chain}`);
|
|
28
|
+
}
|
|
26
29
|
// 读取代币 name(优先 override,其次链上查询,不可用时回退为空字符串)
|
|
27
30
|
let tokenName = opts?.tokenNameOverride ?? '';
|
|
28
31
|
if (!tokenName && opts?.rpcUrl) {
|
|
@@ -2,26 +2,41 @@ export type PinataConfig = {
|
|
|
2
2
|
jwt: string;
|
|
3
3
|
gateway?: string;
|
|
4
4
|
};
|
|
5
|
+
type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
6
|
+
[key: string]: JsonValue;
|
|
7
|
+
};
|
|
8
|
+
/** Pinata gateway JSON 响应(结构因 CID 内容而异) */
|
|
9
|
+
export type PinataGatewayJson = {
|
|
10
|
+
[key: string]: JsonValue;
|
|
11
|
+
};
|
|
12
|
+
type PinataPinApiResponse = {
|
|
13
|
+
IpfsHash?: string;
|
|
14
|
+
cid?: string;
|
|
15
|
+
PinSize?: number;
|
|
16
|
+
Timestamp?: string;
|
|
17
|
+
};
|
|
18
|
+
export type PinataJsonUpload = {
|
|
19
|
+
[key: string]: JsonValue;
|
|
20
|
+
};
|
|
5
21
|
export declare class PinataClient {
|
|
6
22
|
private client;
|
|
7
|
-
private ready;
|
|
8
23
|
constructor(cfg: PinataConfig);
|
|
9
24
|
uploadFile(file: File): Promise<{
|
|
10
25
|
cid: string;
|
|
11
26
|
id: string;
|
|
12
27
|
}>;
|
|
13
|
-
uploadJSON(obj:
|
|
28
|
+
uploadJSON(obj: PinataJsonUpload, name?: string): Promise<{
|
|
14
29
|
cid: string;
|
|
15
30
|
id: string;
|
|
16
31
|
}>;
|
|
17
|
-
get(cid: string): Promise<
|
|
18
|
-
url(cid: string): Promise<
|
|
32
|
+
get(cid: string): Promise<PinataGatewayJson>;
|
|
33
|
+
url(cid: string): Promise<string>;
|
|
19
34
|
}
|
|
20
35
|
export type PinataPinResp = {
|
|
21
36
|
cid: string;
|
|
22
37
|
size?: number;
|
|
23
38
|
timestamp?: string;
|
|
24
|
-
raw?:
|
|
39
|
+
raw?: PinataPinApiResponse;
|
|
25
40
|
};
|
|
26
41
|
/**
|
|
27
42
|
* 使用 Pinata JWT 直接上传文件(Node 环境)
|
|
@@ -30,7 +45,7 @@ export type PinataPinResp = {
|
|
|
30
45
|
* @param data 可选:内存 Buffer(当未提供 filePath 时使用)
|
|
31
46
|
* @param fileName 可选:内存数据的文件名
|
|
32
47
|
*/
|
|
33
|
-
export declare function pinFileToIPFSWithJWT(jwt: string, filePath?: string, data?:
|
|
48
|
+
export declare function pinFileToIPFSWithJWT(jwt: string, filePath?: string, data?: Buffer | Uint8Array, fileName?: string): Promise<PinataPinResp>;
|
|
34
49
|
/**
|
|
35
50
|
* 便捷方法:上传本地图片路径(返回 CID)
|
|
36
51
|
*/
|
|
@@ -38,3 +53,4 @@ export declare function pinImageByPath(jwt: string, filePath: string): Promise<s
|
|
|
38
53
|
export declare function pinFileToIPFSWithJWTWeb(jwt: string, file: Blob, fileName?: string): Promise<PinataPinResp>;
|
|
39
54
|
export declare function dataURLToBlob(dataUrl: string): Blob;
|
|
40
55
|
export declare function pinDataURLWithJWTWeb(jwt: string, dataUrl: string, fileName?: string): Promise<PinataPinResp>;
|
|
56
|
+
export {};
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { createReadStream } from 'node:fs';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import NodeFormData from 'form-data';
|
|
4
|
+
import { PinataSDK } from 'pinata';
|
|
1
5
|
export class PinataClient {
|
|
6
|
+
client;
|
|
2
7
|
constructor(cfg) {
|
|
3
|
-
this.
|
|
4
|
-
const mod = await import('pinata');
|
|
5
|
-
this.client = new mod.PinataSDK({ pinataJwt: cfg.jwt, pinataGateway: cfg.gateway });
|
|
6
|
-
})();
|
|
8
|
+
this.client = new PinataSDK({ pinataJwt: cfg.jwt, pinataGateway: cfg.gateway });
|
|
7
9
|
}
|
|
8
10
|
async uploadFile(file) {
|
|
9
|
-
await this.ready;
|
|
10
11
|
const r = await this.client.upload.file(file);
|
|
11
|
-
return { cid: r.cid, id: r.id };
|
|
12
|
+
return { cid: r.cid, id: r.id ?? '' };
|
|
12
13
|
}
|
|
13
14
|
async uploadJSON(obj, name = 'meta.json') {
|
|
14
15
|
const blob = new Blob([JSON.stringify(obj)], { type: 'application/json' });
|
|
@@ -16,12 +17,9 @@ export class PinataClient {
|
|
|
16
17
|
return await this.uploadFile(file);
|
|
17
18
|
}
|
|
18
19
|
async get(cid) {
|
|
19
|
-
await this.
|
|
20
|
-
const data = await this.client.gateways.public.get(cid);
|
|
21
|
-
return data;
|
|
20
|
+
return await this.client.gateways.public.get(cid);
|
|
22
21
|
}
|
|
23
22
|
async url(cid) {
|
|
24
|
-
await this.ready;
|
|
25
23
|
return await this.client.gateways.convert(cid);
|
|
26
24
|
}
|
|
27
25
|
}
|
|
@@ -33,12 +31,9 @@ export class PinataClient {
|
|
|
33
31
|
* @param fileName 可选:内存数据的文件名
|
|
34
32
|
*/
|
|
35
33
|
export async function pinFileToIPFSWithJWT(jwt, filePath, data, fileName) {
|
|
36
|
-
const
|
|
37
|
-
const FormDataMod = await import('form-data');
|
|
38
|
-
const fsMod = await import('fs');
|
|
39
|
-
const form = new FormDataMod.default ? new FormDataMod.default() : new FormDataMod();
|
|
34
|
+
const form = new NodeFormData();
|
|
40
35
|
if (filePath && filePath.length > 0) {
|
|
41
|
-
form.append('file',
|
|
36
|
+
form.append('file', createReadStream(filePath));
|
|
42
37
|
}
|
|
43
38
|
else if (data) {
|
|
44
39
|
form.append('file', data, { filename: fileName || 'upload.bin' });
|
|
@@ -46,17 +41,17 @@ export async function pinFileToIPFSWithJWT(jwt, filePath, data, fileName) {
|
|
|
46
41
|
else {
|
|
47
42
|
throw new Error('pinFileToIPFSWithJWT: either filePath or data must be provided');
|
|
48
43
|
}
|
|
49
|
-
const resp = await
|
|
50
|
-
headers: { Authorization: `Bearer ${jwt}`, ...
|
|
44
|
+
const resp = await axios.post('https://api.pinata.cloud/pinning/pinFileToIPFS', form, {
|
|
45
|
+
headers: { Authorization: `Bearer ${jwt}`, ...form.getHeaders() },
|
|
51
46
|
maxContentLength: Infinity,
|
|
52
|
-
maxBodyLength: Infinity
|
|
47
|
+
maxBodyLength: Infinity,
|
|
53
48
|
});
|
|
54
|
-
const d = resp.data
|
|
49
|
+
const d = resp.data ?? {};
|
|
55
50
|
return {
|
|
56
|
-
cid: d.IpfsHash || d.cid,
|
|
51
|
+
cid: d.IpfsHash || d.cid || '',
|
|
57
52
|
size: d.PinSize,
|
|
58
53
|
timestamp: d.Timestamp,
|
|
59
|
-
raw: d
|
|
54
|
+
raw: d,
|
|
60
55
|
};
|
|
61
56
|
}
|
|
62
57
|
/**
|
|
@@ -70,23 +65,23 @@ export async function pinImageByPath(jwt, filePath) {
|
|
|
70
65
|
// 说明:使用浏览器自带 FormData + fetch;参数为 File/Blob 或 dataURL
|
|
71
66
|
export async function pinFileToIPFSWithJWTWeb(jwt, file, fileName) {
|
|
72
67
|
const form = new FormData();
|
|
73
|
-
const name = fileName || file.name || 'upload.bin';
|
|
68
|
+
const name = fileName || (file instanceof File ? file.name : undefined) || 'upload.bin';
|
|
74
69
|
form.append('file', file, name);
|
|
75
70
|
const resp = await fetch('https://api.pinata.cloud/pinning/pinFileToIPFS', {
|
|
76
71
|
method: 'POST',
|
|
77
72
|
headers: { Authorization: `Bearer ${jwt}` },
|
|
78
|
-
body: form
|
|
73
|
+
body: form,
|
|
79
74
|
});
|
|
80
75
|
if (!resp.ok) {
|
|
81
76
|
const txt = await resp.text();
|
|
82
77
|
throw new Error(`Pinata upload failed: ${resp.status} ${txt}`);
|
|
83
78
|
}
|
|
84
|
-
const d = await resp.json();
|
|
79
|
+
const d = (await resp.json());
|
|
85
80
|
return {
|
|
86
|
-
cid: d.IpfsHash || d.cid,
|
|
81
|
+
cid: d.IpfsHash || d.cid || '',
|
|
87
82
|
size: d.PinSize,
|
|
88
83
|
timestamp: d.Timestamp,
|
|
89
|
-
raw: d
|
|
84
|
+
raw: d,
|
|
90
85
|
};
|
|
91
86
|
}
|
|
92
87
|
export function dataURLToBlob(dataUrl) {
|
|
@@ -4,76 +4,7 @@ export declare const BLOCKRAZOR_BUILDER_EOA: "0x1266C6bE60392A8Ff346E8d5ECCd3E69
|
|
|
4
4
|
export type FlapAnyConfig = FlapBundleMerkleConfig | FlapSignConfig;
|
|
5
5
|
export declare const CHAIN_ID_MAP: Record<FlapChainForMerkleBundle, number>;
|
|
6
6
|
export declare const MERKLE_SUPPORTED_CHAIN_IDS: readonly [56, 1];
|
|
7
|
-
export type MerkleSupportedChainId = typeof MERKLE_SUPPORTED_CHAIN_IDS[number];
|
|
7
|
+
export type MerkleSupportedChainId = (typeof MERKLE_SUPPORTED_CHAIN_IDS)[number];
|
|
8
8
|
export declare const PORTAL_ABI: string[];
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
en: string;
|
|
12
|
-
zh: string;
|
|
13
|
-
};
|
|
14
|
-
AMOUNT_MISMATCH: {
|
|
15
|
-
en: (buyCount: number, buyerCount: number) => string;
|
|
16
|
-
zh: (buyCount: number, buyerCount: number) => string;
|
|
17
|
-
};
|
|
18
|
-
KEY_AMOUNT_MISMATCH: {
|
|
19
|
-
en: string;
|
|
20
|
-
zh: string;
|
|
21
|
-
};
|
|
22
|
-
SELL_KEY_AMOUNT_MISMATCH: {
|
|
23
|
-
en: string;
|
|
24
|
-
zh: string;
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
export declare function getErrorMessage(key: keyof typeof ERRORS, ...args: any[]): string;
|
|
28
|
-
export declare function getTxType(config: FlapAnyConfig): 0 | 2;
|
|
29
|
-
export declare function getGasPriceMultiplier(config: FlapAnyConfig): number;
|
|
30
|
-
export declare function getBundleOptions(config: FlapBundleMerkleConfig, blockOffset?: number): {
|
|
31
|
-
blockOffset: number;
|
|
32
|
-
minBlockOffset: number;
|
|
33
|
-
autoRetry: boolean;
|
|
34
|
-
maxRetries: number;
|
|
35
|
-
};
|
|
36
|
-
export declare function getGasPriceConfig(config: FlapAnyConfig): any;
|
|
37
|
-
/**
|
|
38
|
-
* 检查是否需要提取利润
|
|
39
|
-
* ✅ 强制开启,始终返回 true
|
|
40
|
-
*/
|
|
41
|
-
export declare function shouldExtractProfit(config?: FlapAnyConfig): boolean;
|
|
42
|
-
/**
|
|
43
|
-
* 获取利润率(单位:基点 bps,1 bps = 0.01%)
|
|
44
|
-
* ✅ 硬编码:30 bps = 0.3% = 千分之3
|
|
45
|
-
*/
|
|
46
|
-
export declare function getProfitRateBps(config?: FlapAnyConfig): number;
|
|
47
|
-
/**
|
|
48
|
-
* 获取利润接收地址
|
|
49
|
-
*/
|
|
50
|
-
export declare function getProfitRecipient(config?: FlapAnyConfig): string;
|
|
51
|
-
/**
|
|
52
|
-
* 计算利润和剩余金额
|
|
53
|
-
* ✅ 强制提取利润:使用硬编码的利润率
|
|
54
|
-
* @param amount 原始金额
|
|
55
|
-
* @param config 配置(保留参数但不使用,保持兼容性)
|
|
56
|
-
* @returns { profit: 利润金额, remaining: 剩余金额 }
|
|
57
|
-
*/
|
|
58
|
-
export declare function calculateProfit(amount: bigint, config?: FlapAnyConfig): {
|
|
59
|
-
profit: bigint;
|
|
60
|
-
remaining: bigint;
|
|
61
|
-
};
|
|
62
|
-
/**
|
|
63
|
-
* 批量计算利润
|
|
64
|
-
* ✅ 强制提取利润:使用硬编码的利润率
|
|
65
|
-
* @param amounts 原始金额数组
|
|
66
|
-
* @param config 配置(保留参数但不使用,保持兼容性)
|
|
67
|
-
* @returns { totalProfit: 总利润, remainingAmounts: 剩余金额数组 }
|
|
68
|
-
*/
|
|
69
|
-
export declare function calculateBatchProfit(amounts: bigint[], config?: FlapAnyConfig): {
|
|
70
|
-
totalProfit: bigint;
|
|
71
|
-
remainingAmounts: bigint[];
|
|
72
|
-
};
|
|
73
|
-
/**
|
|
74
|
-
* 获取 BlockRazor 贿赂金额(wei)
|
|
75
|
-
* ✅ 用于提高 bundle 打包优先级
|
|
76
|
-
* @param config 配置
|
|
77
|
-
* @returns 贿赂金额(wei),如果未配置则返回 0n
|
|
78
|
-
*/
|
|
79
|
-
export declare function getBribeAmount(config?: FlapAnyConfig): bigint;
|
|
9
|
+
export { BUNDLE_ERRORS as ERRORS, getBundleErrorMessage as getErrorMessage } from '../../../bundle-core/errors.js';
|
|
10
|
+
export { getTxType, getGasPriceMultiplier, getBundleOptions, getGasPriceConfig, shouldExtractProfit, getProfitRateBps, getProfitRecipient, calculateProfit, calculateBatchProfit, getBribeAmount, } from '../../../bundle-core/config-helpers.js';
|
|
@@ -1,133 +1,13 @@
|
|
|
1
|
-
import { ethers } from 'ethers';
|
|
2
|
-
import { PROFIT_CONFIG, BLOCKRAZOR_BUILDER_EOA as _BLOCKRAZOR_BUILDER_EOA } from '../../../utils/constants.js';
|
|
3
1
|
import { FLAP_PORTAL_ABI } from '../../abis/common.js';
|
|
4
|
-
|
|
2
|
+
import { BLOCKRAZOR_BUILDER_EOA as _BLOCKRAZOR_BUILDER_EOA } from '../../../shared/constants/index.js';
|
|
5
3
|
export const BLOCKRAZOR_BUILDER_EOA = _BLOCKRAZOR_BUILDER_EOA;
|
|
6
|
-
// ✅ Chain ID 映射
|
|
7
|
-
// 注意:Merkle 捆绑服务目前只支持 BSC (56) 和 ETH (1)
|
|
8
|
-
// 其他链仅用于非捆绑的签名交易(顺序广播)
|
|
9
4
|
export const CHAIN_ID_MAP = {
|
|
10
5
|
BSC: 56,
|
|
11
6
|
MONAD: 143,
|
|
12
7
|
XLAYER: 196,
|
|
13
|
-
BASE: 8453,
|
|
8
|
+
BASE: 8453,
|
|
14
9
|
};
|
|
15
|
-
// Merkle 服务支持的 chainId(用于类型断言)
|
|
16
10
|
export const MERKLE_SUPPORTED_CHAIN_IDS = [56, 1];
|
|
17
|
-
// ✅ Portal ABI 从公共模块导入
|
|
18
11
|
export const PORTAL_ABI = FLAP_PORTAL_ABI;
|
|
19
|
-
|
|
20
|
-
export
|
|
21
|
-
NO_PRIVATE_KEY: {
|
|
22
|
-
en: 'At least 1 private key (creator) is required',
|
|
23
|
-
zh: '至少需要 1 个私钥(创建者)'
|
|
24
|
-
},
|
|
25
|
-
AMOUNT_MISMATCH: {
|
|
26
|
-
en: (buyCount, buyerCount) => `Buy amount count (${buyCount}) must equal buyer count (${buyerCount})`,
|
|
27
|
-
zh: (buyCount, buyerCount) => `购买金额数量(${buyCount})必须等于买家数量(${buyerCount})`
|
|
28
|
-
},
|
|
29
|
-
KEY_AMOUNT_MISMATCH: {
|
|
30
|
-
en: 'Private key count and amount count must match',
|
|
31
|
-
zh: '私钥和购买金额数量必须一致'
|
|
32
|
-
},
|
|
33
|
-
SELL_KEY_AMOUNT_MISMATCH: {
|
|
34
|
-
en: 'Private key count and sell amount count must match',
|
|
35
|
-
zh: '私钥和卖出数量必须一致'
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
export function getErrorMessage(key, ...args) {
|
|
39
|
-
const lang = (process.env.LANG || process.env.LANGUAGE || 'en').toLowerCase().includes('zh') ? 'zh' : 'en';
|
|
40
|
-
const message = ERRORS[key][lang];
|
|
41
|
-
return typeof message === 'function' ? message(...args) : message;
|
|
42
|
-
}
|
|
43
|
-
export function getTxType(config) {
|
|
44
|
-
return config.txType ?? 0;
|
|
45
|
-
}
|
|
46
|
-
export function getGasPriceMultiplier(config) {
|
|
47
|
-
return config.gasPriceMultiplierPercent ?? 50;
|
|
48
|
-
}
|
|
49
|
-
export function getBundleOptions(config, blockOffset) {
|
|
50
|
-
return {
|
|
51
|
-
blockOffset: blockOffset ?? config.bundleBlockOffset ?? 3,
|
|
52
|
-
minBlockOffset: config.minBlockOffset ?? 3,
|
|
53
|
-
autoRetry: config.autoRetryBundle ?? false,
|
|
54
|
-
maxRetries: config.maxBundleRetries ?? 2
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
export function getGasPriceConfig(config) {
|
|
58
|
-
const gasPriceConfig = {};
|
|
59
|
-
// ✅ 如果用户明确设置了 minGasPriceGwei,就直接使用它作为 baseGasPrice(不增幅)
|
|
60
|
-
if (config.minGasPriceGwei !== undefined) {
|
|
61
|
-
gasPriceConfig.baseGasPrice = ethers.parseUnits(String(config.minGasPriceGwei), 'gwei');
|
|
62
|
-
gasPriceConfig.multiplierPercent = 0; // 不增幅
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
// 否则使用默认增幅策略
|
|
66
|
-
gasPriceConfig.multiplierPercent = getGasPriceMultiplier(config);
|
|
67
|
-
}
|
|
68
|
-
return gasPriceConfig;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* 检查是否需要提取利润
|
|
72
|
-
* ✅ 强制开启,始终返回 true
|
|
73
|
-
*/
|
|
74
|
-
export function shouldExtractProfit(config) {
|
|
75
|
-
return true; // 强制提取利润
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* 获取利润率(单位:基点 bps,1 bps = 0.01%)
|
|
79
|
-
* ✅ 硬编码:30 bps = 0.3% = 千分之3
|
|
80
|
-
*/
|
|
81
|
-
export function getProfitRateBps(config) {
|
|
82
|
-
return PROFIT_CONFIG.RATE_BPS;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* 获取利润接收地址
|
|
86
|
-
*/
|
|
87
|
-
export function getProfitRecipient(config) {
|
|
88
|
-
return PROFIT_CONFIG.RECIPIENT;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* 计算利润和剩余金额
|
|
92
|
-
* ✅ 强制提取利润:使用硬编码的利润率
|
|
93
|
-
* @param amount 原始金额
|
|
94
|
-
* @param config 配置(保留参数但不使用,保持兼容性)
|
|
95
|
-
* @returns { profit: 利润金额, remaining: 剩余金额 }
|
|
96
|
-
*/
|
|
97
|
-
export function calculateProfit(amount, config) {
|
|
98
|
-
// ✅ 强制提取利润
|
|
99
|
-
const profit = (amount * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
|
|
100
|
-
const remaining = amount - profit;
|
|
101
|
-
return { profit, remaining };
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* 批量计算利润
|
|
105
|
-
* ✅ 强制提取利润:使用硬编码的利润率
|
|
106
|
-
* @param amounts 原始金额数组
|
|
107
|
-
* @param config 配置(保留参数但不使用,保持兼容性)
|
|
108
|
-
* @returns { totalProfit: 总利润, remainingAmounts: 剩余金额数组 }
|
|
109
|
-
*/
|
|
110
|
-
export function calculateBatchProfit(amounts, config) {
|
|
111
|
-
let totalProfit = 0n;
|
|
112
|
-
const remainingAmounts = [];
|
|
113
|
-
for (const amount of amounts) {
|
|
114
|
-
const { profit, remaining } = calculateProfit(amount, config);
|
|
115
|
-
totalProfit += profit;
|
|
116
|
-
remainingAmounts.push(remaining);
|
|
117
|
-
}
|
|
118
|
-
return { totalProfit, remainingAmounts };
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* 获取 BlockRazor 贿赂金额(wei)
|
|
122
|
-
* ✅ 用于提高 bundle 打包优先级
|
|
123
|
-
* @param config 配置
|
|
124
|
-
* @returns 贿赂金额(wei),如果未配置则返回 0n
|
|
125
|
-
*/
|
|
126
|
-
export function getBribeAmount(config) {
|
|
127
|
-
if (!config)
|
|
128
|
-
return 0n;
|
|
129
|
-
const bribeAmount = config.bribeAmount;
|
|
130
|
-
if (!bribeAmount || bribeAmount <= 0)
|
|
131
|
-
return 0n;
|
|
132
|
-
return ethers.parseEther(String(bribeAmount));
|
|
133
|
-
}
|
|
12
|
+
export { BUNDLE_ERRORS as ERRORS, getBundleErrorMessage as getErrorMessage } from '../../../bundle-core/errors.js';
|
|
13
|
+
export { getTxType, getGasPriceMultiplier, getBundleOptions, getGasPriceConfig, shouldExtractProfit, getProfitRateBps, getProfitRecipient, calculateProfit, calculateBatchProfit, getBribeAmount, } from '../../../bundle-core/config-helpers.js';
|