@ercworldio/blockchain-shared 1.0.3-dev.0 → 1.0.3-dev.0-PROJ-1281.1
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/build/chains/Provider.d.ts +22 -1
- package/build/chains/Provider.d.ts.map +1 -1
- package/build/chains/Provider.js +103 -55
- package/build/chains/networks_prod-bu.json +52 -13
- package/build/chains/networks_prod-dz.json +64 -16
- package/build/chains/networks_stg-bu.json +52 -13
- package/build/chains/networks_stg-dz.json +64 -16
- package/build/chains/networks_stg-sh.json +55 -16
- package/build/chains/networks_stg-yb.json +149 -11
- package/build/interfaces/config.d.ts +2 -0
- package/build/interfaces/config.d.ts.map +1 -1
- package/build/interfaces.d.ts +1 -0
- package/build/interfaces.d.ts.map +1 -1
- package/build/services/ProviderManager.d.ts +2 -1
- package/build/services/ProviderManager.d.ts.map +1 -1
- package/build/services/ProviderManager.js +2 -4
- package/build/services/Redis.d.ts +9 -0
- package/build/services/Redis.d.ts.map +1 -1
- package/build/services/Redis.js +63 -0
- package/package.json +1 -1
|
@@ -1,14 +1,35 @@
|
|
|
1
1
|
import { ethers } from "ethers";
|
|
2
2
|
import { IConfig } from "../interfaces/config";
|
|
3
3
|
import BaseErrors from "../errors/errors";
|
|
4
|
+
import { ChainId, NetworkConfig } from "../interfaces";
|
|
4
5
|
export declare enum RpcType {
|
|
5
6
|
HTTP = 0,
|
|
6
7
|
WSS = 1
|
|
7
8
|
}
|
|
9
|
+
export declare enum RpcProviderType {
|
|
10
|
+
ANKR = "ankr",
|
|
11
|
+
QUICKNODE = "quicknode"
|
|
12
|
+
}
|
|
8
13
|
declare class Provider extends BaseErrors {
|
|
9
14
|
private config;
|
|
15
|
+
private chainIdToQuicknodeNetworkName;
|
|
16
|
+
private quicknodeEndpointBaseUrl;
|
|
10
17
|
constructor(config: IConfig);
|
|
11
|
-
|
|
18
|
+
getQuicknodeUrl: (chain_id: ChainId) => string;
|
|
19
|
+
getRpcUrlComponents: (chain_id: ChainId, chain_config: NetworkConfig, rpcType: RpcType, providerType?: RpcProviderType) => {
|
|
20
|
+
url: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Backwards compatible with defualt ANKR provider if `providerType` is not passed as an arg
|
|
24
|
+
* Use `providerType` to choose the provider for HTTP rpc.
|
|
25
|
+
* Provider selection does not work for wss.
|
|
26
|
+
* Wss uses Ankr by default
|
|
27
|
+
* @param chainId
|
|
28
|
+
* @param rpcType
|
|
29
|
+
* @param providerType
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
getProvider: (chainId: string, rpcType: RpcType, providerType?: RpcProviderType) => {
|
|
12
33
|
provider: ethers.JsonRpcProvider;
|
|
13
34
|
url: string;
|
|
14
35
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../src/chains/Provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,UAAU,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../src/chains/Provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEvD,oBAAY,OAAO;IACf,IAAI,IAAI;IACR,GAAG,IAAI;CACV;AAED,oBAAY,eAAe;IACvB,IAAI,SAAS;IACb,SAAS,cAAc;CAC1B;AAmBD,cAAM,QAAS,SAAQ,UAAU;IAE7B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,6BAA6B,CAAY;IACjD,OAAO,CAAC,wBAAwB,CAAS;gBAC7B,MAAM,EAAE,OAAO;IAqB3B,eAAe,GAAI,UAAU,OAAO,YAoBnC;IAED,mBAAmB,GAAI,UAAU,OAAO,EAAE,cAAc,aAAa,EAAE,SAAS,OAAO,EAAE,eAAc,eAAsC;;MA0B5I;IAED;;;;;;;;;OASG;IACH,WAAW,GAAI,SAAS,MAAM,EAAE,SAAS,OAAO,EAAE,eAAc,eAAsC;;;;;;MAcrG;CAGJ;AAGD,eAAe,QAAQ,CAAC"}
|
package/build/chains/Provider.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.RpcType = void 0;
|
|
6
|
+
exports.RpcProviderType = exports.RpcType = void 0;
|
|
7
7
|
const ethers_1 = require("ethers");
|
|
8
8
|
const ChainManager_1 = __importDefault(require("../services/ChainManager"));
|
|
9
9
|
const errors_1 = __importDefault(require("../errors/errors"));
|
|
@@ -12,74 +12,122 @@ var RpcType;
|
|
|
12
12
|
RpcType[RpcType["HTTP"] = 0] = "HTTP";
|
|
13
13
|
RpcType[RpcType["WSS"] = 1] = "WSS";
|
|
14
14
|
})(RpcType || (exports.RpcType = RpcType = {}));
|
|
15
|
+
var RpcProviderType;
|
|
16
|
+
(function (RpcProviderType) {
|
|
17
|
+
RpcProviderType["ANKR"] = "ankr";
|
|
18
|
+
RpcProviderType["QUICKNODE"] = "quicknode";
|
|
19
|
+
})(RpcProviderType || (exports.RpcProviderType = RpcProviderType = {}));
|
|
20
|
+
const avax_c_chain_rpc_path = '/ext/bc/C/rpc/';
|
|
21
|
+
const quicknodeChainIdToName = {
|
|
22
|
+
11155111: "ethereum-sepolia",
|
|
23
|
+
1: "",
|
|
24
|
+
97: "bsc-testnet",
|
|
25
|
+
56: "bsc",
|
|
26
|
+
103: "solana-devnet",
|
|
27
|
+
101: "solana-mainnet",
|
|
28
|
+
10143: "monad-testnet",
|
|
29
|
+
143: "monad-mainnet",
|
|
30
|
+
43113: "avalanche-testnet",
|
|
31
|
+
43114: "avalanche-mainnet",
|
|
32
|
+
80002: "matic-amoy",
|
|
33
|
+
137: "matic",
|
|
34
|
+
728126428: "tron-mainnet"
|
|
35
|
+
};
|
|
15
36
|
class Provider extends errors_1.default {
|
|
16
37
|
constructor(config) {
|
|
17
38
|
super();
|
|
18
|
-
this.
|
|
39
|
+
this.chainIdToQuicknodeNetworkName = new Map();
|
|
40
|
+
/*
|
|
41
|
+
* Parses and returns the final Quicknode Endpoint url for a given network
|
|
42
|
+
* Assumes quicknodeEndpointBaseUrl uses the pattern: https://<RandomName>.*.quiknode.pro
|
|
43
|
+
* Where the * wildcard is replaced with the respective chain id's quicknode endpoint network name
|
|
44
|
+
* */
|
|
45
|
+
this.getQuicknodeUrl = (chain_id) => {
|
|
46
|
+
const endpoint_network_name = this.chainIdToQuicknodeNetworkName.get(parseInt(chain_id));
|
|
47
|
+
if (!endpoint_network_name)
|
|
48
|
+
throw new Error(`Quicknode Endpoint chain id to network name map not set`);
|
|
49
|
+
const quicknodeApiKey = this.config.config.quicknodeEndpointApikey;
|
|
50
|
+
if (!quicknodeApiKey)
|
|
51
|
+
throw new Error(`quicknodeApiKey secret is required`);
|
|
52
|
+
// Handle avalanche separately as it requires a path at the end of the string
|
|
53
|
+
if ([43113, 43114].includes(parseInt(chain_id))) {
|
|
54
|
+
return `${this.quicknodeEndpointBaseUrl.replace("*", endpoint_network_name)}/${quicknodeApiKey}/${avax_c_chain_rpc_path}`;
|
|
55
|
+
}
|
|
56
|
+
// Handle mainnet case where final url doesnt include the network name
|
|
57
|
+
// e.g https://distinguished-aged-aura.quiknode.pro
|
|
58
|
+
// as opposed to non Ethereum Mainnet networks: https://distinguished-aged-aura.bsc.quiknode.pro
|
|
59
|
+
if (parseInt(chain_id) === 1) {
|
|
60
|
+
return `${this.quicknodeEndpointBaseUrl.replace(".*.", ".")}/${quicknodeApiKey}`;
|
|
61
|
+
}
|
|
62
|
+
return `${this.quicknodeEndpointBaseUrl.replace("*", endpoint_network_name)}/${quicknodeApiKey}`;
|
|
63
|
+
};
|
|
64
|
+
this.getRpcUrlComponents = (chain_id, chain_config, rpcType, providerType = RpcProviderType.ANKR) => {
|
|
65
|
+
switch (providerType) {
|
|
66
|
+
case RpcProviderType.ANKR:
|
|
67
|
+
if (!this.config.config.ankrApiKey)
|
|
68
|
+
throw new Error(this.RequireParameter("secret: ankrApiKey"));
|
|
69
|
+
if (rpcType === RpcType.HTTP) {
|
|
70
|
+
if (!chain_config.rpcBaseUrl)
|
|
71
|
+
throw new Error(this.RequireParameter("configuration: rpcBaseUrl"));
|
|
72
|
+
return { url: `${chain_config.rpcBaseUrl}/${this.config.config.ankrApiKey}` };
|
|
73
|
+
}
|
|
74
|
+
else if (rpcType === RpcType.WSS) {
|
|
75
|
+
if (!chain_config.rpcBaseUrlWss)
|
|
76
|
+
throw new Error(this.RequireParameter("configuration: rpcBaseUrlWss"));
|
|
77
|
+
const rpcUrl = `${chain_config.rpcBaseUrlWss}/${this.config.config.ankrApiKey}`;
|
|
78
|
+
return { url: rpcUrl };
|
|
79
|
+
}
|
|
80
|
+
throw new Error(`Unsupported RPC type ${rpcType}`);
|
|
81
|
+
case RpcProviderType.QUICKNODE:
|
|
82
|
+
if (!this.config.config.quicknodeRpcBaseUrl)
|
|
83
|
+
throw new Error(`quicknodeRpcBaseUrl is not set`);
|
|
84
|
+
if (!this.config.config.quicknodeEndpointApikey)
|
|
85
|
+
throw new Error(`quicknodeEndpointApiKey is not set`);
|
|
86
|
+
const quicknodeEndpointUrl = this.getQuicknodeUrl(chain_id);
|
|
87
|
+
const urlWithProtocol = rpcType === RpcType.HTTP ? quicknodeEndpointUrl : quicknodeEndpointUrl.replace("https://", "wss://");
|
|
88
|
+
console.log(`Quicknode url`, urlWithProtocol);
|
|
89
|
+
return { url: urlWithProtocol };
|
|
90
|
+
default:
|
|
91
|
+
throw new Error(`Invalid provider type ${providerType}`);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Backwards compatible with defualt ANKR provider if `providerType` is not passed as an arg
|
|
96
|
+
* Use `providerType` to choose the provider for HTTP rpc.
|
|
97
|
+
* Provider selection does not work for wss.
|
|
98
|
+
* Wss uses Ankr by default
|
|
99
|
+
* @param chainId
|
|
100
|
+
* @param rpcType
|
|
101
|
+
* @param providerType
|
|
102
|
+
* @returns
|
|
103
|
+
*/
|
|
104
|
+
this.getProvider = (chainId, rpcType, providerType = RpcProviderType.ANKR) => {
|
|
19
105
|
const chain_config = ChainManager_1.default.getInstance(this.config).getChainConfigForChainIdSync(parseInt(chainId));
|
|
20
106
|
if (!chain_config)
|
|
21
107
|
throw new Error("Chain configuration not found");
|
|
22
|
-
// TODO: Handle provider different than ankr
|
|
23
|
-
// const chainName = chainIdToName.getChainName(chainId as ChainId);
|
|
24
108
|
if (rpcType === RpcType.HTTP) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (!this.config.config.ankrApiKey)
|
|
28
|
-
throw new Error(this.RequireParameter("secret: ankrApiKey"));
|
|
29
|
-
const rpcUrl = `${chain_config.rpcBaseUrl}/${this.config.config.ankrApiKey}`;
|
|
30
|
-
return { provider: new ethers_1.ethers.JsonRpcProvider(rpcUrl), url: rpcUrl };
|
|
109
|
+
const { url } = this.getRpcUrlComponents(chainId, chain_config, rpcType, providerType);
|
|
110
|
+
return { provider: new ethers_1.ethers.JsonRpcProvider(url), url: url };
|
|
31
111
|
}
|
|
32
112
|
else if (rpcType === RpcType.WSS) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (!this.config.config.ankrApiKey)
|
|
36
|
-
throw new Error(this.RequireParameter("secret: ankrApiKey"));
|
|
37
|
-
const rpcUrl = `${chain_config.rpcBaseUrlWss}/${this.config.config.ankrApiKey}`;
|
|
38
|
-
return { provider: new ethers_1.ethers.WebSocketProvider(rpcUrl), url: rpcUrl };
|
|
113
|
+
const { url } = this.getRpcUrlComponents(chainId, chain_config, rpcType, providerType);
|
|
114
|
+
return { provider: new ethers_1.ethers.WebSocketProvider(url), url: url };
|
|
39
115
|
}
|
|
40
116
|
else {
|
|
41
|
-
throw new Error(`Invalid RPC type
|
|
117
|
+
throw new Error(`Invalid RPC type ${rpcType}`);
|
|
42
118
|
}
|
|
43
119
|
};
|
|
44
120
|
this.config = config;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
// wss: this.config.config.rpcEthereumWss || "",
|
|
56
|
-
// https: this.config.config.rpcEthereum
|
|
57
|
-
// },
|
|
58
|
-
// fantom: {
|
|
59
|
-
// wss: this.config.config.rpcFantomWss || "",
|
|
60
|
-
// https: this.config.config.rpcFantom
|
|
61
|
-
// },
|
|
62
|
-
// bsc: {
|
|
63
|
-
// wss: this.config.config.rpcBscWss || "",
|
|
64
|
-
// https: this.config.config.rpcBsc
|
|
65
|
-
// },
|
|
66
|
-
// avalanche: {
|
|
67
|
-
// wss: this.config.config.rpcAvalancheWss || "",
|
|
68
|
-
// https: this.config.config.rpcAvalanche
|
|
69
|
-
// },
|
|
70
|
-
// bitlayer: {
|
|
71
|
-
// wss: this.config.config.rpcBitlayerWss || "",
|
|
72
|
-
// https: this.config.config.rpcBitlayer
|
|
73
|
-
// },
|
|
74
|
-
// lightning: {
|
|
75
|
-
// wss: "",
|
|
76
|
-
// https: ""
|
|
77
|
-
// },
|
|
78
|
-
// solana: {
|
|
79
|
-
// wss: "",
|
|
80
|
-
// https: ""
|
|
81
|
-
// }
|
|
82
|
-
// }
|
|
121
|
+
const raw = config.config.quicknodeEndpointUrlPattern;
|
|
122
|
+
if (!raw)
|
|
123
|
+
throw new Error('quicknodeEndpointUrlPattern is required');
|
|
124
|
+
const parsed = new URL(raw);
|
|
125
|
+
if (parsed.protocol !== 'https:')
|
|
126
|
+
throw new Error('quicknodeEndpointUrlPattern must use https');
|
|
127
|
+
if (!parsed.hostname.endsWith('.quiknode.pro'))
|
|
128
|
+
throw new Error('quicknodeEndpointUrlPattern must be a quiknode.pro domain');
|
|
129
|
+
this.quicknodeEndpointBaseUrl = raw.replace(/\/+$/, '');
|
|
130
|
+
this.chainIdToQuicknodeNetworkName = new Map(Object.entries(quicknodeChainIdToName));
|
|
83
131
|
}
|
|
84
132
|
}
|
|
85
133
|
exports.default = Provider;
|
|
@@ -82,7 +82,10 @@
|
|
|
82
82
|
"decimals": 18,
|
|
83
83
|
"address": "0x0000000000000000000000000000000000000000",
|
|
84
84
|
"sweepThreshold": 0.004,
|
|
85
|
-
"sweepWalletMinBalance": 0.0002
|
|
85
|
+
"sweepWalletMinBalance": 0.0002,
|
|
86
|
+
"recommendedMinBalanceFundingWallet": 0.025,
|
|
87
|
+
"recommendedMinBalanceEscrow": 0.5,
|
|
88
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
86
89
|
},
|
|
87
90
|
{
|
|
88
91
|
"name": "Tether Token",
|
|
@@ -93,7 +96,10 @@
|
|
|
93
96
|
"decimals": 6,
|
|
94
97
|
"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
|
|
95
98
|
"sweepThreshold": 5,
|
|
96
|
-
"sweepWalletMinBalance": 1
|
|
99
|
+
"sweepWalletMinBalance": 1,
|
|
100
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
101
|
+
"recommendedMinBalanceEscrow": 100,
|
|
102
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
97
103
|
}
|
|
98
104
|
]
|
|
99
105
|
},
|
|
@@ -180,7 +186,10 @@
|
|
|
180
186
|
"decimals": 18,
|
|
181
187
|
"address": "0x0000000000000000000000000000000000000000",
|
|
182
188
|
"sweepThreshold": 0.008,
|
|
183
|
-
"sweepWalletMinBalance": 0.0002
|
|
189
|
+
"sweepWalletMinBalance": 0.0002,
|
|
190
|
+
"recommendedMinBalanceFundingWallet": 0.1,
|
|
191
|
+
"recommendedMinBalanceEscrow": 1,
|
|
192
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
184
193
|
},
|
|
185
194
|
{
|
|
186
195
|
"name": "Tether Token",
|
|
@@ -191,7 +200,10 @@
|
|
|
191
200
|
"decimals": 18,
|
|
192
201
|
"address": "0x55d398326f99059fF775485246999027B3197955",
|
|
193
202
|
"sweepThreshold": 5,
|
|
194
|
-
"sweepWalletMinBalance": 1
|
|
203
|
+
"sweepWalletMinBalance": 1,
|
|
204
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
205
|
+
"recommendedMinBalanceEscrow": 100,
|
|
206
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
195
207
|
}
|
|
196
208
|
]
|
|
197
209
|
},
|
|
@@ -276,7 +288,10 @@
|
|
|
276
288
|
"decimals": 9,
|
|
277
289
|
"address": "11111111111111111111111111111111",
|
|
278
290
|
"sweepThreshold": 0.05,
|
|
279
|
-
"sweepWalletMinBalance": 0.01
|
|
291
|
+
"sweepWalletMinBalance": 0.01,
|
|
292
|
+
"recommendedMinBalanceFundingWallet": 0.1,
|
|
293
|
+
"recommendedMinBalanceEscrow": 1,
|
|
294
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
280
295
|
},
|
|
281
296
|
{
|
|
282
297
|
"name": "Circle Token",
|
|
@@ -287,7 +302,10 @@
|
|
|
287
302
|
"decimals": 6,
|
|
288
303
|
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
|
289
304
|
"sweepThreshold": 1,
|
|
290
|
-
"sweepWalletMinBalance": 1
|
|
305
|
+
"sweepWalletMinBalance": 1,
|
|
306
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
307
|
+
"recommendedMinBalanceEscrow": 100,
|
|
308
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
291
309
|
}
|
|
292
310
|
]
|
|
293
311
|
},
|
|
@@ -374,7 +392,10 @@
|
|
|
374
392
|
"decimals": 18,
|
|
375
393
|
"address": "0x0000000000000000000000000000000000000000",
|
|
376
394
|
"sweepThreshold": 10,
|
|
377
|
-
"sweepWalletMinBalance": 0.1
|
|
395
|
+
"sweepWalletMinBalance": 0.1,
|
|
396
|
+
"recommendedMinBalanceFundingWallet": 50,
|
|
397
|
+
"recommendedMinBalanceEscrow": 1000,
|
|
398
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
378
399
|
},
|
|
379
400
|
{
|
|
380
401
|
"name": "Tether Token",
|
|
@@ -385,7 +406,10 @@
|
|
|
385
406
|
"decimals": 6,
|
|
386
407
|
"address": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F",
|
|
387
408
|
"sweepThreshold": 0,
|
|
388
|
-
"sweepWalletMinBalance": 1
|
|
409
|
+
"sweepWalletMinBalance": 1,
|
|
410
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
411
|
+
"recommendedMinBalanceEscrow": 100,
|
|
412
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
389
413
|
}
|
|
390
414
|
]
|
|
391
415
|
},
|
|
@@ -472,7 +496,10 @@
|
|
|
472
496
|
"address": "0x0000000000000000000000000000000000000000",
|
|
473
497
|
"isStableCoin": false,
|
|
474
498
|
"sweepThreshold": 10,
|
|
475
|
-
"sweepWalletMinBalance": 0.1
|
|
499
|
+
"sweepWalletMinBalance": 0.1,
|
|
500
|
+
"recommendedMinBalanceFundingWallet": 100,
|
|
501
|
+
"recommendedMinBalanceEscrow": 1000,
|
|
502
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
476
503
|
}
|
|
477
504
|
]
|
|
478
505
|
},
|
|
@@ -559,7 +586,10 @@
|
|
|
559
586
|
"decimals": 18,
|
|
560
587
|
"address": "0x0000000000000000000000000000000000000000",
|
|
561
588
|
"sweepThreshold": 0.05,
|
|
562
|
-
"sweepWalletMinBalance": 0.01
|
|
589
|
+
"sweepWalletMinBalance": 0.01,
|
|
590
|
+
"recommendedMinBalanceFundingWallet": 1,
|
|
591
|
+
"recommendedMinBalanceEscrow": 10,
|
|
592
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
563
593
|
},
|
|
564
594
|
{
|
|
565
595
|
"name": "Tether Token",
|
|
@@ -570,7 +600,10 @@
|
|
|
570
600
|
"decimals": 6,
|
|
571
601
|
"address": "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7",
|
|
572
602
|
"sweepThreshold": 5,
|
|
573
|
-
"sweepWalletMinBalance": 1
|
|
603
|
+
"sweepWalletMinBalance": 1,
|
|
604
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
605
|
+
"recommendedMinBalanceEscrow": 100,
|
|
606
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
574
607
|
}
|
|
575
608
|
]
|
|
576
609
|
},
|
|
@@ -632,7 +665,10 @@
|
|
|
632
665
|
"decimals": 6,
|
|
633
666
|
"address": "0000000000000000000000000000000000000000",
|
|
634
667
|
"sweepThreshold": 10,
|
|
635
|
-
"sweepWalletMinBalance": 6
|
|
668
|
+
"sweepWalletMinBalance": 6,
|
|
669
|
+
"recommendedMinBalanceFundingWallet": 333,
|
|
670
|
+
"recommendedMinBalanceEscrow": 0,
|
|
671
|
+
"recommendedMinBalanceRentEnergy": 50
|
|
636
672
|
},
|
|
637
673
|
{
|
|
638
674
|
"name": "Tether Token",
|
|
@@ -643,7 +679,10 @@
|
|
|
643
679
|
"decimals": 6,
|
|
644
680
|
"address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
|
|
645
681
|
"sweepThreshold": 5,
|
|
646
|
-
"sweepWalletMinBalance": 1
|
|
682
|
+
"sweepWalletMinBalance": 1,
|
|
683
|
+
"recommendedMinBalanceFundingWallet": 100,
|
|
684
|
+
"recommendedMinBalanceEscrow": 0,
|
|
685
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
647
686
|
}
|
|
648
687
|
]
|
|
649
688
|
},
|
|
@@ -82,7 +82,10 @@
|
|
|
82
82
|
"decimals": 18,
|
|
83
83
|
"address": "0x0000000000000000000000000000000000000000",
|
|
84
84
|
"sweepThreshold": 0.004,
|
|
85
|
-
"sweepWalletMinBalance": 0.0002
|
|
85
|
+
"sweepWalletMinBalance": 0.0002,
|
|
86
|
+
"recommendedMinBalanceFundingWallet": 0.025,
|
|
87
|
+
"recommendedMinBalanceEscrow": 0.5,
|
|
88
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
86
89
|
},
|
|
87
90
|
{
|
|
88
91
|
"name": "Tether Token",
|
|
@@ -93,7 +96,10 @@
|
|
|
93
96
|
"decimals": 6,
|
|
94
97
|
"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
|
|
95
98
|
"sweepThreshold": 4,
|
|
96
|
-
"sweepWalletMinBalance": 1
|
|
99
|
+
"sweepWalletMinBalance": 1,
|
|
100
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
101
|
+
"recommendedMinBalanceEscrow": 100,
|
|
102
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
97
103
|
},
|
|
98
104
|
{
|
|
99
105
|
"name": "Circle Token",
|
|
@@ -104,7 +110,10 @@
|
|
|
104
110
|
"decimals": 6,
|
|
105
111
|
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
|
|
106
112
|
"sweepThreshold": 4,
|
|
107
|
-
"sweepWalletMinBalance": 1
|
|
113
|
+
"sweepWalletMinBalance": 1,
|
|
114
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
115
|
+
"recommendedMinBalanceEscrow": 100,
|
|
116
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
108
117
|
},
|
|
109
118
|
{
|
|
110
119
|
"name": "PalmUSD",
|
|
@@ -115,7 +124,10 @@
|
|
|
115
124
|
"decimals": 6,
|
|
116
125
|
"address": "0xFAF0cEe6B20e2Aaa4B80748a6AF4CD89609a3d78",
|
|
117
126
|
"sweepThreshold": 1,
|
|
118
|
-
"sweepWalletMinBalance": 0.1
|
|
127
|
+
"sweepWalletMinBalance": 0.1,
|
|
128
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
129
|
+
"recommendedMinBalanceEscrow": 100,
|
|
130
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
119
131
|
}
|
|
120
132
|
]
|
|
121
133
|
},
|
|
@@ -202,7 +214,10 @@
|
|
|
202
214
|
"decimals": 18,
|
|
203
215
|
"address": "0x0000000000000000000000000000000000000000",
|
|
204
216
|
"sweepThreshold": 0.008,
|
|
205
|
-
"sweepWalletMinBalance": 0.0002
|
|
217
|
+
"sweepWalletMinBalance": 0.0002,
|
|
218
|
+
"recommendedMinBalanceFundingWallet": 0.1,
|
|
219
|
+
"recommendedMinBalanceEscrow": 1,
|
|
220
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
206
221
|
},
|
|
207
222
|
{
|
|
208
223
|
"name": "Tether Token",
|
|
@@ -213,7 +228,10 @@
|
|
|
213
228
|
"decimals": 18,
|
|
214
229
|
"address": "0x55d398326f99059fF775485246999027B3197955",
|
|
215
230
|
"sweepThreshold": 5,
|
|
216
|
-
"sweepWalletMinBalance": 1
|
|
231
|
+
"sweepWalletMinBalance": 1,
|
|
232
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
233
|
+
"recommendedMinBalanceEscrow": 100,
|
|
234
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
217
235
|
}
|
|
218
236
|
]
|
|
219
237
|
},
|
|
@@ -300,7 +318,10 @@
|
|
|
300
318
|
"decimals": 9,
|
|
301
319
|
"address": "11111111111111111111111111111111",
|
|
302
320
|
"sweepThreshold": 0.05,
|
|
303
|
-
"sweepWalletMinBalance": 0.01
|
|
321
|
+
"sweepWalletMinBalance": 0.01,
|
|
322
|
+
"recommendedMinBalanceFundingWallet": 0.1,
|
|
323
|
+
"recommendedMinBalanceEscrow": 1,
|
|
324
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
304
325
|
},
|
|
305
326
|
{
|
|
306
327
|
"name": "Circle Token",
|
|
@@ -311,7 +332,10 @@
|
|
|
311
332
|
"decimals": 6,
|
|
312
333
|
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
|
313
334
|
"sweepThreshold": 1,
|
|
314
|
-
"sweepWalletMinBalance": 1
|
|
335
|
+
"sweepWalletMinBalance": 1,
|
|
336
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
337
|
+
"recommendedMinBalanceEscrow": 100,
|
|
338
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
315
339
|
},
|
|
316
340
|
{
|
|
317
341
|
"name": "PalmUSD",
|
|
@@ -322,7 +346,10 @@
|
|
|
322
346
|
"decimals": 6,
|
|
323
347
|
"address": "CZzgUBvxaMLwMhVSLgqJn3npmxoTo6nzMNQPAnwtHF3s",
|
|
324
348
|
"sweepThreshold": 1,
|
|
325
|
-
"sweepWalletMinBalance": 0.1
|
|
349
|
+
"sweepWalletMinBalance": 0.1,
|
|
350
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
351
|
+
"recommendedMinBalanceEscrow": 100,
|
|
352
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
326
353
|
}
|
|
327
354
|
]
|
|
328
355
|
},
|
|
@@ -409,7 +436,10 @@
|
|
|
409
436
|
"decimals": 18,
|
|
410
437
|
"address": "0x0000000000000000000000000000000000000000",
|
|
411
438
|
"sweepThreshold": 10,
|
|
412
|
-
"sweepWalletMinBalance": 0.1
|
|
439
|
+
"sweepWalletMinBalance": 0.1,
|
|
440
|
+
"recommendedMinBalanceFundingWallet": 50,
|
|
441
|
+
"recommendedMinBalanceEscrow": 1000,
|
|
442
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
413
443
|
},
|
|
414
444
|
{
|
|
415
445
|
"name": "Tether Token",
|
|
@@ -420,7 +450,10 @@
|
|
|
420
450
|
"decimals": 6,
|
|
421
451
|
"address": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F",
|
|
422
452
|
"sweepThreshold": 0,
|
|
423
|
-
"sweepWalletMinBalance": 1
|
|
453
|
+
"sweepWalletMinBalance": 1,
|
|
454
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
455
|
+
"recommendedMinBalanceEscrow": 100,
|
|
456
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
424
457
|
}
|
|
425
458
|
]
|
|
426
459
|
},
|
|
@@ -507,7 +540,10 @@
|
|
|
507
540
|
"address": "0x0000000000000000000000000000000000000000",
|
|
508
541
|
"isStableCoin": false,
|
|
509
542
|
"sweepThreshold": 10,
|
|
510
|
-
"sweepWalletMinBalance": 0.1
|
|
543
|
+
"sweepWalletMinBalance": 0.1,
|
|
544
|
+
"recommendedMinBalanceFundingWallet": 100,
|
|
545
|
+
"recommendedMinBalanceEscrow": 1000,
|
|
546
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
511
547
|
}
|
|
512
548
|
]
|
|
513
549
|
},
|
|
@@ -594,7 +630,10 @@
|
|
|
594
630
|
"decimals": 18,
|
|
595
631
|
"address": "0x0000000000000000000000000000000000000000",
|
|
596
632
|
"sweepThreshold": 0.05,
|
|
597
|
-
"sweepWalletMinBalance": 0.01
|
|
633
|
+
"sweepWalletMinBalance": 0.01,
|
|
634
|
+
"recommendedMinBalanceFundingWallet": 1,
|
|
635
|
+
"recommendedMinBalanceEscrow": 10,
|
|
636
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
598
637
|
},
|
|
599
638
|
{
|
|
600
639
|
"name": "Tether Token",
|
|
@@ -605,7 +644,10 @@
|
|
|
605
644
|
"decimals": 6,
|
|
606
645
|
"address": "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7",
|
|
607
646
|
"sweepThreshold": 4,
|
|
608
|
-
"sweepWalletMinBalance": 1
|
|
647
|
+
"sweepWalletMinBalance": 1,
|
|
648
|
+
"recommendedMinBalanceFundingWallet": 0,
|
|
649
|
+
"recommendedMinBalanceEscrow": 100,
|
|
650
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
609
651
|
}
|
|
610
652
|
]
|
|
611
653
|
},
|
|
@@ -669,7 +711,10 @@
|
|
|
669
711
|
"decimals": 6,
|
|
670
712
|
"address": "0000000000000000000000000000000000000000",
|
|
671
713
|
"sweepThreshold": 10,
|
|
672
|
-
"sweepWalletMinBalance": 6
|
|
714
|
+
"sweepWalletMinBalance": 6,
|
|
715
|
+
"recommendedMinBalanceFundingWallet": 333,
|
|
716
|
+
"recommendedMinBalanceEscrow": 0,
|
|
717
|
+
"recommendedMinBalanceRentEnergy": 50
|
|
673
718
|
},
|
|
674
719
|
{
|
|
675
720
|
"name": "Tether Token",
|
|
@@ -680,7 +725,10 @@
|
|
|
680
725
|
"decimals": 6,
|
|
681
726
|
"address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
|
|
682
727
|
"sweepThreshold": 5,
|
|
683
|
-
"sweepWalletMinBalance": 1
|
|
728
|
+
"sweepWalletMinBalance": 1,
|
|
729
|
+
"recommendedMinBalanceFundingWallet": 100,
|
|
730
|
+
"recommendedMinBalanceEscrow": 0,
|
|
731
|
+
"recommendedMinBalanceRentEnergy": 0
|
|
684
732
|
}
|
|
685
733
|
]
|
|
686
734
|
},
|