@cryptorubic/web3 0.0.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.
Files changed (113) hide show
  1. package/README.md +1 -0
  2. package/package.json +17 -0
  3. package/src/index.d.ts +25 -0
  4. package/src/index.js +27 -0
  5. package/src/index.js.map +1 -0
  6. package/src/lib/adapter/adapters/abstract-adapter.d.ts +19 -0
  7. package/src/lib/adapter/adapters/abstract-adapter.js +50 -0
  8. package/src/lib/adapter/adapters/abstract-adapter.js.map +1 -0
  9. package/src/lib/adapter/adapters/constants/erc20-token-abi.d.ts +2 -0
  10. package/src/lib/adapter/adapters/constants/erc20-token-abi.js +87 -0
  11. package/src/lib/adapter/adapters/constants/erc20-token-abi.js.map +1 -0
  12. package/src/lib/adapter/adapters/constants/trc-20-contract-abi.d.ts +12 -0
  13. package/src/lib/adapter/adapters/constants/trc-20-contract-abi.js +85 -0
  14. package/src/lib/adapter/adapters/constants/trc-20-contract-abi.js.map +1 -0
  15. package/src/lib/adapter/adapters/constants/tron-multicall-abi.d.ts +2 -0
  16. package/src/lib/adapter/adapters/constants/tron-multicall-abi.js +27 -0
  17. package/src/lib/adapter/adapters/constants/tron-multicall-abi.js.map +1 -0
  18. package/src/lib/adapter/adapters/evm-adapter.d.ts +20 -0
  19. package/src/lib/adapter/adapters/evm-adapter.js +208 -0
  20. package/src/lib/adapter/adapters/evm-adapter.js.map +1 -0
  21. package/src/lib/adapter/adapters/models/evm-adapter-options.d.ts +6 -0
  22. package/src/lib/adapter/adapters/models/evm-adapter-options.js +3 -0
  23. package/src/lib/adapter/adapters/models/evm-adapter-options.js.map +1 -0
  24. package/src/lib/adapter/adapters/solana-adapter.d.ts +15 -0
  25. package/src/lib/adapter/adapters/solana-adapter.js +60 -0
  26. package/src/lib/adapter/adapters/solana-adapter.js.map +1 -0
  27. package/src/lib/adapter/adapters/tron-adapter.d.ts +25 -0
  28. package/src/lib/adapter/adapters/tron-adapter.js +190 -0
  29. package/src/lib/adapter/adapters/tron-adapter.js.map +1 -0
  30. package/src/lib/adapter/blockchain-adapter-factory.service.d.ts +19 -0
  31. package/src/lib/adapter/blockchain-adapter-factory.service.js +86 -0
  32. package/src/lib/adapter/blockchain-adapter-factory.service.js.map +1 -0
  33. package/src/lib/adapter/constants/chain-configs/chain-configs.d.ts +3 -0
  34. package/src/lib/adapter/constants/chain-configs/chain-configs.js +1040 -0
  35. package/src/lib/adapter/constants/chain-configs/chain-configs.js.map +1 -0
  36. package/src/lib/adapter/constants/models/solana-web3.d.ts +26 -0
  37. package/src/lib/adapter/constants/models/solana-web3.js +3 -0
  38. package/src/lib/adapter/constants/models/solana-web3.js.map +1 -0
  39. package/src/lib/adapter/constants/models/viem-chain-type.d.ts +2 -0
  40. package/src/lib/adapter/constants/models/viem-chain-type.js +3 -0
  41. package/src/lib/adapter/constants/models/viem-chain-type.js.map +1 -0
  42. package/src/lib/adapter/constants/models/wallet-provider.d.ts +28 -0
  43. package/src/lib/adapter/constants/models/wallet-provider.js +4 -0
  44. package/src/lib/adapter/constants/models/wallet-provider.js.map +1 -0
  45. package/src/lib/adapter/constants/viem-blockchain-mapping.d.ts +3 -0
  46. package/src/lib/adapter/constants/viem-blockchain-mapping.js +74 -0
  47. package/src/lib/adapter/constants/viem-blockchain-mapping.js.map +1 -0
  48. package/src/lib/utils/constants/changenow-api-blockchain.d.ts +123 -0
  49. package/src/lib/utils/constants/changenow-api-blockchain.js +109 -0
  50. package/src/lib/utils/constants/changenow-api-blockchain.js.map +1 -0
  51. package/src/lib/utils/constants/web3-pure-store.d.ts +3 -0
  52. package/src/lib/utils/constants/web3-pure-store.js +335 -0
  53. package/src/lib/utils/constants/web3-pure-store.js.map +1 -0
  54. package/src/lib/utils/models/abi-types.d.ts +26 -0
  55. package/src/lib/utils/models/abi-types.js +3 -0
  56. package/src/lib/utils/models/abi-types.js.map +1 -0
  57. package/src/lib/utils/models/cn-validation-response.d.ts +5 -0
  58. package/src/lib/utils/models/cn-validation-response.js +3 -0
  59. package/src/lib/utils/models/cn-validation-response.js.map +1 -0
  60. package/src/lib/utils/models/contract-multicall-response.d.ts +5 -0
  61. package/src/lib/utils/models/contract-multicall-response.js +3 -0
  62. package/src/lib/utils/models/contract-multicall-response.js.map +1 -0
  63. package/src/lib/utils/models/evm-transaction-config.d.ts +9 -0
  64. package/src/lib/utils/models/evm-transaction-config.js +3 -0
  65. package/src/lib/utils/models/evm-transaction-config.js.map +1 -0
  66. package/src/lib/utils/models/method-data.d.ts +4 -0
  67. package/src/lib/utils/models/method-data.js +3 -0
  68. package/src/lib/utils/models/method-data.js.map +1 -0
  69. package/src/lib/utils/models/primitive-types.d.ts +7 -0
  70. package/src/lib/utils/models/primitive-types.js +3 -0
  71. package/src/lib/utils/models/primitive-types.js.map +1 -0
  72. package/src/lib/utils/models/tron-block.d.ts +7 -0
  73. package/src/lib/utils/models/tron-block.js +3 -0
  74. package/src/lib/utils/models/tron-block.js.map +1 -0
  75. package/src/lib/utils/models/tron-call.d.ts +5 -0
  76. package/src/lib/utils/models/tron-call.js +3 -0
  77. package/src/lib/utils/models/tron-call.js.map +1 -0
  78. package/src/lib/utils/models/tron-multicall-response.d.ts +4 -0
  79. package/src/lib/utils/models/tron-multicall-response.js +3 -0
  80. package/src/lib/utils/models/tron-multicall-response.js.map +1 -0
  81. package/src/lib/utils/models/tron-parameters.d.ts +4 -0
  82. package/src/lib/utils/models/tron-parameters.js +3 -0
  83. package/src/lib/utils/models/tron-parameters.js.map +1 -0
  84. package/src/lib/utils/models/tron-transaction-config.d.ts +6 -0
  85. package/src/lib/utils/models/tron-transaction-config.js +3 -0
  86. package/src/lib/utils/models/tron-transaction-config.js.map +1 -0
  87. package/src/lib/utils/models/tron-transaction-info.d.ts +15 -0
  88. package/src/lib/utils/models/tron-transaction-info.js +3 -0
  89. package/src/lib/utils/models/tron-transaction-info.js.map +1 -0
  90. package/src/lib/utils/web3-pure.d.ts +16 -0
  91. package/src/lib/utils/web3-pure.js +46 -0
  92. package/src/lib/utils/web3-pure.js.map +1 -0
  93. package/src/lib/utils/web3-types/bitcoin-web3-pure.d.ts +5 -0
  94. package/src/lib/utils/web3-types/bitcoin-web3-pure.js +15 -0
  95. package/src/lib/utils/web3-types/bitcoin-web3-pure.js.map +1 -0
  96. package/src/lib/utils/web3-types/common-web3-pure.d.ts +15 -0
  97. package/src/lib/utils/web3-types/common-web3-pure.js +47 -0
  98. package/src/lib/utils/web3-types/common-web3-pure.js.map +1 -0
  99. package/src/lib/utils/web3-types/evm-web3-pure.d.ts +5 -0
  100. package/src/lib/utils/web3-types/evm-web3-pure.js +15 -0
  101. package/src/lib/utils/web3-types/evm-web3-pure.js.map +1 -0
  102. package/src/lib/utils/web3-types/icp-web3-pure.d.ts +6 -0
  103. package/src/lib/utils/web3-types/icp-web3-pure.js +29 -0
  104. package/src/lib/utils/web3-types/icp-web3-pure.js.map +1 -0
  105. package/src/lib/utils/web3-types/solana-web3-pure.d.ts +5 -0
  106. package/src/lib/utils/web3-types/solana-web3-pure.js +16 -0
  107. package/src/lib/utils/web3-types/solana-web3-pure.js.map +1 -0
  108. package/src/lib/utils/web3-types/ton-web3-pure.d.ts +4 -0
  109. package/src/lib/utils/web3-types/ton-web3-pure.js +13 -0
  110. package/src/lib/utils/web3-types/ton-web3-pure.js.map +1 -0
  111. package/src/lib/utils/web3-types/tron-web3-pure.d.ts +38 -0
  112. package/src/lib/utils/web3-types/tron-web3-pure.js +117 -0
  113. package/src/lib/utils/web3-types/tron-web3-pure.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm-adapter-options.js","sourceRoot":"","sources":["../../../../../../../../packages/web3/src/lib/adapter/adapters/models/evm-adapter-options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { Abi, MulticallResponse, MulticallParameters } from 'viem';
