@cryptorubic/web3 1.0.0-alpha.no-sdk.38 → 1.0.0-alpha.no-sdk.39
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/package.json
CHANGED
|
@@ -31,6 +31,7 @@ export declare class TronAdapter extends AbstractAdapter<TronWeb, TronWeb, TronB
|
|
|
31
31
|
*/
|
|
32
32
|
private getTransactionInfo;
|
|
33
33
|
getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
|
|
34
|
+
private batchMulticallTokenBalance;
|
|
34
35
|
multicallContractsMethods<Output extends TronWeb3PrimitiveType>(contractAbi: any, contractsData: {
|
|
35
36
|
contractAddress: string;
|
|
36
37
|
methodsData: MethodData[];
|
|
@@ -51,21 +51,13 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
51
51
|
return this.public.trx.getTransactionInfo(hash);
|
|
52
52
|
}
|
|
53
53
|
async getTokensBalances(userAddress, tokensAddresses) {
|
|
54
|
-
const indexOfNativeCoin = tokensAddresses.findIndex((
|
|
54
|
+
const indexOfNativeCoin = tokensAddresses.findIndex((tokenAddress) => web3_pure_1.Web3Pure.isNativeAddress(core_1.BLOCKCHAIN_NAME.TRON, tokenAddress));
|
|
55
55
|
const promises = [];
|
|
56
56
|
if (indexOfNativeCoin !== -1) {
|
|
57
57
|
tokensAddresses.splice(indexOfNativeCoin, 1);
|
|
58
58
|
promises[1] = this.getBalance(userAddress);
|
|
59
59
|
}
|
|
60
|
-
promises[0] = this.
|
|
61
|
-
contractAddress: tokenAddress,
|
|
62
|
-
methodsData: [
|
|
63
|
-
{
|
|
64
|
-
methodArguments: [userAddress],
|
|
65
|
-
methodName: 'balanceOf'
|
|
66
|
-
}
|
|
67
|
-
]
|
|
68
|
-
})));
|
|
60
|
+
promises[0] = this.batchMulticallTokenBalance(userAddress, tokensAddresses, 10);
|
|
69
61
|
const results = await Promise.all(promises);
|
|
70
62
|
const tokensBalances = results[0].map((tokenResults) => {
|
|
71
63
|
const { success, output } = tokenResults[0];
|
|
@@ -76,6 +68,34 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
76
68
|
}
|
|
77
69
|
return tokensBalances;
|
|
78
70
|
}
|
|
71
|
+
async batchMulticallTokenBalance(userAddress, tokensAddresses, batchSize) {
|
|
72
|
+
if (tokensAddresses.length > 100) {
|
|
73
|
+
const balances = [];
|
|
74
|
+
for (let i = 0; i < tokensAddresses.length; i += batchSize) {
|
|
75
|
+
const batchRequest = tokensAddresses.slice(i, i + batchSize);
|
|
76
|
+
const batchResult = await this.multicallContractsMethods(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, batchRequest.map((tokenAddress) => ({
|
|
77
|
+
contractAddress: tokenAddress,
|
|
78
|
+
methodsData: [
|
|
79
|
+
{
|
|
80
|
+
methodName: 'balanceOf',
|
|
81
|
+
methodArguments: [userAddress]
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
})));
|
|
85
|
+
balances.push(...batchResult);
|
|
86
|
+
}
|
|
87
|
+
return balances;
|
|
88
|
+
}
|
|
89
|
+
return this.multicallContractsMethods(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokensAddresses.map((tokenAddress) => ({
|
|
90
|
+
contractAddress: tokenAddress,
|
|
91
|
+
methodsData: [
|
|
92
|
+
{
|
|
93
|
+
methodName: 'balanceOf',
|
|
94
|
+
methodArguments: [userAddress]
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
})));
|
|
98
|
+
}
|
|
79
99
|
async multicallContractsMethods(contractAbi, contractsData) {
|
|
80
100
|
const calls = contractsData.map(({ contractAddress, methodsData }) => {
|
|
81
101
|
return methodsData.map(({ methodName, methodArguments }) => [
|
|
@@ -101,7 +121,10 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
101
121
|
};
|
|
102
122
|
}));
|
|
103
123
|
}
|
|
104
|
-
catch {
|
|
124
|
+
catch (err) {
|
|
125
|
+
this.logger
|
|
126
|
+
? this.logger.customError('[TronAdapter_multicallContractsMethods] Error: ', err)
|
|
127
|
+
: console.debug('[TronAdapter_multicallContractsMethods] Error:', err);
|
|
105
128
|
return this.multicallContractsMethodsByOne(contractAbi, contractsData);
|
|
106
129
|
}
|
|
107
130
|
}
|