@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.
- package/README.md +1 -0
- package/package.json +17 -0
- package/src/index.d.ts +25 -0
- package/src/index.js +27 -0
- package/src/index.js.map +1 -0
- package/src/lib/adapter/adapters/abstract-adapter.d.ts +19 -0
- package/src/lib/adapter/adapters/abstract-adapter.js +50 -0
- package/src/lib/adapter/adapters/abstract-adapter.js.map +1 -0
- package/src/lib/adapter/adapters/constants/erc20-token-abi.d.ts +2 -0
- package/src/lib/adapter/adapters/constants/erc20-token-abi.js +87 -0
- package/src/lib/adapter/adapters/constants/erc20-token-abi.js.map +1 -0
- package/src/lib/adapter/adapters/constants/trc-20-contract-abi.d.ts +12 -0
- package/src/lib/adapter/adapters/constants/trc-20-contract-abi.js +85 -0
- package/src/lib/adapter/adapters/constants/trc-20-contract-abi.js.map +1 -0
- package/src/lib/adapter/adapters/constants/tron-multicall-abi.d.ts +2 -0
- package/src/lib/adapter/adapters/constants/tron-multicall-abi.js +27 -0
- package/src/lib/adapter/adapters/constants/tron-multicall-abi.js.map +1 -0
- package/src/lib/adapter/adapters/evm-adapter.d.ts +20 -0
- package/src/lib/adapter/adapters/evm-adapter.js +208 -0
- package/src/lib/adapter/adapters/evm-adapter.js.map +1 -0
- package/src/lib/adapter/adapters/models/evm-adapter-options.d.ts +6 -0
- package/src/lib/adapter/adapters/models/evm-adapter-options.js +3 -0
- package/src/lib/adapter/adapters/models/evm-adapter-options.js.map +1 -0
- package/src/lib/adapter/adapters/solana-adapter.d.ts +15 -0
- package/src/lib/adapter/adapters/solana-adapter.js +60 -0
- package/src/lib/adapter/adapters/solana-adapter.js.map +1 -0
- package/src/lib/adapter/adapters/tron-adapter.d.ts +25 -0
- package/src/lib/adapter/adapters/tron-adapter.js +190 -0
- package/src/lib/adapter/adapters/tron-adapter.js.map +1 -0
- package/src/lib/adapter/blockchain-adapter-factory.service.d.ts +19 -0
- package/src/lib/adapter/blockchain-adapter-factory.service.js +86 -0
- package/src/lib/adapter/blockchain-adapter-factory.service.js.map +1 -0
- package/src/lib/adapter/constants/chain-configs/chain-configs.d.ts +3 -0
- package/src/lib/adapter/constants/chain-configs/chain-configs.js +1040 -0
- package/src/lib/adapter/constants/chain-configs/chain-configs.js.map +1 -0
- package/src/lib/adapter/constants/models/solana-web3.d.ts +26 -0
- package/src/lib/adapter/constants/models/solana-web3.js +3 -0
- package/src/lib/adapter/constants/models/solana-web3.js.map +1 -0
- package/src/lib/adapter/constants/models/viem-chain-type.d.ts +2 -0
- package/src/lib/adapter/constants/models/viem-chain-type.js +3 -0
- package/src/lib/adapter/constants/models/viem-chain-type.js.map +1 -0
- package/src/lib/adapter/constants/models/wallet-provider.d.ts +28 -0
- package/src/lib/adapter/constants/models/wallet-provider.js +4 -0
- package/src/lib/adapter/constants/models/wallet-provider.js.map +1 -0
- package/src/lib/adapter/constants/viem-blockchain-mapping.d.ts +3 -0
- package/src/lib/adapter/constants/viem-blockchain-mapping.js +74 -0
- package/src/lib/adapter/constants/viem-blockchain-mapping.js.map +1 -0
- package/src/lib/utils/constants/changenow-api-blockchain.d.ts +123 -0
- package/src/lib/utils/constants/changenow-api-blockchain.js +109 -0
- package/src/lib/utils/constants/changenow-api-blockchain.js.map +1 -0
- package/src/lib/utils/constants/web3-pure-store.d.ts +3 -0
- package/src/lib/utils/constants/web3-pure-store.js +335 -0
- package/src/lib/utils/constants/web3-pure-store.js.map +1 -0
- package/src/lib/utils/models/abi-types.d.ts +26 -0
- package/src/lib/utils/models/abi-types.js +3 -0
- package/src/lib/utils/models/abi-types.js.map +1 -0
- package/src/lib/utils/models/cn-validation-response.d.ts +5 -0
- package/src/lib/utils/models/cn-validation-response.js +3 -0
- package/src/lib/utils/models/cn-validation-response.js.map +1 -0
- package/src/lib/utils/models/contract-multicall-response.d.ts +5 -0
- package/src/lib/utils/models/contract-multicall-response.js +3 -0
- package/src/lib/utils/models/contract-multicall-response.js.map +1 -0
- package/src/lib/utils/models/evm-transaction-config.d.ts +9 -0
- package/src/lib/utils/models/evm-transaction-config.js +3 -0
- package/src/lib/utils/models/evm-transaction-config.js.map +1 -0
- package/src/lib/utils/models/method-data.d.ts +4 -0
- package/src/lib/utils/models/method-data.js +3 -0
- package/src/lib/utils/models/method-data.js.map +1 -0
- package/src/lib/utils/models/primitive-types.d.ts +7 -0
- package/src/lib/utils/models/primitive-types.js +3 -0
- package/src/lib/utils/models/primitive-types.js.map +1 -0
- package/src/lib/utils/models/tron-block.d.ts +7 -0
- package/src/lib/utils/models/tron-block.js +3 -0
- package/src/lib/utils/models/tron-block.js.map +1 -0
- package/src/lib/utils/models/tron-call.d.ts +5 -0
- package/src/lib/utils/models/tron-call.js +3 -0
- package/src/lib/utils/models/tron-call.js.map +1 -0
- package/src/lib/utils/models/tron-multicall-response.d.ts +4 -0
- package/src/lib/utils/models/tron-multicall-response.js +3 -0
- package/src/lib/utils/models/tron-multicall-response.js.map +1 -0
- package/src/lib/utils/models/tron-parameters.d.ts +4 -0
- package/src/lib/utils/models/tron-parameters.js +3 -0
- package/src/lib/utils/models/tron-parameters.js.map +1 -0
- package/src/lib/utils/models/tron-transaction-config.d.ts +6 -0
- package/src/lib/utils/models/tron-transaction-config.js +3 -0
- package/src/lib/utils/models/tron-transaction-config.js.map +1 -0
- package/src/lib/utils/models/tron-transaction-info.d.ts +15 -0
- package/src/lib/utils/models/tron-transaction-info.js +3 -0
- package/src/lib/utils/models/tron-transaction-info.js.map +1 -0
- package/src/lib/utils/web3-pure.d.ts +16 -0
- package/src/lib/utils/web3-pure.js +46 -0
- package/src/lib/utils/web3-pure.js.map +1 -0
- package/src/lib/utils/web3-types/bitcoin-web3-pure.d.ts +5 -0
- package/src/lib/utils/web3-types/bitcoin-web3-pure.js +15 -0
- package/src/lib/utils/web3-types/bitcoin-web3-pure.js.map +1 -0
- package/src/lib/utils/web3-types/common-web3-pure.d.ts +15 -0
- package/src/lib/utils/web3-types/common-web3-pure.js +47 -0
- package/src/lib/utils/web3-types/common-web3-pure.js.map +1 -0
- package/src/lib/utils/web3-types/evm-web3-pure.d.ts +5 -0
- package/src/lib/utils/web3-types/evm-web3-pure.js +15 -0
- package/src/lib/utils/web3-types/evm-web3-pure.js.map +1 -0
- package/src/lib/utils/web3-types/icp-web3-pure.d.ts +6 -0
- package/src/lib/utils/web3-types/icp-web3-pure.js +29 -0
- package/src/lib/utils/web3-types/icp-web3-pure.js.map +1 -0
- package/src/lib/utils/web3-types/solana-web3-pure.d.ts +5 -0
- package/src/lib/utils/web3-types/solana-web3-pure.js +16 -0
- package/src/lib/utils/web3-types/solana-web3-pure.js.map +1 -0
- package/src/lib/utils/web3-types/ton-web3-pure.d.ts +4 -0
- package/src/lib/utils/web3-types/ton-web3-pure.js +13 -0
- package/src/lib/utils/web3-types/ton-web3-pure.js.map +1 -0
- package/src/lib/utils/web3-types/tron-web3-pure.d.ts +38 -0
- package/src/lib/utils/web3-types/tron-web3-pure.js +117 -0
- 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":";;;AAAA,+CAAqC;AAErC,yEAAqE;AACrE,uEAAoE;AACpE,yDAAqD;AAQrD,qCAAkC;AAElC,4CAO2B;AAC3B,qDAA+C;AAC/C,0EAAmE;AAEnE,MAAa,WAAY,SAAQ,kCAAqD;IAGlE,KAAK,CAAC,iBAAiB,CAAC,eAAuB,EAAE,YAAoB,EAAE,aAAqB,EAAE,MAAc;QACxH,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,oBAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAC,YAAY,CAAC,CAAA;QACvE,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,wCAAkB,EAAE,YAAY,CAAC,CAAC;YAG9E,MAAM,SAAS,GAAoB,MAAM,QAAQ;gBAC7C,aAAa;iBACZ,SAAS,CAAC,aAAa,EAAE,eAAe,CAAC;iBACzC,IAAI,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,IAAI,sBAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YACzD,OAAO,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,KAAK,CAAA;QAChB,CAAC;IACL,CAAC;IAED,YAAY,OAAiB,EAAE,MAAsB;QACjD,KAAK,CAAC,sBAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QA1BvB,qBAAgB,GAAG,oCAAoC,CAAC;QA2BrE,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAE,EAAE,CAAC,CAAA;IACxD,CAAC;IAEM,KAAK,CAAC,yBAAyB,CAClC,WAAmC,EACnC,aAGG;QAEH,MAAM,KAAK,GAAiB,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE,EAAE;YAC/E,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;gBACxD,eAAe;gBACf,6BAAY,CAAC,kBAAkB,CAAC,WAAkB,EAAE,UAAU,EAAE,eAAe,CAAC;aACnF,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAEnD,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CACtC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;gBACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAE,CAAC;gBAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAE,CAAC;gBACpD,WAAW,EAAE,CAAC;gBAEd,aAAa;gBACb,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,UAAU,CAAE,CAAC,OAAQ,CAAC;gBAEpH,OAAO;oBACH,MAAM,EAAE,OAAO,CAAC,CAAC,CAAE,6BAAY,CAAC,kBAAkB,CAAC,eAAe,EAAE,UAAU,CAAY,CAAC,CAAC,CAAC,IAAI;oBACjG,OAAO;iBACV,CAAC;YACN,CAAC,CAAC,CACL,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,KAAiB;QACrC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,uCAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvF,aAAa;QACb,OAAO,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAC3B,eAAuB,EACvB,WAAmC,EACnC,UAAkB,EAClB,kBAA6B,EAAE;QAE/B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAE1E,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,OAAO,6BAAY,CAAC,2BAA2B,CAAC,QAAQ,CAAM,CAAC;IACnE,CAAC;IAEO,8BAA8B,CAClC,WAAmC,EACnC,aAGG;QAEH,OAAO,OAAO,CAAC,GAAG,CACd,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;YAC/B,OAAO,OAAO,CAAC,GAAG,CACd,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;gBAC9C,IAAI,CAAC;oBACD,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,kBAAkB,CACzC,YAAY,CAAC,eAAe,EAC5B,WAAW,EACX,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,eAAe,CAC7B,CAAW,CAAC;oBACb,OAAO;wBACH,MAAM;wBACN,OAAO,EAAE,IAAI;qBAChB,CAAC;gBACN,CAAC;gBAAC,MAAM,CAAC;oBACL,OAAO;wBACH,MAAM,EAAE,IAAI;wBACZ,OAAO,EAAE,KAAK;qBACjB,CAAC;gBACN,CAAC;YACL,CAAC,CAAC,CACL,CAAC;QACN,CAAC,CAAC,CACL,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,WAAmB,EAAE,eAAyB;QACzE,MAAM,iBAAiB,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAQ,CAAC,eAAe,CAAC,iBAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACrH,MAAM,QAAQ,GAAG,EAAE,CAAC;QAEpB,IAAI,iBAAiB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3B,eAAe,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;YAC7C,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QAED,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,yBAAyB,CACxC,wCAAkB,EAClB,eAAe,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACnC,eAAe,EAAE,YAAY;YAC7B,WAAW,EAAE;gBACT;oBACI,eAAe,EAAE,CAAC,WAAW,CAAC;oBAC9B,UAAU,EAAE,WAAW;iBAC1B;aACJ;SACJ,CAAC,CAAC,CACN,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAgF,CAAC,CAAC;QACpH,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;YACnD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC;YAC7C,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,sBAAS,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,IAAI,iBAAiB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3B,cAAc,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,cAAc,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,cAAgD;QAC3E,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,gBAAgB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAQ,CAAC,eAAe,CAAC,iBAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACnH,MAAM,sBAAsB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,gBAAgB,CAAC,CAAC;QAC/F,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YACnE,eAAe;YACf,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC1C,eAAe,EAAE,EAAE;gBACnB,UAAU;aACb,CAAC,CAAC;SACN,CAAC,CAAC,CAAC;QAEJ,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAW,wCAAkB,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9H,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,kBAAkB,EAAE,UAAU,EAAE,EAAE;YAC1D,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAE,CAAC;YACjD,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACvE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,YAAY,EAAE,CAAC,CAAC;gBACzE,CAAC;gBACD,OAAO;oBACH,GAAG,GAAG;oBACN,CAAC,WAAW,CAAC,UAAU,CAAE,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;iBAC9D,CAAC;YACf,CAAC,EAAE,EAAW,CAAC,CAAC;YAChB,OAAO,IAAI,YAAK,CAAC;gBACb,OAAO,EAAE,YAAY;gBACrB,UAAU,EAAE,sBAAe,CAAC,IAAI;gBAChC,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC;gBACzC,IAAI,EAAE,aAAa,EAAE,IAAI;gBACzB,MAAM,EAAE,aAAa,EAAE,MAAM;aAChC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,MAAM,qBAAqB,GAAG,uBAAgB,CAAC,sBAAe,CAAC,IAAI,CAA8B,CAAC;QAClG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,WAAmB,EAAE,YAAqB;QAC9D,IAAI,OAAO,CAAC;QACZ,IAAI,YAAY,IAAI,CAAC,oBAAQ,CAAC,eAAe,CAAC,iBAAU,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC;YAC3E,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACpC,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,sBAAS,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,WAAmB,EAAE,YAAoB;QAClE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,wCAAkB,EAAE,YAAY,CAAC,CAAC;QAC9E,aAAa;QACb,MAAM,OAAO,GAAoB,MAAM,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9E,OAAO,IAAI,sBAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,uBAAuB,CAAC,OAAe;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAEM,IAAI;QACP,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAChD,CAAC;IAAA,CAAC;IAEK,KAAK;QACR,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAChD,CAAC;IAAA,CAAC;CACL;AAtOD,kCAsOC"}
|
|
@@ -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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"}
|