@cryptorubic/web3 0.0.16 → 0.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cryptorubic/web3",
3
- "version": "0.0.16",
3
+ "version": "0.0.17",
4
4
  "dependencies": {
5
5
  "tslib": "^2.3.0"
6
6
  },
@@ -9,6 +9,9 @@ export declare abstract class AbstractAdapter<P, W, B extends BlockchainName> {
9
9
  private _wallet;
10
10
  set wallet(value: W | null);
11
11
  get wallet(): W;
12
+ private _walletAddress;
13
+ set walletAddress(value: string | null);
14
+ get walletAddress(): string;
12
15
  protected constructor(blockchain: B, logger?: ICustomLogger);
13
16
  abstract callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<BlockchainName>[]>;
14
17
  needPreswapAction(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string | BigNumber): Promise<boolean>;
@@ -25,9 +25,21 @@ class AbstractAdapter {
25
25
  }
26
26
  return this._wallet;
27
27
  }
28
+ set walletAddress(value) {
29
+ this._walletAddress = value;
30
+ }
31
+ get walletAddress() {
32
+ if (!this._walletAddress) {
33
+ const msg = 'Trying to access undefined walletAddress';
34
+ this.logger?.customLog(msg);
35
+ throw new Error(msg);
36
+ }
37
+ return this._walletAddress;
38
+ }
28
39
  constructor(blockchain, logger) {
29
40
  this._public = null;
30
41
  this._wallet = null;
42
+ this._walletAddress = null;
31
43
  this.blockchain = blockchain;
32
44
  if (logger) {
33
45
  this.logger = logger;
@@ -6,7 +6,7 @@ import { EvmAdapterOptions } from "./models/evm-adapter-options";
6
6
  import { EvmTransactionConfig } from "../../utils/models/evm-transaction-config";
7
7
  import { ApproveAdapter } from "./models/approve-adapter";
8
8
  import { AllowanceInfo } from "./models/common-types";
9
- export declare class EvmAdapter extends AbstractAdapter<PublicActions & PublicClient, WalletClient & WalletActions, EvmBlockchainName> implements ApproveAdapter {
9
+ export declare class EvmAdapter extends AbstractAdapter<PublicActions & PublicClient, WalletClient & WalletActions, EvmBlockchainName> implements ApproveAdapter<EvmTransactionConfig> {
10
10
  needPreswapAction(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string): Promise<boolean>;
11
11
  handlePreswap(contractAddress: string, walletAddress: string, tokenAmount: TokenAmount): Promise<void>;
12
12
  constructor(adapterOptions: EvmAdapterOptions, logger?: ICustomLogger);
@@ -1,7 +1,6 @@
1
1
  import { TokenAmount } from "@cryptorubic/core";
2
2
  import { AllowanceInfo } from "./common-types";
3
- import { EvmTransactionConfig } from "../../../utils/models/evm-transaction-config";
4
- export interface ApproveAdapter {
3
+ export interface ApproveAdapter<T> {
5
4
  /**
6
5
  * @param fromTokenAddress erc20 address of checked token
7
6
  * @param walletAddress owner wallet address
@@ -15,7 +14,7 @@ export interface ApproveAdapter {
15
14
  * @param spenderAddress spender address
16
15
  * @param amount amount in non wei
17
16
  */
18
- encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): EvmTransactionConfig;
17
+ encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): T;
19
18
  /**
20
19
  * Check if approve needed.
21
20
  * @param token
@@ -0,0 +1,7 @@
1
+ export interface BasicTransactionOptions {
2
+ /**
3
+ * Callback to be called, when user confirm swap transaction.
4
+ * @param hash Transaction hash.
5
+ */
6
+ onTransactionHash?: (hash: string) => void;
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -9,8 +9,7 @@ import { TronParameters } from "../../utils/models/tron-parameters";
9
9
  import { Abi } from "viem";
10
10
  import { ApproveAdapter } from "./models/approve-adapter";
11
11
  import { AllowanceInfo } from "./models/common-types";
12
- import { EvmTransactionConfig } from "../../utils/models/evm-transaction-config";
13
- export declare class TronAdapter extends AbstractAdapter<TronWeb, TronWeb, TronBlockchainName> implements ApproveAdapter {
12
+ export declare class TronAdapter extends AbstractAdapter<TronWeb, TronWeb, TronBlockchainName> implements ApproveAdapter<TronTransactionConfig> {
14
13
  private readonly multicallAddress;
15
14
  needPreswapAction(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string): Promise<boolean>;
16
15
  constructor(rpcList: string[], logger?: ICustomLogger);
@@ -19,18 +18,17 @@ export declare class TronAdapter extends AbstractAdapter<TronWeb, TronWeb, TronB
19
18
  methodsData: MethodData[];
20
19
  }[]): Promise<ContractMulticallResponse<Output>[][]>;
21
20
  private multicall;
22
- callContractMethod<T extends TronWeb3PrimitiveType = string>(contractAddress: string, contractAbi: readonly AbiFragment[], methodName: string, methodArguments?: unknown[]): Promise<T>;
21
+ read<T>(contractAddress: string, contractAbi: readonly AbiFragment[], methodName: string, methodArguments?: unknown[]): Promise<T>;
23
22
  private multicallContractsMethodsByOne;
24
23
  getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
25
24
  callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token[]>;
26
25
  getBalance(userAddress: string, tokenAddress?: string): Promise<BigNumber>;
27
26
  getTokenBalance(userAddress: string, tokenAddress: string): Promise<BigNumber>;
28
27
  convertTronAddressToHex(address: string): Promise<string>;
29
- read<T>(): Promise<T>;
30
- write(): Promise<string>;
28
+ write(contractAddress: string, methodSignature: string, parameters: TronParameters): Promise<string>;
31
29
  static encodeMethodCall(contractAddress: string, contractAbi: Abi, methodName: string, methodArguments: TronParameters, callValue?: string, feeLimit?: number): TronTransactionConfig;
32
30
  private static flattenTypesToString;
33
31
  needApprove(from: TokenAmount | PriceTokenAmount, walletAddress: string, spender: string): Promise<boolean>;
34
- encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): EvmTransactionConfig;
32
+ encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): TronTransactionConfig;
35
33
  getAllowance(fromTokenAddress: string, walletAddress: string, spender: string): Promise<AllowanceInfo>;
36
34
  }
@@ -51,7 +51,7 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
51
51
  // @ts-ignore
52
52
  return contract.aggregateViewCalls(calls).call();
53
53
  }
