@cryptorubic/web3 1.0.0-alpha.no-sdk.23 → 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 (39) 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 +3 -2
  5. package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.js +8 -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} +2 -3
  21. package/src/lib/adapter/adapters/adapter-ton/{client/ton-adapter-client.js → signer/ton-adapter-signer.js} +5 -8
  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 +5 -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/{client/abstract-adapter-client.d.ts → signer/abstract-adapter-signer.d.ts} +4 -5
  30. package/src/lib/adapter/adapters/common/{client/abstract-adapter-client.js → signer/abstract-adapter-signer.js} +7 -7
  31. package/src/lib/adapter/adapters/models/approve-adapter.d.ts +7 -6
  32. package/src/lib/adapter/adapters/models/approve-adapter.js +46 -3
  33. package/src/lib/adapter/blockchain-adapter-factory.service.js +3 -3
  34. package/src/lib/adapter/constants/chain-configs/chain-configs.d.ts +1 -1
  35. package/src/lib/adapter/constants/chain-configs/chain-configs.js +27 -0
  36. package/src/lib/adapter/constants/viem-blockchain-mapping.d.ts +1 -1
  37. package/src/lib/adapter/constants/viem-blockchain-mapping.js +3 -2
  38. package/src/lib/adapter/adapters/adapter-tron/client/tron-adapter-client.d.ts +0 -30
  39. package/src/lib/adapter/adapters/adapter-tron/client/tron-adapter-client.js +0 -119
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cryptorubic/web3",
3
- "version": "1.0.0-alpha.no-sdk.23",
3
+ "version": "1.0.0-alpha.no-sdk.24",
4
4
  "dependencies": {
5
5
  "@ethersproject/bignumber": "^5.8.0",
6
6
  "@mysten/sui": "^1.24.0",
package/src/index.d.ts CHANGED
@@ -1,32 +1,32 @@
1
1
  export * from './lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter';
2
- export * from './lib/adapter/adapters/adapter-bitcoin/client/bitcoin-adapter-client';
2
+ export * from './lib/adapter/adapters/adapter-bitcoin/signer/bitcoin-adapter-signer';
3
3
  export * from './lib/adapter/adapters/adapter-bitcoin/models/btc-send-tx-params';
4
4
  export * from './lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-psbt-encoded-config';
5
5
  export * from './lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-trade-types';
6
6
  export * from './lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-transfer-encoded-config';
7
- export * from './lib/adapter/adapters/adapter-evm/client/evm-adapter-client';
7
+ export * from './lib/adapter/adapters/adapter-evm/signer/evm-adapter-signer';
8
8
  export * from './lib/adapter/adapters/adapter-evm/constants/proxy-hash-errors';
9
9
  export * from './lib/adapter/adapters/adapter-evm/evm-adapter';
10
10
  export * from './lib/adapter/adapters/adapter-evm/models/evm-send-tx-params';
11
11
  export * from './lib/adapter/adapters/adapter-evm/utils/parse-evm-error';
12
- export * from './lib/adapter/adapters/adapter-solana/client/solana-adapter-client';
12
+ export * from './lib/adapter/adapters/adapter-solana/signer/solana-adapter-signer';
13
13
  export * from './lib/adapter/adapters/adapter-solana/models/solana-send-tx-params';
14
14
  export * from './lib/adapter/adapters/adapter-solana/services/solana-tokens-service';
15
15
  export * from './lib/adapter/adapters/adapter-solana/solana-adapter';
16
- export * from './lib/adapter/adapters/adapter-sui/client/sui-adapter-client';
16
+ export * from './lib/adapter/adapters/adapter-sui/signer/sui-adapter-signer';
17
17
  export * from './lib/adapter/adapters/adapter-sui/models/sui-send-tx-params';
18
18
  export * from './lib/adapter/adapters/adapter-sui/sui-adapter';
19
- export * from './lib/adapter/adapters/adapter-ton/client/ton-adapter-client';
19
+ export * from './lib/adapter/adapters/adapter-ton/signer/ton-adapter-signer';
20
20
  export * from './lib/adapter/adapters/adapter-ton/models/ton-send-tx-params';
21
21
  export * from './lib/adapter/adapters/adapter-ton/services/ton-api.service';
22
22
  export * from './lib/adapter/adapters/adapter-ton/services/ton-client/ton-client';
23
23
  export * from './lib/adapter/adapters/adapter-ton/ton-adapter';
24
- export * from './lib/adapter/adapters/adapter-tron/client/tron-adapter-client';
24
+ export * from './lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer';
25
25
  export * from './lib/adapter/adapters/adapter-tron/models/tron-send-tx-params';
26
26
  export * from './lib/adapter/adapters/adapter-tron/tron-adapter';
27
27
  export * from './lib/adapter/adapters/adapter-tron/utils/parse-tron-error';
28
28
  export * from './lib/adapter/adapters/common/abstract-adapter';
29
- export * from './lib/adapter/adapters/common/client/abstract-adapter-client';
29
+ export * from './lib/adapter/adapters/common/signer/abstract-adapter-signer';
30
30
  export * from './lib/adapter/adapters/constants/erc20-token-abi';
31
31
  export * from './lib/adapter/adapters/constants/possible-errors';
32
32
  export * from './lib/adapter/adapters/constants/trc-20-contract-abi';
package/src/index.js CHANGED
@@ -2,34 +2,34 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter"), exports);
5
- tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-bitcoin/client/bitcoin-adapter-client"), exports);
5
+ tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-bitcoin/signer/bitcoin-adapter-signer"), exports);
6
6
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-bitcoin/models/btc-send-tx-params"), exports);
7
7
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-psbt-encoded-config"), exports);
8
8
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-trade-types"), exports);
9
9
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-transfer-encoded-config"), exports);
10
- tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-evm/client/evm-adapter-client"), exports);
10
+ tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-evm/signer/evm-adapter-signer"), exports);
11
11
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-evm/constants/proxy-hash-errors"), exports);
12
12
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-evm/evm-adapter"), exports);
13
13
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-evm/models/evm-send-tx-params"), exports);
14
14
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-evm/utils/parse-evm-error"), exports);
15
- tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-solana/client/solana-adapter-client"), exports);
15
+ tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-solana/signer/solana-adapter-signer"), exports);
16
16
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-solana/models/solana-send-tx-params"), exports);
17
17
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-solana/services/solana-tokens-service"), exports);
18
18
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-solana/solana-adapter"), exports);
19
- tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-sui/client/sui-adapter-client"), exports);
19
+ tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-sui/signer/sui-adapter-signer"), exports);
20
20
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-sui/models/sui-send-tx-params"), exports);
21
21
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-sui/sui-adapter"), exports);
22
- tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-ton/client/ton-adapter-client"), exports);
22
+ tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-ton/signer/ton-adapter-signer"), exports);
23
23
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-ton/models/ton-send-tx-params"), exports);
24
24
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-ton/services/ton-api.service"), exports);
25
25
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-ton/services/ton-client/ton-client"), exports);
26
26
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-ton/ton-adapter"), exports);
27
- tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-tron/client/tron-adapter-client"), exports);
27
+ tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer"), exports);
28
28
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-tron/models/tron-send-tx-params"), exports);
29
29
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-tron/tron-adapter"), exports);
30
30
  tslib_1.__exportStar(require("./lib/adapter/adapters/adapter-tron/utils/parse-tron-error"), exports);
31
31
  tslib_1.__exportStar(require("./lib/adapter/adapters/common/abstract-adapter"), exports);
32
- tslib_1.__exportStar(require("./lib/adapter/adapters/common/client/abstract-adapter-client"), exports);
32
+ tslib_1.__exportStar(require("./lib/adapter/adapters/common/signer/abstract-adapter-signer"), exports);
33
33
  tslib_1.__exportStar(require("./lib/adapter/adapters/constants/erc20-token-abi"), exports);
34
34
  tslib_1.__exportStar(require("./lib/adapter/adapters/constants/possible-errors"), exports);
35
35
  tslib_1.__exportStar(require("./lib/adapter/adapters/constants/trc-20-contract-abi"), exports);
@@ -4,17 +4,18 @@ import { AbstractAdapter } from '../common/abstract-adapter';
4
4
  import { BtcWallet } from '../models/btc-wallet-provider';
5
5
  import { BasicSendTransactionOptions } from '../models/basic-transaction-options';
6
6
  import { ClientAdaptersFactoryParams } from '../../models/create-factory-params';
7
- import { BitcoinAdapterClient } from './client/bitcoin-adapter-client';
7
+ import { BitcoinAdapterSigner } from './signer/bitcoin-adapter-signer';
8
8
  import { Abi } from 'viem';
9
9
  import { Web3PrimitiveType } from '../../../utils/models/primitive-types';
10
10
  import { ContractMulticallResponse } from '../models/web3-public-models/contract-multicall-response';
11
11
  import { MethodData } from '../models/web3-public-models/method-data';
12
12
  export declare class BitcoinAdapter extends AbstractAdapter<BtcWallet, BtcWallet, BitcoinBlockchainName> {
13
13
  private readonly httpClient;
14
- readonly client: BitcoinAdapterClient;
14
+ readonly signer: BitcoinAdapterSigner;
15
15
  get public(): BtcWallet;
16
16
  constructor(httpClient: HttpClient, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
17
17
  callContractMethod<T extends Web3PrimitiveType = string>(): Promise<T>;
18
+ read<T>(args: unknown): Promise<T>;
18
19
  getBalance(userAddress: string, _tokenAddress?: string): Promise<BigNumber>;
19
20
  getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
20
21
  multicallContractsMethods<Output extends Web3PrimitiveType>(contractAbi: Abi, contractsData: {
@@ -4,7 +4,7 @@ exports.BitcoinAdapter = void 0;
4
4
  const core_1 = require("@cryptorubic/core");
5
5
  const bignumber_js_1 = require("bignumber.js");
6
6
  const abstract_adapter_1 = require("../common/abstract-adapter");
7
- const bitcoin_adapter_client_1 = require("./client/bitcoin-adapter-client");
7
+ const bitcoin_adapter_signer_1 = require("./signer/bitcoin-adapter-signer");
8
8
  class BitcoinAdapter extends abstract_adapter_1.AbstractAdapter {
9
9
  get public() {
10
10
  throw new Error('public property is not set in BitcoinAdapter.');
@@ -12,11 +12,14 @@ class BitcoinAdapter extends abstract_adapter_1.AbstractAdapter {
12
12
  constructor(httpClient, logger, clientParams) {
13
13
  super(core_1.BLOCKCHAIN_NAME.BITCOIN, logger);
14
14
  this.httpClient = httpClient;
15
- this.client = new bitcoin_adapter_client_1.BitcoinAdapterClient(httpClient, logger, clientParams);
15
+ this.signer = new bitcoin_adapter_signer_1.BitcoinAdapterSigner(httpClient, logger, clientParams);
16
16
  }
17
17
  callContractMethod() {
18
18
  throw new Error('Method not implemented.');
19
19
  }
20
+ read(args) {
21
+ throw new Error('Not implemented');
22
+ }
20
23
  async getBalance(userAddress, _tokenAddress) {
21
24
  const url = `https://api.blockcypher.com/v1/btc/main/addrs/${userAddress}/balance`;
22
25
  const response = await this.httpClient.get(url);
@@ -65,7 +68,7 @@ class BitcoinAdapter extends abstract_adapter_1.AbstractAdapter {
65
68
  return [core_1.nativeTokensList[core_1.BLOCKCHAIN_NAME.BITCOIN]];
66
69
  }
67
70
  async getPublicKeyFromWallet() {
68
- const res = await this.client.clientWallet.request({
71
+ const res = await this.signer.wallet.request({
69
72
  method: 'request_accounts_and_keys',
70
73
  params: {
71
74
  purposes: ['payment']
@@ -79,7 +82,7 @@ class BitcoinAdapter extends abstract_adapter_1.AbstractAdapter {
79
82
  }
80
83
  async transfer(recipient, amount, fromAddress, memo, options) {
81
84
  const hashPromise = new Promise((resolve, reject) => {
82
- this.client.clientWallet.request({
85
+ this.signer.wallet.request({
83
86
  method: 'transfer',
84
87
  params: [
85
88
  {
@@ -107,7 +110,6 @@ class BitcoinAdapter extends abstract_adapter_1.AbstractAdapter {
107
110
  try {
108
111
  const hash = await hashPromise;
109
112
  if (typeof hash === 'string') {
110
- // const statusData = this.getSrcStatusRecursive(srcTxHash, BLOCKCHAIN_NAME.BITCOIN, 300_000);
111
113
  return hash;
112
114
  }
113
115
  throw new Error();
@@ -118,7 +120,7 @@ class BitcoinAdapter extends abstract_adapter_1.AbstractAdapter {
118
120
  }
119
121
  async sendPsbtTransaction(psbt, userAddress, inputIndexes, options) {
120
122
  const hashPromise = new Promise((resolve, reject) => {
121
- this.client.clientWallet.request({
123
+ this.signer.wallet.request({
122
124
  method: 'sign_psbt',
123
125
  params: {
124
126
  psbt,
@@ -1,12 +1,11 @@
1
1
  import { BlockchainName, HttpClient, ICustomLogger } from '@cryptorubic/core';
2
2
  import { ClientAdaptersFactoryParams } from '../../../models/create-factory-params';
3
3
  import { BitconSendTxParams } from '../models/btc-send-tx-params';
4
- import { AbstractAdapterClient } from '../../common/client/abstract-adapter-client';
4
+ import { AbstractAdapterSigner } from '../../common/signer/abstract-adapter-signer';
5
5
  import { BtcWallet } from '../../models/btc-wallet-provider';
6
6
  import { TxStatus } from '../../models/web3-public-models/tx-status';
7
- export declare class BitcoinAdapterClient extends AbstractAdapterClient<BtcWallet, BitconSendTxParams, string> {
7
+ export declare class BitcoinAdapterSigner extends AbstractAdapterSigner<BtcWallet, BitconSendTxParams, string> {
8
8
  constructor(httpClient: HttpClient, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
9
- read<T>(args: unknown): Promise<T>;
10
9
  write(args: unknown): Promise<string>;
11
10
  getBlockchainName(): Promise<BlockchainName>;
12
11
  getTransactionStatus(txHash: string): Promise<TxStatus>;
@@ -1,17 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BitcoinAdapterClient = void 0;
3
+ exports.BitcoinAdapterSigner = void 0;
4
4
  const core_1 = require("@cryptorubic/core");
5
- const abstract_adapter_client_1 = require("../../common/client/abstract-adapter-client");
5
+ const abstract_adapter_signer_1 = require("../../common/signer/abstract-adapter-signer");
6
6
  const tx_status_1 = require("../../models/web3-public-models/tx-status");
7
7
  const waitFor_1 = require("../../utils/waitFor");
8
- class BitcoinAdapterClient extends abstract_adapter_client_1.AbstractAdapterClient {
8
+ class BitcoinAdapterSigner extends abstract_adapter_signer_1.AbstractAdapterSigner {
9
9
  constructor(httpClient, logger, clientParams) {
10
10
  super(httpClient, logger, clientParams);
11
11
  }
12
- read(args) {
13
- throw new Error('Not implemented');
14
- }
15
12
  write(args) {
16
13
  throw new Error('Not implemented');
17
14
  }
@@ -33,7 +30,7 @@ class BitcoinAdapterClient extends abstract_adapter_client_1.AbstractAdapterClie
33
30
  }
34
31
  async transfer(txConfig, options) {
35
32
  const hashPromise = new Promise((resolve, reject) => {
36
- this.clientWallet.request({
33
+ this.wallet.request({
37
34
  method: 'transfer',
38
35
  params: [
39
36
  {
@@ -72,7 +69,7 @@ class BitcoinAdapterClient extends abstract_adapter_client_1.AbstractAdapterClie
72
69
  }
73
70
  async sendPsbtTransaction(txConfig, options) {
74
71
  const hashPromise = new Promise((resolve, reject) => {
75
- this.clientWallet.request({
72
+ this.wallet.request({
76
73
  method: 'sign_psbt',
77
74
  params: [
78
75
  {
@@ -122,4 +119,4 @@ class BitcoinAdapterClient extends abstract_adapter_client_1.AbstractAdapterClie
122
119
  return 'psbt' in txConfig;
123
120
  }
124
121
  }
125
- exports.BitcoinAdapterClient = BitcoinAdapterClient;
122
+ exports.BitcoinAdapterSigner = BitcoinAdapterSigner;
@@ -1,17 +1,20 @@
1
- import { Abi, MulticallResponse, MulticallParameters, PublicActions, PublicClient, WalletClient, WalletActions, BlockNumber, BlockTag, GetBlockReturnType } from 'viem';
1
+ import { Abi, MulticallResponse, MulticallParameters, PublicActions, PublicClient, WalletClient, WalletActions, BlockNumber, BlockTag, GetBlockReturnType, TransactionReceipt } from 'viem';
2
2
  import { AbstractAdapter } from '../common/abstract-adapter';
3
3
  import { EvmBlockchainName, ICustomLogger, Token, TokenAmount, PriceTokenAmount, HttpClient } from '@cryptorubic/core';
4
4
  import BigNumber from 'bignumber.js';
5
5
  import { EvmAdapterOptions } from '../models/evm-adapter-options';
6
6
  import { EvmTransactionConfig } from '../../../utils/models/evm-transaction-config';
7
- import { EvmAdapterClient } from './client/evm-adapter-client';
7
+ import { EvmAdapterSigner } from './signer/evm-adapter-signer';
8
8
  import { ClientAdaptersFactoryParams } from '../../models/create-factory-params';
9
9
  import { Web3PrimitiveType } from '../../../utils/models/primitive-types';
10
10
  import { ContractMulticallResponse } from '../models/web3-public-models/contract-multicall-response';
11
11
  import { MethodData } from '../models/web3-public-models/method-data';
12
12
  import { GasPrice } from '../models/evm-web3-public-models/gas-price';
13
- export declare class EvmAdapter extends AbstractAdapter<PublicActions & PublicClient, WalletClient & WalletActions, EvmBlockchainName> {
14
- readonly client: EvmAdapterClient;
13
+ import { EvmTransactionOptions } from './models/evm-send-tx-params';
14
+ import { ApprovableAdapter } from '../models/approve-adapter';
15
+ import { AllowanceInfo } from '../models/common-types';
16
+ export declare class EvmAdapter extends AbstractAdapter<PublicActions & PublicClient, WalletClient & WalletActions, EvmBlockchainName> implements ApprovableAdapter<EvmTransactionConfig> {
17
+ readonly signer: EvmAdapterSigner;
15
18
  needPreswapAction(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string): Promise<boolean>;
16
19
  handlePreswap(contractAddress: string, walletAddress: string, tokenAmount: TokenAmount): Promise<void>;
17
20
  constructor(httpClient: HttpClient, adapterOptions: EvmAdapterOptions, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
@@ -34,6 +37,7 @@ export declare class EvmAdapter extends AbstractAdapter<PublicActions & PublicCl
34
37
  multicallByContract<T>(contracts: MulticallParameters, allowErrors?: boolean): Promise<MulticallResponse<T>[]>;
35
38
  multicallByAddress<T>(address: string, abi: Abi, method: string, methodArgs?: unknown[][], allowErrors?: boolean): Promise<MulticallResponse<T>[]>;
36
39
  static encodeMethodCall(contractAddress: string, contractAbi: Abi, method: string, parameters?: unknown[], value?: string): EvmTransactionConfig;
40
+ read<T>(address: string, abi: Abi, method: string, methodArgs?: unknown[]): Promise<T>;
37
41
  /**
38
42
  * Generate random HEX strings from a given byte size.
39
43
  * @param size byte size.
@@ -55,6 +59,34 @@ export declare class EvmAdapter extends AbstractAdapter<PublicActions & PublicCl
55
59
  */
56
60
  getBalance(walletAddress: string, tokenAddress?: string): Promise<BigNumber>;
57
61
  getTransactionCount(walletAddress: string): Promise<number>;
62
+ getAllowance(fromTokenAddress: string, walletAddress: string, spenderAddress: string): Promise<AllowanceInfo>;
63
+ needApprove(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string): Promise<boolean>;
64
+ /**
65
+ * Executes approve method in ERC-20 token contract.
66
+ * @param tokenAddress Address of the smart-contract corresponding to the token.
67
+ * @param spenderAddress Wallet or contract address to approve.
68
+ * @param amount Token amount to approve in wei.
69
+ * @param [options] Additional options.
70
+ * @returns Approval transaction hash.
71
+ */
72
+ approveTokens(walletAddress: string, tokenAddress: string, spenderAddress: string, amount?: BigNumber | 'infinity', options?: EvmTransactionOptions): Promise<string>;
73
+ /**
74
+ * Build encoded approve transaction config.
75
+ * @param tokenAddress Address of the smart-contract corresponding to the token.
76
+ * @param spenderAddress Wallet or contract address to approve.
77
+ * @param amount wei amount of tokens in approval window in spending cap field
78
+ * @returns Encoded approve transaction config.
79
+ */
80
+ encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): EvmTransactionConfig;
81
+ needPermit2Approve(token: TokenAmount, permit2Address: string, walletAddress: string, spenderAddress: string): Promise<boolean>;
82
+ /**
83
+ * @param tokenAddress Token address you want to approve for spending
84
+ * @param permit2Address Addres of permit2 contract
85
+ * @param spenderAddress Contract address spending your tokens
86
+ * @param amount Approved amount
87
+ * @param deadline Ms number added to current time (Date.now()) until approve expiration
88
+ */
89
+ approveOnPermit2(tokenAddress: string, spenderAddress: string, amount?: BigNumber | 'infinity', options?: EvmTransactionOptions): Promise<TransactionReceipt>;
58
90
  /**
59
91
  * Calculates EIP-1559 specific gas details.
60
92
  * @see {@link https://github.com/ethers-io/ethers.js/blob/master/packages/abstract-provider/src.ts/index.ts#L235}
@@ -9,11 +9,14 @@ const core_1 = require("@cryptorubic/core");
9
9
  const bignumber_js_1 = require("bignumber.js");
10
10
  const web3_pure_1 = require("../../../utils/web3-pure");
11
11
  const possible_errors_1 = require("../constants/possible-errors");
12
- const evm_adapter_client_1 = require("./client/evm-adapter-client");
12
+ const evm_adapter_signer_1 = require("./signer/evm-adapter-signer");
13
13
  const rubic_sdk_error_1 = require("../../../errors/rubic-sdk.error");
14
+ const uni_v3_permit_abi_1 = require("../constants/uni-v3-permit-abi");
15
+ const insufficient_funds_gas_price_value_error_1 = require("../../../errors/cross-chain/insufficient-funds-gas-price-value.error");
16
+ const options_1 = require("../utils/options");
14
17
  class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
15
18
  async needPreswapAction(token, contractAddress, walletAddress, amount) {
16
- return this.client.needApprove(token, contractAddress, walletAddress, amount);
19
+ return this.needApprove(token, contractAddress, walletAddress, amount);
17
20
  }
18
21
  async handlePreswap(contractAddress, walletAddress, tokenAmount) {
19
22
  const approveAmount = this.blockchain === core_1.BLOCKCHAIN_NAME.GNOSIS || this.blockchain === core_1.BLOCKCHAIN_NAME.CRONOS
@@ -23,12 +26,12 @@ class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
23
26
  const fromTokenAddress = isNative && tokenAmount.blockchain === core_1.BLOCKCHAIN_NAME.METIS
24
27
  ? '0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000'
25
28
  : tokenAmount.blockchain;
26
- await this.client.writeContract(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', '0', [approveAmount]);
29
+ await this.signer.writeContract(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', '0', [approveAmount]);
27
30
  }
28
31
  constructor(httpClient, adapterOptions, logger, clientParams) {
29
32
  super(adapterOptions.blockchain, logger);
30
33
  this.public = this.createPublicClient(adapterOptions.rpcList);
31
- this.client = new evm_adapter_client_1.EvmAdapterClient(this.public, httpClient, logger, clientParams);
34
+ this.signer = new evm_adapter_signer_1.EvmAdapterSigner(this.public, httpClient, logger, clientParams);
32
35
  }
33
36
  async callContractMethod(contractAddress, contractAbi, methodName, methodArguments = [], options = {}) {
34
37
  return this.public.readContract({
@@ -175,6 +178,15 @@ class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
175
178
  throw err;
176
179
  }
177
180
  }
181
+ async read(address, abi, method, methodArgs = []) {
182
+ const result = await this.public.readContract({
183
+ abi,
184
+ address: address,
185
+ args: methodArgs,
186
+ functionName: method
187
+ });
188
+ return result;
189
+ }
178
190
  /**
179
191
  * Generate random HEX strings from a given byte size.
180
192
  * @param size byte size.
@@ -267,7 +279,7 @@ class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
267
279
  async getBalance(walletAddress, tokenAddress) {
268
280
  const isToken = tokenAddress && !web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.EVM, tokenAddress);
269
281
  if (isToken) {
270
- const tokenBalance = await this.client.read(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'balanceOf', [walletAddress]);
282
+ const tokenBalance = await this.read(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'balanceOf', [walletAddress]);
271
283
  return new bignumber_js_1.default(tokenBalance);
272
284
  }
273
285
  const nativeBalance = await this.public.getBalance({
@@ -281,85 +293,99 @@ class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
281
293
  });
282
294
  return transactionCount ?? 0;
283
295
  }
284
- // public async getAllowance(fromTokenAddress: string, walletAddress: string, spenderAddress: string): Promise<AllowanceInfo> {
285
- // const [decimals, allowance] = await Promise.all([
286
- // this.read<string>(fromTokenAddress, erc20TokenAbi, 'decimals'),
287
- // this.read<string>(fromTokenAddress, erc20TokenAbi, 'allowance', [walletAddress, spenderAddress])
288
- // ]);
289
- // const allowanceWeiBN = new BigNumber(allowance);
290
- // const allowanceNonWei = Token.fromWei(allowanceWeiBN, Number(decimals));
291
- // return { allowanceNonWei, allowanceWei: allowanceWeiBN };
292
- // }
293
- // public encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): EvmTransactionConfig {
294
- // const amountWei = amount ?? new BigNumber(2).pow(256).minus(1).toFixed();
295
- // const tx = EvmAdapter.encodeMethodCall(tokenAddress, erc20TokenAbi, 'approve', [spenderAddress, amountWei]);
296
- // return {
297
- // data: tx.data,
298
- // to: tx.to,
299
- // value: tx.value
300
- // };
301
- // }
302
- // public async needApprove(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string): Promise<boolean> {
303
- // // Native coin in METIS can be Token required approve
304
- // if (token.isNative && token.blockchain !== BLOCKCHAIN_NAME.METIS) {
305
- // return false;
306
- // }
307
- // // Special native address for METIS native coin
308
- // const fromTokenAddress =
309
- // token.isNative && token.blockchain === BLOCKCHAIN_NAME.METIS ? '0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000' : token.address;
310
- // const { allowanceWei } = await this.getAllowance(fromTokenAddress, walletAddress, contractAddress);
311
- // return allowanceWei.lt(token.weiAmount);
312
- // }
313
- // public async approve(fromAddress: string, tokenAddress: string, spenderAddress: string, amount?: string): Promise<string> {
314
- // const config = this.encodeApprove(tokenAddress, spenderAddress, amount);
315
- // return this.write(fromAddress, config.to, config.value, config.data);
316
- // }
317
- // public async needPermit2Approve(
318
- // token: TokenAmount,
319
- // permit2Address: string,
320
- // walletAddress: string,
321
- // spenderAddress: string
322
- // ): Promise<boolean> {
323
- // const res = await this.read<Permit2AllowanceContractResponse>(permit2Address, UNI_V3_PERMIT_2_ABI, 'allowance', [
324
- // walletAddress,
325
- // token.address,
326
- // spenderAddress
327
- // ]);
328
- // const [amount, expiration, _nonce] = res;
329
- // return token.weiAmount.gt(amount) || new BigNumber(Date.now()).gt(Number(expiration) * 1000);
330
- // }
331
- // public encodePermit2Approve(
332
- // tokenAddress: string,
333
- // spenderAddress: string,
334
- // permit2Address: string,
335
- // expiration: string,
336
- // amount: string
337
- // ): EvmTransactionConfig {
338
- // const tx = EvmAdapter.encodeMethodCall(permit2Address, UNI_V3_PERMIT_2_ABI, 'approve', [
339
- // tokenAddress,
340
- // spenderAddress,
341
- // amount,
342
- // expiration
343
- // ]);
344
- // return {
345
- // data: tx.data,
346
- // value: tx.value,
347
- // to: tx.to
348
- // };
349
- // }
350
- // public async approveOnPermit2(
351
- // fromAddress: string,
352
- // tokenAddress: string,
353
- // permit2Address: string,
354
- // spenderAddress: string,
355
- // deadline: BigNumber = new BigNumber(1_000_000),
356
- // amount?: BigNumber
357
- // ): Promise<string> {
358
- // const approveAmount = amount ? amount : new BigNumber(2).pow(256).minus(1);
359
- // const expiration = new BigNumber(Date.now()).plus(deadline).toFixed();
360
- // const tx = this.encodePermit2Approve(tokenAddress, spenderAddress, permit2Address, expiration, approveAmount.toFixed());
361
- // return this.write(fromAddress, tx.to, tx.value, tx.data);
362
- // }
296
+ async getAllowance(fromTokenAddress, walletAddress, spenderAddress) {
297
+ const [decimals, allowance] = await Promise.all([
298
+ this.read(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'decimals'),
299
+ this.read(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'allowance', [walletAddress, spenderAddress])
300
+ ]);
301
+ const allowanceWeiBN = new bignumber_js_1.default(allowance);
302
+ const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
303
+ return { allowanceNonWei, allowanceWei: allowanceWeiBN };
304
+ }
305
+ async needApprove(token, contractAddress, walletAddress, amount) {
306
+ // Native coin in METIS can be Token required approve
307
+ if (token.isNative && token.blockchain !== core_1.BLOCKCHAIN_NAME.METIS) {
308
+ return false;
309
+ }
310
+ // Special native address for METIS native coin
311
+ const fromTokenAddress = token.isNative && token.blockchain === core_1.BLOCKCHAIN_NAME.METIS ? '0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000' : token.address;
312
+ const { allowanceWei } = await this.getAllowance(fromTokenAddress, walletAddress, contractAddress);
313
+ return allowanceWei.lt(token.weiAmount);
314
+ }
315
+ /**
316
+ * Executes approve method in ERC-20 token contract.
317
+ * @param tokenAddress Address of the smart-contract corresponding to the token.
318
+ * @param spenderAddress Wallet or contract address to approve.
319
+ * @param amount Token amount to approve in wei.
320
+ * @param [options] Additional options.
321
+ * @returns Approval transaction hash.
322
+ */
323
+ async approveTokens(walletAddress, tokenAddress, spenderAddress, amount = 'infinity', options = {}) {
324
+ try {
325
+ const rawValue = amount === 'infinity' ? new bignumber_js_1.default(2).pow(256).minus(1) : amount;
326
+ const encodedApprove = this.encodeApprove(tokenAddress, spenderAddress, rawValue.toFixed(0));
327
+ const gaslessParams = {
328
+ account: walletAddress,
329
+ to: tokenAddress,
330
+ value: BigInt('0'),
331
+ data: encodedApprove.data
332
+ };
333
+ const gas = await this.public.estimateGas({
334
+ ...gaslessParams,
335
+ ...(0, options_1.getViemGasOptions)(options)
336
+ });
337
+ const gasfulViemOptions = {
338
+ ...gaslessParams,
339
+ ...(0, options_1.getViemGasOptions)(options),
340
+ gas: gas.toString()
341
+ };
342
+ const receipt = await this.signer.executeContractMethod(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', [spenderAddress, BigInt(rawValue.toFixed(0))], gasfulViemOptions);
343
+ return receipt.transactionHash;
344
+ }
345
+ catch (err) {
346
+ if (err?.message?.includes('gas required exceeds allowance') || err?.message?.includes('insufficient balance to pay for gas')) {
347
+ throw new insufficient_funds_gas_price_value_error_1.InsufficientFundsGasPriceValueError();
348
+ }
349
+ console.debug(err);
350
+ throw err;
351
+ }
352
+ }
353
+ /**
354
+ * Build encoded approve transaction config.
355
+ * @param tokenAddress Address of the smart-contract corresponding to the token.
356
+ * @param spenderAddress Wallet or contract address to approve.
357
+ * @param amount wei amount of tokens in approval window in spending cap field
358
+ * @returns Encoded approve transaction config.
359
+ */
360
+ encodeApprove(tokenAddress, spenderAddress, amount) {
361
+ const amountWei = amount ?? new bignumber_js_1.default(2).pow(256).minus(1).toFixed();
362
+ const tx = EvmAdapter.encodeMethodCall(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', [spenderAddress, amountWei]);
363
+ return {
364
+ data: tx.data,
365
+ to: tx.to,
366
+ value: tx.value
367
+ };
368
+ }
369
+ async needPermit2Approve(token, permit2Address, walletAddress, spenderAddress) {
370
+ const res = await this.read(permit2Address, uni_v3_permit_abi_1.UNI_V3_PERMIT_2_ABI, 'allowance', [
371
+ walletAddress,
372
+ token.address,
373
+ spenderAddress
374
+ ]);
375
+ const [amount, expiration, _nonce] = res;
376
+ return token.weiAmount.gt(amount) || new bignumber_js_1.default(Date.now()).gt(Number(expiration) * 1000);
377
+ }
378
+ /**
379
+ * @param tokenAddress Token address you want to approve for spending
380
+ * @param permit2Address Addres of permit2 contract
381
+ * @param spenderAddress Contract address spending your tokens
382
+ * @param amount Approved amount
383
+ * @param deadline Ms number added to current time (Date.now()) until approve expiration
384
+ */
385
+ async approveOnPermit2(tokenAddress, spenderAddress, amount = 'infinity', options = {}) {
386
+ const rawValue = amount === 'infinity' ? new bignumber_js_1.default(2).pow(256).minus(1) : amount;
387
+ return this.signer.executeContractMethod(tokenAddress, uni_v3_permit_abi_1.UNI_V3_PERMIT_2_ABI, 'approve', [spenderAddress, BigInt(rawValue.toString())], options);
388
+ }
363
389
  /**
364
390
  * Calculates EIP-1559 specific gas details.
365
391
  * @see {@link https://github.com/ethers-io/ethers.js/blob/master/packages/abstract-provider/src.ts/index.ts#L235}
@@ -1,46 +1,14 @@
1
- import { BlockchainName, HttpClient, ICustomLogger, TokenAmount } from '@cryptorubic/core';
1
+ import { BlockchainName, HttpClient, ICustomLogger } from '@cryptorubic/core';
2
2
  import { ClientAdaptersFactoryParams } from '../../../models/create-factory-params';
3
- import { AbstractAdapterClient } from '../../common/client/abstract-adapter-client';
3
+ import { AbstractAdapterSigner } from '../../common/signer/abstract-adapter-signer';
4
4
  import { Abi, PublicActions, PublicClient, TransactionReceipt, WalletActions, WalletClient } from 'viem';
5
5
  import { EvmSendTxParams, EvmTransactionOptions } from '../models/evm-send-tx-params';
6
- import BigNumber from 'bignumber.js';
7
6
  import { Web3Error } from '../utils/parse-evm-error';
8
- import { EvmTransactionConfig } from '../../../../utils/models/evm-transaction-config';
9
7
  import { TxStatus } from '../../models/web3-public-models/tx-status';
10
- import { ApproveAdapterClient } from '../../models/approve-adapter';
11
- import { AllowanceInfo } from '../../models/common-types';
12
- export declare class EvmAdapterClient extends AbstractAdapterClient<WalletClient & WalletActions, EvmSendTxParams, TransactionReceipt> implements ApproveAdapterClient<EvmTransactionConfig> {
8
+ export declare class EvmAdapterSigner extends AbstractAdapterSigner<WalletClient & WalletActions, EvmSendTxParams, TransactionReceipt> {
13
9
  private readonly evmPublic;
14
10
  constructor(evmPublic: PublicActions & PublicClient, httpClient: HttpClient, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
15
11
  getBlockchainName(): Promise<BlockchainName | undefined>;
16
- getAllowance(fromTokenAddress: string, walletAddress: string, spenderAddress: string): Promise<AllowanceInfo>;
17
- needApprove(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string): Promise<boolean>;
18
- /**
19
- * Executes approve method in ERC-20 token contract.
20
- * @param tokenAddress Address of the smart-contract corresponding to the token.
21
- * @param spenderAddress Wallet or contract address to approve.
22
- * @param amount Token amount to approve in wei.
23
- * @param [options] Additional options.
24
- * @returns Approval transaction hash.
25
- */
26
- approveTokens(tokenAddress: string, spenderAddress: string, amount?: BigNumber | 'infinity', options?: EvmTransactionOptions): Promise<string>;
27
- /**
28
- * Build encoded approve transaction config.
29
- * @param tokenAddress Address of the smart-contract corresponding to the token.
30
- * @param spenderAddress Wallet or contract address to approve.
31
- * @param amount wei amount of tokens in approval window in spending cap field
32
- * @returns Encoded approve transaction config.
33
- */
34
- encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): EvmTransactionConfig;
35
- needPermit2Approve(token: TokenAmount, permit2Address: string, walletAddress: string, spenderAddress: string): Promise<boolean>;
36
- /**
37
- * @param tokenAddress Token address you want to approve for spending
38
- * @param permit2Address Addres of permit2 contract
39
- * @param spenderAddress Contract address spending your tokens
40
- * @param amount Approved amount
41
- * @param deadline Ms number added to current time (Date.now()) until approve expiration
42
- */
43
- approveOnPermit2(tokenAddress: string, spenderAddress: string, amount?: BigNumber | 'infinity', options?: EvmTransactionOptions): Promise<TransactionReceipt>;
44
12
  getTransactionStatus(hash: string): Promise<TxStatus>;
45
13
  /**
46
14
  * Gets mined transaction receipt.
@@ -84,7 +52,6 @@ export declare class EvmAdapterClient extends AbstractAdapterClient<WalletClient
84
52
  private shouldIgnoreError;
85
53
  signMessage(message: string): Promise<string>;
86
54
  private getChainAndAccount;
87
- read<T>(address: string, abi: Abi, method: string, methodArgs?: unknown[]): Promise<T>;
88
55
  writeContract(address: string, abi: Abi, method: string, value?: string, methodArgs?: unknown[]): Promise<string>;
89
56
  write(address: string, to: string, value: string, data: string, options?: EvmTransactionOptions): Promise<string>;
90
57
  }