@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.
- package/package.json +1 -1
- package/src/index.d.ts +7 -7
- package/src/index.js +7 -7
- package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.d.ts +3 -2
- package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.js +8 -6
- package/src/lib/adapter/adapters/adapter-bitcoin/{client/bitcoin-adapter-client.d.ts → signer/bitcoin-adapter-signer.d.ts} +2 -3
- package/src/lib/adapter/adapters/adapter-bitcoin/{client/bitcoin-adapter-client.js → signer/bitcoin-adapter-signer.js} +6 -9
- package/src/lib/adapter/adapters/adapter-evm/evm-adapter.d.ts +36 -4
- package/src/lib/adapter/adapters/adapter-evm/evm-adapter.js +110 -84
- package/src/lib/adapter/adapters/adapter-evm/{client/evm-adapter-client.d.ts → signer/evm-adapter-signer.d.ts} +3 -36
- package/src/lib/adapter/adapters/adapter-evm/{client/evm-adapter-client.js → signer/evm-adapter-signer.js} +13 -120
- package/src/lib/adapter/adapters/adapter-solana/{client/solana-adapter-client.d.ts → signer/solana-adapter-signer.d.ts} +2 -3
- package/src/lib/adapter/adapters/adapter-solana/{client/solana-adapter-client.js → signer/solana-adapter-signer.js} +5 -8
- package/src/lib/adapter/adapters/adapter-solana/solana-adapter.d.ts +3 -2
- package/src/lib/adapter/adapters/adapter-solana/solana-adapter.js +5 -2
- package/src/lib/adapter/adapters/adapter-sui/{client/sui-adapter-client.d.ts → signer/sui-adapter-signer.d.ts} +2 -3
- package/src/lib/adapter/adapters/adapter-sui/{client/sui-adapter-client.js → signer/sui-adapter-signer.js} +6 -9
- package/src/lib/adapter/adapters/adapter-sui/sui-adapter.d.ts +3 -2
- package/src/lib/adapter/adapters/adapter-sui/sui-adapter.js +5 -2
- package/src/lib/adapter/adapters/adapter-ton/{client/ton-adapter-client.d.ts → signer/ton-adapter-signer.d.ts} +2 -3
- package/src/lib/adapter/adapters/adapter-ton/{client/ton-adapter-client.js → signer/ton-adapter-signer.js} +5 -8
- package/src/lib/adapter/adapters/adapter-ton/ton-adapter.d.ts +3 -2
- package/src/lib/adapter/adapters/adapter-ton/ton-adapter.js +5 -2
- package/src/lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer.d.ts +21 -0
- package/src/lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer.js +67 -0
- package/src/lib/adapter/adapters/adapter-tron/tron-adapter.d.ts +9 -2
- package/src/lib/adapter/adapters/adapter-tron/tron-adapter.js +52 -3
- package/src/lib/adapter/adapters/common/abstract-adapter.d.ts +3 -2
- package/src/lib/adapter/adapters/common/{client/abstract-adapter-client.d.ts → signer/abstract-adapter-signer.d.ts} +4 -5
- package/src/lib/adapter/adapters/common/{client/abstract-adapter-client.js → signer/abstract-adapter-signer.js} +7 -7
- package/src/lib/adapter/adapters/models/approve-adapter.d.ts +7 -6
- package/src/lib/adapter/adapters/models/approve-adapter.js +46 -3
- package/src/lib/adapter/blockchain-adapter-factory.service.js +3 -3
- package/src/lib/adapter/constants/chain-configs/chain-configs.d.ts +1 -1
- package/src/lib/adapter/constants/chain-configs/chain-configs.js +27 -0
- package/src/lib/adapter/constants/viem-blockchain-mapping.d.ts +1 -1
- package/src/lib/adapter/constants/viem-blockchain-mapping.js +3 -2
- package/src/lib/adapter/adapters/adapter-tron/client/tron-adapter-client.d.ts +0 -30
- package/src/lib/adapter/adapters/adapter-tron/client/tron-adapter-client.js +0 -119
package/package.json
CHANGED
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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 {
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 {
|
|
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
|
|
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.
|
|
3
|
+
exports.BitcoinAdapterSigner = void 0;
|
|
4
4
|
const core_1 = require("@cryptorubic/core");
|
|
5
|
-
const
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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 {
|
|
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
|
-
|
|
14
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
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
|
|
1
|
+
import { BlockchainName, HttpClient, ICustomLogger } from '@cryptorubic/core';
|
|
2
2
|
import { ClientAdaptersFactoryParams } from '../../../models/create-factory-params';
|
|
3
|
-
import {
|
|
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
|
-
|
|
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
|
}
|