54
- async callContractMethod(contractAddress, contractAbi, methodName, methodArguments = []) {
54
+ async read(contractAddress, contractAbi, methodName, methodArguments = []) {
55
55
  this.public.setAddress(contractAddress);
56
56
  const contract = await this.public.contract(contractAbi, contractAddress);
57
57
  const response = await contract[methodName](...methodArguments).call();
@@ -61,7 +61,7 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
61
61
  return Promise.all(contractsData.map((contractData) => {
62
62
  return Promise.all(contractData.methodsData.map(async (methodData) => {
63
63
  try {
64
- const output = (await this.callContractMethod(contractData.contractAddress, contractAbi, methodData.methodName, methodData.methodArguments));
64
+ const output = (await this.read(contractData.contractAddress, contractAbi, methodData.methodName, methodData.methodArguments));
65
65
  return {
66
66
  output,
67
67
  success: true
@@ -161,12 +161,11 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
161
161
  async convertTronAddressToHex(address) {
162
162
  return this.public.address.toHex(address);
163
163
  }
164
- read() {
165
- throw new Error('Method is not implemented');
166
- }
167
- ;
168
- write() {
169
- throw new Error('Method is not implemented');
164
+ async write(contractAddress, methodSignature, parameters) {
165
+ const transaction = await this.wallet.transactionBuilder.triggerSmartContract(contractAddress, methodSignature, {}, parameters, this.walletAddress);
166
+ const signedTransaction = await this.wallet.trx.sign(transaction.transaction);
167
+ const receipt = await this.wallet.trx.sendRawTransaction(signedTransaction);
168
+ return receipt.transaction.txID;
170
169
  }
171
170
  ;
172
171
  static encodeMethodCall(contractAddress, contractAbi, methodName, methodArguments, callValue, feeLimit) {
@@ -201,20 +200,18 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
201
200
  }
202
201
  encodeApprove(tokenAddress, spenderAddress, amount) {
203
202
  const amountWei = amount ?? new bignumber_js_1.default(2).pow(256).minus(1).toFixed();
204
- const callData = tron_web3_pure_1.TronWeb3Pure.encodeFunctionCall(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'approve', [spenderAddress, amountWei]);
205
- return {
206
- data: callData,
207
- to: tokenAddress,
208
- value: '0'
209
- };
203
+ return tron_web3_pure_1.TronWeb3Pure.encodeMethodCall(tokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'approve', [
204
+ { type: 'address', value: spenderAddress },
205
+ { type: 'uint256', value: amountWei }
206
+ ]);
210
207
  }
211
208
  async getAllowance(fromTokenAddress, walletAddress, spender) {
212
- const [contract, decimals] = await Promise.all([
209
+ const [contract, decimals, allowance] = await Promise.all([
213
210
  this.public.contract(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, fromTokenAddress),
214
- this.callContractMethod(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'decimals')
211
+ this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'decimals'),
212
+ this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'allowance', [spender])
215
213
  ]);
216
- const allowance = await this.getAllowance(fromTokenAddress, walletAddress, spender);
217
- const allowanceWeiBN = new bignumber_js_1.default(allowance?.toString());
214
+ const allowanceWeiBN = new bignumber_js_1.default(allowance);
218
215
  const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
219
216
  return { allowanceNonWei, allowanceWei: allowanceWeiBN };
220
217
  }
@@ -2,7 +2,8 @@ import { SolanaAdapter } from './adapters/solana-adapter';
2
2
  import { TronAdapter } from './adapters/tron-adapter';
3
3
  import { AbstractAdapter } from './adapters/abstract-adapter';
4
4
  import { WalletProvider } from "./constants/models/wallet-provider";
5
- import { BlockchainName, EvmBlockchainName, SolanaBlockchainName, TronBlockchainName, ICustomLogger, HttpClient } from "@cryptorubic/core";
5
+ import { BlockchainName, EvmBlockchainName, SolanaBlockchainName, TronBlockchainName, ICustomLogger, HttpClient, TonBlockchainName } from "@cryptorubic/core";
6
+ import { TonAdapter } from "./adapters/ton-adapter";
6
7
  import { TonAdapterConfig } from "./adapters/models/ton-adapter-config";
7
8
  import { EvmAdapter } from "./adapters/evm-adapter";
8
9
  export declare class BlockchainAdapterFactoryService {
@@ -17,6 +18,7 @@ export declare class BlockchainAdapterFactoryService {
17
18
  getAdapter(blockchain: SolanaBlockchainName): SolanaAdapter;
18
19
  getAdapter(blockchain: EvmBlockchainName): EvmAdapter;
19
20
  getAdapter(blockchain: TronBlockchainName): TronAdapter;
21
+ getAdapter(blockchain: TonBlockchainName): TonAdapter;
20
22
  private createStorage;
21
23
  private createAdapter;
22
24
  connectWallet(walletProvider: WalletProvider): void;
@@ -92,19 +92,23 @@ class BlockchainAdapterFactoryService {
92
92
  chain: chain,
93
93
  transport: (0, viem_1.custom)(provider)
94
94
  });
95
+ adapter.walletAddress = walletProvider[core_1.CHAIN_TYPE.EVM].address;
95
96
  });
96
97
  }
97
98
  if (walletProvider?.[core_1.CHAIN_TYPE.SOLANA]?.core && this.adapterStore?.[core_1.BLOCKCHAIN_NAME.SOLANA]) {
98
99
  const store = this.adapterStore[core_1.BLOCKCHAIN_NAME.SOLANA];
99
100
  store.wallet = walletProvider[core_1.CHAIN_TYPE.SOLANA].core;
101
+ store.walletAddress = walletProvider[core_1.CHAIN_TYPE.SOLANA].address;
100
102
  }
101
103
  if (walletProvider?.[core_1.CHAIN_TYPE.TRON]?.core && this.adapterStore?.[core_1.BLOCKCHAIN_NAME.TRON]) {
102
104
  const store = this.adapterStore[core_1.BLOCKCHAIN_NAME.TRON];
103
105
  store.wallet = walletProvider[core_1.CHAIN_TYPE.TRON].core;
106
+ store.walletAddress = walletProvider[core_1.CHAIN_TYPE.TRON].address;
104
107
  }
105
108
  if (walletProvider?.[core_1.CHAIN_TYPE.TON]?.core && this.adapterStore?.[core_1.BLOCKCHAIN_NAME.TON]) {
106
109
  const store = this.adapterStore[core_1.BLOCKCHAIN_NAME.TON];
107
110
  store.wallet = walletProvider[core_1.CHAIN_TYPE.TON].core;
111
+ store.walletAddress = walletProvider[core_1.CHAIN_TYPE.TON].address;
108
112
  }
109
113
  }
110
114
  }
@@ -1,7 +1,9 @@
1
1
  import { CommonWeb3Pure } from "./common-web3-pure";
2
+ import { TronTransactionConfig } from "../models/tron-transaction-config";
2
3
  import { TronParameters } from "../models/tron-parameters";
3
4
  import { TronWeb3PrimitiveType, Web3PrimitiveType } from "../models/primitive-types";
4
5
  import { FunctionFragment } from "tronweb/src/types/ABI";
6
+ import { AbiItem } from "../models/abi-types";
5
7
  export declare class TronWeb3Pure extends CommonWeb3Pure {
6
8
  constructor();
7
9
  isAddressCorrect(address: string): Promise<boolean>;
@@ -15,6 +17,7 @@ export declare class TronWeb3Pure extends CommonWeb3Pure {
15
17
  * @returns An ABI encoded function call. Means function signature + parameters.
16
18
  */
17
19
  static encodeFunctionCall(contractAbi: FunctionFragment[], methodName: string, methodArguments: unknown[]): string;
20
+ static encodeMethodCall(contractAddress: string, contractAbi: AbiItem[], methodName: string, methodArguments: TronParameters, callValue?: string, feeLimit?: number): TronTransactionConfig;
18
21
  static encodeMethodSignature(methodSignature: string, parameters: TronParameters): string;
19
22
  /**
20
23
  * Decodes method result using its JSON interface object and given parameters.
@@ -33,6 +33,20 @@ class TronWeb3Pure extends common_web3_pure_1.CommonWeb3Pure {
33
33
  const encodedParameters = tronweb_1.utils.abi.encodeParamsV2ByABI(methodSignature, methodArguments);
34
34
  return encodedMethodSignature + encodedParameters.slice(2);
35
35
  }
36
+ static encodeMethodCall(contractAddress, contractAbi, methodName, methodArguments, callValue, feeLimit) {
37
+ const methodAbi = contractAbi.find(abiItem => abiItem.name === methodName);
38
+ if (!methodAbi) {
39
+ throw new Error('Encode fail. No method in ABI');
40
+ }
41
+ const signature = `${methodAbi.name}(${this.flattenTypesToString(methodAbi.inputs).join(',')})`;
42
+ return {
43
+ to: contractAddress,
44
+ arguments: methodArguments,
45
+ signature,
46
+ ...(callValue && { callValue }),
47
+ ...(feeLimit && { feeLimit })
48
+ };
49
+ }
36
50
  static encodeMethodSignature(methodSignature, parameters) {
37
51
  const encodedMethodSignature = tronweb_1.TronWeb.sha3(methodSignature).slice(0, 10);
38
52
  const flattenedParameters = this.flattenParameters(parameters);