four-flap-meme-sdk 2.0.0 → 2.2.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/dist/__tests__/subpath-exports.test.js +64 -0
- package/dist/chains/bsc/iro.d.ts +5 -0
- package/dist/chains/bsc/iro.js +4 -0
- 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 +1 -0
- package/dist/chains/eni/index.js +1 -0
- package/dist/chains/index.d.ts +13 -0
- package/dist/chains/index.js +13 -0
- 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 +1 -0
- package/dist/chains/xlayer/eip7702/index.js +1 -0
- package/dist/chains/xlayer/index.d.ts +3 -2
- package/dist/chains/xlayer/index.js +4 -7
- package/dist/flap/index.d.ts +10 -0
- package/dist/flap/index.js +8 -0
- package/dist/merkle/index.d.ts +12 -0
- package/dist/merkle/index.js +11 -0
- package/dist/shared/constants/index.d.ts +2 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/vanity/index.d.ts +5 -0
- package/dist/vanity/index.js +5 -0
- package/package.json +93 -2
- package/dist/chains/bsc/four/disperse.d.ts +0 -12
- package/dist/chains/bsc/four/disperse.js +0 -470
- package/dist/chains/bsc/four/pairwise.d.ts +0 -7
- package/dist/chains/bsc/four/pairwise.js +0 -308
- 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/index.js +0 -829
- package/dist/chains/bsc/four/swap/types.d.ts +0 -70
- package/dist/chains/bsc/four/swap/types.js +0 -1
- package/dist/chains/bsc/four/sweep.d.ts +0 -13
- package/dist/chains/bsc/four/sweep.js +0 -788
- 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/four/utils/types.d.ts +0 -1
- package/dist/chains/bsc/four/utils/types.js +0 -1
- 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-buy-first/types.js +0 -1
- package/dist/chains/bsc/pancake/bundle-swap/helpers.d.ts +0 -102
- package/dist/chains/bsc/pancake/bundle-swap/helpers.js +0 -572
- 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/bundle-swap/types.js +0 -1
- 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/multi-hop-transfer/types.d.ts +0 -85
- package/dist/chains/xlayer/eip7702/multi-hop-transfer/types.js +0 -1
- package/dist/chains/xlayer/eip7702/volume/index.d.ts +0 -96
- package/dist/chains/xlayer/eip7702/volume/index.js +0 -793
- package/dist/chains/xlayer/eip7702/volume/types.d.ts +0 -124
- package/dist/chains/xlayer/eip7702/volume/types.js +0 -1
- package/dist/chains/xlayer/eoa/types-core.d.ts +0 -363
- package/dist/chains/xlayer/eoa/types-core.js +0 -53
- package/dist/chains/xlayer/eoa/types-create.d.ts +0 -413
- package/dist/chains/xlayer/eoa/types-create.js +0 -9
- package/dist/chains/xlayer/eoa/types-volume.d.ts +0 -209
- package/dist/chains/xlayer/eoa/types-volume.js +0 -13
- package/dist/dex/direct-router/index.d.ts +0 -70
- package/dist/dex/direct-router/index.js +0 -1410
- package/dist/dex/direct-router/types.d.ts +0 -81
- package/dist/dex/direct-router/types.js +0 -1
- 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/abis 2/TaxToken.json +0 -105
- package/dist/shared/abis 2/TokenManager.json +0 -836
- package/dist/shared/abis 2/TokenManager2.json +0 -60
- package/dist/shared/abis 2/TokenManagerHelper3.json +0 -993
- package/dist/shared/abis 2/common.d.ts +0 -85
- package/dist/shared/abis 2/common.js +0 -254
- package/dist/shared/abis 2/index.d.ts +0 -8
- package/dist/shared/abis 2/index.js +0 -8
- package/dist/shared/clients 2/blockrazor.d.ts +0 -314
- package/dist/shared/clients 2/blockrazor.js +0 -596
- package/dist/shared/clients 2/club48.d.ts +0 -154
- package/dist/shared/clients 2/club48.js +0 -331
- package/dist/shared/clients 2/emitservice.d.ts +0 -47
- package/dist/shared/clients 2/emitservice.js +0 -44
- package/dist/shared/clients 2/four.d.ts +0 -132
- package/dist/shared/clients 2/four.js +0 -281
- package/dist/shared/clients 2/merkle.d.ts +0 -210
- package/dist/shared/clients 2/merkle.js +0 -400
- package/dist/shared/flap/__tests__/curve.test.d.ts +0 -1
- 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/core/types.d.ts +0 -1
- package/dist/shared/flap/portal-bundle-merkle/core/types.js +0 -1
- 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/swap/types.js +0 -1
- 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/flap/portal-bundle-merkle/utils/types.js +0 -1
- package/dist/shared/flap/portal-bundle-merkle/utils-helpers.d.ts +0 -100
- package/dist/shared/flap/portal-bundle-merkle/utils-helpers.js +0 -133
- package/dist/shared/flap 2/__tests__/curve.test.d.ts +0 -1
- package/dist/shared/flap 2/__tests__/curve.test.js +0 -85
- package/dist/shared/flap 2/abi.d.ts +0 -4
- package/dist/shared/flap 2/abi.js +0 -4
- package/dist/shared/flap 2/constants.d.ts +0 -128
- package/dist/shared/flap 2/constants.js +0 -143
- package/dist/shared/flap 2/curve.d.ts +0 -33
- package/dist/shared/flap 2/curve.js +0 -84
- package/dist/shared/flap 2/errors.d.ts +0 -37
- package/dist/shared/flap 2/errors.js +0 -114
- package/dist/shared/flap 2/index.d.ts +0 -22
- package/dist/shared/flap 2/index.js +0 -33
- package/dist/shared/flap 2/ipfs.d.ts +0 -21
- package/dist/shared/flap 2/ipfs.js +0 -38
- package/dist/shared/flap 2/meta.d.ts +0 -30
- package/dist/shared/flap 2/meta.js +0 -195
- package/dist/shared/flap 2/permit.d.ts +0 -16
- package/dist/shared/flap 2/permit.js +0 -67
- package/dist/shared/flap 2/pinata.d.ts +0 -40
- package/dist/shared/flap 2/pinata.js +0 -106
- package/dist/shared/flap 2/portal-bundle-merkle/config.d.ts +0 -79
- package/dist/shared/flap 2/portal-bundle-merkle/config.js +0 -133
- package/dist/shared/flap 2/portal-bundle-merkle/core.d.ts +0 -18
- package/dist/shared/flap 2/portal-bundle-merkle/core.js +0 -938
- package/dist/shared/flap 2/portal-bundle-merkle/create-to-dex.d.ts +0 -125
- package/dist/shared/flap 2/portal-bundle-merkle/create-to-dex.js +0 -665
- package/dist/shared/flap 2/portal-bundle-merkle/curve-to-dex.d.ts +0 -88
- package/dist/shared/flap 2/portal-bundle-merkle/curve-to-dex.js +0 -446
- package/dist/shared/flap 2/portal-bundle-merkle/index.d.ts +0 -14
- package/dist/shared/flap 2/portal-bundle-merkle/index.js +0 -26
- package/dist/shared/flap 2/portal-bundle-merkle/pancake-proxy.d.ts +0 -28
- package/dist/shared/flap 2/portal-bundle-merkle/pancake-proxy.js +0 -701
- package/dist/shared/flap 2/portal-bundle-merkle/private.d.ts +0 -17
- package/dist/shared/flap 2/portal-bundle-merkle/private.js +0 -549
- package/dist/shared/flap 2/portal-bundle-merkle/swap-buy-first.d.ts +0 -65
- package/dist/shared/flap 2/portal-bundle-merkle/swap-buy-first.js +0 -831
- package/dist/shared/flap 2/portal-bundle-merkle/swap.d.ts +0 -201
- package/dist/shared/flap 2/portal-bundle-merkle/swap.js +0 -1359
- package/dist/shared/flap 2/portal-bundle-merkle/types.d.ts +0 -358
- package/dist/shared/flap 2/portal-bundle-merkle/types.js +0 -1
- package/dist/shared/flap 2/portal-bundle-merkle/utils.d.ts +0 -89
- package/dist/shared/flap 2/portal-bundle-merkle/utils.js +0 -963
- package/dist/shared/flap 2/portal-bundle.d.ts +0 -119
- package/dist/shared/flap 2/portal-bundle.js +0 -584
- package/dist/shared/flap 2/portal.d.ts +0 -392
- package/dist/shared/flap 2/portal.js +0 -559
- package/dist/shared/flap 2/vanity.d.ts +0 -48
- package/dist/shared/flap 2/vanity.js +0 -110
- package/dist/shared/flap 2/vault.d.ts +0 -240
- package/dist/shared/flap 2/vault.js +0 -366
- package/dist/shared/four 2/index.d.ts +0 -7
- package/dist/shared/four 2/index.js +0 -22
- package/dist/shared/four 2/tax-token.d.ts +0 -176
- package/dist/shared/four 2/tax-token.js +0 -302
- package/dist/shared/index 2.js +0 -10
- package/dist/shared/index.d 2.ts +0 -10
- package/dist/types/distribute.d.ts +0 -72
- package/dist/types/distribute.js +0 -1
- package/dist/types 2/errors.d.ts +0 -27
- package/dist/types 2/errors.js +0 -34
- package/dist/utils/__tests__/errors.test.d.ts +0 -1
- package/dist/utils/__tests__/errors.test.js +0 -76
- package/dist/utils/airdrop-sweep-types.d.ts +0 -1
- package/dist/utils/airdrop-sweep-types.js +0 -1
- package/dist/utils/erc20/index.d.ts +0 -242
- package/dist/utils/erc20/index.js +0 -645
- package/dist/utils/erc20/types.d.ts +0 -77
- package/dist/utils/erc20/types.js +0 -1
- package/dist/utils/erc20-types.d.ts +0 -1
- package/dist/utils/erc20-types.js +0 -1
- 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.d.ts +0 -72
- package/dist/utils/holders-maker/types.js +0 -4
- package/dist/utils/holders-maker-types.d.ts +0 -1
- package/dist/utils/holders-maker-types.js +0 -1
- package/dist/utils/lp-inspect/index.d.ts +0 -44
- package/dist/utils/lp-inspect/index.js +0 -937
- package/dist/utils/lp-inspect/types.d.ts +0 -100
- package/dist/utils/lp-inspect/types.js +0 -1
- package/dist/utils/lp-inspect-types.d.ts +0 -1
- package/dist/utils/lp-inspect-types.js +0 -1
- package/dist/utils/private-sale-types.d.ts +0 -1
- package/dist/utils/private-sale-types.js +0 -1
- package/dist/utils/quote-helpers/index.d.ts +0 -107
- package/dist/utils/quote-helpers/index.js +0 -346
- package/dist/utils/quote-helpers/types.d.ts +0 -16
- package/dist/utils/quote-helpers/types.js +0 -1
- package/dist/utils/quote-helpers-types.d.ts +0 -1
- package/dist/utils/quote-helpers-types.js +0 -1
- /package/dist/{chains/bsc/four/submit/types.js → __tests__/subpath-exports.test.d.ts} +0 -0
|
@@ -1,366 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Flap Tax Vaults(税收金库)
|
|
3
|
-
*
|
|
4
|
-
* ⚠️ 重要:基于 flap.sh/launch 实际源码分析,金库模式架构如下:
|
|
5
|
-
*
|
|
6
|
-
* 1. 金库代币通过 VaultPortal 合约创建(不是普通 Portal)
|
|
7
|
-
* 2. 调用函数:VaultPortal.newTaxTokenWithVault(params)
|
|
8
|
-
* 3. 参数中 extensionID/extensionData 始终为零值
|
|
9
|
-
* 4. 真正的金库配置通过 vaultFactory(工厂地址)和 vaultData(ABI 编码数据)传递
|
|
10
|
-
* 5. 每种金库类型对应一个具体的 VaultFactory 合约地址
|
|
11
|
-
*
|
|
12
|
-
* VaultPortal.newTaxTokenWithVault 参数结构:
|
|
13
|
-
* - 基础参数(与 Portal.newTokenV5 相同):name, symbol, meta, dexThresh, salt, taxRate,
|
|
14
|
-
* migratorType, quoteToken, quoteAmt, permitData, extensionID(全零), extensionData("0x"),
|
|
15
|
-
* dexId, lpFeeProfile, taxDuration, antiFarmerDuration, mktBps, deflationBps, dividendBps,
|
|
16
|
-
* lpBps, minimumShareBalance
|
|
17
|
-
* - 金库专属参数:vaultFactory(address), vaultData(bytes)
|
|
18
|
-
*
|
|
19
|
-
* 金库分类(来自 flap.sh 源码):
|
|
20
|
-
* 官方金库 (official):
|
|
21
|
-
* - gift (FlapXVault):禮物金庫,指定一个地址接收税费
|
|
22
|
-
* - split (SplitVault):分配金庫,按比例将税费分配给多个接收者
|
|
23
|
-
* - buyback & burn (SnowBallVault):自动回购并销毁代币
|
|
24
|
-
* 社区金库 (community):
|
|
25
|
-
* - burnToEarn (BlackHoleVault):燃燒分紅,燃烧代币以赚取分红奖励
|
|
26
|
-
* - buildYourVault:構建您的金庫,用户输入自定义 VaultFactory 地址
|
|
27
|
-
*
|
|
28
|
-
* @module vault
|
|
29
|
-
*/
|
|
30
|
-
import { Contract, AbiCoder, ZeroAddress } from 'ethers';
|
|
31
|
-
/**
|
|
32
|
-
* 金库类型显示标签
|
|
33
|
-
*/
|
|
34
|
-
export const VAULT_TYPE_LABELS = {
|
|
35
|
-
none: '无金库(标准税收)',
|
|
36
|
-
gift: 'FlapXVault — 禮物金庫',
|
|
37
|
-
split: 'SplitVault — 分配金庫',
|
|
38
|
-
buyback_burn: 'SnowBallVault — Buyback & Burn',
|
|
39
|
-
burnToEarn: 'BlackHoleVault — 燃燒分紅',
|
|
40
|
-
buildYourVault: 'Build Your Vault — 構建您的金庫',
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* 金库类型分类(对齐 flap.sh 的 category 字段)
|
|
44
|
-
*/
|
|
45
|
-
export const VAULT_TYPE_CATEGORIES = {
|
|
46
|
-
official: ['gift', 'split', 'buyback_burn'],
|
|
47
|
-
community: ['burnToEarn', 'buildYourVault'],
|
|
48
|
-
};
|
|
49
|
-
// ============================================================================
|
|
50
|
-
// VaultPortal 合约地址(从 flap.sh 源码提取)
|
|
51
|
-
// ============================================================================
|
|
52
|
-
/**
|
|
53
|
-
* VaultPortal 合约地址
|
|
54
|
-
*
|
|
55
|
-
* ⚠️ 金库代币通过 VaultPortal 创建,不是普通 Portal
|
|
56
|
-
* 来源:flap.sh/_next/static/chunks/2601-*.js
|
|
57
|
-
*/
|
|
58
|
-
export const VAULT_PORTAL_ADDRESSES = {
|
|
59
|
-
BSC: '0x90497450f2a706f1951b5bdda52B4E5d16f34C06',
|
|
60
|
-
BASE: '0x027e3704fC5C16522e9393d04C60A3ac5c0d775f',
|
|
61
|
-
};
|
|
62
|
-
// ============================================================================
|
|
63
|
-
// VaultFactory 合约地址(从 flap.sh 源码提取)
|
|
64
|
-
// ============================================================================
|
|
65
|
-
/**
|
|
66
|
-
* VaultFactory 合约地址(每种金库类型 + 每条链)
|
|
67
|
-
*
|
|
68
|
-
* ⚠️ 直接从 flap.sh 前端 JS 源码中提取的真实地址
|
|
69
|
-
* 来源:flap.sh/_next/static/chunks/2601-*.js 中 taxVaults.vaultTypes[]
|
|
70
|
-
*/
|
|
71
|
-
export const VAULT_FACTORY_ADDRESSES = {
|
|
72
|
-
BSC: {
|
|
73
|
-
gift: '0x025549F52B03cF36f9e1a337c02d3AA7Af66ab32',
|
|
74
|
-
split: '0xfab75Dc774cB9B38b91749B8833360B46a52345F',
|
|
75
|
-
// bnbshare: '0x53AD93F2454cFA532656f80E30571159d7E726A7', // 已禁用 (enabled: false)
|
|
76
|
-
buyback_burn: '0xB64655dab7156c29B63C70fb3ED7f071e2658D19',
|
|
77
|
-
burnToEarn: '0x47A216040Dc9e0AfE2e6fc5dcC44f7bBD1B60d25',
|
|
78
|
-
buildYourVault: ZeroAddress, // 用户自定义地址
|
|
79
|
-
},
|
|
80
|
-
BASE: {
|
|
81
|
-
gift: '0xa02DA44D67DB6D692efa7f751b5952bd670d5326',
|
|
82
|
-
split: '0x1ae091F75D593eb7dC6539600a185C8A6076A424',
|
|
83
|
-
buyback_burn: '0x6F97fA674a6FE5EC37e309B63aB54E33c9e64d2E',
|
|
84
|
-
burnToEarn: '0x47A216040Dc9e0AfE2e6fc5dcC44f7bBD1B60d25',
|
|
85
|
-
buildYourVault: ZeroAddress,
|
|
86
|
-
},
|
|
87
|
-
};
|
|
88
|
-
/**
|
|
89
|
-
* 金库额外配置(如 XVault 的 relayer 端点)
|
|
90
|
-
*/
|
|
91
|
-
export const VAULT_EXTRA_CONFIG = {
|
|
92
|
-
BSC: {
|
|
93
|
-
gift: { XVaultRelayerEndpoint: 'https://xoracle.taxed.fun/' },
|
|
94
|
-
},
|
|
95
|
-
BASE: {
|
|
96
|
-
gift: { XVaultRelayerEndpoint: 'https://xrelayer.taxed.fun/' },
|
|
97
|
-
},
|
|
98
|
-
};
|
|
99
|
-
/**
|
|
100
|
-
* Flap Guardian 合约地址
|
|
101
|
-
*/
|
|
102
|
-
export const FLAP_GUARDIAN_ADDRESSES = {
|
|
103
|
-
BSC: '0x9e27098dcD8844bcc6287a557E0b4D09C86B8a4b',
|
|
104
|
-
};
|
|
105
|
-
import { VAULT_PORTAL_ABI, VAULT_FACTORY_ABI, VAULT_FACTORY_V2_ABI, VAULT_BASE_ABI, VAULT_BASE_V2_ABI, } from '../../abis/flap/vault.js';
|
|
106
|
-
export { VAULT_PORTAL_ABI, VAULT_FACTORY_ABI, VAULT_FACTORY_V2_ABI, VAULT_BASE_ABI, VAULT_BASE_V2_ABI, };
|
|
107
|
-
// ============================================================================
|
|
108
|
-
// 核心常量
|
|
109
|
-
// ============================================================================
|
|
110
|
-
/** extensionID/extensionData 在金库模式下始终为零值 */
|
|
111
|
-
export const NONE_EXTENSION_ID = '0x' + '00'.repeat(32);
|
|
112
|
-
const abiCoder = AbiCoder.defaultAbiCoder();
|
|
113
|
-
// ============================================================================
|
|
114
|
-
// 金库参数构建
|
|
115
|
-
// ============================================================================
|
|
116
|
-
/**
|
|
117
|
-
* 根据 VaultDataSchema 和用户输入编码 vaultData
|
|
118
|
-
*/
|
|
119
|
-
export function encodeVaultData(schema, fieldValues) {
|
|
120
|
-
if (schema.fields.length === 0 && !schema.isArray) {
|
|
121
|
-
return '0x';
|
|
122
|
-
}
|
|
123
|
-
const types = [];
|
|
124
|
-
const values = [];
|
|
125
|
-
for (const field of schema.fields) {
|
|
126
|
-
const rawValue = fieldValues[field.name];
|
|
127
|
-
types.push(mapFieldTypeToAbiType(field.fieldType));
|
|
128
|
-
values.push(processFieldValue(field, rawValue));
|
|
129
|
-
}
|
|
130
|
-
if (schema.isArray) {
|
|
131
|
-
const tupleType = `tuple(${types.join(',')})`;
|
|
132
|
-
return abiCoder.encode([`${tupleType}[]`], [[values]]);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
return abiCoder.encode(types, values);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
function mapFieldTypeToAbiType(fieldType) {
|
|
139
|
-
if (fieldType === 'time')
|
|
140
|
-
return 'uint256';
|
|
141
|
-
return fieldType;
|
|
142
|
-
}
|
|
143
|
-
function processFieldValue(field, rawValue) {
|
|
144
|
-
if (rawValue === undefined || rawValue === null) {
|
|
145
|
-
switch (field.fieldType) {
|
|
146
|
-
case 'address': return ZeroAddress;
|
|
147
|
-
case 'bool': return false;
|
|
148
|
-
case 'string': return '';
|
|
149
|
-
case 'bytes':
|
|
150
|
-
case 'bytes32': return '0x' + '00'.repeat(32);
|
|
151
|
-
default: return 0;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
if (field.decimals > 0 && typeof rawValue === 'number') {
|
|
155
|
-
return BigInt(Math.round(rawValue * (10 ** field.decimals)));
|
|
156
|
-
}
|
|
157
|
-
if (field.fieldType === 'bool') {
|
|
158
|
-
return Boolean(rawValue);
|
|
159
|
-
}
|
|
160
|
-
return rawValue;
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* 获取指定链和金库类型的 VaultFactory 合约地址
|
|
164
|
-
*/
|
|
165
|
-
export function getVaultFactoryAddress(chain, vaultType) {
|
|
166
|
-
const chainKey = chain.toUpperCase();
|
|
167
|
-
const factories = VAULT_FACTORY_ADDRESSES[chainKey];
|
|
168
|
-
if (!factories)
|
|
169
|
-
return null;
|
|
170
|
-
return factories[vaultType] || null;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* 获取指定链的 VaultPortal 合约地址
|
|
174
|
-
*/
|
|
175
|
-
export function getVaultPortalAddress(chain) {
|
|
176
|
-
const chainKey = chain.toUpperCase();
|
|
177
|
-
return VAULT_PORTAL_ADDRESSES[chainKey] || null;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* 构建金库参数(用于 VaultPortal.newTaxTokenWithVault)
|
|
181
|
-
*
|
|
182
|
-
* ⚠️ 重要:返回的是 vaultFactory 和 vaultData,不是 extensionID/extensionData
|
|
183
|
-
* extensionID/extensionData 在金库模式下始终为零值
|
|
184
|
-
*
|
|
185
|
-
* @returns { vaultFactory, vaultData } 直接传给 VaultPortal
|
|
186
|
-
*/
|
|
187
|
-
export function buildVaultParams(config, chain) {
|
|
188
|
-
if (!config || config.vaultType === 'none') {
|
|
189
|
-
return {
|
|
190
|
-
vaultFactory: ZeroAddress,
|
|
191
|
-
vaultData: '0x',
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
// 1. 确定 vaultFactory 地址
|
|
195
|
-
let vaultFactory;
|
|
196
|
-
if (config.factoryAddress && config.factoryAddress !== ZeroAddress) {
|
|
197
|
-
vaultFactory = config.factoryAddress;
|
|
198
|
-
}
|
|
199
|
-
else if (chain) {
|
|
200
|
-
const addr = getVaultFactoryAddress(chain, config.vaultType);
|
|
201
|
-
if (!addr || addr === ZeroAddress) {
|
|
202
|
-
throw new Error(`链 "${chain}" 上没有 "${config.vaultType}" 类型的官方金库工厂`);
|
|
203
|
-
}
|
|
204
|
-
vaultFactory = addr;
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
throw new Error(`金库类型 "${config.vaultType}" 必须提供 factoryAddress 或 chain`);
|
|
208
|
-
}
|
|
209
|
-
// 2. 确定 vaultData
|
|
210
|
-
let vaultData;
|
|
211
|
-
if (config.rawVaultData) {
|
|
212
|
-
vaultData = config.rawVaultData;
|
|
213
|
-
}
|
|
214
|
-
else if (config.vaultDataSchema && config.vaultDataFields) {
|
|
215
|
-
vaultData = encodeVaultData(config.vaultDataSchema, config.vaultDataFields);
|
|
216
|
-
}
|
|
217
|
-
else if (config.vaultDataSchema && config.vaultDataSchema.fields.length === 0 && !config.vaultDataSchema.isArray) {
|
|
218
|
-
vaultData = '0x';
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
// 默认空数据(部分工厂不需要 vaultData)
|
|
222
|
-
vaultData = '0x';
|
|
223
|
-
}
|
|
224
|
-
return { vaultFactory, vaultData };
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* 旧版兼容:将 TaxVaultConfig 转换为 extensionID 和 extensionData
|
|
228
|
-
*
|
|
229
|
-
* ⚠️ 注意:真实的 Flap 平台在金库模式下 extensionID/extensionData 始终为零值
|
|
230
|
-
* 金库参数通过 VaultPortal 的 vaultFactory/vaultData 传递
|
|
231
|
-
* 此函数仅用于向后兼容
|
|
232
|
-
*/
|
|
233
|
-
export function buildVaultExtensionParams(config) {
|
|
234
|
-
// 金库模式下 extensionID/extensionData 始终为零值
|
|
235
|
-
return {
|
|
236
|
-
extensionID: NONE_EXTENSION_ID,
|
|
237
|
-
extensionData: '0x',
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
// ============================================================================
|
|
241
|
-
// 链上查询
|
|
242
|
-
// ============================================================================
|
|
243
|
-
/**
|
|
244
|
-
* 从 VaultFactory 合约读取 vaultDataSchema
|
|
245
|
-
*/
|
|
246
|
-
export async function queryVaultDataSchema(provider, factoryAddress) {
|
|
247
|
-
try {
|
|
248
|
-
const factory = new Contract(factoryAddress, VAULT_FACTORY_V2_ABI, provider);
|
|
249
|
-
const raw = await factory.vaultDataSchema();
|
|
250
|
-
return {
|
|
251
|
-
description: raw.description,
|
|
252
|
-
fields: raw.fields.map((f) => ({
|
|
253
|
-
name: f.name,
|
|
254
|
-
fieldType: f.fieldType,
|
|
255
|
-
description: f.description,
|
|
256
|
-
decimals: Number(f.decimals),
|
|
257
|
-
})),
|
|
258
|
-
isArray: raw.isArray,
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
catch {
|
|
262
|
-
return null;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* 从金库合约读取 vaultUISchema
|
|
267
|
-
*/
|
|
268
|
-
export async function queryVaultUISchema(provider, vaultAddress) {
|
|
269
|
-
try {
|
|
270
|
-
const vault = new Contract(vaultAddress, VAULT_BASE_V2_ABI, provider);
|
|
271
|
-
const raw = await vault.vaultUISchema();
|
|
272
|
-
return {
|
|
273
|
-
vaultType: raw.vaultType,
|
|
274
|
-
description: raw.description,
|
|
275
|
-
methods: raw.methods.map((m) => ({
|
|
276
|
-
name: m.name,
|
|
277
|
-
description: m.description,
|
|
278
|
-
inputs: m.inputs.map((f) => ({
|
|
279
|
-
name: f.name,
|
|
280
|
-
fieldType: f.fieldType,
|
|
281
|
-
description: f.description,
|
|
282
|
-
decimals: Number(f.decimals),
|
|
283
|
-
})),
|
|
284
|
-
outputs: m.outputs.map((f) => ({
|
|
285
|
-
name: f.name,
|
|
286
|
-
fieldType: f.fieldType,
|
|
287
|
-
description: f.description,
|
|
288
|
-
decimals: Number(f.decimals),
|
|
289
|
-
})),
|
|
290
|
-
approvals: m.approvals.map((a) => ({
|
|
291
|
-
tokenType: a.tokenType,
|
|
292
|
-
amountFieldName: a.amountFieldName,
|
|
293
|
-
})),
|
|
294
|
-
isInputArray: m.isInputArray,
|
|
295
|
-
isOutputArray: m.isOutputArray,
|
|
296
|
-
isWriteMethod: m.isWriteMethod,
|
|
297
|
-
})),
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
catch {
|
|
301
|
-
return null;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* 读取金库合约的动态描述
|
|
306
|
-
*/
|
|
307
|
-
export async function queryVaultDescription(provider, vaultAddress) {
|
|
308
|
-
try {
|
|
309
|
-
const vault = new Contract(vaultAddress, VAULT_BASE_ABI, provider);
|
|
310
|
-
return await vault.description();
|
|
311
|
-
}
|
|
312
|
-
catch {
|
|
313
|
-
return null;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* 验证合约是否是有效的 VaultFactory
|
|
318
|
-
*/
|
|
319
|
-
export async function validateVaultFactory(provider, factoryAddress) {
|
|
320
|
-
try {
|
|
321
|
-
const code = await provider.getCode(factoryAddress);
|
|
322
|
-
if (code === '0x' || code === '0x0') {
|
|
323
|
-
return { isValid: false, isV2: false, schema: null, error: '地址没有部署合约' };
|
|
324
|
-
}
|
|
325
|
-
const schema = await queryVaultDataSchema(provider, factoryAddress);
|
|
326
|
-
return {
|
|
327
|
-
isValid: true,
|
|
328
|
-
isV2: schema !== null,
|
|
329
|
-
schema,
|
|
330
|
-
};
|
|
331
|
-
}
|
|
332
|
-
catch (e) {
|
|
333
|
-
return { isValid: false, isV2: false, schema: null, error: String(e) };
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* 从 VaultPortal 查询代币的金库信息
|
|
338
|
-
*/
|
|
339
|
-
export async function getVaultInfo(provider, vaultPortalAddress, taxTokenAddress) {
|
|
340
|
-
try {
|
|
341
|
-
const portal = new Contract(vaultPortalAddress, VAULT_PORTAL_ABI, provider);
|
|
342
|
-
const info = await portal.getVault(taxTokenAddress);
|
|
343
|
-
return {
|
|
344
|
-
vault: info.vault,
|
|
345
|
-
vaultFactory: info.vaultFactory,
|
|
346
|
-
description: info.description,
|
|
347
|
-
isOfficial: info.isOfficial,
|
|
348
|
-
riskLevel: Number(info.riskLevel),
|
|
349
|
-
};
|
|
350
|
-
}
|
|
351
|
-
catch {
|
|
352
|
-
return null;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
/**
|
|
356
|
-
* 验证合约是否有效(是否部署了代码)
|
|
357
|
-
*/
|
|
358
|
-
export async function isValidContract(provider, address) {
|
|
359
|
-
try {
|
|
360
|
-
const code = await provider.getCode(address);
|
|
361
|
-
return code !== '0x' && code !== '0x0';
|
|
362
|
-
}
|
|
363
|
-
catch {
|
|
364
|
-
return false;
|
|
365
|
-
}
|
|
366
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Four.meme 工具模块
|
|
3
|
-
*
|
|
4
|
-
* 提供 Four.meme 平台相关的工具函数:
|
|
5
|
-
* - TaxToken:税币识别、状态查询、奖励领取
|
|
6
|
-
*/
|
|
7
|
-
export { isTaxToken, isAntiSniperFeeMode, getCreatorType, getTaxTokenInfo, getClaimableFee, getClaimedFee, getUserRewardInfo, buildClaimFeeTx, buildBatchClaimFeeTxs, validateFourTokenTaxInfo, TAX_TOKEN_ABI, TransferMode, type TaxTokenConfig, type TaxTokenRewardStats, type TaxTokenUserInfo, type TaxTokenInfo, } from './tax-token.js';
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Four.meme 工具模块
|
|
3
|
-
*
|
|
4
|
-
* 提供 Four.meme 平台相关的工具函数:
|
|
5
|
-
* - TaxToken:税币识别、状态查询、奖励领取
|
|
6
|
-
*/
|
|
7
|
-
// TaxToken 工具
|
|
8
|
-
export {
|
|
9
|
-
// 识别方法
|
|
10
|
-
isTaxToken, isAntiSniperFeeMode, getCreatorType,
|
|
11
|
-
// 状态查询
|
|
12
|
-
getTaxTokenInfo,
|
|
13
|
-
// 用户奖励
|
|
14
|
-
getClaimableFee, getClaimedFee, getUserRewardInfo,
|
|
15
|
-
// 奖励领取
|
|
16
|
-
buildClaimFeeTx, buildBatchClaimFeeTxs,
|
|
17
|
-
// 校验工具
|
|
18
|
-
validateFourTokenTaxInfo,
|
|
19
|
-
// ABI
|
|
20
|
-
TAX_TOKEN_ABI,
|
|
21
|
-
// 类型
|
|
22
|
-
TransferMode, } from './tax-token.js';
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import TaxTokenAbi from '../abis/TaxToken.json';
|
|
2
|
-
/** TaxToken 转账模式 */
|
|
3
|
-
export declare enum TransferMode {
|
|
4
|
-
/** 正常转账模式 - 允许所有转账 */
|
|
5
|
-
NORMAL = 0,
|
|
6
|
-
/** 限制转账模式 - 禁止所有转账 */
|
|
7
|
-
RESTRICTED = 1,
|
|
8
|
-
/** 受控转账模式 - 只允许与 owner 相关的转账 */
|
|
9
|
-
CONTROLLED = 2
|
|
10
|
-
}
|
|
11
|
-
/** TaxToken 税收配置状态 */
|
|
12
|
-
export type TaxTokenConfig = {
|
|
13
|
-
/** 交易费率(基点,10000 = 100%) */
|
|
14
|
-
feeRate: bigint;
|
|
15
|
-
/** 创始人分配比例(百分比,100 = 100%) */
|
|
16
|
-
rateFounder: bigint;
|
|
17
|
-
/** 持有者分配比例 */
|
|
18
|
-
rateHolder: bigint;
|
|
19
|
-
/** 销毁比例 */
|
|
20
|
-
rateBurn: bigint;
|
|
21
|
-
/** 流动性比例 */
|
|
22
|
-
rateLiquidity: bigint;
|
|
23
|
-
/** 创始人地址 */
|
|
24
|
-
founder: string;
|
|
25
|
-
/** 报价代币地址 */
|
|
26
|
-
quote: string;
|
|
27
|
-
/** PancakeSwap 配对地址 */
|
|
28
|
-
pair: string;
|
|
29
|
-
/** 当前转账模式 */
|
|
30
|
-
mode: TransferMode;
|
|
31
|
-
/** 最低分发阈值 */
|
|
32
|
-
minDispatch: bigint;
|
|
33
|
-
/** 最低持仓参与分红门槛 */
|
|
34
|
-
minShare: bigint;
|
|
35
|
-
};
|
|
36
|
-
/** TaxToken 奖励统计数据 */
|
|
37
|
-
export type TaxTokenRewardStats = {
|
|
38
|
-
/** 总持仓份额 */
|
|
39
|
-
totalShares: bigint;
|
|
40
|
-
/** 每份额累计奖励 */
|
|
41
|
-
feePerShare: bigint;
|
|
42
|
-
/** 累积待分发手续费 */
|
|
43
|
-
feeAccumulated: bigint;
|
|
44
|
-
/** 已分发手续费总额 */
|
|
45
|
-
feeDispatched: bigint;
|
|
46
|
-
/** 分配给创始人的代币总额 */
|
|
47
|
-
feeFounder: bigint;
|
|
48
|
-
/** 分配给持有者的代币总额 */
|
|
49
|
-
feeHolder: bigint;
|
|
50
|
-
/** 销毁的代币总额 */
|
|
51
|
-
feeBurn: bigint;
|
|
52
|
-
/** 注入流动性的代币总额 */
|
|
53
|
-
feeLiquidity: bigint;
|
|
54
|
-
/** 创始人获得的报价代币总额 */
|
|
55
|
-
quoteFounder: bigint;
|
|
56
|
-
/** 持有者获得的报价代币总额 */
|
|
57
|
-
quoteHolder: bigint;
|
|
58
|
-
/** 已领取的报价代币总额 */
|
|
59
|
-
quoteClaimed: bigint;
|
|
60
|
-
};
|
|
61
|
-
/** 用户在 TaxToken 中的奖励信息 */
|
|
62
|
-
export type TaxTokenUserInfo = {
|
|
63
|
-
/** 用户持仓份额 */
|
|
64
|
-
share: bigint;
|
|
65
|
-
/** 已计入的奖励债务 */
|
|
66
|
-
rewardDebt: bigint;
|
|
67
|
-
/** 可领取的奖励金额(报价代币) */
|
|
68
|
-
claimable: bigint;
|
|
69
|
-
/** 已领取的奖励金额(报价代币) */
|
|
70
|
-
claimed: bigint;
|
|
71
|
-
};
|
|
72
|
-
/** TaxToken 完整信息 */
|
|
73
|
-
export type TaxTokenInfo = {
|
|
74
|
-
config: TaxTokenConfig;
|
|
75
|
-
rewardStats: TaxTokenRewardStats;
|
|
76
|
-
};
|
|
77
|
-
/**
|
|
78
|
-
* 链上判断代币是否是 TaxToken
|
|
79
|
-
*
|
|
80
|
-
* 原理:读取 TokenManager2._tokenInfos[token].template,
|
|
81
|
-
* 提取 creatorType = (template >> 10) & 0x3F,判断是否等于 5
|
|
82
|
-
*
|
|
83
|
-
* @param tokenAddress - 代币合约地址
|
|
84
|
-
* @param rpcUrl - BSC RPC URL
|
|
85
|
-
* @returns 是否为 TaxToken
|
|
86
|
-
*/
|
|
87
|
-
export declare function isTaxToken(tokenAddress: string, rpcUrl: string): Promise<boolean>;
|
|
88
|
-
/**
|
|
89
|
-
* 链上判断代币是否启用了 AntiSniperFeeMode
|
|
90
|
-
*
|
|
91
|
-
* 原理:读取 TokenManager2._tokenInfoEx1s[token].feeSetting > 0
|
|
92
|
-
*
|
|
93
|
-
* @param tokenAddress - 代币合约地址
|
|
94
|
-
* @param rpcUrl - BSC RPC URL
|
|
95
|
-
* @returns 是否启用 AntiSniperFeeMode
|
|
96
|
-
*/
|
|
97
|
-
export declare function isAntiSniperFeeMode(tokenAddress: string, rpcUrl: string): Promise<boolean>;
|
|
98
|
-
/**
|
|
99
|
-
* 获取代币的 creatorType
|
|
100
|
-
*
|
|
101
|
-
* @param tokenAddress - 代币合约地址
|
|
102
|
-
* @param rpcUrl - BSC RPC URL
|
|
103
|
-
* @returns creatorType 数值
|
|
104
|
-
*/
|
|
105
|
-
export declare function getCreatorType(tokenAddress: string, rpcUrl: string): Promise<number>;
|
|
106
|
-
/**
|
|
107
|
-
* 获取 TaxToken 的完整配置信息
|
|
108
|
-
*
|
|
109
|
-
* @param tokenAddress - TaxToken 合约地址
|
|
110
|
-
* @param rpcUrl - BSC RPC URL
|
|
111
|
-
* @returns 税收配置 + 奖励统计
|
|
112
|
-
*/
|
|
113
|
-
export declare function getTaxTokenInfo(tokenAddress: string, rpcUrl: string): Promise<TaxTokenInfo>;
|
|
114
|
-
/**
|
|
115
|
-
* 查询用户在 TaxToken 中的可领取奖励
|
|
116
|
-
*
|
|
117
|
-
* @param tokenAddress - TaxToken 合约地址
|
|
118
|
-
* @param account - 用户钱包地址
|
|
119
|
-
* @param rpcUrl - BSC RPC URL
|
|
120
|
-
* @returns 可领取的报价代币数量(wei)
|
|
121
|
-
*/
|
|
122
|
-
export declare function getClaimableFee(tokenAddress: string, account: string, rpcUrl: string): Promise<bigint>;
|
|
123
|
-
/**
|
|
124
|
-
* 查询用户在 TaxToken 中的已领取奖励
|
|
125
|
-
*
|
|
126
|
-
* @param tokenAddress - TaxToken 合约地址
|
|
127
|
-
* @param account - 用户钱包地址
|
|
128
|
-
* @param rpcUrl - BSC RPC URL
|
|
129
|
-
* @returns 已领取的报价代币数量(wei)
|
|
130
|
-
*/
|
|
131
|
-
export declare function getClaimedFee(tokenAddress: string, account: string, rpcUrl: string): Promise<bigint>;
|
|
132
|
-
/**
|
|
133
|
-
* 查询用户在 TaxToken 中的完整奖励信息
|
|
134
|
-
*
|
|
135
|
-
* @param tokenAddress - TaxToken 合约地址
|
|
136
|
-
* @param account - 用户钱包地址
|
|
137
|
-
* @param rpcUrl - BSC RPC URL
|
|
138
|
-
* @returns 用户奖励信息(份额、债务、可领取、已领取)
|
|
139
|
-
*/
|
|
140
|
-
export declare function getUserRewardInfo(tokenAddress: string, account: string, rpcUrl: string): Promise<TaxTokenUserInfo>;
|
|
141
|
-
/**
|
|
142
|
-
* 构建 TaxToken 奖励领取的签名交易(不发送)
|
|
143
|
-
*
|
|
144
|
-
* @param tokenAddress - TaxToken 合约地址
|
|
145
|
-
* @param privateKey - 用户私钥
|
|
146
|
-
* @param rpcUrl - BSC RPC URL
|
|
147
|
-
* @returns 签名后的交易 hex
|
|
148
|
-
*/
|
|
149
|
-
export declare function buildClaimFeeTx(tokenAddress: string, privateKey: string, rpcUrl: string): Promise<string>;
|
|
150
|
-
/**
|
|
151
|
-
* 批量构建 TaxToken 奖励领取交易(多个钱包)
|
|
152
|
-
*
|
|
153
|
-
* @param tokenAddress - TaxToken 合约地址
|
|
154
|
-
* @param privateKeys - 用户私钥数组
|
|
155
|
-
* @param rpcUrl - BSC RPC URL
|
|
156
|
-
* @returns 签名后的交易 hex 数组
|
|
157
|
-
*/
|
|
158
|
-
export declare function buildBatchClaimFeeTxs(tokenAddress: string, privateKeys: string[], rpcUrl: string): Promise<string[]>;
|
|
159
|
-
/**
|
|
160
|
-
* 验证 FourTokenTaxInfo 参数合法性
|
|
161
|
-
*
|
|
162
|
-
* @param info - 税币配置
|
|
163
|
-
* @returns 验证结果,valid=true 表示合法
|
|
164
|
-
*/
|
|
165
|
-
export declare function validateFourTokenTaxInfo(info: {
|
|
166
|
-
feeRate: number;
|
|
167
|
-
burnRate: number;
|
|
168
|
-
divideRate: number;
|
|
169
|
-
liquidityRate: number;
|
|
170
|
-
recipientRate: number;
|
|
171
|
-
minSharing: number;
|
|
172
|
-
}): {
|
|
173
|
-
valid: boolean;
|
|
174
|
-
error?: string;
|
|
175
|
-
};
|
|
176
|
-
export { TaxTokenAbi as TAX_TOKEN_ABI };
|