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,302 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Four.meme TaxToken 工具模块
|
|
3
|
-
*
|
|
4
|
-
* 提供 TaxToken 的识别、状态查询、奖励领取等功能。
|
|
5
|
-
* 基于 Four.meme 官方文档: API-Contract-TaxToken.md
|
|
6
|
-
*/
|
|
7
|
-
import { ethers, Contract, Wallet, JsonRpcProvider } from 'ethers';
|
|
8
|
-
import TaxTokenAbi from '../abis/TaxToken.json' with { type: 'json' };
|
|
9
|
-
// ============================================================================
|
|
10
|
-
// 常量
|
|
11
|
-
// ============================================================================
|
|
12
|
-
/** Four.meme TokenManager2 合约地址(BSC) */
|
|
13
|
-
const TOKEN_MANAGER_2_ADDRESS = '0x5c952063c7fc8610FFDB798152D69F0B9550762b';
|
|
14
|
-
/** TaxToken 的 creatorType 值 */
|
|
15
|
-
const TOKEN_TYPE_TAX = 5;
|
|
16
|
-
/** TokenManager2 最小 ABI(用于查询 _tokenInfos 和 _tokenInfoEx1s) */
|
|
17
|
-
const TOKEN_MANAGER_QUERY_ABI = [
|
|
18
|
-
'function _tokenInfos(address) view returns (uint256 template)',
|
|
19
|
-
'function _tokenInfoEx1s(address) view returns (uint256 launchFee, uint256 pcFee, uint256 feeSetting, uint256 blockNumber, uint256 extraFee)',
|
|
20
|
-
];
|
|
21
|
-
/** TaxToken 读取 ABI(ethers human-readable 格式,比 JSON 更轻) */
|
|
22
|
-
const TAX_TOKEN_READ_ABI = [
|
|
23
|
-
'function feeRate() view returns (uint256)',
|
|
24
|
-
'function rateFounder() view returns (uint256)',
|
|
25
|
-
'function rateHolder() view returns (uint256)',
|
|
26
|
-
'function rateBurn() view returns (uint256)',
|
|
27
|
-
'function rateLiquidity() view returns (uint256)',
|
|
28
|
-
'function founder() view returns (address)',
|
|
29
|
-
'function quote() view returns (address)',
|
|
30
|
-
'function pair() view returns (address)',
|
|
31
|
-
'function _mode() view returns (uint256)',
|
|
32
|
-
'function minDispatch() view returns (uint256)',
|
|
33
|
-
'function minShare() view returns (uint256)',
|
|
34
|
-
'function totalShares() view returns (uint256)',
|
|
35
|
-
'function feePerShare() view returns (uint256)',
|
|
36
|
-
'function feeAccumulated() view returns (uint256)',
|
|
37
|
-
'function feeDispatched() view returns (uint256)',
|
|
38
|
-
'function feeFounder() view returns (uint256)',
|
|
39
|
-
'function feeHolder() view returns (uint256)',
|
|
40
|
-
'function feeBurn() view returns (uint256)',
|
|
41
|
-
'function feeLiquidity() view returns (uint256)',
|
|
42
|
-
'function quoteFounder() view returns (uint256)',
|
|
43
|
-
'function quoteHolder() view returns (uint256)',
|
|
44
|
-
'function quoteClaimed() view returns (uint256)',
|
|
45
|
-
'function claimableFee(address) view returns (uint256)',
|
|
46
|
-
'function claimedFee(address) view returns (uint256)',
|
|
47
|
-
'function userInfo(address) view returns (uint256 share, uint256 rewardDebt, uint256 claimable, uint256 claimed)',
|
|
48
|
-
'function claimFee()',
|
|
49
|
-
];
|
|
50
|
-
// ============================================================================
|
|
51
|
-
// 类型
|
|
52
|
-
// ============================================================================
|
|
53
|
-
/** TaxToken 转账模式 */
|
|
54
|
-
export var TransferMode;
|
|
55
|
-
(function (TransferMode) {
|
|
56
|
-
/** 正常转账模式 - 允许所有转账 */
|
|
57
|
-
TransferMode[TransferMode["NORMAL"] = 0] = "NORMAL";
|
|
58
|
-
/** 限制转账模式 - 禁止所有转账 */
|
|
59
|
-
TransferMode[TransferMode["RESTRICTED"] = 1] = "RESTRICTED";
|
|
60
|
-
/** 受控转账模式 - 只允许与 owner 相关的转账 */
|
|
61
|
-
TransferMode[TransferMode["CONTROLLED"] = 2] = "CONTROLLED";
|
|
62
|
-
})(TransferMode || (TransferMode = {}));
|
|
63
|
-
// ============================================================================
|
|
64
|
-
// 识别方法
|
|
65
|
-
// ============================================================================
|
|
66
|
-
/**
|
|
67
|
-
* 链上判断代币是否是 TaxToken
|
|
68
|
-
*
|
|
69
|
-
* 原理:读取 TokenManager2._tokenInfos[token].template,
|
|
70
|
-
* 提取 creatorType = (template >> 10) & 0x3F,判断是否等于 5
|
|
71
|
-
*
|
|
72
|
-
* @param tokenAddress - 代币合约地址
|
|
73
|
-
* @param rpcUrl - BSC RPC URL
|
|
74
|
-
* @returns 是否为 TaxToken
|
|
75
|
-
*/
|
|
76
|
-
export async function isTaxToken(tokenAddress, rpcUrl) {
|
|
77
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
78
|
-
const tm2 = new Contract(TOKEN_MANAGER_2_ADDRESS, TOKEN_MANAGER_QUERY_ABI, provider);
|
|
79
|
-
const template = await tm2._tokenInfos(tokenAddress);
|
|
80
|
-
const creatorType = Number((template >> 10n) & 0x3fn);
|
|
81
|
-
return creatorType === TOKEN_TYPE_TAX;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* 链上判断代币是否启用了 AntiSniperFeeMode
|
|
85
|
-
*
|
|
86
|
-
* 原理:读取 TokenManager2._tokenInfoEx1s[token].feeSetting > 0
|
|
87
|
-
*
|
|
88
|
-
* @param tokenAddress - 代币合约地址
|
|
89
|
-
* @param rpcUrl - BSC RPC URL
|
|
90
|
-
* @returns 是否启用 AntiSniperFeeMode
|
|
91
|
-
*/
|
|
92
|
-
export async function isAntiSniperFeeMode(tokenAddress, rpcUrl) {
|
|
93
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
94
|
-
const tm2 = new Contract(TOKEN_MANAGER_2_ADDRESS, TOKEN_MANAGER_QUERY_ABI, provider);
|
|
95
|
-
const info = await tm2._tokenInfoEx1s(tokenAddress);
|
|
96
|
-
return BigInt(info.feeSetting) > 0n;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* 获取代币的 creatorType
|
|
100
|
-
*
|
|
101
|
-
* @param tokenAddress - 代币合约地址
|
|
102
|
-
* @param rpcUrl - BSC RPC URL
|
|
103
|
-
* @returns creatorType 数值
|
|
104
|
-
*/
|
|
105
|
-
export async function getCreatorType(tokenAddress, rpcUrl) {
|
|
106
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
107
|
-
const tm2 = new Contract(TOKEN_MANAGER_2_ADDRESS, TOKEN_MANAGER_QUERY_ABI, provider);
|
|
108
|
-
const template = await tm2._tokenInfos(tokenAddress);
|
|
109
|
-
return Number((template >> 10n) & 0x3fn);
|
|
110
|
-
}
|
|
111
|
-
// ============================================================================
|
|
112
|
-
// TaxToken 状态查询
|
|
113
|
-
// ============================================================================
|
|
114
|
-
/**
|
|
115
|
-
* 获取 TaxToken 的完整配置信息
|
|
116
|
-
*
|
|
117
|
-
* @param tokenAddress - TaxToken 合约地址
|
|
118
|
-
* @param rpcUrl - BSC RPC URL
|
|
119
|
-
* @returns 税收配置 + 奖励统计
|
|
120
|
-
*/
|
|
121
|
-
export async function getTaxTokenInfo(tokenAddress, rpcUrl) {
|
|
122
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
123
|
-
const token = new Contract(tokenAddress, TAX_TOKEN_READ_ABI, provider);
|
|
124
|
-
// 批量查询所有状态(利用 Promise.all 减少 RPC 调用轮次)
|
|
125
|
-
const [feeRate, rateFounder, rateHolder, rateBurn, rateLiquidity, founder, quote, pair, mode, minDispatch, minShare, totalShares, feePerShare, feeAccumulated, feeDispatched, feeFounderVal, feeHolderVal, feeBurnVal, feeLiquidityVal, quoteFounderVal, quoteHolderVal, quoteClaimed,] = await Promise.all([
|
|
126
|
-
token.feeRate(), token.rateFounder(), token.rateHolder(), token.rateBurn(), token.rateLiquidity(),
|
|
127
|
-
token.founder(), token.quote(), token.pair(), token._mode(), token.minDispatch(), token.minShare(),
|
|
128
|
-
token.totalShares(), token.feePerShare(), token.feeAccumulated(), token.feeDispatched(),
|
|
129
|
-
token.feeFounder(), token.feeHolder(), token.feeBurn(), token.feeLiquidity(),
|
|
130
|
-
token.quoteFounder(), token.quoteHolder(), token.quoteClaimed(),
|
|
131
|
-
]);
|
|
132
|
-
return {
|
|
133
|
-
config: {
|
|
134
|
-
feeRate: BigInt(feeRate),
|
|
135
|
-
rateFounder: BigInt(rateFounder),
|
|
136
|
-
rateHolder: BigInt(rateHolder),
|
|
137
|
-
rateBurn: BigInt(rateBurn),
|
|
138
|
-
rateLiquidity: BigInt(rateLiquidity),
|
|
139
|
-
founder: String(founder),
|
|
140
|
-
quote: String(quote),
|
|
141
|
-
pair: String(pair),
|
|
142
|
-
mode: Number(mode),
|
|
143
|
-
minDispatch: BigInt(minDispatch),
|
|
144
|
-
minShare: BigInt(minShare),
|
|
145
|
-
},
|
|
146
|
-
rewardStats: {
|
|
147
|
-
totalShares: BigInt(totalShares),
|
|
148
|
-
feePerShare: BigInt(feePerShare),
|
|
149
|
-
feeAccumulated: BigInt(feeAccumulated),
|
|
150
|
-
feeDispatched: BigInt(feeDispatched),
|
|
151
|
-
feeFounder: BigInt(feeFounderVal),
|
|
152
|
-
feeHolder: BigInt(feeHolderVal),
|
|
153
|
-
feeBurn: BigInt(feeBurnVal),
|
|
154
|
-
feeLiquidity: BigInt(feeLiquidityVal),
|
|
155
|
-
quoteFounder: BigInt(quoteFounderVal),
|
|
156
|
-
quoteHolder: BigInt(quoteHolderVal),
|
|
157
|
-
quoteClaimed: BigInt(quoteClaimed),
|
|
158
|
-
},
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
// ============================================================================
|
|
162
|
-
// 用户奖励查询
|
|
163
|
-
// ============================================================================
|
|
164
|
-
/**
|
|
165
|
-
* 查询用户在 TaxToken 中的可领取奖励
|
|
166
|
-
*
|
|
167
|
-
* @param tokenAddress - TaxToken 合约地址
|
|
168
|
-
* @param account - 用户钱包地址
|
|
169
|
-
* @param rpcUrl - BSC RPC URL
|
|
170
|
-
* @returns 可领取的报价代币数量(wei)
|
|
171
|
-
*/
|
|
172
|
-
export async function getClaimableFee(tokenAddress, account, rpcUrl) {
|
|
173
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
174
|
-
const token = new Contract(tokenAddress, TAX_TOKEN_READ_ABI, provider);
|
|
175
|
-
return BigInt(await token.claimableFee(account));
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* 查询用户在 TaxToken 中的已领取奖励
|
|
179
|
-
*
|
|
180
|
-
* @param tokenAddress - TaxToken 合约地址
|
|
181
|
-
* @param account - 用户钱包地址
|
|
182
|
-
* @param rpcUrl - BSC RPC URL
|
|
183
|
-
* @returns 已领取的报价代币数量(wei)
|
|
184
|
-
*/
|
|
185
|
-
export async function getClaimedFee(tokenAddress, account, rpcUrl) {
|
|
186
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
187
|
-
const token = new Contract(tokenAddress, TAX_TOKEN_READ_ABI, provider);
|
|
188
|
-
return BigInt(await token.claimedFee(account));
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* 查询用户在 TaxToken 中的完整奖励信息
|
|
192
|
-
*
|
|
193
|
-
* @param tokenAddress - TaxToken 合约地址
|
|
194
|
-
* @param account - 用户钱包地址
|
|
195
|
-
* @param rpcUrl - BSC RPC URL
|
|
196
|
-
* @returns 用户奖励信息(份额、债务、可领取、已领取)
|
|
197
|
-
*/
|
|
198
|
-
export async function getUserRewardInfo(tokenAddress, account, rpcUrl) {
|
|
199
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
200
|
-
const token = new Contract(tokenAddress, TAX_TOKEN_READ_ABI, provider);
|
|
201
|
-
const info = await token.userInfo(account);
|
|
202
|
-
return {
|
|
203
|
-
share: BigInt(info.share),
|
|
204
|
-
rewardDebt: BigInt(info.rewardDebt),
|
|
205
|
-
claimable: BigInt(info.claimable),
|
|
206
|
-
claimed: BigInt(info.claimed),
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
// ============================================================================
|
|
210
|
-
// 奖励领取
|
|
211
|
-
// ============================================================================
|
|
212
|
-
/**
|
|
213
|
-
* 构建 TaxToken 奖励领取的签名交易(不发送)
|
|
214
|
-
*
|
|
215
|
-
* @param tokenAddress - TaxToken 合约地址
|
|
216
|
-
* @param privateKey - 用户私钥
|
|
217
|
-
* @param rpcUrl - BSC RPC URL
|
|
218
|
-
* @returns 签名后的交易 hex
|
|
219
|
-
*/
|
|
220
|
-
export async function buildClaimFeeTx(tokenAddress, privateKey, rpcUrl) {
|
|
221
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
222
|
-
const wallet = new Wallet(privateKey, provider);
|
|
223
|
-
const token = new Contract(tokenAddress, TAX_TOKEN_READ_ABI, wallet);
|
|
224
|
-
const tx = await token.claimFee.populateTransaction();
|
|
225
|
-
const nonce = await provider.getTransactionCount(wallet.address, 'latest');
|
|
226
|
-
const feeData = await provider.getFeeData();
|
|
227
|
-
const signedTx = await wallet.signTransaction({
|
|
228
|
-
to: tokenAddress,
|
|
229
|
-
data: tx.data,
|
|
230
|
-
nonce,
|
|
231
|
-
gasLimit: 200000n,
|
|
232
|
-
gasPrice: feeData.gasPrice ?? ethers.parseUnits('3', 'gwei'),
|
|
233
|
-
chainId: 56,
|
|
234
|
-
type: 0,
|
|
235
|
-
});
|
|
236
|
-
return signedTx;
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* 批量构建 TaxToken 奖励领取交易(多个钱包)
|
|
240
|
-
*
|
|
241
|
-
* @param tokenAddress - TaxToken 合约地址
|
|
242
|
-
* @param privateKeys - 用户私钥数组
|
|
243
|
-
* @param rpcUrl - BSC RPC URL
|
|
244
|
-
* @returns 签名后的交易 hex 数组
|
|
245
|
-
*/
|
|
246
|
-
export async function buildBatchClaimFeeTxs(tokenAddress, privateKeys, rpcUrl) {
|
|
247
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
248
|
-
const iface = new ethers.Interface(TAX_TOKEN_READ_ABI);
|
|
249
|
-
const claimData = iface.encodeFunctionData('claimFee', []);
|
|
250
|
-
const feeData = await provider.getFeeData();
|
|
251
|
-
const gasPrice = feeData.gasPrice ?? ethers.parseUnits('3', 'gwei');
|
|
252
|
-
const signedTxs = await Promise.all(privateKeys.map(async (pk) => {
|
|
253
|
-
const wallet = new Wallet(pk, provider);
|
|
254
|
-
const nonce = await provider.getTransactionCount(wallet.address, 'latest');
|
|
255
|
-
return wallet.signTransaction({
|
|
256
|
-
to: tokenAddress,
|
|
257
|
-
data: claimData,
|
|
258
|
-
nonce,
|
|
259
|
-
gasLimit: 200000n,
|
|
260
|
-
gasPrice,
|
|
261
|
-
chainId: 56,
|
|
262
|
-
type: 0,
|
|
263
|
-
});
|
|
264
|
-
}));
|
|
265
|
-
return signedTxs;
|
|
266
|
-
}
|
|
267
|
-
// ============================================================================
|
|
268
|
-
// 校验工具
|
|
269
|
-
// ============================================================================
|
|
270
|
-
/**
|
|
271
|
-
* 验证 FourTokenTaxInfo 参数合法性
|
|
272
|
-
*
|
|
273
|
-
* @param info - 税币配置
|
|
274
|
-
* @returns 验证结果,valid=true 表示合法
|
|
275
|
-
*/
|
|
276
|
-
export function validateFourTokenTaxInfo(info) {
|
|
277
|
-
// feeRate 必须是 1, 3, 5, 10 之一
|
|
278
|
-
if (![1, 3, 5, 10].includes(info.feeRate)) {
|
|
279
|
-
return { valid: false, error: `feeRate 必须为 1, 3, 5 或 10,当前: ${info.feeRate}` };
|
|
280
|
-
}
|
|
281
|
-
// 四项比例之和必须为 100
|
|
282
|
-
const rateSum = info.burnRate + info.divideRate + info.liquidityRate + info.recipientRate;
|
|
283
|
-
if (rateSum !== 100) {
|
|
284
|
-
return { valid: false, error: `burnRate + divideRate + liquidityRate + recipientRate 必须等于 100,当前: ${rateSum}` };
|
|
285
|
-
}
|
|
286
|
-
// 每项比例 >= 0
|
|
287
|
-
if (info.burnRate < 0 || info.divideRate < 0 || info.liquidityRate < 0 || info.recipientRate < 0) {
|
|
288
|
-
return { valid: false, error: '所有比例值不能为负数' };
|
|
289
|
-
}
|
|
290
|
-
// minSharing 验证: d × 10^n, n >= 5, 1 <= d <= 9
|
|
291
|
-
if (info.minSharing > 0) {
|
|
292
|
-
const str = String(info.minSharing);
|
|
293
|
-
// 必须形如 d000...0(d 为 1-9 的数字,后面至少 5 个 0)
|
|
294
|
-
const match = str.match(/^([1-9])(0+)$/);
|
|
295
|
-
if (!match || match[2].length < 5) {
|
|
296
|
-
return { valid: false, error: `minSharing 必须满足 d × 10^n (n≥5, 1≤d≤9),当前: ${info.minSharing}` };
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
return { valid: true };
|
|
300
|
-
}
|
|
301
|
-
// 导出 ABI 供外部使用
|
|
302
|
-
export { TaxTokenAbi as TAX_TOKEN_ABI };
|
package/dist/shared/index 2.js
DELETED
package/dist/shared/index.d 2.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import type { GeneratedWallet } from '../utils/wallet.js';
|
|
2
|
-
import type { TokenPoolType, QuoteTokenType } from '../chains/bsc/four/types.js';
|
|
3
|
-
/**
|
|
4
|
-
* 跳板钱包条目
|
|
5
|
-
* - string: 私钥(hex 字符串)
|
|
6
|
-
* - GeneratedWallet: { address, privateKey }
|
|
7
|
-
* - null / undefined: 空占位
|
|
8
|
-
*/
|
|
9
|
-
export type HopWalletEntry = string | GeneratedWallet | null | undefined;
|
|
10
|
-
/** 跳板钱包组(一组跳板钱包条目) */
|
|
11
|
-
export type HopWalletGroup = HopWalletEntry[];
|
|
12
|
-
/** 分发/归集/多对多 流程统一结果 */
|
|
13
|
-
export type DistributeFlowResult = {
|
|
14
|
-
ok: boolean;
|
|
15
|
-
error?: string;
|
|
16
|
-
successBatches: number;
|
|
17
|
-
totalBatches: number;
|
|
18
|
-
hopWallets: HopWalletGroup[];
|
|
19
|
-
profitHopWallets?: HopWalletGroup[];
|
|
20
|
-
};
|
|
21
|
-
/** 分发/归集/多对多 共用的基础参数(SDK 类型版本,不依赖外部 StoredWallet) */
|
|
22
|
-
export type BaseFlowParams = {
|
|
23
|
-
chain: string;
|
|
24
|
-
supportsBundleFeature: boolean;
|
|
25
|
-
unitLabel: string;
|
|
26
|
-
tokenAddress: string;
|
|
27
|
-
tokenDecimals: number;
|
|
28
|
-
tokenPoolType: TokenPoolType | string;
|
|
29
|
-
quoteToken: QuoteTokenType | string;
|
|
30
|
-
tokenKey: string;
|
|
31
|
-
tokenSymbol: string;
|
|
32
|
-
hopCount?: number;
|
|
33
|
-
bribeAmount?: number;
|
|
34
|
-
gasLimit: number;
|
|
35
|
-
gasPriceGwei: number;
|
|
36
|
-
submitToBlockRazor: (signedTransactions: string[], options?: Record<string, unknown>) => Promise<Record<string, unknown>>;
|
|
37
|
-
submitDirectWithTransferHops?: (params: Record<string, unknown>) => Promise<Record<string, unknown>>;
|
|
38
|
-
txLogs: Record<string, unknown>;
|
|
39
|
-
delay: (ms: number) => Promise<void>;
|
|
40
|
-
onBatchConfirmed: (addresses: string[]) => Promise<void>;
|
|
41
|
-
/** 跳板钱包生成回调 */
|
|
42
|
-
onHopWalletsGenerated?: (params: {
|
|
43
|
-
operation: string;
|
|
44
|
-
hopWallets: HopWalletGroup[];
|
|
45
|
-
profitHopWallets?: HopWalletGroup[];
|
|
46
|
-
batchIndex: number;
|
|
47
|
-
totalBatches: number;
|
|
48
|
-
}) => void;
|
|
49
|
-
};
|
|
50
|
-
/** 分发流程参数(SDK 类型版本) */
|
|
51
|
-
export type DisperseFlowParams = BaseFlowParams & {
|
|
52
|
-
fundWalletId: number;
|
|
53
|
-
fundWallet: Record<string, unknown>;
|
|
54
|
-
selectedWallets: Record<string, unknown>[];
|
|
55
|
-
minDistribute: number;
|
|
56
|
-
maxDistribute: number;
|
|
57
|
-
erc20BalanceMap: Record<string, string>;
|
|
58
|
-
};
|
|
59
|
-
/** 归集流程参数(SDK 类型版本) */
|
|
60
|
-
export type CollectFlowParams = BaseFlowParams & {
|
|
61
|
-
mainWalletId: number;
|
|
62
|
-
mainWallet: Record<string, unknown>;
|
|
63
|
-
selectedWallets: Record<string, unknown>[];
|
|
64
|
-
collectRatioPct: number;
|
|
65
|
-
erc20BalanceMap: Record<string, string>;
|
|
66
|
-
};
|
|
67
|
-
/** 多对多转账流程参数(SDK 类型版本) */
|
|
68
|
-
export type PairwiseFlowParams = BaseFlowParams & {
|
|
69
|
-
senderWallets: Record<string, unknown>[];
|
|
70
|
-
receiverAddresses: string[];
|
|
71
|
-
amounts: string[];
|
|
72
|
-
};
|
package/dist/types/distribute.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/types 2/errors.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 统一 SDK 错误代码
|
|
3
|
-
*
|
|
4
|
-
* 合并 Four.meme (parseFourError) 和 Flap Protocol (parseFlapError) 的错误代码。
|
|
5
|
-
*/
|
|
6
|
-
export declare enum SdkErrorCode {
|
|
7
|
-
UNKNOWN_ERROR = "UNKNOWN_ERROR",
|
|
8
|
-
INSUFFICIENT_BALANCE = "INSUFFICIENT_BALANCE",
|
|
9
|
-
SLIPPAGE_EXCEEDED = "SLIPPAGE_EXCEEDED",
|
|
10
|
-
TRANSACTION_FAILED = "TRANSACTION_FAILED",
|
|
11
|
-
TOKEN_ALREADY_EXISTS = "TOKEN_ALREADY_EXISTS",
|
|
12
|
-
TOKEN_NOT_FOUND = "TOKEN_NOT_FOUND",
|
|
13
|
-
TOKEN_NOT_TRADABLE = "TOKEN_NOT_TRADABLE",
|
|
14
|
-
ALREADY_ON_DEX = "ALREADY_ON_DEX",
|
|
15
|
-
FOUR_GWEI_PRECISION = "FOUR_GWEI_PRECISION",
|
|
16
|
-
FOUR_ZERO_ADDRESS = "FOUR_ZERO_ADDRESS",
|
|
17
|
-
FOUR_SLIPPAGE = "FOUR_SLIPPAGE",
|
|
18
|
-
FOUR_INSUFFICIENT_FUNDS = "FOUR_INSUFFICIENT_FUNDS",
|
|
19
|
-
FOUR_FEE_TOO_HIGH = "FOUR_FEE_TOO_HIGH",
|
|
20
|
-
FOUR_ORDER_TOO_SMALL = "FOUR_ORDER_TOO_SMALL",
|
|
21
|
-
INVALID_AMOUNT = "INVALID_AMOUNT",
|
|
22
|
-
INVALID_TOKEN = "INVALID_TOKEN",
|
|
23
|
-
INVALID_QUOTE_TOKEN = "INVALID_QUOTE_TOKEN",
|
|
24
|
-
TAX_RATE_TOO_HIGH = "TAX_RATE_TOO_HIGH",
|
|
25
|
-
PERMIT_EXPIRED = "PERMIT_EXPIRED",
|
|
26
|
-
PERMIT_INVALID = "PERMIT_INVALID"
|
|
27
|
-
}
|
package/dist/types 2/errors.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 统一 SDK 错误代码
|
|
3
|
-
*
|
|
4
|
-
* 合并 Four.meme (parseFourError) 和 Flap Protocol (parseFlapError) 的错误代码。
|
|
5
|
-
*/
|
|
6
|
-
export var SdkErrorCode;
|
|
7
|
-
(function (SdkErrorCode) {
|
|
8
|
-
// Generic
|
|
9
|
-
SdkErrorCode["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
|
|
10
|
-
// Transaction / Bundle
|
|
11
|
-
SdkErrorCode["INSUFFICIENT_BALANCE"] = "INSUFFICIENT_BALANCE";
|
|
12
|
-
SdkErrorCode["SLIPPAGE_EXCEEDED"] = "SLIPPAGE_EXCEEDED";
|
|
13
|
-
SdkErrorCode["TRANSACTION_FAILED"] = "TRANSACTION_FAILED";
|
|
14
|
-
// Token state
|
|
15
|
-
SdkErrorCode["TOKEN_ALREADY_EXISTS"] = "TOKEN_ALREADY_EXISTS";
|
|
16
|
-
SdkErrorCode["TOKEN_NOT_FOUND"] = "TOKEN_NOT_FOUND";
|
|
17
|
-
SdkErrorCode["TOKEN_NOT_TRADABLE"] = "TOKEN_NOT_TRADABLE";
|
|
18
|
-
SdkErrorCode["ALREADY_ON_DEX"] = "ALREADY_ON_DEX";
|
|
19
|
-
// Four.meme specific
|
|
20
|
-
SdkErrorCode["FOUR_GWEI_PRECISION"] = "FOUR_GWEI_PRECISION";
|
|
21
|
-
SdkErrorCode["FOUR_ZERO_ADDRESS"] = "FOUR_ZERO_ADDRESS";
|
|
22
|
-
SdkErrorCode["FOUR_SLIPPAGE"] = "FOUR_SLIPPAGE";
|
|
23
|
-
SdkErrorCode["FOUR_INSUFFICIENT_FUNDS"] = "FOUR_INSUFFICIENT_FUNDS";
|
|
24
|
-
SdkErrorCode["FOUR_FEE_TOO_HIGH"] = "FOUR_FEE_TOO_HIGH";
|
|
25
|
-
SdkErrorCode["FOUR_ORDER_TOO_SMALL"] = "FOUR_ORDER_TOO_SMALL";
|
|
26
|
-
// Validation
|
|
27
|
-
SdkErrorCode["INVALID_AMOUNT"] = "INVALID_AMOUNT";
|
|
28
|
-
SdkErrorCode["INVALID_TOKEN"] = "INVALID_TOKEN";
|
|
29
|
-
SdkErrorCode["INVALID_QUOTE_TOKEN"] = "INVALID_QUOTE_TOKEN";
|
|
30
|
-
SdkErrorCode["TAX_RATE_TOO_HIGH"] = "TAX_RATE_TOO_HIGH";
|
|
31
|
-
// Permit
|
|
32
|
-
SdkErrorCode["PERMIT_EXPIRED"] = "PERMIT_EXPIRED";
|
|
33
|
-
SdkErrorCode["PERMIT_INVALID"] = "PERMIT_INVALID";
|
|
34
|
-
})(SdkErrorCode || (SdkErrorCode = {}));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { parseFourError, parseSdkError, SdkError, SdkErrorCode } from '../errors.js';
|
|
3
|
-
describe('parseFourError', () => {
|
|
4
|
-
it.each([
|
|
5
|
-
['GW: amount precision', 'GW', 'Amount precision is not aligned to GWEI'],
|
|
6
|
-
['ZA: zero address', 'ZA', "The 'to' address should not be address(0)"],
|
|
7
|
-
['TO: pancake pair', 'TO', 'The to address should not be set to the PancakePair address'],
|
|
8
|
-
['Slippage exceeded', 'Slippage', 'Slippage exceeded limit'],
|
|
9
|
-
['More BNB needed', 'More BNB', 'Insufficient BNB sent in msg.value'],
|
|
10
|
-
['FR: fee rate', 'FR', 'Fee rate exceeds 5%'],
|
|
11
|
-
['SO: order too small', 'SO', 'Order amount is too small'],
|
|
12
|
-
])('parses %s error correctly', (_label, code, message) => {
|
|
13
|
-
const result1 = parseFourError({ message: `execution reverted: ${code}` });
|
|
14
|
-
expect(result1.code).toBe(code);
|
|
15
|
-
expect(result1.message).toBe(message);
|
|
16
|
-
const result2 = parseFourError(code);
|
|
17
|
-
expect(result2.code).toBe(code);
|
|
18
|
-
expect(result2.message).toBe(message);
|
|
19
|
-
});
|
|
20
|
-
it('returns unknown message when no code matches', () => {
|
|
21
|
-
const result = parseFourError({ message: 'some random error' });
|
|
22
|
-
expect(result.code).toBeUndefined();
|
|
23
|
-
expect(result.message).toBe('some random error');
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
describe('SdkError', () => {
|
|
27
|
-
it('creates error with code and message', () => {
|
|
28
|
-
const err = new SdkError(SdkErrorCode.SLIPPAGE_EXCEEDED, 'Slippage too high');
|
|
29
|
-
expect(err.code).toBe(SdkErrorCode.SLIPPAGE_EXCEEDED);
|
|
30
|
-
expect(err.message).toBe('Slippage too high');
|
|
31
|
-
expect(err.name).toBe('SdkError');
|
|
32
|
-
expect(err.cause).toBeUndefined();
|
|
33
|
-
});
|
|
34
|
-
it('preserves cause when provided', () => {
|
|
35
|
-
const cause = new Error('original error');
|
|
36
|
-
const err = new SdkError(SdkErrorCode.TRANSACTION_FAILED, 'Failed', cause);
|
|
37
|
-
expect(err.cause).toBe(cause);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
describe('parseSdkError', () => {
|
|
41
|
-
it('returns the same instance for SdkError', () => {
|
|
42
|
-
const original = new SdkError(SdkErrorCode.TOKEN_NOT_FOUND, 'not found');
|
|
43
|
-
const parsed = parseSdkError(original);
|
|
44
|
-
expect(parsed).toBe(original);
|
|
45
|
-
});
|
|
46
|
-
it('parses Four.meme GW error', () => {
|
|
47
|
-
const err = parseSdkError({ message: 'GW: amount precision' });
|
|
48
|
-
expect(err.code).toBe(SdkErrorCode.FOUR_GWEI_PRECISION);
|
|
49
|
-
});
|
|
50
|
-
it('parses Flap token exists error', () => {
|
|
51
|
-
const err = parseSdkError({ message: 'execution reverted: token already exists' });
|
|
52
|
-
expect(err.code).toBe(SdkErrorCode.TOKEN_ALREADY_EXISTS);
|
|
53
|
-
});
|
|
54
|
-
it('parses slippage error', () => {
|
|
55
|
-
const err = parseSdkError({ message: 'slippage exceeded' });
|
|
56
|
-
expect(err.code).toBe(SdkErrorCode.SLIPPAGE_EXCEEDED);
|
|
57
|
-
});
|
|
58
|
-
it('parses insufficient balance error', () => {
|
|
59
|
-
const err = parseSdkError({ message: 'insufficient funds for gas' });
|
|
60
|
-
expect(err.code).toBe(SdkErrorCode.INSUFFICIENT_BALANCE);
|
|
61
|
-
});
|
|
62
|
-
it('parses permit expired error', () => {
|
|
63
|
-
const err = parseSdkError({ message: 'permit expired' });
|
|
64
|
-
expect(err.code).toBe(SdkErrorCode.PERMIT_EXPIRED);
|
|
65
|
-
});
|
|
66
|
-
it('returns UNKNOWN_ERROR for unrecognized errors', () => {
|
|
67
|
-
const err = parseSdkError({ message: 'completely unknown error' });
|
|
68
|
-
expect(err.code).toBe(SdkErrorCode.UNKNOWN_ERROR);
|
|
69
|
-
});
|
|
70
|
-
it('handles null/undefined', () => {
|
|
71
|
-
const err1 = parseSdkError(null);
|
|
72
|
-
expect(err1.code).toBe(SdkErrorCode.UNKNOWN_ERROR);
|
|
73
|
-
const err2 = parseSdkError(undefined);
|
|
74
|
-
expect(err2.code).toBe(SdkErrorCode.UNKNOWN_ERROR);
|
|
75
|
-
});
|
|
76
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export type { BundleSubmitResult, SignedTransactionsResult, AirdropDisperseParams, AirdropDisperseSignParams, AirdropSweepParams, AirdropSweepSignParams, DisperseParams, DisperseSignParams, SweepParams, SweepSignParams, } from '../shared/foundation/types/airdrop-sweep.js';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|