four-flap-meme-sdk 1.5.59 → 1.5.60
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/dex/direct-router.js +2 -2
- package/dist/flap/portal-bundle-merkle/private.js +2 -1
- package/dist/utils/contract-factory.js +6 -6
- package/dist/utils/provider-factory.d.ts +39 -0
- package/dist/utils/provider-factory.js +101 -0
- package/dist/xlayer/portal-ops.js +1 -0
- package/package.json +1 -1
|
@@ -32,8 +32,8 @@ function getCachedProvider(rpcUrl, chainId, chainName) {
|
|
|
32
32
|
if (cachedProvider && (now - timestamp) < PROVIDER_CACHE_TTL) {
|
|
33
33
|
return cachedProvider;
|
|
34
34
|
}
|
|
35
|
-
//
|
|
36
|
-
const provider = new JsonRpcProvider(rpcUrl, { chainId, name: chainName });
|
|
35
|
+
// ✅ 禁用 ENS: 避免 "network does not support ENS" 错误
|
|
36
|
+
const provider = new JsonRpcProvider(rpcUrl, { chainId, name: chainName, ensAddress: undefined });
|
|
37
37
|
providerCache.set(cacheKey, provider);
|
|
38
38
|
providerCacheTimestamps.set(cacheKey, now);
|
|
39
39
|
return provider;
|
|
@@ -385,9 +385,10 @@ function createMerkleContext(chain, config) {
|
|
|
385
385
|
throw new Error(`Chain ${chain} (chainId: ${chainId}) does not support Merkle bundle service. Please provide customRpcUrl.`);
|
|
386
386
|
}
|
|
387
387
|
const { JsonRpcProvider } = require('ethers');
|
|
388
|
+
// ✅ 禁用 ENS: 避免 "network does not support ENS" 错误
|
|
388
389
|
return {
|
|
389
390
|
chainId,
|
|
390
|
-
provider: new JsonRpcProvider(config.customRpcUrl, { chainId, name: chain.toLowerCase() })
|
|
391
|
+
provider: new JsonRpcProvider(config.customRpcUrl, { chainId, name: chain.toLowerCase(), ensAddress: undefined })
|
|
391
392
|
};
|
|
392
393
|
}
|
|
393
394
|
const merkle = new MerkleClient({
|
|
@@ -6,7 +6,7 @@ import { ADDRESSES } from './constants.js';
|
|
|
6
6
|
* 自动使用正确的代理合约地址
|
|
7
7
|
*/
|
|
8
8
|
export function getTokenManagerV1(chain, rpcUrl) {
|
|
9
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
9
|
+
const provider = new JsonRpcProvider(rpcUrl, undefined); // ✅ 禁用 ENS
|
|
10
10
|
const chainAddresses = ADDRESSES[chain];
|
|
11
11
|
const address = 'TokenManagerV1' in chainAddresses ? chainAddresses.TokenManagerV1 : undefined;
|
|
12
12
|
if (!address) {
|
|
@@ -19,7 +19,7 @@ export function getTokenManagerV1(chain, rpcUrl) {
|
|
|
19
19
|
* 自动使用正确的代理合约地址
|
|
20
20
|
*/
|
|
21
21
|
export function getTokenManagerV2(chain, rpcUrl) {
|
|
22
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
22
|
+
const provider = new JsonRpcProvider(rpcUrl, undefined); // ✅ 禁用 ENS
|
|
23
23
|
const chainAddresses = ADDRESSES[chain];
|
|
24
24
|
const address = 'TokenManagerV2' in chainAddresses ? chainAddresses.TokenManagerV2 : undefined;
|
|
25
25
|
if (!address) {
|
|
@@ -32,7 +32,7 @@ export function getTokenManagerV2(chain, rpcUrl) {
|
|
|
32
32
|
* 自动使用正确的代理合约地址
|
|
33
33
|
*/
|
|
34
34
|
export function getTokenManagerHelper3(chain, rpcUrl) {
|
|
35
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
35
|
+
const provider = new JsonRpcProvider(rpcUrl, undefined); // ✅ 禁用 ENS
|
|
36
36
|
const address = ADDRESSES[chain].TokenManagerHelper3;
|
|
37
37
|
if (!address) {
|
|
38
38
|
throw new Error(`TokenManagerHelper3 not deployed on ${chain}`);
|
|
@@ -44,7 +44,7 @@ export function getTokenManagerHelper3(chain, rpcUrl) {
|
|
|
44
44
|
* 自动使用正确的代理合约地址
|
|
45
45
|
*/
|
|
46
46
|
export function getTokenManagerV1Writer(chain, rpcUrl, privateKey) {
|
|
47
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
47
|
+
const provider = new JsonRpcProvider(rpcUrl, undefined); // ✅ 禁用 ENS
|
|
48
48
|
const signer = new Wallet(privateKey, provider);
|
|
49
49
|
const chainAddresses = ADDRESSES[chain];
|
|
50
50
|
const address = 'TokenManagerV1' in chainAddresses ? chainAddresses.TokenManagerV1 : undefined;
|
|
@@ -58,7 +58,7 @@ export function getTokenManagerV1Writer(chain, rpcUrl, privateKey) {
|
|
|
58
58
|
* 自动使用正确的代理合约地址
|
|
59
59
|
*/
|
|
60
60
|
export function getTokenManagerV2Writer(chain, rpcUrl, privateKey) {
|
|
61
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
61
|
+
const provider = new JsonRpcProvider(rpcUrl, undefined); // ✅ 禁用 ENS
|
|
62
62
|
const signer = new Wallet(privateKey, provider);
|
|
63
63
|
const chainAddresses = ADDRESSES[chain];
|
|
64
64
|
const address = 'TokenManagerV2' in chainAddresses ? chainAddresses.TokenManagerV2 : undefined;
|
|
@@ -72,7 +72,7 @@ export function getTokenManagerV2Writer(chain, rpcUrl, privateKey) {
|
|
|
72
72
|
* 自动使用正确的代理合约地址
|
|
73
73
|
*/
|
|
74
74
|
export function getTokenManagerHelper3Writer(chain, rpcUrl, privateKey) {
|
|
75
|
-
const provider = new JsonRpcProvider(rpcUrl);
|
|
75
|
+
const provider = new JsonRpcProvider(rpcUrl, undefined); // ✅ 禁用 ENS
|
|
76
76
|
const signer = new Wallet(privateKey, provider);
|
|
77
77
|
const address = ADDRESSES[chain].TokenManagerHelper3;
|
|
78
78
|
if (!address) {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider 工厂函数 - 统一创建 JsonRpcProvider 并禁用 ENS
|
|
3
|
+
*
|
|
4
|
+
* 目的:
|
|
5
|
+
* 1. 避免 "network does not support ENS" 错误
|
|
6
|
+
* 2. 统一 Provider 创建逻辑
|
|
7
|
+
* 3. 提升性能 (跳过 ENS 解析)
|
|
8
|
+
*/
|
|
9
|
+
import { JsonRpcProvider } from 'ethers';
|
|
10
|
+
/**
|
|
11
|
+
* 创建 JsonRpcProvider (自动禁用 ENS)
|
|
12
|
+
*
|
|
13
|
+
* @param rpcUrl RPC URL
|
|
14
|
+
* @param chainId 链 ID (可选)
|
|
15
|
+
* @param chainName 链名称 (可选,用于日志)
|
|
16
|
+
* @param options 额外选项
|
|
17
|
+
* @returns JsonRpcProvider 实例
|
|
18
|
+
*/
|
|
19
|
+
export declare function createProvider(rpcUrl: string, chainId?: number, chainName?: string, options?: {
|
|
20
|
+
batchMaxCount?: number;
|
|
21
|
+
batchStallTime?: number;
|
|
22
|
+
}): JsonRpcProvider;
|
|
23
|
+
export declare function createCachedProvider(rpcUrl: string, chainId: number, chainName?: string): JsonRpcProvider;
|
|
24
|
+
/**
|
|
25
|
+
* 清除 Provider 缓存
|
|
26
|
+
*/
|
|
27
|
+
export declare function clearProviderCache(): void;
|
|
28
|
+
/**
|
|
29
|
+
* XLayer 专用 Provider 创建函数
|
|
30
|
+
*/
|
|
31
|
+
export declare function createXLayerProvider(rpcUrl: string): JsonRpcProvider;
|
|
32
|
+
/**
|
|
33
|
+
* BSC 专用 Provider 创建函数
|
|
34
|
+
*/
|
|
35
|
+
export declare function createBscProvider(rpcUrl: string): JsonRpcProvider;
|
|
36
|
+
/**
|
|
37
|
+
* Monad 专用 Provider 创建函数
|
|
38
|
+
*/
|
|
39
|
+
export declare function createMonadProvider(rpcUrl: string): JsonRpcProvider;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider 工厂函数 - 统一创建 JsonRpcProvider 并禁用 ENS
|
|
3
|
+
*
|
|
4
|
+
* 目的:
|
|
5
|
+
* 1. 避免 "network does not support ENS" 错误
|
|
6
|
+
* 2. 统一 Provider 创建逻辑
|
|
7
|
+
* 3. 提升性能 (跳过 ENS 解析)
|
|
8
|
+
*/
|
|
9
|
+
import { JsonRpcProvider } from 'ethers';
|
|
10
|
+
/**
|
|
11
|
+
* 创建 JsonRpcProvider (自动禁用 ENS)
|
|
12
|
+
*
|
|
13
|
+
* @param rpcUrl RPC URL
|
|
14
|
+
* @param chainId 链 ID (可选)
|
|
15
|
+
* @param chainName 链名称 (可选,用于日志)
|
|
16
|
+
* @param options 额外选项
|
|
17
|
+
* @returns JsonRpcProvider 实例
|
|
18
|
+
*/
|
|
19
|
+
export function createProvider(rpcUrl, chainId, chainName, options) {
|
|
20
|
+
// 构建网络配置
|
|
21
|
+
const networkConfig = chainId
|
|
22
|
+
? {
|
|
23
|
+
chainId,
|
|
24
|
+
name: chainName || `chain-${chainId}`,
|
|
25
|
+
ensAddress: undefined, // ✅ 禁用 ENS 解析
|
|
26
|
+
}
|
|
27
|
+
: undefined;
|
|
28
|
+
// 构建批处理选项
|
|
29
|
+
const batchOptions = options
|
|
30
|
+
? {
|
|
31
|
+
batchMaxCount: options.batchMaxCount ?? 20,
|
|
32
|
+
batchStallTime: options.batchStallTime ?? 30,
|
|
33
|
+
}
|
|
34
|
+
: undefined;
|
|
35
|
+
// 创建 Provider
|
|
36
|
+
if (networkConfig && batchOptions) {
|
|
37
|
+
return new JsonRpcProvider(rpcUrl, networkConfig, batchOptions);
|
|
38
|
+
}
|
|
39
|
+
else if (networkConfig) {
|
|
40
|
+
return new JsonRpcProvider(rpcUrl, networkConfig);
|
|
41
|
+
}
|
|
42
|
+
else if (batchOptions) {
|
|
43
|
+
return new JsonRpcProvider(rpcUrl, undefined, batchOptions);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return new JsonRpcProvider(rpcUrl);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 创建带缓存的 Provider
|
|
51
|
+
*
|
|
52
|
+
* @param rpcUrl RPC URL
|
|
53
|
+
* @param chainId 链 ID
|
|
54
|
+
* @param chainName 链名称
|
|
55
|
+
* @returns JsonRpcProvider 实例
|
|
56
|
+
*/
|
|
57
|
+
const providerCache = new Map();
|
|
58
|
+
export function createCachedProvider(rpcUrl, chainId, chainName) {
|
|
59
|
+
const key = `${rpcUrl}:${chainId}`;
|
|
60
|
+
if (!providerCache.has(key)) {
|
|
61
|
+
const provider = createProvider(rpcUrl, chainId, chainName, {
|
|
62
|
+
batchMaxCount: 20,
|
|
63
|
+
batchStallTime: 30,
|
|
64
|
+
});
|
|
65
|
+
providerCache.set(key, provider);
|
|
66
|
+
}
|
|
67
|
+
return providerCache.get(key);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 清除 Provider 缓存
|
|
71
|
+
*/
|
|
72
|
+
export function clearProviderCache() {
|
|
73
|
+
providerCache.clear();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* XLayer 专用 Provider 创建函数
|
|
77
|
+
*/
|
|
78
|
+
export function createXLayerProvider(rpcUrl) {
|
|
79
|
+
return createProvider(rpcUrl, 196, 'xlayer', {
|
|
80
|
+
batchMaxCount: 20,
|
|
81
|
+
batchStallTime: 30,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* BSC 专用 Provider 创建函数
|
|
86
|
+
*/
|
|
87
|
+
export function createBscProvider(rpcUrl) {
|
|
88
|
+
return createProvider(rpcUrl, 56, 'bsc', {
|
|
89
|
+
batchMaxCount: 20,
|
|
90
|
+
batchStallTime: 30,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Monad 专用 Provider 创建函数
|
|
95
|
+
*/
|
|
96
|
+
export function createMonadProvider(rpcUrl) {
|
|
97
|
+
return createProvider(rpcUrl, 143, 'monad', {
|
|
98
|
+
batchMaxCount: 20,
|
|
99
|
+
batchStallTime: 30,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
@@ -100,6 +100,7 @@ export class PortalQuery {
|
|
|
100
100
|
constructor(config = {}) {
|
|
101
101
|
const rpcUrl = config.rpcUrl ?? DEFAULT_RPC_URL;
|
|
102
102
|
const chainId = config.chainId ?? XLAYER_CHAIN_ID;
|
|
103
|
+
// ✅ 禁用 ENS: XLayer 不支持 ENS,显式设置 ensAddress: undefined 避免解析错误
|
|
103
104
|
this.provider = new JsonRpcProvider(rpcUrl, { chainId, name: 'xlayer', ensAddress: undefined }, {
|
|
104
105
|
batchMaxCount: 20,
|
|
105
106
|
batchStallTime: 30,
|