@cryptorubic/web3 1.0.0-alpha.no-sdk.22 → 1.0.0-alpha.no-sdk.24

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 (41) hide show
  1. package/package.json +1 -1
  2. package/src/index.d.ts +7 -7
  3. package/src/index.js +7 -7
  4. package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.d.ts +4 -2
  5. package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.js +11 -6
  6. package/src/lib/adapter/adapters/adapter-bitcoin/{client/bitcoin-adapter-client.d.ts → signer/bitcoin-adapter-signer.d.ts} +2 -3
  7. package/src/lib/adapter/adapters/adapter-bitcoin/{client/bitcoin-adapter-client.js → signer/bitcoin-adapter-signer.js} +6 -9
  8. package/src/lib/adapter/adapters/adapter-evm/evm-adapter.d.ts +36 -4
  9. package/src/lib/adapter/adapters/adapter-evm/evm-adapter.js +110 -84
  10. package/src/lib/adapter/adapters/adapter-evm/{client/evm-adapter-client.d.ts → signer/evm-adapter-signer.d.ts} +3 -36
  11. package/src/lib/adapter/adapters/adapter-evm/{client/evm-adapter-client.js → signer/evm-adapter-signer.js} +13 -120
  12. package/src/lib/adapter/adapters/adapter-solana/{client/solana-adapter-client.d.ts → signer/solana-adapter-signer.d.ts} +2 -3
  13. package/src/lib/adapter/adapters/adapter-solana/{client/solana-adapter-client.js → signer/solana-adapter-signer.js} +5 -8
  14. package/src/lib/adapter/adapters/adapter-solana/solana-adapter.d.ts +3 -2
  15. package/src/lib/adapter/adapters/adapter-solana/solana-adapter.js +5 -2
  16. package/src/lib/adapter/adapters/adapter-sui/{client/sui-adapter-client.d.ts → signer/sui-adapter-signer.d.ts} +2 -3
  17. package/src/lib/adapter/adapters/adapter-sui/{client/sui-adapter-client.js → signer/sui-adapter-signer.js} +6 -9
  18. package/src/lib/adapter/adapters/adapter-sui/sui-adapter.d.ts +3 -2
  19. package/src/lib/adapter/adapters/adapter-sui/sui-adapter.js +5 -2
  20. package/src/lib/adapter/adapters/adapter-ton/{client/ton-adapter-client.d.ts → signer/ton-adapter-signer.d.ts} +4 -5
  21. package/src/lib/adapter/adapters/adapter-ton/{client/ton-adapter-client.js → signer/ton-adapter-signer.js} +7 -11
  22. package/src/lib/adapter/adapters/adapter-ton/ton-adapter.d.ts +3 -2
  23. package/src/lib/adapter/adapters/adapter-ton/ton-adapter.js +6 -2
  24. package/src/lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer.d.ts +21 -0
  25. package/src/lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer.js +67 -0
  26. package/src/lib/adapter/adapters/adapter-tron/tron-adapter.d.ts +9 -2
  27. package/src/lib/adapter/adapters/adapter-tron/tron-adapter.js +52 -3
  28. package/src/lib/adapter/adapters/common/abstract-adapter.d.ts +3 -2
  29. package/src/lib/adapter/adapters/common/abstract-adapter.js +1 -25
  30. package/src/lib/adapter/adapters/common/{client/abstract-adapter-client.d.ts → signer/abstract-adapter-signer.d.ts} +4 -5
  31. package/src/lib/adapter/adapters/common/{client/abstract-adapter-client.js → signer/abstract-adapter-signer.js} +7 -7
  32. package/src/lib/adapter/adapters/models/approve-adapter.d.ts +7 -6
  33. package/src/lib/adapter/adapters/models/approve-adapter.js +46 -3
  34. package/src/lib/adapter/blockchain-adapter-factory.service.js +3 -3
  35. package/src/lib/adapter/constants/chain-configs/chain-configs.d.ts +1 -1
  36. package/src/lib/adapter/constants/chain-configs/chain-configs.js +27 -0
  37. package/src/lib/adapter/constants/viem-blockchain-mapping.d.ts +1 -1
  38. package/src/lib/adapter/constants/viem-blockchain-mapping.js +3 -2
  39. package/src/lib/adapter/models/create-factory-params.d.ts +3 -3
  40. package/src/lib/adapter/adapters/adapter-tron/client/tron-adapter-client.d.ts +0 -30
  41. package/src/lib/adapter/adapters/adapter-tron/client/tron-adapter-client.js +0 -119
