@cryptorubic/web3 0.0.3 → 0.0.5
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/lib/adapter/adapters/evm-adapter.d.ts +10 -1
- package/src/lib/adapter/adapters/evm-adapter.js +26 -0
- package/src/lib/adapter/adapters/evm-adapter.js.map +1 -1
- package/src/lib/adapter/adapters/models/tonapi-models.d.ts +103 -0
- package/src/lib/adapter/adapters/models/tonapi-models.js +3 -0
- package/src/lib/adapter/adapters/models/tonapi-models.js.map +1 -0
- package/src/lib/adapter/adapters/models/toncenter-types.d.ts +16 -0
- package/src/lib/adapter/adapters/models/toncenter-types.js +3 -0
- package/src/lib/adapter/adapters/models/toncenter-types.js.map +1 -0
- package/src/lib/adapter/adapters/ton-adapter.d.ts +13 -0
- package/src/lib/adapter/adapters/ton-adapter.js +53 -0
- package/src/lib/adapter/adapters/ton-adapter.js.map +1 -0
- package/src/lib/adapter/adapters/utils/ton-api.service.d.ts +42 -0
- package/src/lib/adapter/adapters/utils/ton-api.service.js +149 -0
- package/src/lib/adapter/adapters/utils/ton-api.service.js.map +1 -0
- package/src/lib/adapter/blockchain-adapter-factory.service.d.ts +5 -2
- package/src/lib/adapter/blockchain-adapter-factory.service.js +26 -4
- package/src/lib/adapter/blockchain-adapter-factory.service.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Abi, MulticallResponse, MulticallParameters, PublicActions, PublicClient, WalletClient, WalletActions } from 'viem';
|
|
2
2
|
import { AbstractAdapter } from './abstract-adapter';
|
|
3
|
-
import { EvmBlockchainName, ICustomLogger, Token, TokenAmount } from '@cryptorubic/core';
|
|
3
|
+
import { EvmBlockchainName, ICustomLogger, Token, TokenAmount, PriceTokenAmount } from '@cryptorubic/core';
|
|
4
|
+
import BigNumber from "bignumber.js";
|
|
4
5
|
import { EvmAdapterOptions } from "./models/evm-adapter-options";
|
|
5
6
|
import { EvmTransactionConfig } from "../../utils/models/evm-transaction-config";
|
|
6
7
|
export declare class EvmAdapter extends AbstractAdapter<PublicActions & PublicClient, WalletClient & WalletActions, EvmBlockchainName> {
|
|
@@ -17,4 +18,12 @@ export declare class EvmAdapter extends AbstractAdapter<PublicActions & PublicCl
|
|
|
17
18
|
simulateTransaction(config: EvmTransactionConfig, from: string): Promise<void>;
|
|
18
19
|
callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<EvmBlockchainName>[]>;
|
|
19
20
|
getGasPrice(): Promise<string>;
|
|
21
|
+
checkEnoughBalance(token: TokenAmount | PriceTokenAmount, walletAddress: string, amount?: BigNumber): Promise<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* @param walletAddress
|
|
24
|
+
* @param tokenAddress
|
|
25
|
+
* @returns wei amount
|
|
26
|
+
*/
|
|
27
|
+
getBalance(walletAddress: string, tokenAddress?: string): Promise<BigNumber>;
|
|
28
|
+
getTransactionCount(walletAddress: string): Promise<number>;
|
|
20
29
|
}
|
|
@@ -203,6 +203,32 @@ class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
203
203
|
const bigIntGas = await this.public.getGasPrice();
|
|
204
204
|
return String(bigIntGas);
|
|
205
205
|
}
|
|
206
|
+
async checkEnoughBalance(token, walletAddress, amount = token.tokenAmount) {
|
|
207
|
+
const weiBalance = await this.getBalance(walletAddress, token.isNative ? undefined : token.address);
|
|
208
|
+
const balance = core_1.Token.fromWei(weiBalance, token.decimals);
|
|
209
|
+
return balance.gte(amount);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* @param walletAddress
|
|
213
|
+
* @param tokenAddress
|
|
214
|
+
* @returns wei amount
|
|
215
|
+
*/
|
|
216
|
+
async getBalance(walletAddress, tokenAddress) {
|
|
217
|
+
if (!tokenAddress) {
|
|
218
|
+
const nativeBalance = await this.public.getBalance({
|
|
219
|
+
address: walletAddress
|
|
220
|
+
});
|
|
221
|
+
return new bignumber_js_1.default(nativeBalance.toString());
|
|
222
|
+
}
|
|
223
|
+
const tokenBalance = await this.read(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'balanceOf', [walletAddress]);
|
|
224
|
+
return new bignumber_js_1.default(tokenBalance);
|
|
225
|
+
}
|
|
226
|
+
async getTransactionCount(walletAddress) {
|
|
227
|
+
const transactionCount = await this.public?.getTransactionCount({
|
|
228
|
+
address: walletAddress
|
|
229
|
+
});
|
|
230
|
+
return transactionCount ?? 0;
|
|
231
|
+
}
|
|
206
232
|
}
|
|
207
233
|
exports.EvmAdapter = EvmAdapter;
|
|
208
234
|
//# sourceMappingURL=evm-adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-adapter.js","sourceRoot":"","sources":["../../../../../../../packages/web3/src/lib/adapter/adapters/evm-adapter.ts"],"names":[],"mappings":";;;AAAA,+BAac;AACd,kFAA6E;AAC7E,iEAA4D;AAC5D,yDAAqD;AACrD,
|
|
1
|
+
{"version":3,"file":"evm-adapter.js","sourceRoot":"","sources":["../../../../../../../packages/web3/src/lib/adapter/adapters/evm-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
export type TonApiResp<SuccessRespType> = TonApiFailResp | SuccessRespType;
|
|
2
|
+
export type TonApiAccountStatus = 'active' | 'uninit' | 'frozen' | 'nonexist';
|
|
3
|
+
export interface TonApiFailResp {
|
|
4
|
+
error: string;
|
|
5
|
+
}
|
|
6
|
+
export interface TonApiSeqnoResp {
|
|
7
|
+
seqno: number;
|
|
8
|
+
}
|
|
9
|
+
export interface TonApiTxDataByBocResp {
|
|
10
|
+
hash: string;
|
|
11
|
+
lt: number;
|
|
12
|
+
success: boolean;
|
|
13
|
+
aborted: boolean;
|
|
14
|
+
destroyed: boolean;
|
|
15
|
+
total_fees: number;
|
|
16
|
+
in_msg: object;
|
|
17
|
+
out_msgs: {
|
|
18
|
+
hash: string;
|
|
19
|
+
}[];
|
|
20
|
+
account: {
|
|
21
|
+
address: string;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface TonApiStatusByBocResp {
|
|
25
|
+
in_progress: boolean;
|
|
26
|
+
lt: number;
|
|
27
|
+
}
|
|
28
|
+
export interface TonApiHealthcheckResp {
|
|
29
|
+
rest_online: boolean;
|
|
30
|
+
indexing_latency: number;
|
|
31
|
+
}
|
|
32
|
+
export interface TonApiAccountInfoResp {
|
|
33
|
+
/** raw address */
|
|
34
|
+
address: string;
|
|
35
|
+
balance: number;
|
|
36
|
+
/** in unix format */
|
|
37
|
+
last_activity: number;
|
|
38
|
+
status: TonApiAccountStatus;
|
|
39
|
+
interfaces: string[];
|
|
40
|
+
get_methods: string[];
|
|
41
|
+
is_wallet: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface TonApiCallContractCommonResp<T> {
|
|
44
|
+
success: boolean;
|
|
45
|
+
exit_code: number;
|
|
46
|
+
stack: Array<{
|
|
47
|
+
type: string;
|
|
48
|
+
num: string;
|
|
49
|
+
}>;
|
|
50
|
+
decoded: T;
|
|
51
|
+
}
|
|
52
|
+
export interface TonApiParseAddressResp {
|
|
53
|
+
raw_form: string;
|
|
54
|
+
bounceable: {
|
|
55
|
+
b64: string;
|
|
56
|
+
b64url: string;
|
|
57
|
+
};
|
|
58
|
+
non_bounceable: {
|
|
59
|
+
b64: string;
|
|
60
|
+
b64url: string;
|
|
61
|
+
};
|
|
62
|
+
given_type: string;
|
|
63
|
+
test_only: false;
|
|
64
|
+
}
|
|
65
|
+
export interface TonApiAllNonNullableTokenInfoForWalletResp {
|
|
66
|
+
balances: TonApiTokenInfoForWalletResp[];
|
|
67
|
+
}
|
|
68
|
+
export interface TonApiTokenInfoForWalletResp {
|
|
69
|
+
balance: string;
|
|
70
|
+
price?: {
|
|
71
|
+
prices: {
|
|
72
|
+
[k: string]: string;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
wallet_address: {
|
|
76
|
+
/** address of user's contract for this token */
|
|
77
|
+
address: string;
|
|
78
|
+
is_scam: boolean;
|
|
79
|
+
is_wallet: boolean;
|
|
80
|
+
};
|
|
81
|
+
jetton: {
|
|
82
|
+
/** address of token(jetton) contract. Similaer to ERC20 contract address in EVM */
|
|
83
|
+
address: string;
|
|
84
|
+
name: string;
|
|
85
|
+
symbol: string;
|
|
86
|
+
decimals: number;
|
|
87
|
+
image: string;
|
|
88
|
+
verification: string;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export interface TonApiTokenInfoResp {
|
|
92
|
+
mintable: boolean;
|
|
93
|
+
total_supply: string;
|
|
94
|
+
metadata: {
|
|
95
|
+
address: string;
|
|
96
|
+
name: string;
|
|
97
|
+
symbol: string;
|
|
98
|
+
decimals: string;
|
|
99
|
+
image: string;
|
|
100
|
+
};
|
|
101
|
+
verification: string;
|
|
102
|
+
holders_count: number;
|
|
103
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tonapi-models.js","sourceRoot":"","sources":["../../../../../../../../packages/web3/src/lib/adapter/adapters/models/tonapi-models.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type TonCenterResp<SuccessRespType> = TonCenterFailResp | SuccessRespType;
|
|
2
|
+
export interface TonCenterFailResp {
|
|
3
|
+
detail: Array<{
|
|
4
|
+
msg: string;
|
|
5
|
+
}>;
|
|
6
|
+
}
|
|
7
|
+
export interface TonCenterBlocksResp {
|
|
8
|
+
blocks: TonCenterBlockInfo[];
|
|
9
|
+
}
|
|
10
|
+
export interface TonCenterBlockInfo {
|
|
11
|
+
workchain: 0 | -1;
|
|
12
|
+
shard: string;
|
|
13
|
+
seqno: number;
|
|
14
|
+
root_hash: string;
|
|
15
|
+
file_hash: string;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toncenter-types.js","sourceRoot":"","sources":["../../../../../../../../packages/web3/src/lib/adapter/adapters/models/toncenter-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AbstractAdapter } from '@cryptorubic/web3';
|
|
2
|
+
import { BlockchainName, HttpClient, ICustomLogger, Token, TonBlockchainName } from '@cryptorubic/core';
|
|
3
|
+
import { TonClient } from "@ton/ton";
|
|
4
|
+
export declare class TonAdapter extends AbstractAdapter<TonClient, TonClient, TonBlockchainName> {
|
|
5
|
+
private readonly tonApi;
|
|
6
|
+
protected get core(): TonClient;
|
|
7
|
+
private static tonClient;
|
|
8
|
+
static getTonClient(): TonClient;
|
|
9
|
+
constructor(httpClient: HttpClient, tonApiKey: string, logger?: ICustomLogger);
|
|
10
|
+
callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<BlockchainName>[]>;
|
|
11
|
+
read<T>(args: unknown): Promise<T>;
|
|
12
|
+
write(args: unknown): Promise<string>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TonAdapter = void 0;
|
|
4
|
+
const web3_1 = require("@cryptorubic/web3");
|
|
5
|
+
const core_1 = require("@cryptorubic/core");
|
|
6
|
+
const ton_api_service_1 = require("./utils/ton-api.service");
|
|
7
|
+
const ton_1 = require("@ton/ton");
|
|
8
|
+
class TonAdapter extends web3_1.AbstractAdapter {
|
|
9
|
+
get core() {
|
|
10
|
+
return TonAdapter.getTonClient();
|
|
11
|
+
}
|
|
12
|
+
static getTonClient() {
|
|
13
|
+
if (!this.tonClient) {
|
|
14
|
+
this.tonClient = new ton_1.TonClient({
|
|
15
|
+
apiKey: '65e9a5af974c9f8e00b726fc25972fd228a49236d960b7bdce9f24ed6c54a45e',
|
|
16
|
+
endpoint: 'https://toncenter.com/api/v2/jsonRPC'
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return this.tonClient;
|
|
20
|
+
}
|
|
21
|
+
constructor(httpClient, tonApiKey, logger) {
|
|
22
|
+
super(core_1.BLOCKCHAIN_NAME.TON, logger);
|
|
23
|
+
this.tonApi = new ton_api_service_1.TonApiService(httpClient, tonApiKey);
|
|
24
|
+
}
|
|
25
|
+
async callForTokensInfo(tokenAddresses) {
|
|
26
|
+
const info = await Promise.all(tokenAddresses.map((address) => {
|
|
27
|
+
if (web3_1.Web3Pure.isNativeAddress(core_1.BLOCKCHAIN_NAME.TON, address)) {
|
|
28
|
+
const nativeToken = core_1.nativeTokensList[core_1.BLOCKCHAIN_NAME.TON];
|
|
29
|
+
return nativeToken;
|
|
30
|
+
}
|
|
31
|
+
return this.tonApi.fetchTokenInfo(address);
|
|
32
|
+
}));
|
|
33
|
+
if (!info.length)
|
|
34
|
+
return [];
|
|
35
|
+
const necessaryInfo = info.map(({ decimals, name, symbol, address }) => new core_1.Token({
|
|
36
|
+
address,
|
|
37
|
+
blockchain: core_1.BLOCKCHAIN_NAME.TON,
|
|
38
|
+
decimals: Number(decimals),
|
|
39
|
+
name,
|
|
40
|
+
symbol
|
|
41
|
+
}));
|
|
42
|
+
return necessaryInfo;
|
|
43
|
+
}
|
|
44
|
+
read(args) {
|
|
45
|
+
throw new Error('Not implemented');
|
|
46
|
+
}
|
|
47
|
+
write(args) {
|
|
48
|
+
throw new Error('Not implemented');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.TonAdapter = TonAdapter;
|
|
52
|
+
TonAdapter.tonClient = null;
|
|
53
|
+
//# sourceMappingURL=ton-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ton-adapter.js","sourceRoot":"","sources":["../../../../../../../packages/web3/src/lib/adapter/adapters/ton-adapter.ts"],"names":[],"mappings":";;;AAAA,4CAA8D;AAC9D,4CAQ2B;AAC3B,6DAAsD;AACtD,kCAAmC;AAEnC,MAAa,UAAW,SAAQ,sBAAwD;IAGpF,IAAc,IAAI;QACd,OAAO,UAAU,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAIM,MAAM,CAAC,YAAY;QACtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,IAAI,eAAS,CAAC;gBAC3B,MAAM,EAAE,kEAAkE;gBAC1E,QAAQ,EAAE,sCAAsC;aACnD,CAAC,CAAC;QACP,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,YAAY,UAAsB,EAAE,SAAiB,EAAE,MAAsB;QACzE,KAAK,CAAC,sBAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,+BAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC;IAEe,KAAK,CAAC,iBAAiB,CAAC,cAAgD;QACpF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAC1B,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,eAAQ,CAAC,eAAe,CAAC,sBAAe,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;gBACzD,MAAM,WAAW,GAAG,uBAAgB,CAAC,sBAAe,CAAC,GAAG,CAAC,CAAC;gBAC1D,OAAO,WAAW,CAAC;YACvB,CAAC;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC,CAAC,CACL,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAE5B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC1B,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CACpC,IAAI,YAAK,CAAC;YACN,OAAO;YACP,UAAU,EAAE,sBAAe,CAAC,GAAG;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;YAC1B,IAAI;YACJ,MAAM;SACT,CAAC,CACT,CAAC;QAEF,OAAO,aAAa,CAAC;IACzB,CAAC;IAEM,IAAI,CAAI,IAAa;QACxB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,IAAa;QACtB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;;AAzDL,gCA0DC;AAnDkB,oBAAS,GAAqB,IAAI,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { TonApiAccountInfoResp, TonApiAllNonNullableTokenInfoForWalletResp, TonApiParseAddressResp, TonApiTokenInfoForWalletResp, TonApiTokenInfoResp, TonApiTxDataByBocResp } from '../models/tonapi-models';
|
|
2
|
+
import { TonCenterBlockInfo } from '../models/toncenter-types';
|
|
3
|
+
import { HttpClient } from "@cryptorubic/core";
|
|
4
|
+
import { Web3PrimitiveType } from "@cryptorubic/web3";
|
|
5
|
+
export declare class TonApiService {
|
|
6
|
+
private readonly httpClient;
|
|
7
|
+
private readonly tonApiUrl;
|
|
8
|
+
private readonly apiKey;
|
|
9
|
+
private readonly tonCenterV3Url;
|
|
10
|
+
constructor(httpClient: HttpClient, tonApiKey: string);
|
|
11
|
+
/**
|
|
12
|
+
* @param walletAddress in any format: raw or friendly
|
|
13
|
+
*/
|
|
14
|
+
getAllFormatsOfAddress(walletAddress: string): Promise<TonApiParseAddressResp>;
|
|
15
|
+
/**
|
|
16
|
+
*
|
|
17
|
+
* @param walletAddress in any format: raw or friendly
|
|
18
|
+
*/
|
|
19
|
+
fetchWalletSeqno(walletAddress: string): Promise<number>;
|
|
20
|
+
fetchTxInfo(txHash: string): Promise<TonApiTxDataByBocResp>;
|
|
21
|
+
fetchTxInfoByMessageHash(txHash: string): Promise<TonApiTxDataByBocResp>;
|
|
22
|
+
checkIsTxCompleted(txHash: string): Promise<boolean>;
|
|
23
|
+
healthcheck(): Promise<boolean>;
|
|
24
|
+
fetchLastBlockInfo(): Promise<TonCenterBlockInfo>;
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
* @param address address of account or jetton wallet or jetton master in any format: raw or friendly
|
|
28
|
+
*/
|
|
29
|
+
callContractMethod<T>(address: string, methodName: string, methodArgs: Web3PrimitiveType[]): Promise<T>;
|
|
30
|
+
fetchTokenInfo(tokenAddress: string): Promise<TonApiTokenInfoResp['metadata']>;
|
|
31
|
+
/**
|
|
32
|
+
*
|
|
33
|
+
* @param tokenAddress in any form: raw or friendly
|
|
34
|
+
* @returns balance, decimals, name, symbol, walletJettonAddress, jettonAddress
|
|
35
|
+
*/
|
|
36
|
+
fetchTokenInfoForWallet(walletAddress: string, tokenAddress: string): Promise<TonApiTokenInfoForWalletResp>;
|
|
37
|
+
fetchAllNonNullableTokensInfoForWallet(walletAddress: string): Promise<TonApiAllNonNullableTokenInfoForWalletResp['balances']>;
|
|
38
|
+
/**
|
|
39
|
+
* @returns available methods for walletAddress(contract), raw address and native coin TON balance
|
|
40
|
+
*/
|
|
41
|
+
fetchAccountInfo(walletAddress: string): Promise<TonApiAccountInfoResp>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TonApiService = void 0;
|
|
4
|
+
class TonApiService {
|
|
5
|
+
constructor(httpClient, tonApiKey) {
|
|
6
|
+
this.httpClient = httpClient;
|
|
7
|
+
this.tonApiUrl = 'https://tonapi.io';
|
|
8
|
+
this.tonCenterV3Url = 'https://toncenter.com/api/v3';
|
|
9
|
+
this.apiKey = tonApiKey;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @param walletAddress in any format: raw or friendly
|
|
13
|
+
*/
|
|
14
|
+
async getAllFormatsOfAddress(walletAddress) {
|
|
15
|
+
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/address/${walletAddress}/parse`, {
|
|
16
|
+
headers: {
|
|
17
|
+
Authorization: this.apiKey
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
if ('error' in res) {
|
|
21
|
+
throw new Error(`[TonWeb3Pure] Error in getAllFormatsOfAddress - ${res.error}`);
|
|
22
|
+
}
|
|
23
|
+
return res;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
* @param walletAddress in any format: raw or friendly
|
|
28
|
+
*/
|
|
29
|
+
async fetchWalletSeqno(walletAddress) {
|
|
30
|
+
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/wallet/${walletAddress}/seqno`, {
|
|
31
|
+
headers: { Authorization: this.apiKey }
|
|
32
|
+
});
|
|
33
|
+
if ('error' in res) {
|
|
34
|
+
throw new Error(`[TonApiService] Error in fetchWalletSeqno - ${res.error}`);
|
|
35
|
+
}
|
|
36
|
+
return res.seqno;
|
|
37
|
+
}
|
|
38
|
+
async fetchTxInfo(txHash) {
|
|
39
|
+
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/blockchain/transactions/${txHash}`, {
|
|
40
|
+
headers: { Authorization: this.apiKey }
|
|
41
|
+
});
|
|
42
|
+
if ('error' in res) {
|
|
43
|
+
throw new Error(`[TonApiService] Error in fetchTxInfo - ${res.error}`);
|
|
44
|
+
}
|
|
45
|
+
return res;
|
|
46
|
+
}
|
|
47
|
+
async fetchTxInfoByMessageHash(txHash) {
|
|
48
|
+
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/blockchain/messages/${txHash}/transaction`, { headers: { Authorization: this.apiKey } });
|
|
49
|
+
if ('error' in res) {
|
|
50
|
+
throw new Error(`[TonApiService] Error in fetchTxInfoByMessageHash - ${res.error}`);
|
|
51
|
+
}
|
|
52
|
+
return res;
|
|
53
|
+
}
|
|
54
|
+
async checkIsTxCompleted(txHash) {
|
|
55
|
+
try {
|
|
56
|
+
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/events/${txHash}`, {
|
|
57
|
+
headers: { Authorization: this.apiKey }
|
|
58
|
+
});
|
|
59
|
+
if ('error' in res) {
|
|
60
|
+
throw new Error(`[TonApiService] Error in checkIsTxCompleted - ${res.error}`);
|
|
61
|
+
}
|
|
62
|
+
return res.hasOwnProperty('in_progress') && !res.in_progress;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async healthcheck() {
|
|
69
|
+
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/status`, {
|
|
70
|
+
headers: { Authorization: this.apiKey }
|
|
71
|
+
});
|
|
72
|
+
if ('error' in res || !res.rest_online) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
async fetchLastBlockInfo() {
|
|
78
|
+
const res = await this.httpClient.get(`${this.tonCenterV3Url}/blocks`, {
|
|
79
|
+
params: {
|
|
80
|
+
limit: 1,
|
|
81
|
+
offset: 0,
|
|
82
|
+
sort: 'desc'
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
if ('detail' in res) {
|
|
86
|
+
throw new Error(`[TonApiService] Error in fetchWalletSeqno - ${res.detail[0]?.msg}`);
|
|
87
|
+
}
|
|
88
|
+
return res.blocks[0];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
*
|
|
92
|
+
* @param address address of account or jetton wallet or jetton master in any format: raw or friendly
|
|
93
|
+
*/
|
|
94
|
+
async callContractMethod(address, methodName, methodArgs) {
|
|
95
|
+
let argsParam = '';
|
|
96
|
+
if (methodArgs.length) {
|
|
97
|
+
argsParam += '?' + methodArgs.map((param) => `args=${param}`).join('&');
|
|
98
|
+
}
|
|
99
|
+
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/blockchain/accounts/${address}/methods/${methodName}${argsParam}`, { headers: { Authorization: this.apiKey } });
|
|
100
|
+
if ('error' in res) {
|
|
101
|
+
throw new Error(`[TonApiService] Error in callContractMethod - ${res.error}`);
|
|
102
|
+
}
|
|
103
|
+
return res.decoded;
|
|
104
|
+
}
|
|
105
|
+
async fetchTokenInfo(tokenAddress) {
|
|
106
|
+
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/jettons/${tokenAddress}`, {
|
|
107
|
+
headers: { Authorization: this.apiKey }
|
|
108
|
+
});
|
|
109
|
+
if ('error' in res) {
|
|
110
|
+
throw new Error(`[TonApiService] Error in fetchTokenInfo - ${res.error}`);
|
|
111
|
+
}
|
|
112
|
+
return res.metadata;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
*
|
|
116
|
+
* @param tokenAddress in any form: raw or friendly
|
|
117
|
+
* @returns balance, decimals, name, symbol, walletJettonAddress, jettonAddress
|
|
118
|
+
*/
|
|
119
|
+
async fetchTokenInfoForWallet(walletAddress, tokenAddress) {
|
|
120
|
+
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/accounts/${walletAddress}/jettons/${tokenAddress}`, { headers: { Authorization: this.apiKey } });
|
|
121
|
+
if ('error' in res) {
|
|
122
|
+
throw new Error(`[TonApiService] Error in fetchTokenInfoForWallet - ${res.error}`);
|
|
123
|
+
}
|
|
124
|
+
return res;
|
|
125
|
+
}
|
|
126
|
+
async fetchAllNonNullableTokensInfoForWallet(walletAddress) {
|
|
127
|
+
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/accounts/${walletAddress}/jettons`, {
|
|
128
|
+
headers: { Authorization: this.apiKey }
|
|
129
|
+
});
|
|
130
|
+
if ('error' in res) {
|
|
131
|
+
throw new Error(`[TonApiService] Error in fetchAllNonNullableTokensInfoForWallet - ${res.error}`);
|
|
132
|
+
}
|
|
133
|
+
return res.balances;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* @returns available methods for walletAddress(contract), raw address and native coin TON balance
|
|
137
|
+
*/
|
|
138
|
+
async fetchAccountInfo(walletAddress) {
|
|
139
|
+
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/accounts/${walletAddress}`, {
|
|
140
|
+
headers: { Authorization: this.apiKey }
|
|
141
|
+
});
|
|
142
|
+
if ('error' in res) {
|
|
143
|
+
throw new Error(`[TonApiService] Error in fetchAccountInfo - ${res.error}`);
|
|
144
|
+
}
|
|
145
|
+
return res;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.TonApiService = TonApiService;
|
|
149
|
+
//# sourceMappingURL=ton-api.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ton-api.service.js","sourceRoot":"","sources":["../../../../../../../../packages/web3/src/lib/adapter/adapters/utils/ton-api.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,16 @@ import { SolanaAdapter } from './adapters/solana-adapter';
|
|
|
3
3
|
import { TronAdapter } from './adapters/tron-adapter';
|
|
4
4
|
import { AbstractAdapter } from './adapters/abstract-adapter';
|
|
5
5
|
import { WalletProvider } from "./constants/models/wallet-provider";
|
|
6
|
-
import { BlockchainName, EvmBlockchainName, SolanaBlockchainName, TronBlockchainName, ICustomLogger } from "@cryptorubic/core";
|
|
6
|
+
import { BlockchainName, EvmBlockchainName, SolanaBlockchainName, TronBlockchainName, ICustomLogger, HttpClient } from "@cryptorubic/core";
|
|
7
7
|
export declare class BlockchainAdapterFactoryService {
|
|
8
8
|
private readonly rpcList;
|
|
9
9
|
private readonly createLogger?;
|
|
10
|
+
private readonly httpClient?;
|
|
11
|
+
private readonly tonApiKey?;
|
|
10
12
|
readonly adapterStore: Partial<Record<BlockchainName, AbstractAdapter<unknown, unknown, BlockchainName>>>;
|
|
11
13
|
protected readonly logger?: ICustomLogger;
|
|
12
|
-
constructor(
|
|
14
|
+
private constructor();
|
|
15
|
+
static createFactory(rpcList: Partial<Record<EvmBlockchainName, string[]>>, httpClient?: HttpClient, tonApiKey?: string, createLogger?: (label: string) => ICustomLogger): Promise<BlockchainAdapterFactoryService>;
|
|
13
16
|
getAdapter(blockchain: SolanaBlockchainName): SolanaAdapter;
|
|
14
17
|
getAdapter(blockchain: EvmBlockchainName): EvmAdapter;
|
|
15
18
|
getAdapter(blockchain: TronBlockchainName): TronAdapter;
|
|
@@ -7,16 +7,25 @@ const solana_adapter_1 = require("./adapters/solana-adapter");
|
|
|
7
7
|
const tron_adapter_1 = require("./adapters/tron-adapter");
|
|
8
8
|
const viem_1 = require("viem");
|
|
9
9
|
const core_1 = require("@cryptorubic/core");
|
|
10
|
+
const ton_adapter_1 = require("./adapters/ton-adapter");
|
|
10
11
|
class BlockchainAdapterFactoryService {
|
|
11
|
-
constructor(rpcList, createLogger) {
|
|
12
|
+
constructor(rpcList, createLogger, httpClient, tonApiKey) {
|
|
12
13
|
this.rpcList = rpcList;
|
|
13
14
|
this.createLogger = createLogger;
|
|
15
|
+
this.httpClient = httpClient;
|
|
16
|
+
this.tonApiKey = tonApiKey;
|
|
14
17
|
this.adapterStore = {};
|
|
15
18
|
this.adapterStore = this.createStorage();
|
|
16
19
|
if (this.createLogger) {
|
|
17
20
|
this.logger = this.createLogger('BlockchainAdapterFactory');
|
|
18
21
|
}
|
|
19
22
|
}
|
|
23
|
+
static async createFactory(rpcList, httpClient, tonApiKey, createLogger) {
|
|
24
|
+
// @TODO Add default logger
|
|
25
|
+
const loggerFn = createLogger || undefined;
|
|
26
|
+
const resolvedHttpClient = httpClient ?? await Promise.resolve().then(() => require('axios'));
|
|
27
|
+
return new this(rpcList, createLogger, resolvedHttpClient, tonApiKey);
|
|
28
|
+
}
|
|
20
29
|
getAdapter(blockchain) {
|
|
21
30
|
const adapter = this.adapterStore?.[blockchain];
|
|
22
31
|
if (!adapter) {
|
|
@@ -29,15 +38,23 @@ class BlockchainAdapterFactoryService {
|
|
|
29
38
|
const adapters = Object.entries(this.rpcList)
|
|
30
39
|
.map(([blockchain, rpcs]) => {
|
|
31
40
|
const adapter = this.createAdapter(blockchain, rpcs || []);
|
|
41
|
+
return [blockchain, adapter || null];
|
|
32
42
|
if (adapter) {
|
|
33
43
|
this.logger?.customLog(`Creating adapter for ${blockchain} blockchain`);
|
|
34
44
|
return [blockchain, adapter];
|
|
35
45
|
}
|
|
36
46
|
this.logger?.customWarn(`Failed to create adapter for ${blockchain} blockchain`);
|
|
37
47
|
return [blockchain, null];
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
|
|
48
|
+
});
|
|
49
|
+
const tonAdapter = this.createAdapter(core_1.BLOCKCHAIN_NAME.TON, []);
|
|
50
|
+
adapters.push(tonAdapter ? [core_1.BLOCKCHAIN_NAME.TON, tonAdapter] : [core_1.BLOCKCHAIN_NAME.TON, null]);
|
|
51
|
+
const activeAdapters = adapters.filter(([blockchain, adapter]) => {
|
|
52
|
+
const adapterExists = Boolean(adapter);
|
|
53
|
+
const message = adapterExists ? `Creating adapter for ${blockchain} blockchain` : `Failed to create adapter for ${blockchain} blockchain`;
|
|
54
|
+
this.logger?.customLog(message);
|
|
55
|
+
return adapterExists;
|
|
56
|
+
});
|
|
57
|
+
const store = Object.fromEntries(activeAdapters);
|
|
41
58
|
this.logger?.customLog('Adapters store created');
|
|
42
59
|
return store;
|
|
43
60
|
}
|
|
@@ -59,6 +76,11 @@ class BlockchainAdapterFactoryService {
|
|
|
59
76
|
return new solana_adapter_1.SolanaAdapter(rpcs, this.createLogger?.(`SOLANA_ADAPTER`));
|
|
60
77
|
}
|
|
61
78
|
}
|
|
79
|
+
if (this.tonApiKey && blockchain === core_1.BLOCKCHAIN_NAME.TON && this.httpClient) {
|
|
80
|
+
return new ton_adapter_1.TonAdapter(this.httpClient, this.tonApiKey, this.createLogger?.(`TON_ADAPTER`));
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
}
|
|
62
84
|
return null;
|
|
63
85
|
}
|
|
64
86
|
connectWallet(walletProvider) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockchain-adapter-factory.service.js","sourceRoot":"","sources":["../../../../../../packages/web3/src/lib/adapter/blockchain-adapter-factory.service.ts"],"names":[],"mappings":";;;AAAA,iFAA4E;AAC5E,wDAAoD;AACpD,8DAA0D;AAC1D,0DAAsD;AAGtD,+BAAgD;AAChD,4CAQ2B;
|
|
1
|
+
{"version":3,"file":"blockchain-adapter-factory.service.js","sourceRoot":"","sources":["../../../../../../packages/web3/src/lib/adapter/blockchain-adapter-factory.service.ts"],"names":[],"mappings":"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"}
|