four-flap-meme-sdk 1.9.49 → 2.1.0
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.js +34 -0
- package/dist/abis/common.js +74 -68
- package/dist/abis/flap/vault.js +9 -7
- package/dist/abis/index.d.ts +3 -4
- package/dist/abis/index.js +3 -4
- package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
- package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
- package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -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 +34 -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/{shared 2/flap/portal-bundle-merkle/pancake-proxy.js → bundle-core/four-meme/pancake-proxy.js} +277 -299
- 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/{chains/bsc/four/swap/index.js → bundle-core/four-meme/swap.js} +84 -408
- package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
- package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
- package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
- package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
- package/dist/bundle-core/four-meme/types.d.ts +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.d.ts +1 -0
- package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
- package/dist/chains/bsc/four/approve-tokenmanager.js +1 -116
- package/dist/chains/bsc/four/config.d.ts +5 -70
- package/dist/chains/bsc/four/config.js +2 -115
- package/dist/chains/bsc/four/core.d.ts +1 -4
- package/dist/chains/bsc/four/core.js +1 -589
- 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 -50
- package/dist/chains/bsc/four/internal.js +2 -237
- package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
- package/dist/chains/bsc/four/pancake-proxy.js +1 -688
- 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 -746
- package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
- package/dist/chains/bsc/four/swap-buy-first.js +2 -506
- 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 -760
- 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 -1534
- 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 -207
- package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
- package/dist/chains/bsc/pancake/{bundle-swap/helpers.js → bundle-swap-helpers.js} +63 -70
- package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
- package/dist/chains/bsc/pancake/bundle-swap.js +111 -686
- 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.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 +54 -23
- package/dist/chains/eni/batch-router/utils.js +32 -6
- package/dist/chains/eni/bundler/sign.js +4 -4
- package/dist/chains/eni/bundler/submit.js +1 -4
- package/dist/chains/eni/constants.js +1 -1
- package/dist/chains/eni/index.d.ts +1 -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 +8 -4
- package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -43
- 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 -47
- 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.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.js +5 -13
- 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 -20
- 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 -56
- package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
- package/dist/chains/xlayer/eip7702/bundle-sell.js +26 -74
- package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
- package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -68
- package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
- package/dist/chains/xlayer/eip7702/constants.js +3 -21
- package/dist/chains/xlayer/eip7702/index.d.ts +29 -46
- package/dist/chains/xlayer/eip7702/index.js +27 -81
- package/dist/chains/xlayer/eip7702/{multi-hop-transfer/types.d.ts → multi-hop-transfer-helpers.d.ts} +17 -23
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
- package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +58 -291
- 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/types.d.ts → volume-helpers.d.ts} +41 -17
- 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 +83 -158
- 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 +64 -276
- package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
- package/dist/chains/xlayer/eoa/eoa-wash-volume.js +14 -14
- 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/contracts/helper3.d.ts +20 -17
- 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 -117
- package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -70
- package/dist/contracts/tm-bundle-merkle/config.js +2 -115
- package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
- package/dist/contracts/tm-bundle-merkle/core.js +1 -588
- 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 -50
- package/dist/contracts/tm-bundle-merkle/internal.js +2 -236
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
- package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -687
- 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 -919
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
- package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -505
- 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 -757
- 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 +5 -6
- package/dist/contracts/tm-bundle-merkle/utils.js +5 -6
- package/dist/contracts/tm-bundle.d.ts +3 -51
- package/dist/contracts/tm-bundle.js +102 -142
- package/dist/contracts/tm.d.ts +3 -2
- package/dist/contracts/tm.js +36 -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 -652
- package/dist/dex/{direct-router/types.d.ts → types.d.ts} +1 -1
- 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 -2
- 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 -91
- package/dist/index.js +20 -215
- 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 +41 -24
- package/dist/shared/clients/club48.js +30 -26
- package/dist/shared/clients/emitservice.js +2 -0
- package/dist/shared/clients/four.js +23 -18
- package/dist/shared/clients/index.d.ts +8 -0
- package/dist/shared/clients/index.js +8 -0
- package/dist/shared/clients/merkle.js +26 -30
- 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 -1
- package/dist/shared/flap/constants.js +2 -2
- package/dist/shared/flap/curve.js +3 -0
- package/dist/shared/flap/errors.d.ts +1 -4
- package/dist/shared/flap/errors.js +21 -3
- package/dist/shared/flap/index.d.ts +2 -2
- package/dist/shared/flap/index.js +2 -2
- package/dist/shared/flap/meta.d.ts +16 -18
- package/dist/shared/flap/meta.js +14 -26
- package/dist/shared/flap/permit.js +6 -5
- package/dist/shared/flap/pinata.d.ts +9 -2
- package/dist/shared/flap/pinata.js +20 -18
- 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 +66 -156
- package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +81 -86
- 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 +73 -3
- 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 +54 -42
- package/dist/shared/flap/portal.js +32 -10
- package/dist/shared/flap/vanity.js +4 -7
- package/dist/shared/flap/vault.d.ts +1 -1
- package/dist/shared/flap/vault.js +54 -48
- 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 +39 -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 +180 -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.js +18 -0
- package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
- package/dist/{utils/erc20/types.d.ts → shared/foundation/types/erc20.d.ts} +7 -19
- package/dist/{utils/holders-maker/types.d.ts → shared/foundation/types/holders-maker.d.ts} +4 -12
- package/dist/shared/foundation/types/index.d.ts +7 -0
- package/dist/{utils/lp-inspect/types.d.ts → shared/foundation/types/lp-inspect.d.ts} +4 -2
- 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/{utils/quote-helpers/types.d.ts → shared/foundation/types/quote-helpers.d.ts} +1 -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/utils/airdrop-sweep.d.ts +4 -76
- package/dist/utils/airdrop-sweep.js +38 -52
- 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 +8 -90
- package/dist/utils/erc20.js +94 -153
- package/dist/utils/errors.d.ts +10 -22
- package/dist/utils/errors.js +61 -79
- 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 +23 -651
- 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 +63 -195
- 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 +2 -7
- 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 +15 -65
- package/dist/utils/stealth-transfer.d.ts +2 -28
- package/dist/utils/stealth-transfer.js +30 -14
- package/dist/utils/swap-helpers.d.ts +0 -3
- package/dist/utils/swap-helpers.js +6 -9
- 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 +9 -10
- package/package.json +120 -2
- 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/chains/bsc/four/submit/blockrazor.d.ts +0 -18
- package/dist/chains/bsc/four/submit/blockrazor.js +0 -86
- package/dist/chains/bsc/four/submit/direct.d.ts +0 -66
- package/dist/chains/bsc/four/submit/direct.js +0 -452
- package/dist/chains/bsc/four/submit/helpers.d.ts +0 -18
- package/dist/chains/bsc/four/submit/helpers.js +0 -57
- package/dist/chains/bsc/four/submit/index.d.ts +0 -12
- package/dist/chains/bsc/four/submit/index.js +0 -11
- package/dist/chains/bsc/four/submit/merkle.d.ts +0 -18
- package/dist/chains/bsc/four/submit/merkle.js +0 -74
- package/dist/chains/bsc/four/submit/types.d.ts +0 -143
- package/dist/chains/bsc/four/swap/index.d.ts +0 -32
- package/dist/chains/bsc/four/swap/types.d.ts +0 -70
- package/dist/chains/bsc/four/utils/index.d.ts +0 -20
- package/dist/chains/bsc/four/utils/index.js +0 -1558
- package/dist/chains/bsc/pancake/bundle-buy-first/index.d.ts +0 -8
- package/dist/chains/bsc/pancake/bundle-buy-first/index.js +0 -907
- package/dist/chains/bsc/pancake/bundle-buy-first/types.d.ts +0 -73
- package/dist/chains/bsc/pancake/bundle-swap/helpers.d.ts +0 -102
- package/dist/chains/bsc/pancake/bundle-swap/index.d.ts +0 -50
- package/dist/chains/bsc/pancake/bundle-swap/index.js +0 -1066
- package/dist/chains/bsc/pancake/bundle-swap/types.d.ts +0 -202
- package/dist/chains/bsc/pancake/bundle-swap/types.js +0 -3
- package/dist/chains/xlayer/eip7702/bundle-swap/index.d.ts +0 -72
- package/dist/chains/xlayer/eip7702/bundle-swap/index.js +0 -921
- package/dist/chains/xlayer/eip7702/bundle-swap/types.d.ts +0 -65
- package/dist/chains/xlayer/eip7702/multi-hop-transfer/index.d.ts +0 -128
- package/dist/chains/xlayer/eip7702/multi-hop-transfer/index.js +0 -857
- package/dist/chains/xlayer/eip7702/volume/index.d.ts +0 -96
- package/dist/chains/xlayer/eip7702/volume/index.js +0 -793
- package/dist/dex/direct-router/index.d.ts +0 -70
- package/dist/dex/direct-router/index.js +0 -1410
- package/dist/shared/abis/TaxToken.json +0 -969
- package/dist/shared/abis/TokenManager.json +0 -836
- package/dist/shared/abis/TokenManager2.json +0 -136
- package/dist/shared/abis/TokenManagerHelper3.json +0 -993
- package/dist/shared/flap/__tests__/curve.test.js +0 -85
- package/dist/shared/flap/portal/index.d.ts +0 -12
- package/dist/shared/flap/portal/index.js +0 -11
- package/dist/shared/flap/portal/portal.d.ts +0 -47
- package/dist/shared/flap/portal/portal.js +0 -218
- package/dist/shared/flap/portal/types.d.ts +0 -227
- package/dist/shared/flap/portal/types.js +0 -80
- package/dist/shared/flap/portal/writer.d.ts +0 -121
- package/dist/shared/flap/portal/writer.js +0 -265
- package/dist/shared/flap/portal-bundle-merkle/core/index.d.ts +0 -18
- package/dist/shared/flap/portal-bundle-merkle/core/index.js +0 -938
- package/dist/shared/flap/portal-bundle-merkle/swap/index.d.ts +0 -42
- package/dist/shared/flap/portal-bundle-merkle/swap/index.js +0 -1448
- package/dist/shared/flap/portal-bundle-merkle/swap/types.d.ts +0 -84
- package/dist/shared/flap/portal-bundle-merkle/utils/index.d.ts +0 -17
- package/dist/shared/flap/portal-bundle-merkle/utils/index.js +0 -1024
- package/dist/shared/flap/portal-bundle-merkle/utils/types.d.ts +0 -16
- package/dist/shared 2/abis/TaxToken.json +0 -105
- package/dist/shared 2/abis/TokenManager.json +0 -836
- package/dist/shared 2/abis/TokenManager2.json +0 -60
- package/dist/shared 2/abis/TokenManagerHelper3.json +0 -993
- package/dist/shared 2/abis/common.d.ts +0 -85
- package/dist/shared 2/abis/common.js +0 -254
- package/dist/shared 2/abis/index.d.ts +0 -8
- package/dist/shared 2/abis/index.js +0 -8
- package/dist/shared 2/clients/blockrazor.d.ts +0 -314
- package/dist/shared 2/clients/blockrazor.js +0 -596
- package/dist/shared 2/clients/club48.d.ts +0 -154
- package/dist/shared 2/clients/club48.js +0 -331
- package/dist/shared 2/clients/emitservice.d.ts +0 -47
- package/dist/shared 2/clients/emitservice.js +0 -44
- package/dist/shared 2/clients/four.d.ts +0 -132
- package/dist/shared 2/clients/four.js +0 -281
- package/dist/shared 2/clients/merkle.d.ts +0 -210
- package/dist/shared 2/clients/merkle.js +0 -400
- package/dist/shared 2/flap/__tests__/curve.test.js +0 -85
- package/dist/shared 2/flap/abi.d.ts +0 -4
- package/dist/shared 2/flap/abi.js +0 -4
- package/dist/shared 2/flap/constants.d.ts +0 -128
- package/dist/shared 2/flap/constants.js +0 -143
- package/dist/shared 2/flap/curve.d.ts +0 -33
- package/dist/shared 2/flap/curve.js +0 -84
- package/dist/shared 2/flap/errors.d.ts +0 -37
- package/dist/shared 2/flap/errors.js +0 -114
- package/dist/shared 2/flap/index.d.ts +0 -22
- package/dist/shared 2/flap/index.js +0 -33
- package/dist/shared 2/flap/ipfs.d.ts +0 -21
- package/dist/shared 2/flap/ipfs.js +0 -38
- package/dist/shared 2/flap/meta.d.ts +0 -30
- package/dist/shared 2/flap/meta.js +0 -195
- package/dist/shared 2/flap/permit.d.ts +0 -16
- package/dist/shared 2/flap/permit.js +0 -67
- package/dist/shared 2/flap/pinata.d.ts +0 -40
- package/dist/shared 2/flap/pinata.js +0 -106
- package/dist/shared 2/flap/portal-bundle-merkle/config.d.ts +0 -79
- package/dist/shared 2/flap/portal-bundle-merkle/config.js +0 -133
- package/dist/shared 2/flap/portal-bundle-merkle/core.d.ts +0 -18
- package/dist/shared 2/flap/portal-bundle-merkle/core.js +0 -938
- package/dist/shared 2/flap/portal-bundle-merkle/create-to-dex.d.ts +0 -125
- package/dist/shared 2/flap/portal-bundle-merkle/create-to-dex.js +0 -665
- package/dist/shared 2/flap/portal-bundle-merkle/curve-to-dex.d.ts +0 -88
- package/dist/shared 2/flap/portal-bundle-merkle/curve-to-dex.js +0 -446
- package/dist/shared 2/flap/portal-bundle-merkle/index.d.ts +0 -14
- package/dist/shared 2/flap/portal-bundle-merkle/index.js +0 -26
- package/dist/shared 2/flap/portal-bundle-merkle/pancake-proxy.d.ts +0 -28
- package/dist/shared 2/flap/portal-bundle-merkle/private.d.ts +0 -17
- package/dist/shared 2/flap/portal-bundle-merkle/private.js +0 -549
- package/dist/shared 2/flap/portal-bundle-merkle/swap-buy-first.d.ts +0 -65
- package/dist/shared 2/flap/portal-bundle-merkle/swap-buy-first.js +0 -831
- package/dist/shared 2/flap/portal-bundle-merkle/swap.d.ts +0 -201
- package/dist/shared 2/flap/portal-bundle-merkle/swap.js +0 -1359
- package/dist/shared 2/flap/portal-bundle-merkle/types.d.ts +0 -358
- package/dist/shared 2/flap/portal-bundle-merkle/utils.d.ts +0 -89
- package/dist/shared 2/flap/portal-bundle-merkle/utils.js +0 -963
- package/dist/shared 2/flap/portal-bundle.d.ts +0 -119
- package/dist/shared 2/flap/portal-bundle.js +0 -584
- package/dist/shared 2/flap/portal.d.ts +0 -392
- package/dist/shared 2/flap/portal.js +0 -559
- package/dist/shared 2/flap/vanity.d.ts +0 -48
- package/dist/shared 2/flap/vanity.js +0 -110
- package/dist/shared 2/flap/vault.d.ts +0 -240
- package/dist/shared 2/flap/vault.js +0 -366
- package/dist/shared 2/four/index.d.ts +0 -7
- package/dist/shared 2/four/index.js +0 -22
- package/dist/shared 2/four/tax-token.d.ts +0 -176
- package/dist/shared 2/four/tax-token.js +0 -302
- package/dist/shared 2/index.d.ts +0 -10
- package/dist/shared 2/index.js +0 -10
- package/dist/utils/__tests__/errors.test.js +0 -76
- package/dist/utils/erc20/index.d.ts +0 -242
- package/dist/utils/erc20/index.js +0 -645
- package/dist/utils/holders-maker/helpers.d.ts +0 -43
- package/dist/utils/holders-maker/helpers.js +0 -371
- package/dist/utils/holders-maker/index.d.ts +0 -26
- package/dist/utils/holders-maker/index.js +0 -218
- package/dist/utils/holders-maker/types.js +0 -4
- package/dist/utils/lp-inspect/index.d.ts +0 -44
- package/dist/utils/lp-inspect/index.js +0 -937
- package/dist/utils/quote-helpers/index.d.ts +0 -107
- package/dist/utils/quote-helpers/index.js +0 -346
- /package/dist/{chains/bsc/four/submit/types.js → __tests__/subpath-exports.test.d.ts} +0 -0
- /package/dist/{chains/bsc/four/swap/types.js → bundle-core/__tests__/config-helpers.test.d.ts} +0 -0
- /package/dist/{chains/bsc/four/utils/types.d.ts → bundle-core/__tests__/facade-parity.test.d.ts} +0 -0
- /package/dist/{chains/bsc/four/utils/types.js → bundle-core/__tests__/sign-context-helpers.test.d.ts} +0 -0
- /package/dist/{chains/bsc/pancake/bundle-buy-first/types.js → bundle-core/__tests__/sign-fixture.test.d.ts} +0 -0
- /package/dist/{chains/xlayer/eip7702/multi-hop-transfer/types.js → bundle-core/four-meme/types/buy-first.js} +0 -0
- /package/dist/{chains/xlayer/eip7702/volume/types.js → bundle-core/four-meme/types/core-flow.js} +0 -0
- /package/dist/{dex/direct-router/types.js → bundle-core/four-meme/types/index.js} +0 -0
- /package/dist/{shared 2/flap/__tests__/curve.test.d.ts → bundle-core/four-meme/types/swap-internal.js} +0 -0
- /package/dist/{chains/xlayer/eip7702/bundle-swap → bundle-core/four-meme}/types.js +0 -0
- /package/dist/{shared/flap/__tests__/curve.test.d.ts → bundle-core/types/index.js} +0 -0
- /package/dist/{shared 2/flap/portal-bundle-merkle → bundle-core}/types.js +0 -0
- /package/dist/{shared/flap/portal-bundle-merkle/core/types.d.ts → chains/xlayer/eip7702/multi-hop-transfer-helpers.js} +0 -0
- /package/dist/{shared/flap/portal-bundle-merkle/core → dex}/types.js +0 -0
- /package/dist/shared/{flap/portal-bundle-merkle/swap/types.js → foundation/tx/wallet-sign-patch.d.ts} +0 -0
- /package/dist/shared/{flap/portal-bundle-merkle/utils/types.js → foundation/types/airdrop-sweep.js} +0 -0
- /package/dist/{utils/__tests__/errors.test.d.ts → shared/foundation/types/erc20.js} +0 -0
- /package/dist/{utils/erc20/types.js → shared/foundation/types/holders-maker.js} +0 -0
- /package/dist/{utils/lp-inspect/types.js → shared/foundation/types/index.js} +0 -0
- /package/dist/{utils/quote-helpers/types.js → shared/foundation/types/lp-inspect.js} +0 -0
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* 等同于 BSC EOA 普通模式 / Monad direct 模式
|
|
6
6
|
*/
|
|
7
7
|
import { Wallet, JsonRpcProvider } from 'ethers';
|
|
8
|
-
import { ENI_CHAIN_ID, ENI_RPC_URL, DAOAAS_PORTAL, NATIVE_TRANSFER_GAS_LIMIT
|
|
8
|
+
import { ENI_CHAIN_ID, ENI_RPC_URL, DAOAAS_PORTAL, NATIVE_TRANSFER_GAS_LIMIT } from '../../constants.js';
|
|
9
9
|
import { encodeBuyCall, encodeSellCall, applySlippage, DaoaasPortalQuery } from './portal.js';
|
|
10
10
|
import { getProfitRecipient, getProfitRateBps, calculateProfitAmount } from '../../../../shared/constants/profit.js';
|
|
11
11
|
const NORMAL_PROFIT_BPS = getProfitRateBps('normal');
|
|
@@ -45,7 +45,7 @@ export async function directBuy(params) {
|
|
|
45
45
|
const provider = new JsonRpcProvider(params.rpcUrl ?? ENI_RPC_URL, ENI_CHAIN_ID, { staticNetwork: true });
|
|
46
46
|
const wallet = new Wallet(params.privateKey, provider);
|
|
47
47
|
const calldata = encodeBuyCall(params.token, params.amountOutMin ?? 0n);
|
|
48
|
-
const nonce = params.nonce ?? await wallet.getNonce('pending');
|
|
48
|
+
const nonce = params.nonce ?? (await wallet.getNonce('pending'));
|
|
49
49
|
const feeData = await provider.getFeeData();
|
|
50
50
|
const tx = await wallet.signTransaction({
|
|
51
51
|
to: DAOAAS_PORTAL,
|
|
@@ -70,7 +70,7 @@ export async function directSell(params) {
|
|
|
70
70
|
const provider = new JsonRpcProvider(params.rpcUrl ?? ENI_RPC_URL, ENI_CHAIN_ID, { staticNetwork: true });
|
|
71
71
|
const wallet = new Wallet(params.privateKey, provider);
|
|
72
72
|
const calldata = encodeSellCall(params.token, params.tokenAmount, params.amountOutMin ?? 0n);
|
|
73
|
-
const nonce = params.nonce ?? await wallet.getNonce('pending');
|
|
73
|
+
const nonce = params.nonce ?? (await wallet.getNonce('pending'));
|
|
74
74
|
const feeData = await provider.getFeeData();
|
|
75
75
|
const tx = await wallet.signTransaction({
|
|
76
76
|
to: DAOAAS_PORTAL,
|
|
@@ -260,7 +260,7 @@ export async function directSellForSubmit(params) {
|
|
|
260
260
|
};
|
|
261
261
|
}
|
|
262
262
|
export async function directBatchBuyForSubmit(params) {
|
|
263
|
-
const { rpcUrl = ENI_RPC_URL, token, privateKeys: rawKeys, amounts: rawAmounts, slippageBps = 100, gasPrice } = params;
|
|
263
|
+
const { rpcUrl = ENI_RPC_URL, token, privateKeys: rawKeys, amounts: rawAmounts, slippageBps = 100, gasPrice, } = params;
|
|
264
264
|
if (rawKeys.length !== rawAmounts.length) {
|
|
265
265
|
throw new Error(`privateKeys.length (${rawKeys.length}) !== amounts.length (${rawAmounts.length})`);
|
|
266
266
|
}
|
|
@@ -277,8 +277,8 @@ export async function directBatchBuyForSubmit(params) {
|
|
|
277
277
|
const totalFlowRaw = rawAmounts.reduce((sum, amount) => sum + amount, 0n);
|
|
278
278
|
const profitAmountFull = calculateProfitAmount(totalFlowRaw, NORMAL_PROFIT_BPS) + profitTxGasCost;
|
|
279
279
|
const maxPayerIdx = pickMaxAmountIndex(rawAmounts);
|
|
280
|
-
const wallets = rawKeys.map(pk => new Wallet(pk, provider));
|
|
281
|
-
const balances = await Promise.all(wallets.map(w => provider.getBalance(w.address)));
|
|
280
|
+
const wallets = rawKeys.map((pk) => new Wallet(pk, provider));
|
|
281
|
+
const balances = await Promise.all(wallets.map((w) => provider.getBalance(w.address)));
|
|
282
282
|
let privateKeys = rawKeys;
|
|
283
283
|
let amounts = rawAmounts;
|
|
284
284
|
const validIndices = [];
|
|
@@ -287,7 +287,6 @@ export async function directBatchBuyForSubmit(params) {
|
|
|
287
287
|
if (i === maxPayerIdx)
|
|
288
288
|
required += profitAmountFull + NATIVE_TRANSFER_GAS_LIMIT * maxFeePerGas;
|
|
289
289
|
if (balances[i] < required) {
|
|
290
|
-
console.warn(`[DAOAAS BatchBuy] 钱包 ${wallets[i].address.slice(0, 10)} 余额不足: 余额=${balances[i]}, 需要=${required},跳过`);
|
|
291
290
|
continue;
|
|
292
291
|
}
|
|
293
292
|
validIndices.push(i);
|
|
@@ -296,8 +295,8 @@ export async function directBatchBuyForSubmit(params) {
|
|
|
296
295
|
throw new Error('所有钱包余额不足(含 swap + gas),无法执行 DAOAAS 买入');
|
|
297
296
|
}
|
|
298
297
|
if (validIndices.length < rawKeys.length) {
|
|
299
|
-
privateKeys = validIndices.map(i => rawKeys[i]);
|
|
300
|
-
amounts = validIndices.map(i => rawAmounts[i]);
|
|
298
|
+
privateKeys = validIndices.map((i) => rawKeys[i]);
|
|
299
|
+
amounts = validIndices.map((i) => rawAmounts[i]);
|
|
301
300
|
}
|
|
302
301
|
const transactions = [];
|
|
303
302
|
const totalFlow = amounts.reduce((sum, amount) => sum + amount, 0n);
|
|
@@ -305,9 +304,7 @@ export async function directBatchBuyForSubmit(params) {
|
|
|
305
304
|
for (let i = 0; i < privateKeys.length; i++) {
|
|
306
305
|
const wallet = new Wallet(privateKeys[i], provider);
|
|
307
306
|
const preview = await query.previewBuy(token, amounts[i]);
|
|
308
|
-
const effectiveSlippage = isBatch
|
|
309
|
-
? Math.min(9500, slippageBps + i * 2000)
|
|
310
|
-
: slippageBps;
|
|
307
|
+
const effectiveSlippage = isBatch ? Math.min(9500, slippageBps + i * 2000) : slippageBps;
|
|
311
308
|
const minOut = applySlippage(preview, effectiveSlippage);
|
|
312
309
|
const calldata = encodeBuyCall(token, minOut);
|
|
313
310
|
const nonce = await wallet.getNonce('pending');
|
|
@@ -336,7 +333,7 @@ export async function directBatchBuyForSubmit(params) {
|
|
|
336
333
|
});
|
|
337
334
|
return {
|
|
338
335
|
transactions,
|
|
339
|
-
signedTransactions: [...transactions.map(tx => tx.signedTx), profitTx.signedTx],
|
|
336
|
+
signedTransactions: [...transactions.map((tx) => tx.signedTx), profitTx.signedTx],
|
|
340
337
|
totalGasCost: swapGasLimit * maxFeePerGas * BigInt(transactions.length) + NATIVE_TRANSFER_GAS_LIMIT * maxFeePerGas,
|
|
341
338
|
metadata: formatSubmitMetadata(totalFlow, profitAmount),
|
|
342
339
|
};
|
|
@@ -355,19 +352,7 @@ export async function directBatchSellForSubmit(params) {
|
|
|
355
352
|
const maxFeePerGas = gasPrice ?? feeData.maxFeePerGas ?? feeData.gasPrice ?? 1000000000n;
|
|
356
353
|
const maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? 0n;
|
|
357
354
|
const swapGasLimit = 300000n;
|
|
358
|
-
const
|
|
359
|
-
const profitGasCost = NATIVE_TRANSFER_GAS_LIMIT * maxFeePerGas;
|
|
360
|
-
const wallets = privateKeys.map(pk => new Wallet(pk, provider));
|
|
361
|
-
const balances = await Promise.all(wallets.map(w => provider.getBalance(w.address)));
|
|
362
|
-
const maxPayerIdx = pickMaxAmountIndex(tokenAmounts);
|
|
363
|
-
for (let i = 0; i < wallets.length; i++) {
|
|
364
|
-
let required = swapGasCost;
|
|
365
|
-
if (i === maxPayerIdx)
|
|
366
|
-
required += profitGasCost;
|
|
367
|
-
if (balances[i] < required) {
|
|
368
|
-
console.warn(`[DAOAAS BatchSell] 钱包 ${wallets[i].address.slice(0, 10)} 原生余额不足 gas: 余额=${balances[i]}, 需要=${required},可能导致交易失败`);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
355
|
+
const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
|
|
371
356
|
const transactions = [];
|
|
372
357
|
const estimatedOuts = [];
|
|
373
358
|
const isBatch = privateKeys.length > 1;
|
|
@@ -375,9 +360,7 @@ export async function directBatchSellForSubmit(params) {
|
|
|
375
360
|
const wallet = wallets[i];
|
|
376
361
|
const preview = await query.previewSell(token, tokenAmounts[i]);
|
|
377
362
|
estimatedOuts.push(preview);
|
|
378
|
-
const effectiveSlippage = isBatch
|
|
379
|
-
? Math.min(9500, slippageBps + i * 2000)
|
|
380
|
-
: slippageBps;
|
|
363
|
+
const effectiveSlippage = isBatch ? Math.min(9500, slippageBps + i * 2000) : slippageBps;
|
|
381
364
|
const minOut = applySlippage(preview, effectiveSlippage);
|
|
382
365
|
const calldata = encodeSellCall(token, tokenAmounts[i], minOut);
|
|
383
366
|
const nonce = await wallet.getNonce('pending');
|
|
@@ -407,7 +390,7 @@ export async function directBatchSellForSubmit(params) {
|
|
|
407
390
|
});
|
|
408
391
|
return {
|
|
409
392
|
transactions,
|
|
410
|
-
signedTransactions: [...transactions.map(tx => tx.signedTx), profitTx.signedTx],
|
|
393
|
+
signedTransactions: [...transactions.map((tx) => tx.signedTx), profitTx.signedTx],
|
|
411
394
|
totalGasCost: 300000n * maxFeePerGas * BigInt(transactions.length) + NATIVE_TRANSFER_GAS_LIMIT * maxFeePerGas,
|
|
412
395
|
metadata: formatSubmitMetadata(totalFlow, profitAmount),
|
|
413
396
|
};
|
|
@@ -438,9 +421,9 @@ export async function directQuickSwapForSubmit(params) {
|
|
|
438
421
|
if (params.sellerKeys.length > 1) {
|
|
439
422
|
for (let i = 1; i < params.sellerKeys.length; i++) {
|
|
440
423
|
const otherWallet = new Wallet(params.sellerKeys[i], provider);
|
|
441
|
-
const otherSellTxs = sellResult.transactions.filter(tx => tx.from.toLowerCase() === otherWallet.address.toLowerCase());
|
|
424
|
+
const otherSellTxs = sellResult.transactions.filter((tx) => tx.from.toLowerCase() === otherWallet.address.toLowerCase());
|
|
442
425
|
const otherNextNonce = otherSellTxs.length > 0
|
|
443
|
-
? Math.max(...otherSellTxs.map(tx => tx.nonce)) + 1
|
|
426
|
+
? Math.max(...otherSellTxs.map((tx) => tx.nonce)) + 1
|
|
444
427
|
: await otherWallet.getNonce('pending');
|
|
445
428
|
const otherBalance = await provider.getBalance(otherWallet.address);
|
|
446
429
|
const reserveGas = NATIVE_TRANSFER_GAS_LIMIT * maxFeePerGas;
|
|
@@ -464,23 +447,23 @@ export async function directQuickSwapForSubmit(params) {
|
|
|
464
447
|
const hopCount = params.hopCount ?? 0;
|
|
465
448
|
const distributeHopWallets = [];
|
|
466
449
|
if (params.buyerKeys.length > 0) {
|
|
467
|
-
const primarySellTxs = sellResult.transactions.filter(tx => tx.from.toLowerCase() === primarySellerAddress);
|
|
450
|
+
const primarySellTxs = sellResult.transactions.filter((tx) => tx.from.toLowerCase() === primarySellerAddress);
|
|
468
451
|
let primaryNextNonce = primarySellTxs.length > 0
|
|
469
|
-
? Math.max(...primarySellTxs.map(tx => tx.nonce)) + 1
|
|
452
|
+
? Math.max(...primarySellTxs.map((tx) => tx.nonce)) + 1
|
|
470
453
|
: await primarySellerWallet.getNonce('pending');
|
|
471
454
|
const gasForBuy = 300000n * maxFeePerGas;
|
|
472
455
|
const hopGasFee = NATIVE_TRANSFER_GAS_LIMIT * maxFeePerGas;
|
|
473
456
|
const totalFlow = params.buyAmounts.reduce((sum, a) => sum + a, 0n);
|
|
474
457
|
const profitTxGasCost = NATIVE_TRANSFER_GAS_LIMIT * maxFeePerGas;
|
|
475
458
|
const profitAmount = calculateProfitAmount(totalFlow, NORMAL_PROFIT_BPS) + profitTxGasCost;
|
|
476
|
-
const profitGasPerBuyer =
|
|
459
|
+
const profitGasPerBuyer = NATIVE_TRANSFER_GAS_LIMIT * maxFeePerGas;
|
|
477
460
|
for (let i = 0; i < params.buyerKeys.length; i++) {
|
|
478
461
|
const buyerAddress = new Wallet(params.buyerKeys[i]).address;
|
|
479
462
|
const transferAmount = params.buyAmounts[i];
|
|
480
463
|
if (transferAmount <= 0n)
|
|
481
464
|
continue;
|
|
482
465
|
const isMaxBuyer = i === pickMaxAmountIndex(params.buyAmounts);
|
|
483
|
-
const extraForProfit = isMaxBuyer ?
|
|
466
|
+
const extraForProfit = isMaxBuyer ? profitAmount + profitGasPerBuyer : 0n;
|
|
484
467
|
const baseTransfer = transferAmount + gasForBuy + extraForProfit;
|
|
485
468
|
if (hopCount <= 0) {
|
|
486
469
|
const signedTx = await primarySellerWallet.signTransaction({
|
|
@@ -503,8 +486,8 @@ export async function directQuickSwapForSubmit(params) {
|
|
|
503
486
|
hops.push({ address: w.address, privateKey: w.privateKey });
|
|
504
487
|
}
|
|
505
488
|
distributeHopWallets.push(hops);
|
|
506
|
-
const fullChain = [primarySellerWallet, ...hops.map(h => new Wallet(h.privateKey))];
|
|
507
|
-
const addresses = [...fullChain.map(w => w.address), buyerAddress];
|
|
489
|
+
const fullChain = [primarySellerWallet, ...hops.map((h) => new Wallet(h.privateKey))];
|
|
490
|
+
const addresses = [...fullChain.map((w) => w.address), buyerAddress];
|
|
508
491
|
for (let j = 0; j < addresses.length - 1; j++) {
|
|
509
492
|
const fromWallet = fullChain[j];
|
|
510
493
|
const toAddress = addresses[j + 1];
|
|
@@ -544,8 +527,10 @@ export async function directQuickSwapForSubmit(params) {
|
|
|
544
527
|
const payerIndex = pickMaxAmountIndex(params.buyAmounts);
|
|
545
528
|
const payerKey = params.buyerKeys[payerIndex] || primarySellerKey;
|
|
546
529
|
const payerAddress = new Wallet(payerKey).address.toLowerCase();
|
|
547
|
-
const payerTxs = allTxs.filter(tx => tx.from.toLowerCase() === payerAddress);
|
|
548
|
-
const payerNonce = payerTxs.length > 0
|
|
530
|
+
const payerTxs = allTxs.filter((tx) => tx.from.toLowerCase() === payerAddress);
|
|
531
|
+
const payerNonce = payerTxs.length > 0
|
|
532
|
+
? Math.max(...payerTxs.map((tx) => tx.nonce)) + 1
|
|
533
|
+
: await new Wallet(payerKey, provider).getNonce('pending');
|
|
549
534
|
const profitTx = await buildRevenueTail({
|
|
550
535
|
rpcUrl,
|
|
551
536
|
payerKey,
|
|
@@ -557,7 +542,7 @@ export async function directQuickSwapForSubmit(params) {
|
|
|
557
542
|
const distributeGasCost = NATIVE_TRANSFER_GAS_LIMIT * maxFeePerGas * BigInt(distributeTxs.length);
|
|
558
543
|
return {
|
|
559
544
|
transactions: allTxs,
|
|
560
|
-
signedTransactions: [...allTxs.map(tx => tx.signedTx), profitTx.signedTx],
|
|
545
|
+
signedTransactions: [...allTxs.map((tx) => tx.signedTx), profitTx.signedTx],
|
|
561
546
|
totalGasCost: sellResult.totalGasCost + distributeGasCost + buyResult.totalGasCost + NATIVE_TRANSFER_GAS_LIMIT * maxFeePerGas,
|
|
562
547
|
metadata: formatSubmitMetadata(totalFlow, profitAmount),
|
|
563
548
|
...(distributeHopWallets.length > 0 ? { hopWallets: distributeHopWallets } : {}),
|
|
@@ -571,11 +556,11 @@ export async function directQuickSwapForSubmit(params) {
|
|
|
571
556
|
* ENI 不需要多跳,直接转到收益地址
|
|
572
557
|
*/
|
|
573
558
|
export async function buildProfitTransfer(params) {
|
|
574
|
-
const { rpcUrl = ENI_RPC_URL, payerKey, profitAmount, gasPrice, nonce: explicitNonce, maxFeePerGas, maxPriorityFeePerGas } = params;
|
|
559
|
+
const { rpcUrl = ENI_RPC_URL, payerKey, profitAmount, gasPrice, nonce: explicitNonce, maxFeePerGas, maxPriorityFeePerGas, } = params;
|
|
575
560
|
const provider = new JsonRpcProvider(rpcUrl, ENI_CHAIN_ID, { staticNetwork: true });
|
|
576
561
|
const wallet = new Wallet(payerKey, provider);
|
|
577
562
|
const feeData = await provider.getFeeData();
|
|
578
|
-
const nonce = explicitNonce ?? await wallet.getNonce('pending');
|
|
563
|
+
const nonce = explicitNonce ?? (await wallet.getNonce('pending'));
|
|
579
564
|
const resolvedMaxFeePerGas = maxFeePerGas ?? gasPrice ?? feeData.maxFeePerGas ?? feeData.gasPrice ?? 1000000000n;
|
|
580
565
|
const resolvedMaxPriorityFeePerGas = maxPriorityFeePerGas ?? feeData.maxPriorityFeePerGas ?? 0n;
|
|
581
566
|
const signedTx = await wallet.signTransaction({
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* 接口与 Flap Portal 不兼容,独立实现
|
|
6
6
|
*/
|
|
7
7
|
import { Contract, Interface, JsonRpcProvider, formatEther, parseEther } from 'ethers';
|
|
8
|
-
import { DAOAAS_PORTAL, DAOAAS_PORTAL_ABI, ENI_CHAIN_ID, ENI_MULTICALL3, ENI_RPC_URL
|
|
9
|
-
import { ERC20_ABI, MULTICALL3_ABI } from '../../../../
|
|
8
|
+
import { DAOAAS_PORTAL, DAOAAS_PORTAL_ABI, ENI_CHAIN_ID, ENI_MULTICALL3, ENI_RPC_URL } from '../../constants.js';
|
|
9
|
+
import { ERC20_ABI, MULTICALL3_ABI } from '../../../../abis/common.js';
|
|
10
10
|
const portalIface = new Interface(DAOAAS_PORTAL_ABI);
|
|
11
11
|
const erc20Iface = new Interface(ERC20_ABI);
|
|
12
12
|
const multicallIface = new Interface(MULTICALL3_ABI);
|
|
@@ -34,6 +34,10 @@ export function encodeTransferCall(to, amount) {
|
|
|
34
34
|
return erc20Iface.encodeFunctionData('transfer', [to, amount]);
|
|
35
35
|
}
|
|
36
36
|
export class DaoaasPortalQuery {
|
|
37
|
+
provider;
|
|
38
|
+
portal;
|
|
39
|
+
portalAddress;
|
|
40
|
+
multicall3Address;
|
|
37
41
|
constructor(config = {}) {
|
|
38
42
|
const rpcUrl = config.rpcUrl ?? ENI_RPC_URL;
|
|
39
43
|
this.provider = new JsonRpcProvider(rpcUrl, ENI_CHAIN_ID, { staticNetwork: true });
|
|
@@ -56,7 +60,7 @@ export class DaoaasPortalQuery {
|
|
|
56
60
|
/** 获取代币完整状态(链上 getTokenState 仅返回 uint256 状态码,其余数据分别查询) */
|
|
57
61
|
async getTokenState(token) {
|
|
58
62
|
const status = Number(await this.portal.getTokenState(token));
|
|
59
|
-
const price = await this.portal.getPrice(token);
|
|
63
|
+
const price = (await this.portal.getPrice(token));
|
|
60
64
|
const tokenContract = new Contract(token, ERC20_ABI, this.provider);
|
|
61
65
|
const [totalSupply, portalBalance, name, symbol] = await Promise.all([
|
|
62
66
|
tokenContract.totalSupply(),
|
|
@@ -69,7 +73,7 @@ export class DaoaasPortalQuery {
|
|
|
69
73
|
}
|
|
70
74
|
/** 批量获取钱包 EGAS 余额 */
|
|
71
75
|
async getMultipleEgasBalances(addresses) {
|
|
72
|
-
const calls = addresses.map(addr => ({
|
|
76
|
+
const calls = addresses.map((addr) => ({
|
|
73
77
|
target: this.multicall3Address,
|
|
74
78
|
allowFailure: true,
|
|
75
79
|
callData: multicallIface.encodeFunctionData('getEthBalance', [addr]),
|
|
@@ -85,7 +89,7 @@ export class DaoaasPortalQuery {
|
|
|
85
89
|
}
|
|
86
90
|
/** 批量获取 ERC20 余额 */
|
|
87
91
|
async getMultipleTokenBalances(token, addresses) {
|
|
88
|
-
const calls = addresses.map(addr => ({
|
|
92
|
+
const calls = addresses.map((addr) => ({
|
|
89
93
|
target: token,
|
|
90
94
|
allowFailure: true,
|
|
91
95
|
callData: erc20Iface.encodeFunctionData('balanceOf', [addr]),
|
|
@@ -101,7 +105,7 @@ export class DaoaasPortalQuery {
|
|
|
101
105
|
}
|
|
102
106
|
/** 批量获取 ERC20 allowance */
|
|
103
107
|
async getMultipleAllowances(token, owners, spender) {
|
|
104
|
-
const calls = owners.map(owner => ({
|
|
108
|
+
const calls = owners.map((owner) => ({
|
|
105
109
|
target: token,
|
|
106
110
|
allowFailure: true,
|
|
107
111
|
callData: erc20Iface.encodeFunctionData('allowance', [owner, spender]),
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { Wallet, JsonRpcProvider, Contract, ethers, Interface } from 'ethers';
|
|
11
11
|
import { ENI_CHAIN_ID, ENI_RPC_URL, WEGAS, NATIVE_TRANSFER_GAS_LIMIT, DSWAP_V2_ROUTER, DSWAP_V2_FACTORY, DSWAP_V2_ROUTER_ABI, DSWAP_V2_FACTORY_ABI, DSWAP_V2_PAIR_ABI, } from '../../constants.js';
|
|
12
|
-
import { ERC20_ABI } from '../../../../
|
|
12
|
+
import { ERC20_ABI } from '../../../../abis/common.js';
|
|
13
13
|
import { getProfitRecipient, getProfitRateBps, calculateProfitAmount } from '../../../../shared/constants/profit.js';
|
|
14
14
|
const DEFAULT_DEADLINE_MINUTES = 20;
|
|
15
15
|
const DEFAULT_SLIPPAGE_PCT = 5;
|
|
@@ -25,7 +25,7 @@ function getDeadline(minutes) {
|
|
|
25
25
|
}
|
|
26
26
|
function applySlippage(amount, slippagePct) {
|
|
27
27
|
const pct = Math.max(0, Math.min(100, slippagePct));
|
|
28
|
-
return amount * BigInt(100 - Math.floor(pct)) / 100n;
|
|
28
|
+
return (amount * BigInt(100 - Math.floor(pct))) / 100n;
|
|
29
29
|
}
|
|
30
30
|
async function signProfitTx(params) {
|
|
31
31
|
return params.wallet.signTransaction({
|
|
@@ -64,17 +64,11 @@ export async function getLPPairInfo(params) {
|
|
|
64
64
|
]);
|
|
65
65
|
let userLPBalance = 0n;
|
|
66
66
|
if (params.userAddress) {
|
|
67
|
-
userLPBalance = await pair.balanceOf(params.userAddress);
|
|
67
|
+
userLPBalance = (await pair.balanceOf(params.userAddress));
|
|
68
68
|
}
|
|
69
|
-
const userShare = totalSupply > 0n
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const userToken0Amount = totalSupply > 0n
|
|
73
|
-
? reserves[0] * userLPBalance / totalSupply
|
|
74
|
-
: 0n;
|
|
75
|
-
const userToken1Amount = totalSupply > 0n
|
|
76
|
-
? reserves[1] * userLPBalance / totalSupply
|
|
77
|
-
: 0n;
|
|
69
|
+
const userShare = totalSupply > 0n ? Number((userLPBalance * 10000n) / totalSupply) / 10000 : 0;
|
|
70
|
+
const userToken0Amount = totalSupply > 0n ? (reserves[0] * userLPBalance) / totalSupply : 0n;
|
|
71
|
+
const userToken1Amount = totalSupply > 0n ? (reserves[1] * userLPBalance) / totalSupply : 0n;
|
|
78
72
|
return {
|
|
79
73
|
pairAddress: pairAddr,
|
|
80
74
|
token0,
|
|
@@ -89,7 +83,7 @@ export async function getLPPairInfo(params) {
|
|
|
89
83
|
};
|
|
90
84
|
}
|
|
91
85
|
export async function batchGetLPPairInfo(params) {
|
|
92
|
-
return Promise.all(params.tokens.map(token => getLPPairInfo({ rpcUrl: params.rpcUrl, token, userAddress: params.userAddress })));
|
|
86
|
+
return Promise.all(params.tokens.map((token) => getLPPairInfo({ rpcUrl: params.rpcUrl, token, userAddress: params.userAddress })));
|
|
93
87
|
}
|
|
94
88
|
// ============================================================================
|
|
95
89
|
// 创建/添加 流动性 — EGAS + Token
|
|
@@ -123,7 +117,12 @@ export async function addLiquidityETHForSubmit(params) {
|
|
|
123
117
|
const amountTokenMin = applySlippage(amountTokenDesired, slippage);
|
|
124
118
|
const amountETHMin = applySlippage(amountETHDesired, slippage);
|
|
125
119
|
const addLiqData = routerIface.encodeFunctionData('addLiquidityETH', [
|
|
126
|
-
token,
|
|
120
|
+
token,
|
|
121
|
+
amountTokenDesired,
|
|
122
|
+
amountTokenMin,
|
|
123
|
+
amountETHMin,
|
|
124
|
+
wallet.address,
|
|
125
|
+
deadline,
|
|
127
126
|
]);
|
|
128
127
|
const addLiqTx = await wallet.signTransaction({
|
|
129
128
|
to: DSWAP_V2_ROUTER,
|
|
@@ -140,7 +139,13 @@ export async function addLiquidityETHForSubmit(params) {
|
|
|
140
139
|
const profitTxGasCost = NATIVE_TRANSFER_GAS_LIMIT * maxFeePerGas;
|
|
141
140
|
const profitAmount = calculateProfitAmount(amountETHDesired, PROFIT_BPS) + profitTxGasCost;
|
|
142
141
|
if (profitAmount > 0n) {
|
|
143
|
-
const profitTx = await signProfitTx({
|
|
142
|
+
const profitTx = await signProfitTx({
|
|
143
|
+
wallet,
|
|
144
|
+
nonce: currentNonce,
|
|
145
|
+
profitAmount,
|
|
146
|
+
maxFeePerGas,
|
|
147
|
+
maxPriorityFeePerGas,
|
|
148
|
+
});
|
|
144
149
|
signedTxs.push(profitTx);
|
|
145
150
|
}
|
|
146
151
|
return { signedTransactions: signedTxs };
|
|
@@ -165,7 +170,7 @@ export async function removeLiquidityETHForSubmit(params) {
|
|
|
165
170
|
const pair = new Contract(pairAddr, DSWAP_V2_PAIR_ABI, provider);
|
|
166
171
|
let liquidity = params.liquidity;
|
|
167
172
|
if (liquidity === 0n) {
|
|
168
|
-
liquidity = await pair.balanceOf(wallet.address);
|
|
173
|
+
liquidity = (await pair.balanceOf(wallet.address));
|
|
169
174
|
if (liquidity === 0n)
|
|
170
175
|
throw new Error('No LP tokens to remove');
|
|
171
176
|
}
|
|
@@ -177,8 +182,8 @@ export async function removeLiquidityETHForSubmit(params) {
|
|
|
177
182
|
const isToken0 = token.toLowerCase() === token0.toLowerCase();
|
|
178
183
|
const reserveToken = isToken0 ? reserves[0] : reserves[1];
|
|
179
184
|
const reserveETH = isToken0 ? reserves[1] : reserves[0];
|
|
180
|
-
const amountTokenExpected = reserveToken * liquidity / totalSupply;
|
|
181
|
-
const amountETHExpected = reserveETH * liquidity / totalSupply;
|
|
185
|
+
const amountTokenExpected = (reserveToken * liquidity) / totalSupply;
|
|
186
|
+
const amountETHExpected = (reserveETH * liquidity) / totalSupply;
|
|
182
187
|
const amountTokenMin = applySlippage(amountTokenExpected, slippage);
|
|
183
188
|
const amountETHMin = applySlippage(amountETHExpected, slippage);
|
|
184
189
|
let currentNonce = await wallet.getNonce();
|
|
@@ -198,7 +203,12 @@ export async function removeLiquidityETHForSubmit(params) {
|
|
|
198
203
|
signedTxs.push(approveTx);
|
|
199
204
|
}
|
|
200
205
|
const removeLiqData = routerIface.encodeFunctionData('removeLiquidityETHSupportingFeeOnTransferTokens', [
|
|
201
|
-
token,
|
|
206
|
+
token,
|
|
207
|
+
liquidity,
|
|
208
|
+
amountTokenMin,
|
|
209
|
+
amountETHMin,
|
|
210
|
+
wallet.address,
|
|
211
|
+
deadline,
|
|
202
212
|
]);
|
|
203
213
|
const removeLiqTx = await wallet.signTransaction({
|
|
204
214
|
to: DSWAP_V2_ROUTER,
|
|
@@ -215,7 +225,13 @@ export async function removeLiquidityETHForSubmit(params) {
|
|
|
215
225
|
const profitTxGasCost = NATIVE_TRANSFER_GAS_LIMIT * maxFeePerGas;
|
|
216
226
|
const profitAmount = calculateProfitAmount(amountETHExpected, PROFIT_BPS) + profitTxGasCost;
|
|
217
227
|
if (profitAmount > 0n) {
|
|
218
|
-
const profitTx = await signProfitTx({
|
|
228
|
+
const profitTx = await signProfitTx({
|
|
229
|
+
wallet,
|
|
230
|
+
nonce: currentNonce,
|
|
231
|
+
profitAmount,
|
|
232
|
+
maxFeePerGas,
|
|
233
|
+
maxPriorityFeePerGas,
|
|
234
|
+
});
|
|
219
235
|
signedTxs.push(profitTx);
|
|
220
236
|
}
|
|
221
237
|
return { signedTransactions: signedTxs };
|
|
@@ -234,7 +250,10 @@ export async function addLiquidityForSubmit(params) {
|
|
|
234
250
|
const maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? 0n;
|
|
235
251
|
let currentNonce = await wallet.getNonce();
|
|
236
252
|
const signedTxs = [];
|
|
237
|
-
for (const [token, amount] of [
|
|
253
|
+
for (const [token, amount] of [
|
|
254
|
+
[tokenA, amountADesired],
|
|
255
|
+
[tokenB, amountBDesired],
|
|
256
|
+
]) {
|
|
238
257
|
const erc20 = new Contract(token, ERC20_ABI, provider);
|
|
239
258
|
const allowance = await erc20.allowance(wallet.address, DSWAP_V2_ROUTER);
|
|
240
259
|
if (allowance < amount) {
|
|
@@ -254,7 +273,14 @@ export async function addLiquidityForSubmit(params) {
|
|
|
254
273
|
const amountAMin = applySlippage(amountADesired, slippage);
|
|
255
274
|
const amountBMin = applySlippage(amountBDesired, slippage);
|
|
256
275
|
const addLiqData = routerIface.encodeFunctionData('addLiquidity', [
|
|
257
|
-
tokenA,
|
|
276
|
+
tokenA,
|
|
277
|
+
tokenB,
|
|
278
|
+
amountADesired,
|
|
279
|
+
amountBDesired,
|
|
280
|
+
amountAMin,
|
|
281
|
+
amountBMin,
|
|
282
|
+
wallet.address,
|
|
283
|
+
deadline,
|
|
258
284
|
]);
|
|
259
285
|
const addLiqTx = await wallet.signTransaction({
|
|
260
286
|
to: DSWAP_V2_ROUTER,
|
|
@@ -290,7 +316,7 @@ export async function removeLiquidityForSubmit(params) {
|
|
|
290
316
|
const pair = new Contract(pairAddr, DSWAP_V2_PAIR_ABI, provider);
|
|
291
317
|
let liquidity = params.liquidity;
|
|
292
318
|
if (liquidity === 0n) {
|
|
293
|
-
liquidity = await pair.balanceOf(wallet.address);
|
|
319
|
+
liquidity = (await pair.balanceOf(wallet.address));
|
|
294
320
|
if (liquidity === 0n)
|
|
295
321
|
throw new Error('No LP tokens to remove');
|
|
296
322
|
}
|
|
@@ -302,8 +328,8 @@ export async function removeLiquidityForSubmit(params) {
|
|
|
302
328
|
const isAToken0 = tokenA.toLowerCase() === token0.toLowerCase();
|
|
303
329
|
const reserveA = isAToken0 ? reserves[0] : reserves[1];
|
|
304
330
|
const reserveB = isAToken0 ? reserves[1] : reserves[0];
|
|
305
|
-
const amountAMin = applySlippage(reserveA * liquidity / totalSupply, slippage);
|
|
306
|
-
const amountBMin = applySlippage(reserveB * liquidity / totalSupply, slippage);
|
|
331
|
+
const amountAMin = applySlippage((reserveA * liquidity) / totalSupply, slippage);
|
|
332
|
+
const amountBMin = applySlippage((reserveB * liquidity) / totalSupply, slippage);
|
|
307
333
|
let currentNonce = await wallet.getNonce();
|
|
308
334
|
const signedTxs = [];
|
|
309
335
|
const lpAllowance = await pair.allowance(wallet.address, DSWAP_V2_ROUTER);
|
|
@@ -321,7 +347,13 @@ export async function removeLiquidityForSubmit(params) {
|
|
|
321
347
|
signedTxs.push(approveTx);
|
|
322
348
|
}
|
|
323
349
|
const removeLiqData = routerIface.encodeFunctionData('removeLiquidity', [
|
|
324
|
-
tokenA,
|
|
350
|
+
tokenA,
|
|
351
|
+
tokenB,
|
|
352
|
+
liquidity,
|
|
353
|
+
amountAMin,
|
|
354
|
+
amountBMin,
|
|
355
|
+
wallet.address,
|
|
356
|
+
deadline,
|
|
325
357
|
]);
|
|
326
358
|
const removeLiqTx = await wallet.signTransaction({
|
|
327
359
|
to: DSWAP_V2_ROUTER,
|
|
@@ -9,5 +9,5 @@ export type { LaunchParams, FairLaunchTokenInfo, FairLaunchQueryConfig, FairLaun
|
|
|
9
9
|
export { LP_FAIR_LAUNCHER_ADDRESS, TOKEN_FACTORY_ADDRESS, POOL_FACTORY_ADDRESS, RATE_BASE, DEAD_ADDRESS, QUOTE_TOKENS, DEFAULT_LOCK_TIME, DEFAULT_RELEASE_PERIOD, DEFAULT_INITIAL_LP, } from './constants.js';
|
|
10
10
|
export { standardPreset, liquidityProvidingPreset, dividendPreset, dividendBuybackPreset, deflationaryPreset, validateLaunchParams, detectLaunchType, } from './presets.js';
|
|
11
11
|
export { FairLauncherQuery, encodeLaunchTokenCall, launchToken, launchTokenForSubmit, setTokenTradeStartTime, setTokenTradeStartTimeForSubmit, } from './launcher.js';
|
|
12
|
-
export { FairPoolQuery, claimFromPool, claimFromPoolForSubmit, batchClaimForSubmit
|
|
13
|
-
export type { PoolOverview, PoolClaimParams, PoolClaimResult
|
|
12
|
+
export { FairPoolQuery, claimFromPool, claimFromPoolForSubmit, batchClaimForSubmit } from './pool.js';
|
|
13
|
+
export type { PoolOverview, PoolClaimParams, PoolClaimResult } from './pool.js';
|
|
@@ -23,4 +23,4 @@ export { FairLauncherQuery, encodeLaunchTokenCall, launchToken, launchTokenForSu
|
|
|
23
23
|
// ============================================================================
|
|
24
24
|
// 池 (Pool)
|
|
25
25
|
// ============================================================================
|
|
26
|
-
export { FairPoolQuery, claimFromPool, claimFromPoolForSubmit, batchClaimForSubmit
|
|
26
|
+
export { FairPoolQuery, claimFromPool, claimFromPoolForSubmit, batchClaimForSubmit } from './pool.js';
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - 查询代币列表
|
|
8
8
|
*/
|
|
9
9
|
import { Contract, Interface, Wallet, JsonRpcProvider } from 'ethers';
|
|
10
|
-
import { ENI_CHAIN_ID, ENI_RPC_URL, LP_FAIR_LAUNCHER_ABI, NATIVE_TRANSFER_GAS_LIMIT
|
|
10
|
+
import { ENI_CHAIN_ID, ENI_RPC_URL, LP_FAIR_LAUNCHER_ABI, NATIVE_TRANSFER_GAS_LIMIT } from '../../constants.js';
|
|
11
11
|
import { LP_FAIR_LAUNCHER_ADDRESS } from './constants.js';
|
|
12
12
|
import { buildProfitTransfer } from '../daoaas/portal-direct.js';
|
|
13
13
|
import { calculateProfitAmount, getProfitRateBps, getProfitRecipient } from '../../../../shared/constants/profit.js';
|
|
@@ -17,6 +17,8 @@ const launcherIface = new Interface(LP_FAIR_LAUNCHER_ABI);
|
|
|
17
17
|
// 只读查询
|
|
18
18
|
// ============================================================================
|
|
19
19
|
export class FairLauncherQuery {
|
|
20
|
+
provider;
|
|
21
|
+
launcher;
|
|
20
22
|
constructor(config = {}) {
|
|
21
23
|
const rpcUrl = config.rpcUrl ?? ENI_RPC_URL;
|
|
22
24
|
this.provider = new JsonRpcProvider(rpcUrl, ENI_CHAIN_ID, { staticNetwork: true });
|
|
@@ -257,55 +259,93 @@ export async function launchTokenForSubmit(params) {
|
|
|
257
259
|
// ============================================================================
|
|
258
260
|
function paramsToTuple(p) {
|
|
259
261
|
return [
|
|
260
|
-
p.name,
|
|
261
|
-
p.
|
|
262
|
-
p.
|
|
263
|
-
p.
|
|
264
|
-
p.
|
|
265
|
-
p.
|
|
266
|
-
p.
|
|
267
|
-
p.
|
|
268
|
-
p.
|
|
269
|
-
p.
|
|
270
|
-
p.
|
|
271
|
-
p.
|
|
262
|
+
p.name,
|
|
263
|
+
p.symbol,
|
|
264
|
+
p.logo,
|
|
265
|
+
p.metadata,
|
|
266
|
+
p.quoteTokenAddr,
|
|
267
|
+
p.initialLp,
|
|
268
|
+
p.initialQuote,
|
|
269
|
+
p.lpAddRate,
|
|
270
|
+
p.lpAddMin,
|
|
271
|
+
p.buybackRate,
|
|
272
|
+
p.buybackMin,
|
|
273
|
+
p.buybackPath,
|
|
274
|
+
p.marketingRates,
|
|
275
|
+
p.marketingAddrs,
|
|
276
|
+
p.vestingAmount,
|
|
277
|
+
p.vestingLockEndTime,
|
|
278
|
+
p.vestingReleaseEndTime,
|
|
279
|
+
p.vestingRecipients,
|
|
280
|
+
p.vestingRatios,
|
|
281
|
+
p.tradeStartTime,
|
|
282
|
+
p.claimStartTime,
|
|
283
|
+
p.claimEndTime,
|
|
284
|
+
p.lockTime,
|
|
285
|
+
p.releasePeriod,
|
|
286
|
+
p.maxCount,
|
|
287
|
+
p.minAmount,
|
|
288
|
+
p.maxAmount,
|
|
289
|
+
p.whitelistEnabled,
|
|
290
|
+
p.whitelistAddrs,
|
|
291
|
+
p.inviteCodeEnabled,
|
|
292
|
+
p.inviteCodes,
|
|
272
293
|
];
|
|
273
294
|
}
|
|
274
|
-
|
|
295
|
+
function readRawBigint(raw, key, index) {
|
|
296
|
+
const value = raw[key] ?? raw[index];
|
|
297
|
+
if (value === undefined || value === null)
|
|
298
|
+
return 0n;
|
|
299
|
+
return BigInt(value);
|
|
300
|
+
}
|
|
301
|
+
function readRawString(raw, key, index) {
|
|
302
|
+
const value = raw[key] ?? raw[index];
|
|
303
|
+
return typeof value === 'string' ? value : '';
|
|
304
|
+
}
|
|
305
|
+
function readRawStringArray(raw, key, index) {
|
|
306
|
+
const value = raw[key] ?? raw[index];
|
|
307
|
+
return Array.isArray(value) ? [...value] : [];
|
|
308
|
+
}
|
|
309
|
+
function readRawBigintArray(raw, key, index) {
|
|
310
|
+
const value = raw[key] ?? raw[index];
|
|
311
|
+
if (!Array.isArray(value))
|
|
312
|
+
return [];
|
|
313
|
+
return value.map((item) => BigInt(item));
|
|
314
|
+
}
|
|
275
315
|
function parseFairLaunchTokenInfo(raw) {
|
|
276
316
|
return {
|
|
277
|
-
indexAll:
|
|
278
|
-
user: raw
|
|
279
|
-
index:
|
|
280
|
-
tokenAddress: raw
|
|
281
|
-
poolAddress: raw
|
|
282
|
-
vestingAddress: raw
|
|
283
|
-
quoteTokenAddr: raw
|
|
284
|
-
initialSupply:
|
|
285
|
-
initialLP:
|
|
286
|
-
initialQuote:
|
|
287
|
-
lpAddRate:
|
|
288
|
-
buybackRate:
|
|
289
|
-
buybackPath:
|
|
290
|
-
marketingRates: (raw
|
|
291
|
-
marketingAddrs:
|
|
292
|
-
vestingAmount:
|
|
293
|
-
vestingLockEndTime:
|
|
294
|
-
vestingReleaseEndTime:
|
|
295
|
-
vestingRecipients:
|
|
296
|
-
vestingRatios: (raw
|
|
297
|
-
tradeStartTime:
|
|
298
|
-
claimStartTime:
|
|
299
|
-
claimEndTime:
|
|
300
|
-
lockTime:
|
|
301
|
-
releasePeriod:
|
|
302
|
-
maxCount:
|
|
303
|
-
minAmount:
|
|
304
|
-
maxAmount:
|
|
305
|
-
name: raw
|
|
306
|
-
symbol: raw
|
|
307
|
-
logo: raw
|
|
308
|
-
metadata: raw
|
|
309
|
-
timestamp:
|
|
317
|
+
indexAll: readRawBigint(raw, 'indexAll', 0),
|
|
318
|
+
user: readRawString(raw, 'user', 1),
|
|
319
|
+
index: readRawBigint(raw, 'index', 2),
|
|
320
|
+
tokenAddress: readRawString(raw, 'tokenAddr', 3),
|
|
321
|
+
poolAddress: readRawString(raw, 'poolAddr', 4),
|
|
322
|
+
vestingAddress: readRawString(raw, 'vestingAddr', 5),
|
|
323
|
+
quoteTokenAddr: readRawString(raw, 'quoteTokenAddr', 6),
|
|
324
|
+
initialSupply: readRawBigint(raw, 'initialSupply', 7),
|
|
325
|
+
initialLP: readRawBigint(raw, 'initialLP', 8),
|
|
326
|
+
initialQuote: readRawBigint(raw, 'initialQuote', 9),
|
|
327
|
+
lpAddRate: readRawBigint(raw, 'lpAddRate', 10),
|
|
328
|
+
buybackRate: readRawBigint(raw, 'buybackRate', 11),
|
|
329
|
+
buybackPath: readRawStringArray(raw, 'buybackPath', 12),
|
|
330
|
+
marketingRates: readRawBigintArray(raw, 'marketingRates', 13),
|
|
331
|
+
marketingAddrs: readRawStringArray(raw, 'marketingAddrs', 14),
|
|
332
|
+
vestingAmount: readRawBigint(raw, 'vestingAmount', 15),
|
|
333
|
+
vestingLockEndTime: readRawBigint(raw, 'vestingLockEndTime', 16),
|
|
334
|
+
vestingReleaseEndTime: readRawBigint(raw, 'vestingReleaseEndTime', 17),
|
|
335
|
+
vestingRecipients: readRawStringArray(raw, 'vestingRecipients', 18),
|
|
336
|
+
vestingRatios: readRawBigintArray(raw, 'vestingRatios', 19),
|
|
337
|
+
tradeStartTime: readRawBigint(raw, 'tradeStartTime', 20),
|
|
338
|
+
claimStartTime: readRawBigint(raw, 'claimStartTime', 21),
|
|
339
|
+
claimEndTime: readRawBigint(raw, 'claimEndTime', 22),
|
|
340
|
+
lockTime: readRawBigint(raw, 'lockTime', 23),
|
|
341
|
+
releasePeriod: readRawBigint(raw, 'releasePeriod', 24),
|
|
342
|
+
maxCount: readRawBigint(raw, 'maxCount', 25),
|
|
343
|
+
minAmount: readRawBigint(raw, 'minAmount', 26),
|
|
344
|
+
maxAmount: readRawBigint(raw, 'maxAmount', 27),
|
|
345
|
+
name: readRawString(raw, 'name', 28),
|
|
346
|
+
symbol: readRawString(raw, 'symbol', 29),
|
|
347
|
+
logo: readRawString(raw, 'logo', 30),
|
|
348
|
+
metadata: readRawString(raw, 'metadata', 31),
|
|
349
|
+
timestamp: readRawBigint(raw, 'timestamp', 32),
|
|
310
350
|
};
|
|
311
351
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - 构建跟买交易 (claimForSubmit / batchClaimForSubmit)
|
|
8
8
|
*/
|
|
9
9
|
import { Contract, Interface, Wallet, JsonRpcProvider } from 'ethers';
|
|
10
|
-
import { ENI_CHAIN_ID, ENI_RPC_URL, LP_FAIR_POOL_ABI, NATIVE_TRANSFER_GAS_LIMIT
|
|
10
|
+
import { ENI_CHAIN_ID, ENI_RPC_URL, LP_FAIR_POOL_ABI, NATIVE_TRANSFER_GAS_LIMIT } from '../../constants.js';
|
|
11
11
|
import { buildProfitTransfer } from '../daoaas/portal-direct.js';
|
|
12
12
|
import { calculateProfitAmount, getProfitRateBps, getProfitRecipient } from '../../../../shared/constants/profit.js';
|
|
13
13
|
const poolIface = new Interface(LP_FAIR_POOL_ABI);
|
|
@@ -15,6 +15,9 @@ const poolIface = new Interface(LP_FAIR_POOL_ABI);
|
|
|
15
15
|
// 查询
|
|
16
16
|
// ============================================================================
|
|
17
17
|
export class FairPoolQuery {
|
|
18
|
+
provider;
|
|
19
|
+
pool;
|
|
20
|
+
poolAddress;
|
|
18
21
|
constructor(poolAddress, rpcUrl) {
|
|
19
22
|
this.poolAddress = poolAddress;
|
|
20
23
|
this.provider = new JsonRpcProvider(rpcUrl ?? ENI_RPC_URL, ENI_CHAIN_ID, { staticNetwork: true });
|