2
+ import { AbstractAdapter } from './abstract-adapter';
3
+ import { Connection } from "@solana/web3.js";
4
+ import { ICustomLogger, SolanaBlockchainName, Token } from "@cryptorubic/core";
5
+ import { EvmTransactionConfig } from "../../utils/models/evm-transaction-config";
6
+ export declare class SolanaAdapter extends AbstractAdapter<Connection, Connection, SolanaBlockchainName> {
7
+ constructor(rpcList: string[], logger?: ICustomLogger);
8
+ private createPublicClient;
9
+ read<T>(_address: string, _abi: Abi, _method: string, _methodArgs?: unknown[]): Promise<T>;
10
+ write<T>(_address: string, _abi: Abi, _method: string, _methodArgs?: unknown[]): Promise<T>;
11
+ multicallByContract<T>(_contracts: MulticallParameters, _allowErrors?: boolean): Promise<MulticallResponse<T>[]>;
12
+ multicallByAddress<T>(_address: string, _abi: Abi, _method: string, _methodArgs?: unknown[][], _allowErrors?: boolean): Promise<MulticallResponse<T>[]>;
13
+ simulateTransaction(_config: EvmTransactionConfig, _from: string): Promise<void>;
14
+ callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<SolanaBlockchainName>[]>;
15
+ }
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SolanaAdapter = void 0;
4
+ const abstract_adapter_1 = require("./abstract-adapter");
5
+ const web3_js_1 = require("@solana/web3.js");
6
+ const utl_sdk_1 = require("@solflare-wallet/utl-sdk");
7
+ const core_1 = require("@cryptorubic/core");
8
+ const web3_pure_1 = require("../../utils/web3-pure");
9
+ class SolanaAdapter extends abstract_adapter_1.AbstractAdapter {
10
+ constructor(rpcList, logger) {
11
+ super(core_1.BLOCKCHAIN_NAME.SOLANA, logger);
12
+ this.public = this.createPublicClient(rpcList);
13
+ }
14
+ createPublicClient(rpcList) {
15
+ if (!rpcList?.[0]) {
16
+ this.logger?.customError('RPC list is empty');
17
+ return null;
18
+ }
19
+ else {
20
+ return new web3_js_1.Connection(rpcList[0], 'confirmed');
21
+ }
22
+ }
23
+ async read(_address, _abi, _method, _methodArgs = []) {
24
+ throw new Error('Method multicall is not supported');
25
+ }
26
+ async write(_address, _abi, _method, _methodArgs = []) {
27
+ throw new Error('Method multicall is not supported');
28
+ }
29
+ async multicallByContract(_contracts, _allowErrors = true) {
30
+ throw new Error('Method multicall is not supported');
31
+ }
32
+ async multicallByAddress(_address, _abi, _method, _methodArgs = [], _allowErrors = true) {
33
+ throw new Error('Method multicall is not supported');
34
+ }
35
+ async simulateTransaction(_config, _from) { }
36
+ async callForTokensInfo(tokenAddresses) {
37
+ const nativeTokenIndex = tokenAddresses.findIndex((address) => web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.SOLANA, address));
38
+ const filteredTokenAddresses = tokenAddresses.filter((_, index) => index !== nativeTokenIndex);
39
+ const mints = filteredTokenAddresses.map((address) => new web3_js_1.PublicKey(address));
40
+ const tokenSdk = new utl_sdk_1.Client();
41
+ const tokensMint = await tokenSdk.fetchMints(mints);
42
+ const tokens = tokensMint.map((token) => {
43
+ return new core_1.Token({
44
+ address: token.address.toString(),
45
+ blockchain: core_1.BLOCKCHAIN_NAME.SOLANA,
46
+ decimals: token.decimals,
47
+ name: token.name,
48
+ symbol: token.symbol
49
+ });
50
+ });
51
+ if (nativeTokenIndex === -1) {
52
+ return tokens;
53
+ }
54
+ const blockchainNativeToken = core_1.nativeTokensList[core_1.BLOCKCHAIN_NAME.SOLANA];
55
+ tokens.splice(nativeTokenIndex, 0, blockchainNativeToken);
56
+ return tokens;
57
+ }
58
+ }
59
+ exports.SolanaAdapter = SolanaAdapter;
60
+ //# sourceMappingURL=solana-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-adapter.js","sourceRoot":"","sources":["../../../../../../../packages/web3/src/lib/adapter/adapters/solana-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { AbstractAdapter } from './abstract-adapter';
3
+ import { ContractMulticallResponse, MethodData, TronWeb3PrimitiveType } from "@cryptorubic/tron-types";
4
+ import { TronWeb } from 'tronweb';
5
+ import { AbiFragment } from "tronweb/lib/commonjs/types";
6
+ import { ICustomLogger, Token, TronBlockchainName } from "@cryptorubic/core";
7
+ export declare class TronAdapter extends AbstractAdapter<TronWeb, TronWeb, TronBlockchainName> {
8
+ private readonly multicallAddress;
9
+ needPreswapAction(contractAddress: string, tokenAddress: string, walletAddress: string, amount: string): Promise<boolean>;
10
+ constructor(rpcList: string[], logger?: ICustomLogger);
11
+ multicallContractsMethods<Output extends TronWeb3PrimitiveType>(contractAbi: readonly AbiFragment[], contractsData: {
12
+ contractAddress: string;
13
+ methodsData: MethodData[];
14
+ }[]): Promise<ContractMulticallResponse<Output>[][]>;
15
+ private multicall;
16
+ callContractMethod<T extends TronWeb3PrimitiveType = string>(contractAddress: string, contractAbi: readonly AbiFragment[], methodName: string, methodArguments?: unknown[]): Promise<T>;
17
+ private multicallContractsMethodsByOne;
18
+ getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
19
+ callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token[]>;
20
+ getBalance(userAddress: string, tokenAddress?: string): Promise<BigNumber>;
21
+ getTokenBalance(userAddress: string, tokenAddress: string): Promise<BigNumber>;
22
+ convertTronAddressToHex(address: string): Promise<string>;
23
+ read<T>(): Promise<T>;
24
+ write(): Promise<string>;
25
+ }
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TronAdapter = void 0;
4
+ const bignumber_js_1 = require("bignumber.js");
5
+ const trc_20_contract_abi_1 = require("./constants/trc-20-contract-abi");
6
+ const tron_multicall_abi_1 = require("./constants/tron-multicall-abi");
7
+ const abstract_adapter_1 = require("./abstract-adapter");
8
+ const tronweb_1 = require("tronweb");
9
+ const core_1 = require("@cryptorubic/core");
10
+ const web3_pure_1 = require("../../utils/web3-pure");
11
+ const tron_web3_pure_1 = require("../../utils/web3-types/tron-web3-pure");
12
+ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
13
+ async needPreswapAction(contractAddress, tokenAddress, walletAddress, amount) {
14
+ // this.checkWalletConnected();
15
+ const isNative = web3_pure_1.Web3Pure.isNativeAddress(this.blockchain, tokenAddress);
16
+ if (isNative) {
17
+ return false;
18
+ }
19
+ try {
20
+ const contract = await this.public.contract(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokenAddress);
21
+ const allowance = await contract
22
+ // @ts-ignore
23
+ .allowance(walletAddress, contractAddress)
24
+ .call();
25
+ const bnAllowance = new bignumber_js_1.default(allowance?.toString());
26
+ return bnAllowance?.gt(amount);
27
+ }
28
+ catch (err) {
29
+ console.error(err);
30
+ return false;
31
+ }
32
+ }
33
+ constructor(rpcList, logger) {
34
+ super(core_1.BLOCKCHAIN_NAME.TRON, logger);
35
+ this.multicallAddress = 'T9ziQU4EBteJzjzMzhHELdhgWFqwzS5Vki';
36
+ this.public = new tronweb_1.TronWeb({ fullHost: rpcList[0] });
37
+ }
38
+ async multicallContractsMethods(contractAbi, contractsData) {
39
+ const calls = contractsData.map(({ contractAddress, methodsData }) => {
40
+ return methodsData.map(({ methodName, methodArguments }) => [
41
+ contractAddress,
42
+ tron_web3_pure_1.TronWeb3Pure.encodeFunctionCall(contractAbi, methodName, methodArguments)
43
+ ]);
44
+ });
45
+ try {
46
+ const outputs = await this.multicall(calls.flat());
47
+ let outputIndex = 0;
48
+ return contractsData.map((contractData) => contractData.methodsData.map((methodData) => {
49
+ const success = outputs.results[outputIndex];
50
+ const returnData = outputs.returnData[outputIndex];
51
+ outputIndex++;
52
+ // @ts-ignore
53
+ const methodOutputAbi = contractAbi.find((funcSignature) => funcSignature.name === methodData.methodName).outputs;
54
+ return {
55
+ output: success ? tron_web3_pure_1.TronWeb3Pure.decodeMethodOutput(methodOutputAbi, returnData) : null,
56
+ success
57
+ };
58
+ }));
59
+ }
60
+ catch {
61
+ return this.multicallContractsMethodsByOne(contractAbi, contractsData);
62
+ }
63
+ }
64
+ async multicall(calls) {
65
+ this.public.setAddress(this.multicallAddress);
66
+ const contract = await this.public.contract(tron_multicall_abi_1.TRON_MULTICALL_ABI, this.multicallAddress);
67
+ // @ts-ignore
68
+ return contract.aggregateViewCalls(calls).call();
69
+ }
70
+ async callContractMethod(contractAddress, contractAbi, methodName, methodArguments = []) {
71
+ this.public.setAddress(contractAddress);
72
+ const contract = await this.public.contract(contractAbi, contractAddress);
73
+ const response = await contract[methodName](...methodArguments).call();
74
+ return tron_web3_pure_1.TronWeb3Pure.flattenParameterToPrimitive(response);
75
+ }
76
+ multicallContractsMethodsByOne(contractAbi, contractsData) {
77
+ return Promise.all(contractsData.map((contractData) => {
78
+ return Promise.all(contractData.methodsData.map(async (methodData) => {
79
+ try {
80
+ const output = (await this.callContractMethod(contractData.contractAddress, contractAbi, methodData.methodName, methodData.methodArguments));
81
+ return {
82
+ output,
83
+ success: true
84
+ };
85
+ }
86
+ catch {
87
+ return {
88
+ output: null,
89
+ success: false
90
+ };
91
+ }
92
+ }));
93
+ }));
94
+ }
95
+ async getTokensBalances(userAddress, tokensAddresses) {
96
+ const indexOfNativeCoin = tokensAddresses.findIndex((address) => web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.TRON, address));
97
+ const promises = [];
98
+ if (indexOfNativeCoin !== -1) {
99
+ tokensAddresses.splice(indexOfNativeCoin, 1);
100
+ promises[1] = this.getBalance(userAddress);
101
+ }
102
+ promises[0] = this.multicallContractsMethods(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokensAddresses.map((tokenAddress) => ({
103
+ contractAddress: tokenAddress,
104
+ methodsData: [
105
+ {
106
+ methodArguments: [userAddress],
107
+ methodName: 'balanceOf'
108
+ }
109
+ ]
110
+ })));
111
+ const results = await Promise.all(promises);
112
+ const tokensBalances = results[0].map((tokenResults) => {
113
+ const { success, output } = tokenResults[0];
114
+ return success ? new bignumber_js_1.default(output) : new bignumber_js_1.default(0);
115
+ });
116
+ if (indexOfNativeCoin !== -1) {
117
+ tokensBalances.splice(indexOfNativeCoin, 0, results[1]);
118
+ }
119
+ return tokensBalances;
120
+ }
121
+ async callForTokensInfo(tokenAddresses) {
122
+ const tokenFields = ['decimals', 'symbol', 'name'];
123
+ const nativeTokenIndex = tokenAddresses.findIndex((address) => web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.TRON, address));
124
+ const filteredTokenAddresses = tokenAddresses.filter((_, index) => index !== nativeTokenIndex);
125
+ const contractsData = filteredTokenAddresses.map((contractAddress) => ({
126
+ contractAddress,
127
+ methodsData: tokenFields.map((methodName) => ({
128
+ methodArguments: [],
129
+ methodName
130
+ }))
131
+ }));
132
+ const results = contractsData.length ? await this.multicallContractsMethods(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, contractsData) : [];
133
+ const tokens = results.map((tokenFieldsResults, tokenIndex) => {
134
+ const tokenAddress = tokenAddresses[tokenIndex];
135
+ const possibleToken = tokenFieldsResults.reduce((acc, field, fieldIndex) => {
136
+ if (!field.success) {
137
+ throw new Error(`Cannot retrieve information about ${tokenAddress}`);
138
+ }
139
+ return {
140
+ ...acc,
141
+ [tokenFields[fieldIndex]]: field.success ? field.output : undefined
142
+ };
143
+ }, {});
144
+ return new core_1.Token({
145
+ address: tokenAddress,
146
+ blockchain: core_1.BLOCKCHAIN_NAME.TRON,
147
+ decimals: Number(possibleToken?.decimals),
148
+ name: possibleToken?.name,
149
+ symbol: possibleToken?.symbol
150
+ });
151
+ });
152
+ if (nativeTokenIndex === -1) {
153
+ return tokens;
154
+ }
155
+ const blockchainNativeToken = core_1.nativeTokensList[core_1.BLOCKCHAIN_NAME.TRON];
156
+ tokens.splice(nativeTokenIndex, 0, blockchainNativeToken);
157
+ return tokens;
158
+ }
159
+ async getBalance(userAddress, tokenAddress) {
160
+ let balance;
161
+ if (tokenAddress && !web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.TRON, tokenAddress)) {
162
+ balance = await this.getTokenBalance(userAddress, tokenAddress);
163
+ }
164
+ else {
165
+ this.public.setAddress(userAddress);
166
+ balance = await this.public.trx.getBalance(userAddress);
167
+ }
168
+ return new bignumber_js_1.default(balance);
169
+ }
170
+ async getTokenBalance(userAddress, tokenAddress) {
171
+ this.public.setAddress(userAddress);
172
+ const contract = await this.public.contract(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokenAddress);
173
+ // @ts-ignore
174
+ const balance = await contract.balanceOf(userAddress).call();
175
+ return new bignumber_js_1.default(balance?.toString());
176
+ }
177
+ async convertTronAddressToHex(address) {
178
+ return this.public.address.toHex(address);
179
+ }
180
+ read() {
181
+ throw new Error('Method is not implemented');
182
+ }
183
+ ;
184
+ write() {
185
+ throw new Error('Method is not implemented');
186
+ }
187
+ ;
188
+ }
189
+ exports.TronAdapter = TronAdapter;
190
+ //# sourceMappingURL=tron-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tron-adapter.js","sourceRoot":"","sources":["../../../../../../../packages/web3/src/lib/adapter/adapters/tron-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { EvmAdapter } from './adapters/evm-adapter';
2
+ import { SolanaAdapter } from './adapters/solana-adapter';
3
+ import { TronAdapter } from './adapters/tron-adapter';
4
+ import { AbstractAdapter } from './adapters/abstract-adapter';
5
+ import { WalletProvider } from "./constants/models/wallet-provider";
6
+ import { BlockchainName, EvmBlockchainName, SolanaBlockchainName, TronBlockchainName, ICustomLogger } from "@cryptorubic/core";
7
+ export declare class BlockchainAdapterFactoryService {
8
+ private readonly rpcList;
9
+ private readonly createLogger?;
10
+ readonly adapterStore: Partial<Record<BlockchainName, AbstractAdapter<unknown, unknown, BlockchainName>>>;
11
+ protected readonly logger?: ICustomLogger;
12
+ constructor(rpcList: Partial<Record<EvmBlockchainName, string[]>>, createLogger?: ((label: string) => ICustomLogger) | undefined);
13
+ getAdapter(blockchain: SolanaBlockchainName): SolanaAdapter;
14
+ getAdapter(blockchain: EvmBlockchainName): EvmAdapter;
15
+ getAdapter(blockchain: TronBlockchainName): TronAdapter;
16
+ private createStorage;
17
+ private createAdapter;
18
+ connectWallet(walletProvider: WalletProvider): void;
19
+ }
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BlockchainAdapterFactoryService = void 0;
4
+ const viem_blockchain_mapping_1 = require("./constants/viem-blockchain-mapping");
5
+ const evm_adapter_1 = require("./adapters/evm-adapter");
6
+ const solana_adapter_1 = require("./adapters/solana-adapter");
7
+ const tron_adapter_1 = require("./adapters/tron-adapter");
8
+ const viem_1 = require("viem");
9
+ const core_1 = require("@cryptorubic/core");
10
+ class BlockchainAdapterFactoryService {
11
+ constructor(rpcList, createLogger) {
12
+ this.rpcList = rpcList;
13
+ this.createLogger = createLogger;
14
+ this.adapterStore = {};
15
+ this.adapterStore = this.createStorage();
16
+ if (this.createLogger) {
17
+ this.logger = this.createLogger('BlockchainAdapterFactory');
18
+ }
19
+ }
20
+ getAdapter(blockchain) {
21
+ const adapter = this.adapterStore?.[blockchain];
22
+ if (!adapter) {
23
+ this.logger?.customWarn(`Trying to access non-existing adapter for ${blockchain} blockchain`);
24
+ throw new Error(`Adapter for blockchain ${blockchain} not found`);
25
+ }
26
+ return adapter;
27
+ }
28
+ createStorage() {
29
+ const adapters = Object.entries(this.rpcList)
30
+ .map(([blockchain, rpcs]) => {
31
+ const adapter = this.createAdapter(blockchain, rpcs || []);
32
+ if (adapter) {
33
+ this.logger?.customLog(`Creating adapter for ${blockchain} blockchain`);
34
+ return [blockchain, adapter];
35
+ }
36
+ this.logger?.customWarn(`Failed to create adapter for ${blockchain} blockchain`);
37
+ return [blockchain, null];
38
+ })
39
+ .filter(([_, adapter]) => Boolean(adapter));
40
+ const store = Object.fromEntries(adapters);
41
+ this.logger?.customLog('Adapters store created');
42
+ return store;
43
+ }
44
+ createAdapter(blockchain, rpcs) {
45
+ if (rpcs.length > 0 && typeof rpcs[0] === 'string') {
46
+ const blockchainType = core_1.BlockchainsInfo.getChainType(blockchain);
47
+ if (blockchainType === core_1.CHAIN_TYPE.EVM) {
48
+ if (viem_blockchain_mapping_1.viemBlockchainMapping?.[blockchain]) {
49
+ return new evm_adapter_1.EvmAdapter({
50
+ blockchain: blockchain,
51
+ rpcList: rpcs
52
+ }, this.createLogger?.(`EVM_ADAPTER_${blockchain}`));
53
+ }
54
+ }
55
+ if (blockchainType === core_1.CHAIN_TYPE.TRON) {
56
+ return new tron_adapter_1.TronAdapter(rpcs, this.createLogger?.(`TRON_ADAPTER`));
57
+ }
58
+ if (blockchainType === core_1.CHAIN_TYPE.SOLANA) {
59
+ return new solana_adapter_1.SolanaAdapter(rpcs, this.createLogger?.(`SOLANA_ADAPTER`));
60
+ }
61
+ }
62
+ return null;
63
+ }
64
+ connectWallet(walletProvider) {
65
+ if (walletProvider?.[core_1.CHAIN_TYPE.EVM]?.core) {
66
+ Object.entries(this.adapterStore).forEach(([blockchain, adapter]) => {
67
+ const provider = walletProvider[core_1.CHAIN_TYPE.EVM].core;
68
+ const chain = viem_blockchain_mapping_1.viemBlockchainMapping[blockchain];
69
+ adapter.wallet = (0, viem_1.createWalletClient)({
70
+ chain: chain,
71
+ transport: (0, viem_1.custom)(provider)
72
+ });
73
+ });
74
+ }
75
+ if (walletProvider?.[core_1.CHAIN_TYPE.SOLANA]?.core && this.adapterStore?.[core_1.BLOCKCHAIN_NAME.SOLANA]) {
76
+ const store = this.adapterStore[core_1.BLOCKCHAIN_NAME.SOLANA];
77
+ store.wallet = walletProvider[core_1.CHAIN_TYPE.SOLANA].core;
78
+ }
79
+ if (walletProvider?.[core_1.CHAIN_TYPE.TRON]?.core && this.adapterStore?.[core_1.BLOCKCHAIN_NAME.TRON]) {
80
+ const store = this.adapterStore[core_1.BLOCKCHAIN_NAME.TRON];
81
+ store.wallet = walletProvider[core_1.CHAIN_TYPE.TRON].core;
82
+ }
83
+ }
84
+ }
85
+ exports.BlockchainAdapterFactoryService = BlockchainAdapterFactoryService;
86
+ //# sourceMappingURL=blockchain-adapter-factory.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockchain-adapter-factory.service.js","sourceRoot":"","sources":["../../../../../../packages/web3/src/lib/adapter/blockchain-adapter-factory.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ViemChain } from '../models/viem-chain-type';
2
+ import { EvmBlockchainName } from "@cryptorubic/core";
3
+ export declare const viemConfig: Partial<Record<EvmBlockchainName, ViemChain>>;