@cryptorubic/web3 0.14.0-alpha.solana-gas.12 → 1.0.0-alpha.no-sdk.1
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 +4 -7
- package/src/index.js +4 -7
- package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.d.ts +35 -0
- package/src/lib/adapter/adapters/{bitcoin-adapter.js → adapter-bitcoin/bitcoin-adapter.js} +16 -6
- package/src/lib/adapter/adapters/adapter-bitcoin/client/bitcoin-adapter-client.d.ts +16 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/client/bitcoin-adapter-client.js +119 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-send-tx-params.d.ts +5 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-psbt-encoded-config.d.ts +5 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-trade-types.d.ts +7 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-transfer-encoded-config.d.ts +6 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-transfer-encoded-config.js +2 -0
- package/src/lib/adapter/adapters/adapter-evm/client/evm-adapter-client.d.ts +80 -0
- package/src/lib/adapter/adapters/adapter-evm/client/evm-adapter-client.js +307 -0
- package/src/lib/adapter/adapters/adapter-evm/constants/proxy-hash-errors.d.ts +4 -0
- package/src/lib/adapter/adapters/adapter-evm/constants/proxy-hash-errors.js +705 -0
- package/src/lib/adapter/adapters/{evm-adapter.d.ts → adapter-evm/evm-adapter.d.ts} +25 -17
- package/src/lib/adapter/adapters/{evm-adapter.js → adapter-evm/evm-adapter.js} +155 -75
- package/src/lib/adapter/adapters/adapter-evm/models/evm-send-tx-params.d.ts +38 -0
- package/src/lib/adapter/adapters/adapter-evm/models/evm-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/adapter-evm/utils/parse-evm-error.d.ts +12 -0
- package/src/lib/adapter/adapters/adapter-evm/utils/parse-evm-error.js +70 -0
- package/src/lib/adapter/adapters/adapter-solana/client/solana-adapter-client.d.ts +15 -0
- package/src/lib/adapter/adapters/adapter-solana/client/solana-adapter-client.js +94 -0
- package/src/lib/adapter/adapters/adapter-solana/models/solana-send-tx-params.d.ts +16 -0
- package/src/lib/adapter/adapters/adapter-solana/models/solana-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/{utils/solana-utils → adapter-solana/services}/solana-tokens-service.js +8 -10
- package/src/lib/adapter/adapters/{solana-adapter.d.ts → adapter-solana/solana-adapter.d.ts} +23 -17
- package/src/lib/adapter/adapters/{solana-adapter.js → adapter-solana/solana-adapter.js} +36 -98
- package/src/lib/adapter/adapters/adapter-sui/client/sui-adapter-client.d.ts +15 -0
- package/src/lib/adapter/adapters/adapter-sui/client/sui-adapter-client.js +58 -0
- package/src/lib/adapter/adapters/adapter-sui/models/sui-send-tx-params.d.ts +8 -0
- package/src/lib/adapter/adapters/adapter-sui/models/sui-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/adapter-sui/sui-adapter.d.ts +29 -0
- package/src/lib/adapter/adapters/{sui-adapter.js → adapter-sui/sui-adapter.js} +25 -6
- package/src/lib/adapter/adapters/adapter-ton/client/ton-adapter-client.d.ts +41 -0
- package/src/lib/adapter/adapters/adapter-ton/client/ton-adapter-client.js +164 -0
- package/src/lib/adapter/adapters/adapter-ton/models/ton-send-tx-params.d.ts +26 -0
- package/src/lib/adapter/adapters/adapter-ton/models/ton-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.d.ts +4 -4
- package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.js +0 -5
- package/src/lib/adapter/adapters/adapter-ton/services/ton-client/ton-client.d.ts +6 -0
- package/src/lib/adapter/adapters/adapter-ton/services/ton-client/ton-client.js +18 -0
- package/src/lib/adapter/adapters/adapter-ton/ton-adapter.d.ts +29 -0
- package/src/lib/adapter/adapters/{ton-adapter.js → adapter-ton/ton-adapter.js} +40 -50
- package/src/lib/adapter/adapters/adapter-tron/client/tron-adapter-client.d.ts +27 -0
- package/src/lib/adapter/adapters/adapter-tron/client/tron-adapter-client.js +91 -0
- package/src/lib/adapter/adapters/adapter-tron/models/tron-send-tx-params.d.ts +13 -0
- package/src/lib/adapter/adapters/adapter-tron/models/tron-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/{tron-adapter.d.ts → adapter-tron/tron-adapter.d.ts} +21 -18
- package/src/lib/adapter/adapters/{tron-adapter.js → adapter-tron/tron-adapter.js} +45 -68
- package/src/lib/adapter/adapters/adapter-tron/utils/parse-tron-error.d.ts +2 -0
- package/src/lib/adapter/adapters/adapter-tron/utils/parse-tron-error.js +20 -0
- package/src/lib/adapter/adapters/common/abstract-adapter.d.ts +48 -0
- package/src/lib/adapter/adapters/common/abstract-adapter.js +67 -0
- package/src/lib/adapter/adapters/common/client/abstract-adapter-client.d.ts +24 -0
- package/src/lib/adapter/adapters/common/client/abstract-adapter-client.js +59 -0
- package/src/lib/adapter/adapters/models/approve-adapter.d.ts +4 -4
- package/src/lib/adapter/adapters/models/approve-adapter.js +3 -3
- package/src/lib/adapter/adapters/models/basic-transaction-options.d.ts +1 -1
- package/src/lib/adapter/adapters/models/evm-web3-public-models/batch-call.d.ts +5 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/batch-call.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-call.d.ts +4 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-call.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-multicall-response.d.ts +4 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-multicall-response.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price-viem.d.ts +18 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price-viem.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/permit2-contract-types.d.ts +10 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/permit2-contract-types.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/rpc-response.d.ts +5 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/rpc-response.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/contract-params.d.ts +23 -0
- package/src/lib/adapter/adapters/models/old-features-models/contract-params.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/encode-transaction-options.d.ts +32 -0
- package/src/lib/adapter/adapters/models/old-features-models/encode-transaction-options.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/is-deflation-token.d.ts +6 -0
- package/src/lib/adapter/adapters/models/old-features-models/is-deflation-token.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/non-evm-chain-address-correct-response.d.ts +5 -0
- package/src/lib/adapter/adapters/models/old-features-models/non-evm-chain-address-correct-response.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/swap-transaction-options.d.ts +61 -0
- package/src/lib/adapter/adapters/models/old-features-models/swap-transaction-options.js +2 -0
- package/src/lib/adapter/adapters/models/status-manager-models/tx-status-data.d.ts +8 -0
- package/src/lib/adapter/adapters/models/status-manager-models/tx-status-data.js +2 -0
- package/src/lib/adapter/adapters/models/web3-public-models/contract-multicall-response.d.ts +5 -0
- package/src/lib/adapter/adapters/models/web3-public-models/contract-multicall-response.js +2 -0
- package/src/lib/adapter/adapters/models/web3-public-models/method-data.d.ts +4 -0
- package/src/lib/adapter/adapters/models/web3-public-models/method-data.js +2 -0
- package/src/lib/adapter/adapters/models/web3-public-models/supported-token-field.d.ts +1 -0
- package/src/lib/adapter/adapters/models/web3-public-models/supported-token-field.js +2 -0
- package/src/lib/adapter/adapters/models/web3-public-models/tx-status.d.ts +10 -0
- package/src/lib/adapter/adapters/models/web3-public-models/tx-status.js +12 -0
- package/src/lib/adapter/adapters/utils/errors.d.ts +2 -0
- package/src/lib/adapter/adapters/utils/errors.js +10 -0
- package/src/lib/adapter/adapters/utils/options.d.ts +10 -0
- package/src/lib/adapter/adapters/utils/options.js +59 -0
- package/src/lib/adapter/adapters/utils/waitFor.d.ts +1 -0
- package/src/lib/adapter/adapters/utils/waitFor.js +6 -0
- package/src/lib/adapter/blockchain-adapter-factory.service.d.ts +18 -13
- package/src/lib/adapter/blockchain-adapter-factory.service.js +35 -66
- package/src/lib/adapter/constants/models/create-factory-params.d.ts +8 -0
- package/src/lib/adapter/constants/models/create-factory-params.js +2 -0
- package/src/lib/adapter/constants/models/env-type.d.ts +1 -0
- package/src/lib/adapter/constants/models/env-type.js +2 -0
- package/src/lib/adapter/constants/models/solana-web3.d.ts +1 -1
- package/src/lib/adapter/constants/rubic-api-link-mapping.d.ts +2 -0
- package/src/lib/adapter/constants/rubic-api-link-mapping.js +16 -0
- package/src/lib/errors/blockchain/deflation-token.error.d.ts +11 -0
- package/src/lib/errors/blockchain/deflation-token.error.js +16 -0
- package/src/lib/errors/blockchain/healthcheck.error.d.ts +8 -0
- package/src/lib/errors/blockchain/healthcheck.error.js +15 -0
- package/src/lib/errors/blockchain/invalid-address.error.d.ts +8 -0
- package/src/lib/errors/blockchain/invalid-address.error.js +15 -0
- package/src/lib/errors/blockchain/low-gas.error.d.ts +7 -0
- package/src/lib/errors/blockchain/low-gas.error.js +14 -0
- package/src/lib/errors/blockchain/transaction-reverted.error.d.ts +7 -0
- package/src/lib/errors/blockchain/transaction-reverted.error.js +14 -0
- package/src/lib/errors/blockchain/tron-insufficient-native-balance.d.ts +7 -0
- package/src/lib/errors/blockchain/tron-insufficient-native-balance.js +14 -0
- package/src/lib/errors/blockchain/tron-transaction-expired.d.ts +7 -0
- package/src/lib/errors/blockchain/tron-transaction-expired.js +14 -0
- package/src/lib/errors/blockchain/user-reject.error.d.ts +7 -0
- package/src/lib/errors/blockchain/user-reject.error.js +14 -0
- package/src/lib/errors/blockchain/wrong-from-address.error.d.ts +7 -0
- package/src/lib/errors/blockchain/wrong-from-address.error.js +14 -0
- package/src/lib/errors/blockchain/wrong-receiver-address.error.d.ts +7 -0
- package/src/lib/errors/blockchain/wrong-receiver-address.error.js +14 -0
- package/src/lib/errors/common/timeout.error.d.ts +4 -0
- package/src/lib/errors/common/timeout.error.js +12 -0
- package/src/lib/errors/cross-chain/cross-chain-is-unavailable.error.d.ts +7 -0
- package/src/lib/errors/cross-chain/cross-chain-is-unavailable.error.js +14 -0
- package/src/lib/errors/cross-chain/insufficient-funds-gas-price-value.error.d.ts +7 -0
- package/src/lib/errors/cross-chain/insufficient-funds-gas-price-value.error.js +14 -0
- package/src/lib/errors/cross-chain/low-to-slippage.error.d.ts +6 -0
- package/src/lib/errors/cross-chain/low-to-slippage.error.js +10 -0
- package/src/lib/errors/cross-chain/max-gas-price-overflow.error.d.ts +8 -0
- package/src/lib/errors/cross-chain/max-gas-price-overflow.error.js +15 -0
- package/src/lib/errors/cross-chain/too-low-amount.error.d.ts +7 -0
- package/src/lib/errors/cross-chain/too-low-amount.error.js +14 -0
- package/src/lib/errors/cross-chain/unsupported-receiver-address.error.d.ts +4 -0
- package/src/lib/errors/cross-chain/unsupported-receiver-address.error.js +11 -0
- package/src/lib/errors/cross-chain/updated-rates-error.d.ts +10 -0
- package/src/lib/errors/cross-chain/updated-rates-error.js +17 -0
- package/src/lib/errors/models/rubic-api-error.d.ts +21 -0
- package/src/lib/errors/models/rubic-api-error.js +2 -0
- package/src/lib/errors/on-chain/on-chain-is-unavailable.error.d.ts +7 -0
- package/src/lib/errors/on-chain/on-chain-is-unavailable.error.js +14 -0
- package/src/lib/errors/proxy/unapproved-contract-error.d.ts +8 -0
- package/src/lib/errors/proxy/unapproved-contract-error.js +15 -0
- package/src/lib/errors/proxy/unapproved-method-error.d.ts +8 -0
- package/src/lib/errors/proxy/unapproved-method-error.js +15 -0
- package/src/lib/errors/proxy/unlisted-error.d.ts +9 -0
- package/src/lib/errors/proxy/unlisted-error.js +16 -0
- package/src/lib/errors/rubic-sdk.error.d.ts +6 -0
- package/src/lib/errors/rubic-sdk.error.js +13 -0
- package/src/lib/errors/swap/bridgers-pair-is-unavailable.error.d.ts +7 -0
- package/src/lib/errors/swap/bridgers-pair-is-unavailable.error.js +14 -0
- package/src/lib/errors/swap/failed-to-check-for-transaction-receipt.error.d.ts +8 -0
- package/src/lib/errors/swap/failed-to-check-for-transaction-receipt.error.js +15 -0
- package/src/lib/errors/swap/insufficient-funds-oneinch.error.d.ts +9 -0
- package/src/lib/errors/swap/insufficient-funds-oneinch.error.js +15 -0
- package/src/lib/errors/swap/insufficient-funds.error.d.ts +11 -0
- package/src/lib/errors/swap/insufficient-funds.error.js +18 -0
- package/src/lib/errors/swap/insufficient-liquidity.error.d.ts +7 -0
- package/src/lib/errors/swap/insufficient-liquidity.error.js +14 -0
- package/src/lib/errors/swap/lifi-pair-is-unavailable.error.d.ts +7 -0
- package/src/lib/errors/swap/lifi-pair-is-unavailable.error.js +14 -0
- package/src/lib/errors/swap/low-slippage-deflationary-token.error.d.ts +7 -0
- package/src/lib/errors/swap/low-slippage-deflationary-token.error.js +14 -0
- package/src/lib/errors/swap/low-slippage.error.d.ts +8 -0
- package/src/lib/errors/swap/low-slippage.error.js +15 -0
- package/src/lib/errors/swap/max-amount.error.d.ts +7 -0
- package/src/lib/errors/swap/max-amount.error.js +14 -0
- package/src/lib/errors/swap/max-decimals.error.d.ts +5 -0
- package/src/lib/errors/swap/max-decimals.error.js +12 -0
- package/src/lib/errors/swap/min-amount.error.d.ts +7 -0
- package/src/lib/errors/swap/min-amount.error.js +14 -0
- package/src/lib/errors/swap/no-linked-account-erros.d.ts +4 -0
- package/src/lib/errors/swap/no-linked-account-erros.js +11 -0
- package/src/lib/errors/swap/not-supported-blockchain.d.ts +8 -0
- package/src/lib/errors/swap/not-supported-blockchain.js +15 -0
- package/src/lib/errors/swap/not-supported-region.d.ts +7 -0
- package/src/lib/errors/swap/not-supported-region.js +14 -0
- package/src/lib/errors/swap/not-supported-tokens.error.d.ts +7 -0
- package/src/lib/errors/swap/not-supported-tokens.error.js +14 -0
- package/src/lib/errors/swap/not-whitelisted-provider.error.d.ts +10 -0
- package/src/lib/errors/swap/not-whitelisted-provider.error.js +17 -0
- package/src/lib/errors/swap/simulation-failed.error.d.ts +6 -0
- package/src/lib/errors/swap/simulation-failed.error.js +12 -0
- package/src/lib/errors/swap/swap-error-on-provider-side.d.ts +7 -0
- package/src/lib/errors/swap/swap-error-on-provider-side.js +14 -0
- package/src/lib/errors/swap/swap-request.error.d.ts +7 -0
- package/src/lib/errors/swap/swap-request.error.js +14 -0
- package/src/lib/errors/swap/trade-expired.error.d.ts +4 -0
- package/src/lib/errors/swap/trade-expired.error.js +11 -0
- package/src/lib/errors/swap/unnecessary-approve.error.d.ts +7 -0
- package/src/lib/errors/swap/unnecessary-approve.error.js +14 -0
- package/src/lib/errors/swap/wallet-not-connected.error.d.ts +8 -0
- package/src/lib/errors/swap/wallet-not-connected.error.js +15 -0
- package/src/lib/errors/swap/wrong-network.error.d.ts +10 -0
- package/src/lib/errors/swap/wrong-network.error.js +16 -0
- package/src/lib/utils/web3-types/common-web3-pure.js +2 -4
- package/src/lib/utils/web3-types/near-web3-pure.js +1 -1
- package/src/lib/utils/web3-types/solana-web3-pure.js +1 -1
- package/src/lib/utils/web3-types/sui-web3-pure.js +2 -2
- package/src/lib/adapter/adapters/abstract-adapter.d.ts +0 -23
- package/src/lib/adapter/adapters/abstract-adapter.js +0 -61
- package/src/lib/adapter/adapters/bitcoin-adapter.d.ts +0 -18
- package/src/lib/adapter/adapters/models/adapter-factory-params.d.ts +0 -7
- package/src/lib/adapter/adapters/sui-adapter.d.ts +0 -17
- package/src/lib/adapter/adapters/ton-adapter.d.ts +0 -22
- package/src/lib/utils/models/solana-transaction-config.d.ts +0 -6
- /package/src/lib/adapter/adapters/{models/adapter-factory-params.js → adapter-bitcoin/models/btc-send-tx-params.js} +0 -0
- /package/src/lib/adapter/adapters/{models/gas-price.js → adapter-bitcoin/models/btc-web3-private-models/bitcoin-psbt-encoded-config.js} +0 -0
- /package/src/lib/{utils/models/solana-transaction-config.js → adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-trade-types.js} +0 -0
- /package/src/lib/adapter/adapters/{utils/solana-utils → adapter-solana/services}/solana-tokens-service.d.ts +0 -0
- /package/src/lib/adapter/adapters/models/{gas-price.d.ts → evm-web3-public-models/gas-price.d.ts} +0 -0
|
@@ -2,11 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TonApiService = void 0;
|
|
4
4
|
class TonApiService {
|
|
5
|
-
httpClient;
|
|
6
|
-
logger;
|
|
7
|
-
tonApiUrl;
|
|
8
|
-
apiKey;
|
|
9
|
-
tonCenterV3Url;
|
|
10
5
|
constructor(httpClient, params, logger) {
|
|
11
6
|
this.httpClient = httpClient;
|
|
12
7
|
this.logger = logger;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TonClientInstance = void 0;
|
|
4
|
+
const ton_1 = require("@ton/ton");
|
|
5
|
+
class TonClientInstance {
|
|
6
|
+
constructor() { }
|
|
7
|
+
static getInstance() {
|
|
8
|
+
if (!this.instance) {
|
|
9
|
+
this.instance = new ton_1.TonClient({
|
|
10
|
+
endpoint: 'https://x-api.rubic.exchange/toncenter/api/v2/jsonRPC',
|
|
11
|
+
apiKey: 'sndfje3u4b3fnNSDNFUSDNVSunw345842hrnfd3b4nt4'
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return this.instance;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.TonClientInstance = TonClientInstance;
|
|
18
|
+
TonClientInstance.instance = null;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BlockchainName, HttpClient, ICustomLogger, PriceTokenAmount, Token, TokenAmount, TonBlockchainName } from '@cryptorubic/core';
|
|
2
|
+
import { TonClient } from '@ton/ton';
|
|
3
|
+
import { TonApiParseAddressResp } from '../models/tonapi-models';
|
|
4
|
+
import { TonAdapterConfig } from '../models/ton-adapter-config';
|
|
5
|
+
import BigNumber from 'bignumber.js';
|
|
6
|
+
import { AbstractAdapter } from '../common/abstract-adapter';
|
|
7
|
+
import { TonConnectUI } from '@tonconnect/ui';
|
|
8
|
+
import { TonSendTxParams } from './models/ton-send-tx-params';
|
|
9
|
+
import { AbstractAdapterClient } from '../common/client/abstract-adapter-client';
|
|
10
|
+
import { RubicAppAdaptersFactoryParams } from '../../constants/models/create-factory-params';
|
|
11
|
+
import { Web3PrimitiveType } from '../../../utils/models/primitive-types';
|
|
12
|
+
import { ContractMulticallResponse } from '../models/web3-public-models/contract-multicall-response';
|
|
13
|
+
export declare class TonAdapter extends AbstractAdapter<TonClient, TonConnectUI, TonBlockchainName> {
|
|
14
|
+
readonly client: AbstractAdapterClient<TonConnectUI, TonSendTxParams, string>;
|
|
15
|
+
private readonly tonApi;
|
|
16
|
+
constructor(httpClient: HttpClient, config: TonAdapterConfig, logger?: ICustomLogger, rubicAppParams?: RubicAppAdaptersFactoryParams);
|
|
17
|
+
getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
|
|
18
|
+
multicallContractsMethods<Output extends Web3PrimitiveType>(): Promise<ContractMulticallResponse<Output>[][]>;
|
|
19
|
+
getBlockNumber(): Promise<number | {
|
|
20
|
+
blockNumber: number;
|
|
21
|
+
workchain: number;
|
|
22
|
+
}>;
|
|
23
|
+
callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<BlockchainName>[]>;
|
|
24
|
+
read<T>(args: unknown): Promise<T>;
|
|
25
|
+
write(args: unknown): Promise<string>;
|
|
26
|
+
getAllFormatsOfAddress(walletAddress: string): Promise<TonApiParseAddressResp>;
|
|
27
|
+
checkEnoughBalance(token: TokenAmount | PriceTokenAmount, walletAddress: string): Promise<boolean>;
|
|
28
|
+
getBalance(walletAddress: string, tokenAddress?: string): Promise<BigNumber>;
|
|
29
|
+
}
|
|
@@ -2,18 +2,51 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TonAdapter = void 0;
|
|
4
4
|
const core_1 = require("@cryptorubic/core");
|
|
5
|
-
const ton_api_service_1 = require("./
|
|
5
|
+
const ton_api_service_1 = require("./services/ton-api.service");
|
|
6
6
|
const ton_1 = require("@ton/ton");
|
|
7
7
|
const bignumber_js_1 = require("bignumber.js");
|
|
8
|
-
const abstract_adapter_1 = require("
|
|
9
|
-
const web3_pure_1 = require("
|
|
8
|
+
const abstract_adapter_1 = require("../common/abstract-adapter");
|
|
9
|
+
const web3_pure_1 = require("../../../utils/web3-pure");
|
|
10
|
+
const ton_adapter_client_1 = require("./client/ton-adapter-client");
|
|
10
11
|
class TonAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
11
|
-
|
|
12
|
-
tonClient;
|
|
13
|
-
constructor(httpClient, config, logger) {
|
|
12
|
+
constructor(httpClient, config, logger, rubicAppParams) {
|
|
14
13
|
super(core_1.BLOCKCHAIN_NAME.TON, logger);
|
|
15
14
|
this.tonApi = new ton_api_service_1.TonApiService(httpClient, config.tonApiConfig, logger);
|
|
16
|
-
this.
|
|
15
|
+
this.client = new ton_adapter_client_1.TonAdapterClient(this.tonApi, config, httpClient, logger, rubicAppParams);
|
|
16
|
+
}
|
|
17
|
+
async getTokensBalances(userAddress, tokensAddresses) {
|
|
18
|
+
const tokensWithBalance = await this.tonApi.fetchAllNonNullableTokensInfoForWallet(userAddress);
|
|
19
|
+
const nativeIndex = tokensAddresses.findIndex((tokenAddress) => web3_pure_1.Web3Pure.isNativeAddress('TON', tokenAddress));
|
|
20
|
+
if (!tokensWithBalance.length && nativeIndex === -1) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
const balances = tokensAddresses
|
|
24
|
+
.filter((tokenAddress) => !web3_pure_1.Web3Pure.isNativeAddress('TON', tokenAddress))
|
|
25
|
+
.map((address) => {
|
|
26
|
+
const tokenWithBalance = tokensWithBalance.find((token) => token.jetton.address.toLowerCase() === ton_1.Address.parse(address).toRawString().toLowerCase());
|
|
27
|
+
if (tokenWithBalance) {
|
|
28
|
+
return new bignumber_js_1.default(tokenWithBalance.balance);
|
|
29
|
+
}
|
|
30
|
+
return new bignumber_js_1.default(0);
|
|
31
|
+
});
|
|
32
|
+
if (nativeIndex !== -1) {
|
|
33
|
+
const acountInfo = await this.tonApi.fetchAccountInfo(userAddress);
|
|
34
|
+
const nativeBalance = new bignumber_js_1.default(acountInfo.balance);
|
|
35
|
+
balances.splice(nativeIndex, 0, nativeBalance);
|
|
36
|
+
}
|
|
37
|
+
return balances;
|
|
38
|
+
}
|
|
39
|
+
multicallContractsMethods() {
|
|
40
|
+
throw new Error('Method not implemented.');
|
|
41
|
+
}
|
|
42
|
+
async getBlockNumber() {
|
|
43
|
+
try {
|
|
44
|
+
const block = await this.tonApi.fetchLastBlockInfo();
|
|
45
|
+
return block.seqno;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
17
50
|
}
|
|
18
51
|
async callForTokensInfo(tokenAddresses) {
|
|
19
52
|
const info = await Promise.all(tokenAddresses.map((address) => {
|
|
@@ -43,12 +76,6 @@ class TonAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
43
76
|
async getAllFormatsOfAddress(walletAddress) {
|
|
44
77
|
return this.tonApi.getAllFormatsOfAddress(walletAddress);
|
|
45
78
|
}
|
|
46
|
-
async getWalletAddress(address, contractAddress) {
|
|
47
|
-
const addressResult = await this.tonClient.runMethod(contractAddress, 'get_wallet_address', [
|
|
48
|
-
{ cell: (0, ton_1.beginCell)().storeAddress(address).endCell(), type: 'slice' }
|
|
49
|
-
]);
|
|
50
|
-
return addressResult.stack.readAddress();
|
|
51
|
-
}
|
|
52
79
|
async checkEnoughBalance(token, walletAddress) {
|
|
53
80
|
const weiBalance = await this.getBalance(walletAddress, token.address);
|
|
54
81
|
const balance = core_1.Token.fromWei(weiBalance, token.decimals);
|
|
@@ -61,42 +88,5 @@ class TonAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
61
88
|
: (await this.tonApi.fetchTokenInfoForWallet(walletAddress, tokenAddress)).balance;
|
|
62
89
|
return new bignumber_js_1.default(tokenBalance || 0);
|
|
63
90
|
}
|
|
64
|
-
getTransferEncodedConfig(tokenAddress, walletAddress, receiver, amount) {
|
|
65
|
-
if ((0, core_1.compareAddresses)(core_1.nativeTokensList.TON.address, tokenAddress)) {
|
|
66
|
-
return this.getTransferNativeConfig(receiver, amount);
|
|
67
|
-
}
|
|
68
|
-
return this.getTransferJettonConfig(tokenAddress, walletAddress, receiver, amount);
|
|
69
|
-
}
|
|
70
|
-
async getTransferNativeConfig(receiver, amount) {
|
|
71
|
-
const transferAmount = BigInt(amount);
|
|
72
|
-
const encodeConfig = {
|
|
73
|
-
address: receiver,
|
|
74
|
-
amount: transferAmount.toString()
|
|
75
|
-
};
|
|
76
|
-
return encodeConfig;
|
|
77
|
-
}
|
|
78
|
-
async getTransferJettonConfig(tokenAddress, walletAddress, receiver, amount) {
|
|
79
|
-
const fromAddress = ton_1.Address.parse(walletAddress);
|
|
80
|
-
const contractAddress = ton_1.Address.parse(tokenAddress);
|
|
81
|
-
const transferAmount = BigInt(amount);
|
|
82
|
-
const receiverAddress = ton_1.Address.parse(receiver);
|
|
83
|
-
const jettonWalletAddress = await this.getWalletAddress(fromAddress, contractAddress);
|
|
84
|
-
const body = (0, ton_1.beginCell)()
|
|
85
|
-
.storeUint(0xf8a7ea5, 32)
|
|
86
|
-
.storeUint(0, 64)
|
|
87
|
-
.storeCoins(transferAmount)
|
|
88
|
-
.storeAddress(receiverAddress)
|
|
89
|
-
.storeAddress(receiverAddress)
|
|
90
|
-
.storeBit(0)
|
|
91
|
-
.storeCoins((0, ton_1.toNano)('0.02'))
|
|
92
|
-
.storeBit(0)
|
|
93
|
-
.endCell();
|
|
94
|
-
const encodeConfig = {
|
|
95
|
-
address: jettonWalletAddress.toRawString(),
|
|
96
|
-
amount: (0, ton_1.toNano)('0.05').toString(),
|
|
97
|
-
payload: body.toBoc().toString('base64')
|
|
98
|
-
};
|
|
99
|
-
return encodeConfig;
|
|
100
|
-
}
|
|
101
91
|
}
|
|
102
92
|
exports.TonAdapter = TonAdapter;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { TronWeb } from 'tronweb';
|
|
2
|
+
import { AbstractAdapterClient } from '../../common/client/abstract-adapter-client';
|
|
3
|
+
import { BlockchainName, HttpClient, ICustomLogger, TokenAmount } from '@cryptorubic/core';
|
|
4
|
+
import { RubicAppAdaptersFactoryParams } from '../../../constants/models/create-factory-params';
|
|
5
|
+
import { TronSendTxParams } from '../models/tron-send-tx-params';
|
|
6
|
+
import { TxStatus } from '../../models/web3-public-models/tx-status';
|
|
7
|
+
import { TronTransactionConfig } from 'packages/web3/src/lib/utils/models/tron-transaction-config';
|
|
8
|
+
import { TronAdapter } from '../tron-adapter';
|
|
9
|
+
import { ApproveAdapterClient } from '../../models/approve-adapter';
|
|
10
|
+
import { AllowanceInfo } from '../../models/common-types';
|
|
11
|
+
export declare class TronAdapterClient extends AbstractAdapterClient<TronWeb, TronSendTxParams, string> implements ApproveAdapterClient<TronTransactionConfig> {
|
|
12
|
+
private readonly tronAdapter;
|
|
13
|
+
constructor(tronAdapter: TronAdapter, httpClient: HttpClient, logger?: ICustomLogger, rubicAppParams?: RubicAppAdaptersFactoryParams);
|
|
14
|
+
getBlockchainName(): Promise<BlockchainName>;
|
|
15
|
+
getAllowance(fromTokenAddress: string, walletAddress: string, spender: string): Promise<AllowanceInfo>;
|
|
16
|
+
needApprove(from: TokenAmount, walletAddress: string, spender: string): Promise<boolean>;
|
|
17
|
+
approve(fromAddress: string, tokenAddress: string, spenderAddress: string, amount?: string): Promise<string>;
|
|
18
|
+
encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): TronTransactionConfig;
|
|
19
|
+
getTransactionStatus(srcTxHash: string): Promise<TxStatus>;
|
|
20
|
+
/**
|
|
21
|
+
* Gets mined transaction info.
|
|
22
|
+
* @param hash Transaction hash.
|
|
23
|
+
*/
|
|
24
|
+
private getTransactionInfo;
|
|
25
|
+
sendTransaction(params: TronSendTxParams): Promise<string>;
|
|
26
|
+
trySendTransaction(params: TronSendTxParams): Promise<string>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TronAdapterClient = void 0;
|
|
4
|
+
const bignumber_js_1 = require("bignumber.js");
|
|
5
|
+
const abstract_adapter_client_1 = require("../../common/client/abstract-adapter-client");
|
|
6
|
+
const core_1 = require("@cryptorubic/core");
|
|
7
|
+
const trc_20_contract_abi_1 = require("../../constants/trc-20-contract-abi");
|
|
8
|
+
const tx_status_1 = require("../../models/web3-public-models/tx-status");
|
|
9
|
+
const parse_tron_error_1 = require("../utils/parse-tron-error");
|
|
10
|
+
const tron_adapter_1 = require("../tron-adapter");
|
|
11
|
+
class TronAdapterClient extends abstract_adapter_client_1.AbstractAdapterClient {
|
|
12
|
+
constructor(tronAdapter, httpClient, logger, rubicAppParams) {
|
|
13
|
+
super(httpClient, logger, rubicAppParams);
|
|
14
|
+
this.tronAdapter = tronAdapter;
|
|
15
|
+
}
|
|
16
|
+
getBlockchainName() {
|
|
17
|
+
return Promise.resolve(core_1.BLOCKCHAIN_NAME.TRON);
|
|
18
|
+
}
|
|
19
|
+
async getAllowance(fromTokenAddress, walletAddress, spender) {
|
|
20
|
+
const [contract, decimals, allowance] = await Promise.all([
|
|
21
|
+
this.tronAdapter.public.contract(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, fromTokenAddress),
|
|
22
|
+
this.tronAdapter.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'decimals'),
|
|
23
|
+
this.tronAdapter.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'allowance', [spender])
|
|
24
|
+
]);
|
|
25
|
+
const allowanceWeiBN = new bignumber_js_1.default(allowance);
|
|
26
|
+
const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
|
|
27
|
+
return { allowanceNonWei, allowanceWei: allowanceWeiBN };
|
|
28
|
+
}
|
|
29
|
+
async needApprove(from, walletAddress, spender) {
|
|
30
|
+
if (from.isNative)
|
|
31
|
+
return false;
|
|
32
|
+
const { allowanceWei } = await this.getAllowance(from.address, walletAddress, spender);
|
|
33
|
+
return allowanceWei.lt(from.weiAmount);
|
|
34
|
+
}
|
|
35
|
+
async approve(fromAddress, tokenAddress, spenderAddress, amount) {
|
|
36
|
+
const config = this.encodeApprove(tokenAddress, spenderAddress, amount);
|
|
37
|
+
return this.tronAdapter.write(config.to, config.signature, config.arguments);
|
|
38
|
+
}
|
|
39
|
+
encodeApprove(tokenAddress, spenderAddress, amount) {
|
|
40
|
+
const amountWei = amount ?? new bignumber_js_1.default(2).pow(256).minus(1).toFixed();
|
|
41
|
+
return tron_adapter_1.TronAdapter.encodeMethodCall(tokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'approve', [
|
|
42
|
+
{ type: 'address', value: spenderAddress },
|
|
43
|
+
{ type: 'uint256', value: amountWei }
|
|
44
|
+
]);
|
|
45
|
+
}
|
|
46
|
+
async getTransactionStatus(srcTxHash) {
|
|
47
|
+
const txReceipt = await this.getTransactionInfo(srcTxHash);
|
|
48
|
+
if (txReceipt?.receipt) {
|
|
49
|
+
if (txReceipt.result === 'FAILED') {
|
|
50
|
+
return tx_status_1.TX_STATUS.FAIL;
|
|
51
|
+
}
|
|
52
|
+
return tx_status_1.TX_STATUS.SUCCESS;
|
|
53
|
+
}
|
|
54
|
+
return tx_status_1.TX_STATUS.PENDING;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Gets mined transaction info.
|
|
58
|
+
* @param hash Transaction hash.
|
|
59
|
+
*/
|
|
60
|
+
async getTransactionInfo(hash) {
|
|
61
|
+
return this.tronAdapter.public.trx.getTransactionInfo(hash);
|
|
62
|
+
}
|
|
63
|
+
async sendTransaction(params) {
|
|
64
|
+
try {
|
|
65
|
+
const transaction = await this.tronAdapter.public.transactionBuilder.triggerSmartContract(params.contractAddress, params.methodSignature, params.txOptions, params.parameters, this.walletAddress);
|
|
66
|
+
const signedTransaction = await this.tronAdapter.public.trx.sign(transaction.transaction);
|
|
67
|
+
const receipt = await this.tronAdapter.public.trx.sendRawTransaction(signedTransaction);
|
|
68
|
+
if (params.txOptions.onTransactionHash) {
|
|
69
|
+
params.txOptions.onTransactionHash(receipt.transaction.txID);
|
|
70
|
+
}
|
|
71
|
+
return receipt.transaction.txID;
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
console.error('Method execution error: ', err);
|
|
75
|
+
throw (0, parse_tron_error_1.parseTronError)(err);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async trySendTransaction(params) {
|
|
79
|
+
try {
|
|
80
|
+
await this.tronAdapter.public.transactionBuilder.estimateEnergy(params.contractAddress, params.methodSignature, {}, params.parameters, this.walletAddress);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const errMessage = typeof err === 'object' ? err.message : err;
|
|
84
|
+
if (errMessage !== 'this node does not support estimate energy') {
|
|
85
|
+
throw new Error('Tron transaction simulation error');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return this.sendTransaction(params);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.TronAdapterClient = TronAdapterClient;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TronParameters } from 'packages/web3/src/lib/utils/models/tron-parameters';
|
|
2
|
+
import { BasicSendTransactionOptions } from '../../models/basic-transaction-options';
|
|
3
|
+
export interface TronSendTxParams {
|
|
4
|
+
contractAddress: string;
|
|
5
|
+
methodSignature: string;
|
|
6
|
+
parameters: TronParameters;
|
|
7
|
+
txOptions: TronTransactionOptions;
|
|
8
|
+
}
|
|
9
|
+
export interface TronTransactionOptions extends BasicSendTransactionOptions {
|
|
10
|
+
feeLimit?: number;
|
|
11
|
+
callValue?: number;
|
|
12
|
+
rawParameter?: string;
|
|
13
|
+
}
|
|
@@ -1,37 +1,40 @@
|
|
|
1
1
|
import BigNumber from 'bignumber.js';
|
|
2
|
-
import { AbstractAdapter } from '
|
|
2
|
+
import { AbstractAdapter } from '../common/abstract-adapter';
|
|
3
3
|
import { TronWeb } from 'tronweb';
|
|
4
|
-
import { ICustomLogger, PriceTokenAmount, Token, TokenAmount, TronBlockchainName } from '@cryptorubic/core';
|
|
5
|
-
import { TronTransactionConfig } from '
|
|
6
|
-
import { TronParameters } from '
|
|
4
|
+
import { HttpClient, ICustomLogger, PriceTokenAmount, Token, TokenAmount, TronBlockchainName } from '@cryptorubic/core';
|
|
5
|
+
import { TronTransactionConfig } from '../../../utils/models/tron-transaction-config';
|
|
6
|
+
import { TronParameters } from '../../../utils/models/tron-parameters';
|
|
7
7
|
import { Abi } from 'viem';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
|
|
8
|
+
import { ContractMulticallResponse } from '../../../utils/models/contract-multicall-response';
|
|
9
|
+
import { TronWeb3PrimitiveType } from '../../../utils/models/primitive-types';
|
|
10
|
+
import { MethodData } from '../../../utils/models/method-data';
|
|
11
|
+
import { AbstractAdapterClient } from '../common/client/abstract-adapter-client';
|
|
12
|
+
import { TronSendTxParams } from './models/tron-send-tx-params';
|
|
13
|
+
import { RubicAppAdaptersFactoryParams } from '../../constants/models/create-factory-params';
|
|
14
|
+
import { ApproveAdapterClient } from '../models/approve-adapter';
|
|
15
|
+
export declare class TronAdapter extends AbstractAdapter<TronWeb, TronWeb, TronBlockchainName> {
|
|
16
|
+
readonly client: AbstractAdapterClient<TronWeb, TronSendTxParams, string> & ApproveAdapterClient<TronTransactionConfig>;
|
|
14
17
|
private readonly multicallAddress;
|
|
15
|
-
needPreswapAction(
|
|
16
|
-
constructor(rpcList: string[], logger?: ICustomLogger);
|
|
17
|
-
|
|
18
|
+
needPreswapAction(): Promise<boolean>;
|
|
19
|
+
constructor(rpcList: string[], httpClient: HttpClient, logger?: ICustomLogger, rubicAppParams?: RubicAppAdaptersFactoryParams);
|
|
20
|
+
getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
|
|
18
21
|
multicallContractsMethods<Output extends TronWeb3PrimitiveType>(contractAbi: any, contractsData: {
|
|
19
22
|
contractAddress: string;
|
|
20
23
|
methodsData: MethodData[];
|
|
21
24
|
}[]): Promise<ContractMulticallResponse<any>[][]>;
|
|
25
|
+
getBlockNumber(): Promise<number | {
|
|
26
|
+
blockNumber: number;
|
|
27
|
+
workchain: number;
|
|
28
|
+
}>;
|
|
29
|
+
checkEnoughBalance(token: TokenAmount | PriceTokenAmount, walletAddress: string): Promise<boolean>;
|
|
22
30
|
private multicall;
|
|
23
31
|
read<T>(contractAddress: string, contractAbi: any, methodName: string, methodArguments?: unknown[]): Promise<T>;
|
|
24
32
|
private multicallContractsMethodsByOne;
|
|
25
|
-
getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
|
|
26
33
|
callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token[]>;
|
|
27
34
|
getBalance(userAddress: string, tokenAddress?: string): Promise<BigNumber>;
|
|
28
35
|
getTokenBalance(userAddress: string, tokenAddress: string): Promise<BigNumber>;
|
|
29
36
|
convertTronAddressToHex(address: string): Promise<string>;
|
|
30
37
|
static encodeMethodCall(contractAddress: string, contractAbi: Abi, methodName: string, methodArguments: TronParameters, callValue?: string, feeLimit?: number): TronTransactionConfig;
|
|
31
38
|
private static flattenTypesToString;
|
|
32
|
-
needApprove(from: TokenAmount | PriceTokenAmount, walletAddress: string, spender: string): Promise<boolean>;
|
|
33
|
-
encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): TronTransactionConfig;
|
|
34
|
-
getAllowance(fromTokenAddress: string, walletAddress: string, spender: string): Promise<AllowanceInfo>;
|
|
35
39
|
write(contractAddress: string, methodSignature: string, parameters: TronParameters): Promise<string>;
|
|
36
|
-
approve(fromAddress: string, tokenAddress: string, spenderAddress: string, amount?: string): Promise<string>;
|
|
37
40
|
}
|
|
@@ -2,26 +2,49 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TronAdapter = void 0;
|
|
4
4
|
const bignumber_js_1 = require("bignumber.js");
|
|
5
|
-
const trc_20_contract_abi_1 = require("
|
|
6
|
-
const tron_multicall_abi_1 = require("
|
|
7
|
-
const abstract_adapter_1 = require("
|
|
5
|
+
const trc_20_contract_abi_1 = require("../constants/trc-20-contract-abi");
|
|
6
|
+
const tron_multicall_abi_1 = require("../constants/tron-multicall-abi");
|
|
7
|
+
const abstract_adapter_1 = require("../common/abstract-adapter");
|
|
8
8
|
const tronweb_1 = require("tronweb");
|
|
9
9
|
const core_1 = require("@cryptorubic/core");
|
|
10
|
-
const web3_pure_1 = require("
|
|
11
|
-
const tron_web3_pure_1 = require("
|
|
10
|
+
const web3_pure_1 = require("../../../utils/web3-pure");
|
|
11
|
+
const tron_web3_pure_1 = require("../../../utils/web3-types/tron-web3-pure");
|
|
12
|
+
const tron_adapter_client_1 = require("./client/tron-adapter-client");
|
|
12
13
|
class TronAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
13
|
-
|
|
14
|
-
async needPreswapAction(token, contractAddress, walletAddress, amount) {
|
|
15
|
-
// return this.needApprove()
|
|
14
|
+
async needPreswapAction() {
|
|
16
15
|
return false;
|
|
17
16
|
}
|
|
18
|
-
constructor(rpcList, logger) {
|
|
17
|
+
constructor(rpcList, httpClient, logger, rubicAppParams) {
|
|
19
18
|
super(core_1.BLOCKCHAIN_NAME.TRON, logger);
|
|
19
|
+
this.multicallAddress = 'T9ziQU4EBteJzjzMzhHELdhgWFqwzS5Vki';
|
|
20
20
|
this.public = new tronweb_1.TronWeb({ fullHost: rpcList[0] });
|
|
21
|
+
this.client = new tron_adapter_client_1.TronAdapterClient(this, httpClient, logger, rubicAppParams);
|
|
21
22
|
}
|
|
22
|
-
async
|
|
23
|
-
const
|
|
24
|
-
|
|
23
|
+
async getTokensBalances(userAddress, tokensAddresses) {
|
|
24
|
+
const indexOfNativeCoin = tokensAddresses.findIndex((address) => web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.TRON, address));
|
|
25
|
+
const promises = [];
|
|
26
|
+
if (indexOfNativeCoin !== -1) {
|
|
27
|
+
tokensAddresses.splice(indexOfNativeCoin, 1);
|
|
28
|
+
promises[1] = this.getBalance(userAddress);
|
|
29
|
+
}
|
|
30
|
+
promises[0] = this.multicallContractsMethods(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokensAddresses.map((tokenAddress) => ({
|
|
31
|
+
contractAddress: tokenAddress,
|
|
32
|
+
methodsData: [
|
|
33
|
+
{
|
|
34
|
+
methodArguments: [userAddress],
|
|
35
|
+
methodName: 'balanceOf'
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
})));
|
|
39
|
+
const results = await Promise.all(promises);
|
|
40
|
+
const tokensBalances = results[0].map((tokenResults) => {
|
|
41
|
+
const { success, output } = tokenResults[0];
|
|
42
|
+
return success ? new bignumber_js_1.default(output) : new bignumber_js_1.default(0);
|
|
43
|
+
});
|
|
44
|
+
if (indexOfNativeCoin !== -1) {
|
|
45
|
+
tokensBalances.splice(indexOfNativeCoin, 0, results[1]);
|
|
46
|
+
}
|
|
47
|
+
return tokensBalances;
|
|
25
48
|
}
|
|
26
49
|
async multicallContractsMethods(contractAbi, contractsData) {
|
|
27
50
|
const calls = contractsData.map(({ contractAddress, methodsData }) => {
|
|
@@ -52,6 +75,13 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
52
75
|
return this.multicallContractsMethodsByOne(contractAbi, contractsData);
|
|
53
76
|
}
|
|
54
77
|
}
|
|
78
|
+
async getBlockNumber() {
|
|
79
|
+
return (await this.public.trx.getCurrentBlock()).block_header.raw_data.number;
|
|
80
|
+
}
|
|
81
|
+
async checkEnoughBalance(token, walletAddress) {
|
|
82
|
+
const balance = await this.getBalance(walletAddress, token.address);
|
|
83
|
+
return balance.gte(token.tokenAmount);
|
|
84
|
+
}
|
|
55
85
|
async multicall(calls) {
|
|
56
86
|
this.public.setAddress(this.multicallAddress);
|
|
57
87
|
const contract = await this.public.contract(tron_multicall_abi_1.TRON_MULTICALL_ABI, this.multicallAddress);
|
|
@@ -83,32 +113,6 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
83
113
|
}));
|
|
84
114
|
}));
|
|
85
115
|
}
|
|
86
|
-
async getTokensBalances(userAddress, tokensAddresses) {
|
|
87
|
-
const indexOfNativeCoin = tokensAddresses.findIndex((address) => web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.TRON, address));
|
|
88
|
-
const promises = [];
|
|
89
|
-
if (indexOfNativeCoin !== -1) {
|
|
90
|
-
tokensAddresses.splice(indexOfNativeCoin, 1);
|
|
91
|
-
promises[1] = this.getBalance(userAddress);
|
|
92
|
-
}
|
|
93
|
-
promises[0] = this.multicallContractsMethods(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokensAddresses.map((tokenAddress) => ({
|
|
94
|
-
contractAddress: tokenAddress,
|
|
95
|
-
methodsData: [
|
|
96
|
-
{
|
|
97
|
-
methodArguments: [userAddress],
|
|
98
|
-
methodName: 'balanceOf'
|
|
99
|
-
}
|
|
100
|
-
]
|
|
101
|
-
})));
|
|
102
|
-
const results = await Promise.all(promises);
|
|
103
|
-
const tokensBalances = results[0].map((tokenResults) => {
|
|
104
|
-
const { success, output } = tokenResults[0];
|
|
105
|
-
return success ? new bignumber_js_1.default(output) : new bignumber_js_1.default(0);
|
|
106
|
-
});
|
|
107
|
-
if (indexOfNativeCoin !== -1) {
|
|
108
|
-
tokensBalances.splice(indexOfNativeCoin, 0, results[1]);
|
|
109
|
-
}
|
|
110
|
-
return tokensBalances;
|
|
111
|
-
}
|
|
112
116
|
async callForTokensInfo(tokenAddresses) {
|
|
113
117
|
const tokenFields = ['decimals', 'symbol', 'name'];
|
|
114
118
|
const nativeTokenIndex = tokenAddresses.findIndex((address) => web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.TRON, address));
|
|
@@ -195,38 +199,11 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
195
199
|
return abiInput.type;
|
|
196
200
|
}) || []);
|
|
197
201
|
}
|
|
198
|
-
async needApprove(from, walletAddress, spender) {
|
|
199
|
-
if (from.isNative)
|
|
200
|
-
return false;
|
|
201
|
-
const { allowanceWei } = await this.getAllowance(from.address, walletAddress, spender);
|
|
202
|
-
return allowanceWei.lt(from.weiAmount);
|
|
203
|
-
}
|
|
204
|
-
encodeApprove(tokenAddress, spenderAddress, amount) {
|
|
205
|
-
const amountWei = amount ?? new bignumber_js_1.default(2).pow(256).minus(1).toFixed();
|
|
206
|
-
return tron_web3_pure_1.TronWeb3Pure.encodeMethodCall(tokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'approve', [
|
|
207
|
-
{ type: 'address', value: spenderAddress },
|
|
208
|
-
{ type: 'uint256', value: amountWei }
|
|
209
|
-
]);
|
|
210
|
-
}
|
|
211
|
-
async getAllowance(fromTokenAddress, walletAddress, spender) {
|
|
212
|
-
const [contract, decimals, allowance] = await Promise.all([
|
|
213
|
-
this.public.contract(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, fromTokenAddress),
|
|
214
|
-
this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'decimals'),
|
|
215
|
-
this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'allowance', [spender])
|
|
216
|
-
]);
|
|
217
|
-
const allowanceWeiBN = new bignumber_js_1.default(allowance);
|
|
218
|
-
const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
|
|
219
|
-
return { allowanceNonWei, allowanceWei: allowanceWeiBN };
|
|
220
|
-
}
|
|
221
202
|
async write(contractAddress, methodSignature, parameters) {
|
|
222
|
-
const transaction = await this.
|
|
223
|
-
const signedTransaction = await this.
|
|
224
|
-
const receipt = await this.
|
|
203
|
+
const transaction = await this.client.clientWallet.transactionBuilder.triggerSmartContract(contractAddress, methodSignature, {}, parameters, this.client.walletAddress);
|
|
204
|
+
const signedTransaction = await this.client.clientWallet.trx.sign(transaction.transaction);
|
|
205
|
+
const receipt = await this.client.clientWallet.trx.sendRawTransaction(signedTransaction);
|
|
225
206
|
return receipt.transaction.txID;
|
|
226
207
|
}
|
|
227
|
-
async approve(fromAddress, tokenAddress, spenderAddress, amount) {
|
|
228
|
-
const config = this.encodeApprove(tokenAddress, spenderAddress, amount);
|
|
229
|
-
return this.write(config.to, config.signature, config.arguments);
|
|
230
|
-
}
|
|
231
208
|
}
|
|
232
209
|
exports.TronAdapter = TronAdapter;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseTronError = parseTronError;
|
|
4
|
+
const tron_insufficient_native_balance_1 = require("packages/web3/src/lib/errors/blockchain/tron-insufficient-native-balance");
|
|
5
|
+
const tron_transaction_expired_1 = require("packages/web3/src/lib/errors/blockchain/tron-transaction-expired");
|
|
6
|
+
const user_reject_error_1 = require("packages/web3/src/lib/errors/blockchain/user-reject.error");
|
|
7
|
+
const errors_1 = require("../../utils/errors");
|
|
8
|
+
function parseTronError(err) {
|
|
9
|
+
if (err?.includes?.('Confirmation declined by user')) {
|
|
10
|
+
throw new user_reject_error_1.UserRejectError();
|
|
11
|
+
}
|
|
12
|
+
const message = err?.message;
|
|
13
|
+
if (message?.includes('balance is not sufficient')) {
|
|
14
|
+
throw new tron_insufficient_native_balance_1.TronInsufficientNativeBalance();
|
|
15
|
+
}
|
|
16
|
+
if (message?.includes('Transaction expired')) {
|
|
17
|
+
throw new tron_transaction_expired_1.TronTransactionExpired();
|
|
18
|
+
}
|
|
19
|
+
return (0, errors_1.parseError)(err);
|
|
20
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Abi } from 'viem';
|
|
2
|
+
import BigNumber from 'bignumber.js';
|
|
3
|
+
import { ICustomLogger, Token, TokenAmount, BlockchainName, PriceTokenAmount } from '@cryptorubic/core';
|
|
4
|
+
import { AbstractAdapterClient } from './client/abstract-adapter-client';
|
|
5
|
+
import { SupportedTokenField } from '../models/token-models';
|
|
6
|
+
import { MethodData } from '../models/web3-public-models/method-data';
|
|
7
|
+
import { ContractMulticallResponse } from '../models/web3-public-models/contract-multicall-response';
|
|
8
|
+
import { Web3PrimitiveType } from '../../../utils/models/primitive-types';
|
|
9
|
+
export declare abstract class AbstractAdapter<P, W, B extends BlockchainName, SendTxParams extends object = {}, SendTxResponse = {}> {
|
|
10
|
+
abstract client: AbstractAdapterClient<W, SendTxParams, SendTxResponse>;
|
|
11
|
+
protected readonly logger?: ICustomLogger;
|
|
12
|
+
protected readonly blockchain: B;
|
|
13
|
+
private _public;
|
|
14
|
+
protected set public(value: P | null);
|
|
15
|
+
get public(): P;
|
|
16
|
+
protected constructor(blockchain: B, logger?: ICustomLogger);
|
|
17
|
+
abstract getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
|
|
18
|
+
abstract checkEnoughBalance(token: TokenAmount | PriceTokenAmount, walletAddress: string): Promise<boolean>;
|
|
19
|
+
abstract callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<BlockchainName>[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Gets token info by address.
|
|
22
|
+
* @param tokenAddress Address of token.
|
|
23
|
+
* @param tokenFields Token's fields to get.
|
|
24
|
+
*/
|
|
25
|
+
callForTokenInfo(tokenAddress: string, tokenFields?: SupportedTokenField[]): Promise<Token<BlockchainName>>;
|
|
26
|
+
/**
|
|
27
|
+
* Uses multicall to make many methods calls in several contracts.
|
|
28
|
+
* @param contractAbi Target contract abi.
|
|
29
|
+
* @param contractsData Contract addresses and methods data, containing methods' names and arguments.
|
|
30
|
+
*/
|
|
31
|
+
abstract multicallContractsMethods<Output extends Web3PrimitiveType>(contractAbi: Abi, contractsData: {
|
|
32
|
+
contractAddress: string;
|
|
33
|
+
methodsData: MethodData[];
|
|
34
|
+
}[]): Promise<ContractMulticallResponse<Output>[][]>;
|
|
35
|
+
/**
|
|
36
|
+
* Gets last block number.
|
|
37
|
+
* @returns Block number.
|
|
38
|
+
*/
|
|
39
|
+
abstract getBlockNumber(): Promise<number | {
|
|
40
|
+
blockNumber: number;
|
|
41
|
+
workchain: number;
|
|
42
|
+
}>;
|
|
43
|
+
needPreswapAction(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string | BigNumber): Promise<boolean>;
|
|
44
|
+
handlePreswap(contractAddress: string, walletAddress: string, tokenAmount: TokenAmount): Promise<void>;
|
|
45
|
+
abstract read<T>(...args: unknown[]): Promise<T>;
|
|
46
|
+
abstract write(...args: unknown[]): Promise<string>;
|
|
47
|
+
static getRandomBytes(bytes: number): string;
|
|
48
|
+
}
|