@@ -9,7 +9,9 @@ const tronweb_1 = require("tronweb");
9
9
  const core_1 = require("@cryptorubic/core");
10
10
  const web3_pure_1 = require("../../../utils/web3-pure");
11
11
  const tron_web3_pure_1 = require("../../../utils/web3-types/tron-web3-pure");
12
- const tron_adapter_client_1 = require("./client/tron-adapter-client");
12
+ const tron_adapter_signer_1 = require("./signer/tron-adapter-signer");
13
+ const options_1 = require("../utils/options");
14
+ const parse_tron_error_1 = require("./utils/parse-tron-error");
13
15
  class TronAdapter extends abstract_adapter_1.AbstractAdapter {
14
16
  async needPreswapAction() {
15
17
  return false;
@@ -19,7 +21,7 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
19
21
  this.multicallAddress = 'T9ziQU4EBteJzjzMzhHELdhgWFqwzS5Vki';
20
22
  const rpc = typeof rpcList[0] === 'string' ? rpcList[0] : rpcList[0].fullHost;
21
23
  this.public = new tronweb_1.TronWeb({ fullHost: rpc });
22
- this.client = new tron_adapter_client_1.TronAdapterClient(this.public, httpClient, logger, clientParams);
24
+ this.signer = new tron_adapter_signer_1.TronAdapterSigner(this.public, httpClient, logger, clientParams);
23
25
  }
24
26
  async callContractMethod(contractAddress, contractAbi, methodName, methodArguments = []) {
25
27
  this.public.setAddress(contractAddress);
@@ -99,7 +101,7 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
99
101
  return Promise.all(contractsData.map((contractData) => {
100
102
  return Promise.all(contractData.methodsData.map(async (methodData) => {
101
103
  try {
102
- const output = (await this.client.read(contractData.contractAddress, contractAbi, methodData.methodName, methodData.methodArguments));
104
+ const output = (await this.read(contractData.contractAddress, contractAbi, methodData.methodName, methodData.methodArguments));
103
105
  return {
104
106
  output,
105
107
  success: true
@@ -189,6 +191,12 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
189
191
  ...(feeLimit && { feeLimit })
190
192
  };
191
193
  }
194
+ async read(contractAddress, contractAbi, methodName, methodArguments = []) {
195
+ this.public.setAddress(contractAddress);
196
+ const contract = await this.public.contract(contractAbi, contractAddress);
197
+ const response = await contract[methodName](...methodArguments).call();
198
+ return tron_web3_pure_1.TronWeb3Pure.flattenParameterToPrimitive(response);
199
+ }
192
200
  static flattenTypesToString(abiInputs) {
193
201
  return (abiInputs?.map((abiInput) => {
194
202
  if (abiInput.type === 'tuple' || abiInput.type.includes('tuple')) {
@@ -200,5 +208,46 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
200
208
  return abiInput.type;
201
209
  }) || []);
202
210
  }
211
+ async getAllowance(fromTokenAddress, _walletAddress, spender) {
212
+ const [decimals, allowance] = await Promise.all([
213
+ this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'decimals'),
214
+ this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'allowance', [spender])
215
+ ]);
216
+ const allowanceWeiBN = new bignumber_js_1.default(allowance);
217
+ const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
218
+ return { allowanceNonWei, allowanceWei: allowanceWeiBN };
219
+ }
220
+ async needApprove(from, walletAddress, spender) {
221
+ if (from.isNative)
222
+ return false;
223
+ const { allowanceWei } = await this.getAllowance(from.address, walletAddress, spender);
224
+ return allowanceWei.lt(from.weiAmount);
225
+ }
226
+ async approveTokens(tokenAddress, spenderAddress, amount = 'infinity', options = {}) {
227
+ try {
228
+ const contract = await this.public.contract(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokenAddress);
229
+ const rawValue = amount === 'infinity' ? new bignumber_js_1.default(2).pow(256).minus(1) : amount;
230
+ const transactionHash = await contract.approve(spenderAddress, rawValue.toFixed(0)).send({
231
+ ...(options.feeLimit && {
232
+ feeLimit: (0, options_1.stringifyAmount)(options.feeLimit)
233
+ })
234
+ });
235
+ if (options.onTransactionHash) {
236
+ options.onTransactionHash(transactionHash);
237
+ }
238
+ return transactionHash;
239
+ }
240
+ catch (err) {
241
+ console.error('Approve execution error: ', err);
242
+ throw (0, parse_tron_error_1.parseTronError)(err);
243
+ }
244
+ }
245
+ encodeApprove(tokenAddress, spenderAddress, amount) {
246
+ const amountWei = amount ?? new bignumber_js_1.default(2).pow(256).minus(1).toFixed();
247
+ return TronAdapter.encodeMethodCall(tokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'approve', [
248
+ { type: 'address', value: spenderAddress },
249
+ { type: 'uint256', value: amountWei }
250
+ ]);
251
+ }
203
252
  }
204
253
  exports.TronAdapter = TronAdapter;
@@ -1,12 +1,12 @@
1
1
  import { Abi } from 'viem';
2
2
  import BigNumber from 'bignumber.js';
3
3
  import { ICustomLogger, Token, TokenAmount, BlockchainName } from '@cryptorubic/core';
4
- import { AbstractAdapterClient } from './client/abstract-adapter-client';
4
+ import { AbstractAdapterSigner } from './signer/abstract-adapter-signer';
5
5
  import { MethodData } from '../models/web3-public-models/method-data';
6
6
  import { ContractMulticallResponse } from '../models/web3-public-models/contract-multicall-response';
7
7
  import { Web3PrimitiveType } from '../../../utils/models/primitive-types';
8
8
  export declare abstract class AbstractAdapter<P, W, B extends BlockchainName, SendTxParams extends object = {}, SendTxResponse = {}> {
9
- abstract client: AbstractAdapterClient<W, SendTxParams, SendTxResponse>;
9
+ abstract signer: AbstractAdapterSigner<W, SendTxParams, SendTxResponse>;
10
10
  protected readonly logger?: ICustomLogger;
11
11
  protected readonly blockchain: B;
12
12
  private _public;
@@ -64,4 +64,5 @@ export declare abstract class AbstractAdapter<P, W, B extends BlockchainName, Se
64
64
  needPreswapAction(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string | BigNumber): Promise<boolean>;
65
65
  handlePreswap(contractAddress: string, walletAddress: string, tokenAmount: TokenAmount): Promise<void>;
66
66
  static getRandomBytes(bytes: number): string;
67
+ abstract read<T>(...args: unknown[]): Promise<T>;
67
68
  }
@@ -10,36 +10,12 @@ class AbstractAdapter {
10
10
  }
11
11
  get public() {
12
12
  if (!this._public) {
13
- const msg = 'Trying to access undefined client';
13
+ const msg = `Trying to access undefined public client in ${this.blockchain} adapter.`;
14
14
  this.logger?.customLog(msg);
15
15
  throw new Error(msg);
16
16
  }
17
17
  return this._public;
18
18
  }
19
- // private _wallet: W | null = null;
20
- // public set wallet(value: W | null) {
21
- // this._wallet = value;
22
- // }
23
- // public get wallet(): W {
24
- // if (!this._wallet) {
25
- // const msg = 'Trying to access undefined client';
26
- // this.logger?.customLog(msg);
27
- // throw new Error(msg);
28
- // }
29
- // return this._wallet;
30
- // }
31
- // private _walletAddress: string | null = null;
32
- // public set walletAddress(value: string | null) {
33
- // this._walletAddress = value;
34
- // }
35
- // public get walletAddress(): string {
36
- // if (!this._walletAddress) {
37
- // const msg = 'Trying to access undefined walletAddress';
38
- // this.logger?.customLog(msg);
39
- // throw new Error(msg);
40
- // }
41
- // return this._walletAddress;
42
- // }
43
19
  constructor(blockchain, logger) {
44
20
  this._public = null;
45
21
  this.blockchain = blockchain;
@@ -1,20 +1,19 @@
1
1
  import { BlockchainName, HttpClient, ICustomLogger } from '@cryptorubic/core';
2
2
  import { ClientAdaptersFactoryParams } from '../../../models/create-factory-params';
3
3
  import { TxStatus } from '../../models/web3-public-models/tx-status';
4
- export declare abstract class AbstractAdapterClient<ClientWallet, SendTxParams, SendTxResponse> {
4
+ export declare abstract class AbstractAdapterSigner<ClientWallet, SendTxParams, SendTxResponse> {
5
5
  protected readonly httpClient: HttpClient;
6
6
  protected readonly logger?: ICustomLogger | undefined;
7
7
  protected readonly clientParams?: ClientAdaptersFactoryParams | undefined;
8
8
  protected get apiUrl(): string;
9
9
  private _walletAddress;
10
10
  get walletAddress(): string;
11
- private _clientWallet;
12
- get clientWallet(): ClientWallet;
11
+ private _wallet;
12
+ get wallet(): ClientWallet;
13
13
  constructor(httpClient: HttpClient, logger?: ICustomLogger | undefined, clientParams?: ClientAdaptersFactoryParams | undefined);
14
14
  abstract getBlockchainName(): Promise<BlockchainName | undefined>;
15
15
  abstract sendTransaction(params: SendTxParams): Promise<SendTxResponse>;
16
16
  abstract getTransactionStatus(srcTxHash: string): Promise<TxStatus>;
17
- abstract read<T>(...args: unknown[]): Promise<T>;
18
17
  abstract write(...args: unknown[]): Promise<string>;
19
18
  /**
20
19
  * Checks, that selected blockchain in wallet is equal to passed blockchain.
@@ -22,5 +21,5 @@ export declare abstract class AbstractAdapterClient<ClientWallet, SendTxParams,
22
21
  checkBlockchainCorrect(blockchainName: BlockchainName): Promise<void | never>;
23
22
  getSrcTxStatus(blockchain: BlockchainName, srcTxHash: string): Promise<TxStatus>;
24
23
  setWalletAddress(newWalletAddress: string): void;
25
- setClientWallet(clientWallet: ClientWallet): void;
24
+ setWallet(wallet: ClientWallet): void;
26
25
  }
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AbstractAdapterClient = void 0;
3
+ exports.AbstractAdapterSigner = void 0;
4
4
  const core_1 = require("@cryptorubic/core");
5
5
  const rubic_api_link_mapping_1 = require("../../../constants/rubic-api-link-mapping");
6
6
  const tx_status_1 = require("../../models/web3-public-models/tx-status");
7
7
  const waitFor_1 = require("../../utils/waitFor");
8
8
  const wrong_network_error_1 = require("../../../../errors/swap/wrong-network.error");
9
- class AbstractAdapterClient {
9
+ class AbstractAdapterSigner {
10
10
  get apiUrl() {
11
11
  if (!this.clientParams) {
12
12
  this.logger?.customError('clientParams is not set for apiUrl call.');
@@ -18,8 +18,8 @@ class AbstractAdapterClient {
18
18
  get walletAddress() {
19
19
  return this._walletAddress;
20
20
  }
21
- get clientWallet() {
22
- return this._clientWallet;
21
+ get wallet() {
22
+ return this._wallet;
23
23
  }
24
24
  constructor(httpClient, logger, clientParams) {
25
25
  this.httpClient = httpClient;
@@ -52,8 +52,8 @@ class AbstractAdapterClient {
52
52
  setWalletAddress(newWalletAddress) {
53
53
  this._walletAddress = newWalletAddress;
54
54
  }
55
- setClientWallet(clientWallet) {
56
- this._clientWallet = clientWallet;
55
+ setWallet(wallet) {
56
+ this._wallet = wallet;
57
57
  }
58
58
  }
59
- exports.AbstractAdapterClient = AbstractAdapterClient;
59
+ exports.AbstractAdapterSigner = AbstractAdapterSigner;
@@ -1,11 +1,11 @@
1
- import { TokenAmount } from '@cryptorubic/core';
1
+ import { BlockchainName, TokenAmount } from '@cryptorubic/core';
2
2
  import { AllowanceInfo } from './common-types';
3
3
  import { EvmTransactionConfig } from '../../../utils/models/evm-transaction-config';
4
4
  import { TronTransactionConfig } from '../../../utils/models/tron-transaction-config';
5
- import { AbstractAdapterClient } from '../common/client/abstract-adapter-client';
6
- import { BasicSendTransactionOptions } from './basic-transaction-options';
5
+ import { AbstractAdapter } from '../common/abstract-adapter';
7
6
  import BigNumber from 'bignumber.js';
8
- export interface ApproveAdapterClient<T> extends AbstractAdapterClient<{}, {}, {}> {
7
+ import { BasicSendTransactionOptions } from './basic-transaction-options';
8
+ export interface ApprovableAdapter<T> extends AbstractAdapter<any, any, BlockchainName, {}> {
9
9
  /**
10
10
  * @param fromTokenAddress erc20 address of checked token
11
11
  * @param walletAddress owner wallet address
@@ -30,12 +30,13 @@ export interface ApproveAdapterClient<T> extends AbstractAdapterClient<{}, {}, {
30
30
  needApprove(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string): Promise<boolean>;
31
31
  /**
32
32
  * Executes approve method in ERC-20 token contract.
33
+ * @param walletAddress Address of user wallet.
33
34
  * @param tokenAddress Address of the smart-contract corresponding to the token.
34
35
  * @param spenderAddress Wallet or contract address to approve.
35
36
  * @param amount Token amount to approve in wei.
36
37
  * @param [options] Additional options.
37
38
  * @returns Approval transaction receipt.
38
39
  */
39
- approveTokens(tokenAddress: string, spenderAddress: string, amount: BigNumber | 'infinity', options: BasicSendTransactionOptions): Promise<string>;
40
+ approveTokens(walletAddress: string, tokenAddress: string, spenderAddress: string, amount: BigNumber | 'infinity', options: BasicSendTransactionOptions): Promise<string>;
40
41
  }
41
- export declare function isApprovableAdapterClient(adapterClient: AbstractAdapterClient<{}, {}, {}>): adapterClient is ApproveAdapterClient<EvmTransactionConfig | TronTransactionConfig>;
42
+ export declare function isApprovableAdapter(adapter: AbstractAdapter<any, any, BlockchainName, {}>): adapter is ApprovableAdapter<EvmTransactionConfig | TronTransactionConfig>;
@@ -1,6 +1,49 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isApprovableAdapterClient = isApprovableAdapterClient;
4
- function isApprovableAdapterClient(adapterClient) {
5
- return 'needApprove' in adapterClient && 'approveTokens' in adapterClient && 'getAllowance' in adapterClient;
3
+ exports.isApprovableAdapter = isApprovableAdapter;
4
+ function isApprovableAdapter(adapter) {
5
+ return 'needApprove' in adapter && 'approve' in adapter && 'getAllowance' in adapter && 'encodeApprove' in adapter;
6
6
  }
7
+ // export interface ApproveAdapterClient<T> extends AbstractAdapterSigner<{}, {}, {}> {
8
+ // /**
9
+ // * @param fromTokenAddress erc20 address of checked token
10
+ // * @param walletAddress owner wallet address
11
+ // * @param spenderAddress spender address
12
+ // * @return allowance wei amount
13
+ // */
14
+ // getAllowance(fromTokenAddress: string, walletAddress: string, spenderAddress: string): Promise<AllowanceInfo>;
15
+ // /**
16
+ // * Get data for tokens approve
17
+ // * @param tokenAddress erc20 token address
18
+ // * @param spenderAddress spender address
19
+ // * @param amount amount in non wei
20
+ // */
21
+ // encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): T;
22
+ // /**
23
+ // * Check if approve needed.
24
+ // * @param token
25
+ // * @param contractAddress
26
+ // * @param walletAddress
27
+ // * @param amount
28
+ // */
29
+ // needApprove(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string): Promise<boolean>;
30
+ // /**
31
+ // * Executes approve method in ERC-20 token contract.
32
+ // * @param tokenAddress Address of the smart-contract corresponding to the token.
33
+ // * @param spenderAddress Wallet or contract address to approve.
34
+ // * @param amount Token amount to approve in wei.
35
+ // * @param [options] Additional options.
36
+ // * @returns Approval transaction receipt.
37
+ // */
38
+ // approveTokens(
39
+ // tokenAddress: string,
40
+ // spenderAddress: string,
41
+ // amount: BigNumber | 'infinity',
42
+ // options: BasicSendTransactionOptions
43
+ // ): Promise<string>;
44
+ // }
45
+ // export function isApprovableAdapterClient(
46
+ // adapterClient: AbstractAdapterSigner<{}, {}, {}>
47
+ // ): adapterClient is ApproveAdapterClient<EvmTransactionConfig | TronTransactionConfig> {
48
+ // return 'needApprove' in adapterClient && 'approveTokens' in adapterClient && 'getAllowance' in adapterClient;
49
+ // }
@@ -87,9 +87,9 @@ class BlockchainAdapterFactoryService {
87
87
  return null;
88
88
  }
89
89
  connectWallet(blockchain, wallet) {
90
- const store = this.adapterStore[blockchain];
91
- store.client.setWalletAddress(wallet.address);
92
- store.client.setClientWallet(wallet.core);
90
+ const adapter = this.adapterStore[blockchain];
91
+ adapter.signer.setWalletAddress(wallet.address);
92
+ adapter.signer.setWallet(wallet.core);
93
93
  }
94
94
  }
95
95
  exports.BlockchainAdapterFactoryService = BlockchainAdapterFactoryService;
@@ -1,3 +1,3 @@
1
- import { ViemChain } from '../models/viem-chain-type';
2
1
  import { EvmBlockchainName } from '@cryptorubic/core';
2
+ import { ViemChain } from '../models/viem-chain-type';
3
3
  export declare const viemConfig: Partial<Record<EvmBlockchainName, ViemChain>>;
@@ -1428,5 +1428,32 @@ exports.viemConfig = {
1428
1428
  address: '0xcA11bde05977b3631167028862bE2a173976CA11'
1429
1429
  }
1430
1430
  }
1431
+ }),
1432
+ PLASMA: (0, viem_1.defineChain)({
1433
+ id: 9745,
1434
+ name: 'Plasma',
1435
+ network: 'Plasma',
1436
+ nativeCurrency: {
1437
+ name: 'Plasma',
1438
+ symbol: 'XPL',
1439
+ decimals: 18
1440
+ },
1441
+ rpcUrls: {
1442
+ default: {
1443
+ http: ['https://rpc.plasma.to']
1444
+ }
1445
+ },
1446
+ blockExplorers: {
1447
+ default: {
1448
+ name: 'plasmascan',
1449
+ url: 'https://plasmascan.to/'
1450
+ }
1451
+ },
1452
+ testnet: false,
1453
+ contracts: {
1454
+ multicall3: {
1455
+ address: '0xcA11bde05977b3631167028862bE2a173976CA11'
1456
+ }
1457
+ }
1431
1458
  })
1432
1459
  };
@@ -1,3 +1,3 @@
1
- import { ViemChain } from './models/viem-chain-type';
2
1
  import { EvmBlockchainName } from '@cryptorubic/core';
2
+ import { ViemChain } from './models/viem-chain-type';
3
3
  export declare const viemBlockchainMapping: Partial<Record<EvmBlockchainName, ViemChain>>;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.viemBlockchainMapping = void 0;
4
+ const core_1 = require("@cryptorubic/core");
4
5
  const chains_1 = require("viem/chains");
5
6
  const chain_configs_1 = require("./chain-configs/chain-configs");
6
- const core_1 = require("@cryptorubic/core");
7
7
  exports.viemBlockchainMapping = {
8
8
  [core_1.BLOCKCHAIN_NAME.ETHEREUM]: chains_1.mainnet,
9
9
  [core_1.BLOCKCHAIN_NAME.BINANCE_SMART_CHAIN]: chains_1.bsc,
@@ -76,5 +76,6 @@ exports.viemBlockchainMapping = {
76
76
  [core_1.BLOCKCHAIN_NAME.WANCHAIN]: chains_1.wanchain,
77
77
  [core_1.BLOCKCHAIN_NAME.UNICHAIN]: chain_configs_1.viemConfig[core_1.BLOCKCHAIN_NAME.UNICHAIN],
78
78
  [core_1.BLOCKCHAIN_NAME.MORPH]: chain_configs_1.viemConfig[core_1.BLOCKCHAIN_NAME.MORPH], // viem Morph config without multicall address
79
- [core_1.BLOCKCHAIN_NAME.HEMI]: chain_configs_1.viemConfig[core_1.BLOCKCHAIN_NAME.HEMI]
79
+ [core_1.BLOCKCHAIN_NAME.HEMI]: chain_configs_1.viemConfig[core_1.BLOCKCHAIN_NAME.HEMI],
80
+ [core_1.BLOCKCHAIN_NAME.PLASMA]: chain_configs_1.viemConfig[core_1.BLOCKCHAIN_NAME.PLASMA]
80
81
  };
@@ -1,10 +1,10 @@
1
- import { BitcoinBlockchainName, EvmBlockchainName, HttpClient, ICustomLogger, SolanaBlockchainName, SuiBlockchainName, TonBlockchainName, TronBlockchainName } from '@cryptorubic/core';
1
+ import { EvmBlockchainName, HttpClient, ICustomLogger, SolanaBlockchainName, SuiBlockchainName, TronBlockchainName } from '@cryptorubic/core';
2
2
  import { EnvType } from '../constants/models/env-type';
3
3
  import { TronWebProvider } from '../adapters/adapter-tron/models/tron-web-provider';
4
4
  import { TonAdapterConfig } from '../adapters/models/ton-adapter-config';
5
- export type RpcSupportedBlockhainName = Record<EvmBlockchainName, string[]> & Record<TronBlockchainName, TronWebProvider[]> & Record<SolanaBlockchainName, string[]> & Record<TonBlockchainName, string[]> & Record<BitcoinBlockchainName, string[]> & Record<SuiBlockchainName, string[]>;
5
+ export type RpcListType = Record<EvmBlockchainName, string[]> & Record<TronBlockchainName, TronWebProvider[]> & Record<SolanaBlockchainName, string[]> & Record<SuiBlockchainName, string[]>;
6
6
  export interface AdapterFactoryParams {
7
- rpcList: RpcSupportedBlockhainName;
7
+ rpcList: RpcListType;
8
8
  httpClient?: HttpClient;
9
9
  tonParams?: TonAdapterConfig;
10
10
  createLogger?: (label: string) => ICustomLogger;
@@ -1,30 +0,0 @@
1
- import { TronWeb } from 'tronweb';
2
- import BigNumber from 'bignumber.js';
3
- import { AbstractAdapterClient } from '../../common/client/abstract-adapter-client';
4
- import { BlockchainName, HttpClient, ICustomLogger, TokenAmount } from '@cryptorubic/core';
5
- import { ClientAdaptersFactoryParams } from '../../../models/create-factory-params';
6
- import { TronSendTxParams, TronTransactionOptions } from '../models/tron-send-tx-params';
7
- import { TxStatus } from '../../models/web3-public-models/tx-status';
8
- import { TronTransactionConfig } from '../../../../utils/models/tron-transaction-config';
9
- import { ApproveAdapterClient } from '../../models/approve-adapter';
10
- import { AllowanceInfo } from '../../models/common-types';
11
- import { TronParameters } from '../../../../utils/models/tron-parameters';
12
- export declare class TronAdapterClient extends AbstractAdapterClient<TronWeb, TronSendTxParams, string> implements ApproveAdapterClient<TronTransactionConfig> {
13
- private readonly tronWeb;
14
- constructor(tronWeb: TronWeb, httpClient: HttpClient, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
15
- read<T>(contractAddress: string, contractAbi: any, methodName: string, methodArguments?: unknown[]): Promise<T>;
16
- write(contractAddress: string, methodSignature: string, parameters: TronParameters): Promise<string>;
17
- getBlockchainName(): Promise<BlockchainName>;
18
- getAllowance(fromTokenAddress: string, _walletAddress: string, spender: string): Promise<AllowanceInfo>;
19
- needApprove(from: TokenAmount, walletAddress: string, spender: string): Promise<boolean>;
20
- approveTokens(tokenAddress: string, spenderAddress: string, amount?: BigNumber | 'infinity', options?: TronTransactionOptions): Promise<string>;
21
- encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): TronTransactionConfig;
22
- getTransactionStatus(srcTxHash: string): Promise<TxStatus>;
23
- /**
24
- * Gets mined transaction info.
25
- * @param hash Transaction hash.
26
- */
27
- private getTransactionInfo;
28
- sendTransaction(params: TronSendTxParams): Promise<string>;
29
- trySendTransaction(params: TronSendTxParams): Promise<string>;
30
- }
@@ -1,119 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TronAdapterClient = void 0;
4
- const bignumber_js_1 = require("bignumber.js");
5
- const abstract_adapter_client_1 = require("../../common/client/abstract-adapter-client");
6
- const core_1 = require("@cryptorubic/core");
7
- const trc_20_contract_abi_1 = require("../../constants/trc-20-contract-abi");
8
- const tx_status_1 = require("../../models/web3-public-models/tx-status");
9
- const parse_tron_error_1 = require("../utils/parse-tron-error");
10
- const tron_adapter_1 = require("../tron-adapter");
11
- const tron_web3_pure_1 = require("../../../../utils/web3-types/tron-web3-pure");
12
- const options_1 = require("../../utils/options");
13
- class TronAdapterClient extends abstract_adapter_client_1.AbstractAdapterClient {
14
- constructor(tronWeb, httpClient, logger, clientParams) {
15
- super(httpClient, logger, clientParams);
16
- this.tronWeb = tronWeb;
17
- }
18
- async read(contractAddress, contractAbi, methodName, methodArguments = []) {
19
- this.tronWeb.setAddress(contractAddress);
20
- const contract = await this.tronWeb.contract(contractAbi, contractAddress);
21
- const response = await contract[methodName](...methodArguments).call();
22
- return tron_web3_pure_1.TronWeb3Pure.flattenParameterToPrimitive(response);
23
- }
24
- async write(contractAddress, methodSignature, parameters) {
25
- const transaction = await this.clientWallet.transactionBuilder.triggerSmartContract(contractAddress, methodSignature, {}, parameters, this.walletAddress);
26
- const signedTransaction = await this.clientWallet.trx.sign(transaction.transaction);
27
- const receipt = await this.clientWallet.trx.sendRawTransaction(signedTransaction);
28
- return receipt.transaction.txID;
29
- }
30
- getBlockchainName() {
31
- return Promise.resolve(core_1.BLOCKCHAIN_NAME.TRON);
32
- }
33
- async getAllowance(fromTokenAddress, _walletAddress, spender) {
34
- const [decimals, allowance] = await Promise.all([
35
- this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'decimals'),
36
- this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'allowance', [spender])
37
- ]);
38
- const allowanceWeiBN = new bignumber_js_1.default(allowance);
39
- const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
40
- return { allowanceNonWei, allowanceWei: allowanceWeiBN };
41
- }
42
- async needApprove(from, walletAddress, spender) {
43
- if (from.isNative)
44
- return false;
45
- const { allowanceWei } = await this.getAllowance(from.address, walletAddress, spender);
46
- return allowanceWei.lt(from.weiAmount);
47
- }
48
- async approveTokens(tokenAddress, spenderAddress, amount = 'infinity', options = {}) {
49
- try {
50
- const contract = await this.tronWeb.contract(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokenAddress);
51
- const rawValue = amount === 'infinity' ? new bignumber_js_1.default(2).pow(256).minus(1) : amount;
52
- const transactionHash = await contract.approve(spenderAddress, rawValue.toFixed(0)).send({
53
- ...(options.feeLimit && {
54
- feeLimit: (0, options_1.stringifyAmount)(options.feeLimit)
55
- })
56
- });
57
- if (options.onTransactionHash) {
58
- options.onTransactionHash(transactionHash);
59
- }
60
- return transactionHash;
61
- }
62
- catch (err) {
63
- console.error('Approve execution error: ', err);
64
- throw (0, parse_tron_error_1.parseTronError)(err);
65
- }
66
- }
67
- encodeApprove(tokenAddress, spenderAddress, amount) {
68
- const amountWei = amount ?? new bignumber_js_1.default(2).pow(256).minus(1).toFixed();
69
- return tron_adapter_1.TronAdapter.encodeMethodCall(tokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'approve', [
70
- { type: 'address', value: spenderAddress },
71
- { type: 'uint256', value: amountWei }
72
- ]);
73
- }
74
- async getTransactionStatus(srcTxHash) {
75
- const txReceipt = await this.getTransactionInfo(srcTxHash);
76
- if (txReceipt?.receipt) {
77
- if (txReceipt.result === 'FAILED') {
78
- return tx_status_1.TX_STATUS.FAIL;
79
- }
80
- return tx_status_1.TX_STATUS.SUCCESS;
81
- }
82
- return tx_status_1.TX_STATUS.PENDING;
83
- }
84
- /**
85
- * Gets mined transaction info.
86
- * @param hash Transaction hash.
87
- */
88
- async getTransactionInfo(hash) {
89
- return this.tronWeb.trx.getTransactionInfo(hash);
90
- }
91
- async sendTransaction(params) {
92
- try {
93
- const transaction = await this.tronWeb.transactionBuilder.triggerSmartContract(params.contractAddress, params.methodSignature, params.txOptions, params.parameters, this.walletAddress);
94
- const signedTransaction = await this.tronWeb.trx.sign(transaction.transaction);
95
- const receipt = await this.tronWeb.trx.sendRawTransaction(signedTransaction);
96
- if (params.txOptions.onTransactionHash) {
97
- params.txOptions.onTransactionHash(receipt.transaction.txID);
98
- }
99
- return receipt.transaction.txID;
100
- }
101
- catch (err) {
102
- console.error('Method execution error: ', err);
103
- throw (0, parse_tron_error_1.parseTronError)(err);
104
- }
105
- }
106
- async trySendTransaction(params) {
107
- try {
108
- await this.tronWeb.transactionBuilder.estimateEnergy(params.contractAddress, params.methodSignature, {}, params.parameters, this.walletAddress);
109
- }
110
- catch (err) {
111
- const errMessage = typeof err === 'object' ? err.message : err;
112
- if (errMessage !== 'this node does not support estimate energy') {
113
- throw new Error('Tron transaction simulation error');
114
- }
115
- }
116
- return this.sendTransaction(params);
117
- }
118
- }
119
- exports.TronAdapterClient = TronAdapterClient;