@tonappchain/sdk 0.7.3-rc7 → 0.8.0-aa-alpha-test
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/README.md +0 -3
- package/dist/artifacts/dev/tac/internal/artifacts/contracts/interfaces/ICrossChainLayer.sol/ICrossChainLayer.json +0 -7
- package/dist/artifacts/dev/tac/internal/artifacts/contracts/interfaces/ISettings.sol/ISettings.json +0 -7
- package/dist/artifacts/dev/tac/internal/artifacts/contracts/interfaces/ITokenUtils.sol/ITokenUtils.json +0 -7
- package/dist/artifacts/dev/tac/internal/artifacts/contracts/smart-account/interfaces/ISAFactory.sol/ISAFactory.json +0 -7
- package/dist/artifacts/dev/tac/internal/typechain-types/contracts/interfaces/ICrossChainLayer.d.ts +1 -5
- package/dist/artifacts/dev/tac/internal/typechain-types/contracts/interfaces/ISettings.d.ts +1 -5
- package/dist/artifacts/dev/tac/internal/typechain-types/contracts/interfaces/ITokenUtils.d.ts +1 -5
- package/dist/artifacts/dev/tac/internal/typechain-types/contracts/smart-account/interfaces/ISAFactory.d.ts +1 -5
- package/dist/artifacts/dev/ton/internal/build/Settings.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/wrappers/Settings.d.ts +1 -0
- package/dist/artifacts/dev/ton/internal/wrappers/Settings.js +11 -7
- package/dist/artifacts/index.d.ts +5 -3
- package/dist/artifacts/index.js +6 -3
- package/dist/artifacts/mainnet/tac/internal/artifacts/contracts/interfaces/ICrossChainLayer.sol/ICrossChainLayer.json +0 -7
- package/dist/artifacts/mainnet/tac/internal/artifacts/contracts/interfaces/ISettings.sol/ISettings.json +0 -7
- package/dist/artifacts/mainnet/tac/internal/artifacts/contracts/interfaces/ITokenUtils.sol/ITokenUtils.json +0 -7
- package/dist/artifacts/mainnet/tac/internal/artifacts/contracts/smart-account/interfaces/ISAFactory.sol/ISAFactory.json +0 -7
- package/dist/artifacts/mainnet/tac/internal/typechain-types/contracts/interfaces/ICrossChainLayer.d.ts +1 -5
- package/dist/artifacts/mainnet/tac/internal/typechain-types/contracts/interfaces/ISettings.d.ts +1 -5
- package/dist/artifacts/mainnet/tac/internal/typechain-types/contracts/interfaces/ITokenUtils.d.ts +1 -5
- package/dist/artifacts/mainnet/tac/internal/typechain-types/contracts/smart-account/interfaces/ISAFactory.d.ts +1 -5
- package/dist/artifacts/mainnet/ton/internal/build/CrossChainLayer.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/Executor.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/JettonMinter.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/JettonProxy.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/JettonWallet.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/NFTCollection.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/NFTItem.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/NFTProxy.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/Settings.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.d.ts +65 -6
- package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.js +169 -18
- package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.d.ts +4 -2
- package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.js +5 -3
- package/dist/artifacts/mainnet/ton/internal/wrappers/JettonProxy.d.ts +9 -0
- package/dist/artifacts/mainnet/ton/internal/wrappers/JettonProxy.js +11 -2
- package/dist/artifacts/mainnet/ton/internal/wrappers/JettonWallet.d.ts +7 -0
- package/dist/artifacts/mainnet/ton/internal/wrappers/JettonWallet.js +9 -2
- package/dist/artifacts/mainnet/ton/internal/wrappers/NFTCollection.d.ts +11 -1
- package/dist/artifacts/mainnet/ton/internal/wrappers/NFTCollection.js +17 -5
- package/dist/artifacts/mainnet/ton/internal/wrappers/NFTItem.d.ts +9 -1
- package/dist/artifacts/mainnet/ton/internal/wrappers/NFTItem.js +15 -5
- package/dist/artifacts/mainnet/ton/internal/wrappers/NFTProxy.d.ts +9 -1
- package/dist/artifacts/mainnet/ton/internal/wrappers/NFTProxy.js +16 -6
- package/dist/artifacts/mainnet/ton/internal/wrappers/Settings.d.ts +2 -0
- package/dist/artifacts/mainnet/ton/internal/wrappers/Settings.js +11 -6
- package/dist/artifacts/mainnet/ton/internal/wrappers/utils/CrossChainLayerPayload.d.ts +10 -0
- package/dist/artifacts/mainnet/ton/internal/wrappers/utils/CrossChainLayerPayload.js +24 -0
- package/dist/artifacts/mainnet/ton/internal/wrappers/utils/MerkleRoots.d.ts +2 -1
- package/dist/artifacts/mainnet/ton/internal/wrappers/utils/MerkleRoots.js +9 -1
- package/dist/artifacts/testnet/tac/internal/artifacts/contracts/interfaces/ICrossChainLayer.sol/ICrossChainLayer.json +0 -7
- package/dist/artifacts/testnet/tac/internal/artifacts/contracts/interfaces/ISettings.sol/ISettings.json +0 -7
- package/dist/artifacts/testnet/tac/internal/artifacts/contracts/interfaces/ITokenUtils.sol/ITokenUtils.json +0 -7
- package/dist/artifacts/testnet/tac/internal/artifacts/contracts/smart-account/interfaces/ISAFactory.sol/ISAFactory.json +0 -7
- package/dist/artifacts/testnet/tac/internal/typechain-types/contracts/interfaces/ICrossChainLayer.d.ts +1 -5
- package/dist/artifacts/testnet/tac/internal/typechain-types/contracts/interfaces/ISettings.d.ts +1 -5
- package/dist/artifacts/testnet/tac/internal/typechain-types/contracts/interfaces/ITokenUtils.d.ts +1 -5
- package/dist/artifacts/testnet/tac/internal/typechain-types/contracts/smart-account/interfaces/ISAFactory.d.ts +1 -5
- package/dist/artifacts/testnet/ton/internal/build/Settings.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/wrappers/Settings.d.ts +1 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/Settings.js +11 -7
- package/dist/src/accountAbstraction/BaseAccountAPI.d.ts +62 -0
- package/dist/src/accountAbstraction/BaseAccountAPI.js +163 -0
- package/dist/src/accountAbstraction/Ed25519.d.ts +47 -0
- package/dist/src/accountAbstraction/Ed25519.js +100 -0
- package/dist/src/accountAbstraction/HttpRpcClient.d.ts +26 -0
- package/dist/src/accountAbstraction/HttpRpcClient.js +45 -0
- package/dist/src/accountAbstraction/PaymasterAPI.d.ts +21 -0
- package/dist/src/accountAbstraction/PaymasterAPI.js +18 -0
- package/dist/src/accountAbstraction/Permit2.d.ts +37 -0
- package/dist/src/accountAbstraction/Permit2.js +41 -0
- package/dist/src/accountAbstraction/PermitFlow.d.ts +43 -0
- package/dist/src/accountAbstraction/PermitFlow.js +80 -0
- package/dist/src/accountAbstraction/TacAccountAPI.d.ts +53 -0
- package/dist/src/accountAbstraction/TacAccountAPI.js +84 -0
- package/dist/src/accountAbstraction/TacAccountSdk.d.ts +101 -0
- package/dist/src/accountAbstraction/TacAccountSdk.js +163 -0
- package/dist/src/accountAbstraction/TacERC20PaymasterAPI.d.ts +59 -0
- package/dist/src/accountAbstraction/TacERC20PaymasterAPI.js +88 -0
- package/dist/src/accountAbstraction/TransactionDetailsForUserOp.d.ts +10 -0
- package/dist/src/accountAbstraction/TransactionDetailsForUserOp.js +2 -0
- package/dist/src/accountAbstraction/abi.d.ts +3 -0
- package/dist/src/accountAbstraction/abi.js +32 -0
- package/dist/src/accountAbstraction/index.d.ts +24 -0
- package/dist/src/accountAbstraction/index.js +44 -0
- package/dist/src/accountAbstraction/internal/entryPointAbi.d.ts +1 -0
- package/dist/src/accountAbstraction/internal/entryPointAbi.js +16 -0
- package/dist/src/accountAbstraction/internal/userOp.d.ts +54 -0
- package/dist/src/accountAbstraction/internal/userOp.js +72 -0
- package/dist/src/accountAbstraction/networks.d.ts +22 -0
- package/dist/src/accountAbstraction/networks.js +19 -0
- package/dist/src/accountAbstraction/signer.d.ts +12 -0
- package/dist/src/accountAbstraction/signer.js +14 -0
- package/dist/src/adapters/RetryableContractOpener.js +5 -2
- package/dist/src/adapters/ToncenterV3Indexer.js +1 -1
- package/dist/src/assets/AssetCache.d.ts +4 -4
- package/dist/src/assets/AssetCache.js +11 -6
- package/dist/src/assets/AssetFactory.js +2 -2
- package/dist/src/errors/index.d.ts +1 -1
- package/dist/src/errors/index.js +5 -3
- package/dist/src/errors/instances.d.ts +2 -0
- package/dist/src/errors/instances.js +4 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +4 -1
- package/dist/src/interfaces/IConfiguration.d.ts +2 -2
- package/dist/src/interfaces/IOperationTracker.d.ts +14 -1
- package/dist/src/interfaces/ITacSDK.d.ts +1 -21
- package/dist/src/sdk/Artifacts.d.ts +3 -0
- package/dist/src/sdk/Artifacts.js +17 -0
- package/dist/src/sdk/Configuration.d.ts +4 -4
- package/dist/src/sdk/Configuration.js +8 -3
- package/dist/src/sdk/Consts.d.ts +0 -1
- package/dist/src/sdk/Consts.js +1 -2
- package/dist/src/sdk/LiteSequencerClient.js +2 -1
- package/dist/src/sdk/OperationTracker.d.ts +6 -3
- package/dist/src/sdk/OperationTracker.js +44 -19
- package/dist/src/sdk/StartTracking.d.ts +8 -0
- package/dist/src/sdk/StartTracking.js +19 -1
- package/dist/src/sdk/TACTransactionManager.js +5 -5
- package/dist/src/sdk/TONTransactionManager.d.ts +1 -0
- package/dist/src/sdk/TONTransactionManager.js +29 -16
- package/dist/src/sdk/TacExplorerClient.js +4 -3
- package/dist/src/sdk/TacSdk.d.ts +1 -5
- package/dist/src/sdk/TacSdk.js +5 -52
- package/dist/src/sdk/TxFinalizer.js +1 -1
- package/dist/src/sdk/Utils.js +37 -4
- package/dist/src/structs/InternalStruct.d.ts +2 -1
- package/dist/src/structs/Struct.d.ts +4 -4
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@ import { Wallet } from 'ethers';
|
|
|
2
2
|
import { JettonMinterData, NFTItemData } from '../../artifacts/tonTypes';
|
|
3
3
|
import { FT, NFT, TAC, TON } from '../assets';
|
|
4
4
|
import type { SenderAbstraction } from '../sender';
|
|
5
|
-
import { AssetFromFTArg, AssetFromNFTCollectionArg, AssetFromNFTItemArg, AssetLike, BatchCrossChainTxWithAssetLike, CrossChainPayloadResult, CrossChainTransactionOptions, CrossChainTransactionsOptions, CrossChainTransactionToTONOptions, CrosschainTx, EVMAddress, EvmProxyMsg, ExecutionFeeEstimationResult, NFTAddressType, SuggestedTVMExecutorFee, TACCrossChainTransactionResult, TacGasPrice, TACSimulationParams, TACSimulationResult, TransactionLinkerWithOperationId, TVMAddress, UserWalletBalanceExtended
|
|
5
|
+
import { AssetFromFTArg, AssetFromNFTCollectionArg, AssetFromNFTItemArg, AssetLike, BatchCrossChainTxWithAssetLike, CrossChainPayloadResult, CrossChainTransactionOptions, CrossChainTransactionsOptions, CrossChainTransactionToTONOptions, CrosschainTx, EVMAddress, EvmProxyMsg, ExecutionFeeEstimationResult, NFTAddressType, SuggestedTVMExecutorFee, TACCrossChainTransactionResult, TacGasPrice, TACSimulationParams, TACSimulationResult, TransactionLinkerWithOperationId, TVMAddress, UserWalletBalanceExtended } from '../structs/Struct';
|
|
6
6
|
import { Asset } from './Asset';
|
|
7
7
|
import { ContractOpener } from './ContractOpener';
|
|
8
8
|
import { IConfiguration } from './IConfiguration';
|
|
@@ -123,26 +123,6 @@ export interface ITacSDK {
|
|
|
123
123
|
* @returns Promise with an array of TransactionLinkerWithOperationId for each submitted transaction.
|
|
124
124
|
*/
|
|
125
125
|
sendCrossChainTransactions(sender: SenderAbstraction, txs: BatchCrossChainTxWithAssetLike[], options?: CrossChainTransactionsOptions): Promise<TransactionLinkerWithOperationId[]>;
|
|
126
|
-
/**
|
|
127
|
-
* Resolves operation id by any TON hash from a linked chain of TON transactions.
|
|
128
|
-
* The SDK first resolves indexed TON transaction context, traverses adjacent TON transactions
|
|
129
|
-
* until it finds the crossChainLayer transaction that the sequencer would collect as a TVM event,
|
|
130
|
-
* and only then queries the sequencer with that exact transaction hash.
|
|
131
|
-
* @param transactionHash Any TON transaction hash from the relevant linked chain of TON transactions.
|
|
132
|
-
* @param waitOptions Optional waiting settings for the final sequencer lookup. Pass `null` to disable retries.
|
|
133
|
-
* @returns Promise resolving to operation id, or empty string when the sequencer-collected crossChainLayer event transaction is not found.
|
|
134
|
-
*/
|
|
135
|
-
getOperationIdByTonTransactionHash(transactionHash: string, waitOptions?: WaitOptions<string> | null): Promise<string>;
|
|
136
|
-
/**
|
|
137
|
-
* Resolves operation id by the BOC of an external TON message that was sent to the blockchain.
|
|
138
|
-
* The SDK derives the normalized external-in message hash from the BOC, finds the root TON transaction
|
|
139
|
-
* that processed that external message through the configured contract opener, and then reuses the same
|
|
140
|
-
* linked chain of TON transactions lookup as `getOperationIdByTonTransactionHash(...)`.
|
|
141
|
-
* @param boc BOC of the external TON message that was sent to the blockchain.
|
|
142
|
-
* @param waitOptions Optional waiting settings for the final sequencer lookup. Pass `null` to disable retries.
|
|
143
|
-
* @returns Promise resolving to operation id, or empty string when the sequencer-collected crossChainLayer event transaction is not found.
|
|
144
|
-
*/
|
|
145
|
-
getOperationIdByTonTransactionBoc(boc: string, waitOptions?: WaitOptions<string> | null): Promise<string>;
|
|
146
126
|
/**
|
|
147
127
|
* Bridges tokens/value from EVM to TON chain via the executor.
|
|
148
128
|
* This is a low-level send-only method. It prepares the TAC -> TON message, performs approvals,
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getArtifacts = getArtifacts;
|
|
4
|
+
const artifacts_1 = require("../../artifacts");
|
|
5
|
+
const Struct_1 = require("../structs/Struct");
|
|
6
|
+
function getArtifacts(network) {
|
|
7
|
+
switch (network) {
|
|
8
|
+
case Struct_1.Network.MAINNET:
|
|
9
|
+
return artifacts_1.mainnet;
|
|
10
|
+
case Struct_1.Network.TESTNET:
|
|
11
|
+
return artifacts_1.testnet;
|
|
12
|
+
case Struct_1.Network.DEV:
|
|
13
|
+
return artifacts_1.dev;
|
|
14
|
+
default:
|
|
15
|
+
throw new Error(`Unsupported network: ${network}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { NetworkArtifacts } from '../../artifacts';
|
|
2
2
|
import { IConfiguration, ILogger } from '../interfaces';
|
|
3
3
|
import { InternalTACParams, InternalTONParams } from '../structs/InternalStruct';
|
|
4
4
|
import { Network, TACParams, TONParams } from '../structs/Struct';
|
|
5
5
|
export declare class Configuration implements IConfiguration {
|
|
6
6
|
readonly network: Network;
|
|
7
|
-
readonly artifacts:
|
|
7
|
+
readonly artifacts: NetworkArtifacts;
|
|
8
8
|
readonly TONParams: InternalTONParams;
|
|
9
9
|
readonly TACParams: InternalTACParams;
|
|
10
10
|
readonly liteSequencerEndpoints: string[];
|
|
11
11
|
readonly logger: ILogger;
|
|
12
|
-
constructor(network: Network, artifacts:
|
|
13
|
-
static create(network: Network, artifacts:
|
|
12
|
+
constructor(network: Network, artifacts: NetworkArtifacts, TONParams: InternalTONParams, TACParams: InternalTACParams, liteSequencerEndpoints: string[], logger: ILogger);
|
|
13
|
+
static create(network: Network, artifacts: NetworkArtifacts, TONParams?: TONParams, TACParams?: TACParams, customLiteSequencerEndpoints?: string[], delay?: number, logger?: ILogger, passLoggerToOpeners?: boolean): Promise<Configuration>;
|
|
14
14
|
private static prepareTONParams;
|
|
15
15
|
private static prepareTACParams;
|
|
16
16
|
private static loadTACSettingsViaMulticall;
|
|
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Configuration = void 0;
|
|
4
4
|
const ton_1 = require("@ton/ton");
|
|
5
5
|
const ethers_1 = require("ethers");
|
|
6
|
-
const artifacts_1 = require("../../artifacts");
|
|
7
6
|
const adapters_1 = require("../adapters");
|
|
8
7
|
const Struct_1 = require("../structs/Struct");
|
|
8
|
+
const Artifacts_1 = require("./Artifacts");
|
|
9
9
|
const Consts_1 = require("./Consts");
|
|
10
10
|
const Fees_1 = require("./Fees");
|
|
11
11
|
const Logger_1 = require("./Logger");
|
|
@@ -56,6 +56,10 @@ class Configuration {
|
|
|
56
56
|
(await (0, adapters_1.createDefaultRetryableOpener)(artifacts.TON_RPC_ENDPOINT_BY_TAC, network, Consts_1.DEFAULT_RETRY_MAX_COUNT, delay, passLoggerToOpeners ? logger : undefined, artifacts.TONCENTER_V3_INDEXER_ENDPOINT));
|
|
57
57
|
settingsAddress = TONParams?.settingsAddress ?? artifacts.TON_SETTINGS_ADDRESS;
|
|
58
58
|
}
|
|
59
|
+
const tonIndexer = TONParams?.tonIndexer ??
|
|
60
|
+
(artifacts.TONCENTER_V3_INDEXER_ENDPOINT
|
|
61
|
+
? new adapters_1.ToncenterV3Indexer(artifacts.TONCENTER_V3_INDEXER_ENDPOINT)
|
|
62
|
+
: undefined);
|
|
59
63
|
if (passLoggerToOpeners) {
|
|
60
64
|
contractOpener.setLogger(logger);
|
|
61
65
|
}
|
|
@@ -81,6 +85,7 @@ class Configuration {
|
|
|
81
85
|
const feesParams = await this.retrieveTONFeesParams(contractOpener);
|
|
82
86
|
return {
|
|
83
87
|
contractOpener,
|
|
88
|
+
tonIndexer,
|
|
84
89
|
jettonProxyAddress,
|
|
85
90
|
crossChainLayerAddress,
|
|
86
91
|
jettonMinterCode,
|
|
@@ -93,7 +98,7 @@ class Configuration {
|
|
|
93
98
|
};
|
|
94
99
|
}
|
|
95
100
|
static async prepareTACParams(network, TACParams) {
|
|
96
|
-
const artifacts =
|
|
101
|
+
const artifacts = (0, Artifacts_1.getArtifacts)(network);
|
|
97
102
|
let provider;
|
|
98
103
|
let settingsAddress;
|
|
99
104
|
let saFactoryAddress;
|
|
@@ -158,7 +163,7 @@ class Configuration {
|
|
|
158
163
|
// skip multicall in dev, because it's not guaranteed that multicall contract is deployed
|
|
159
164
|
return null;
|
|
160
165
|
}
|
|
161
|
-
const artifacts =
|
|
166
|
+
const artifacts = (0, Artifacts_1.getArtifacts)(network);
|
|
162
167
|
const multicallAddress = artifacts.MULTICALL_3_ADDRESS;
|
|
163
168
|
const multicallAbi = artifacts.tac.multicall.MULTICALL_ABI_ETHERS;
|
|
164
169
|
try {
|
package/dist/src/sdk/Consts.d.ts
CHANGED
|
@@ -49,6 +49,5 @@ export declare const IGNORE_MSG_VALUE_1_NANO = 1n;
|
|
|
49
49
|
export declare const CROSS_CHAIN_MESSAGE_VERSION_V1 = 1n;
|
|
50
50
|
export declare const NFT_BRIDGE_AMOUNT = 1n;
|
|
51
51
|
export declare const DEFAULT_EIP1559_PRIORITY_FEE = 0n;
|
|
52
|
-
export declare const SHARDS_KEY_RANDOM_RANGE = 1000000000000000000;
|
|
53
52
|
export declare const IGNORE_OPCODE: number[];
|
|
54
53
|
export declare const HTTP_NOT_FOUND_STATUS_CODE = 404;
|
package/dist/src/sdk/Consts.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NFT_BRIDGE_AMOUNT = exports.CROSS_CHAIN_MESSAGE_VERSION_V1 = exports.IGNORE_MSG_VALUE_1_NANO = exports.DEFAULT_RETRY_ON_NOT_FOUND_DELAY_MS = exports.DEFAULT_RETRY_ON_NOT_FOUND_RETRIES = exports.DEFAULT_RETRY_ON_NOT_FOUND = exports.DEFAULT_FIND_TX_MAX_DEPTH = exports.DEFAULT_MAX_SCANNED_TRANSACTIONS = exports.DEFAULT_FIND_TX_LIMIT = exports.DEFAULT_WAIT_DELAY_MS = exports.DEFAULT_WAIT_MAX_ATTEMPTS = exports.DEFAULT_WAIT_TIMEOUT_MS = exports.DEFAULT_RETRY_BACKOFF_MULTIPLIER = exports.DEFAULT_RETRY_MAX_DELAY_MS = exports.DEFAULT_RETRY_DELAY_MS = exports.DEFAULT_RETRY_MAX_COUNT = exports.DEFAULT_HTTP_CLIENT_TIMEOUT_MS = exports.TON_BURN_ADDRESS = exports.MINUTE = exports.FIVE_MINUTES = exports.TAC_DECIMALS = exports.TON_DECIMALS = exports.ONE_YEAR_SECONDS = exports.FIFTEEN_MINUTES = exports.TAC_SYMBOL = exports.TON_SYMBOL = exports.MAX_MSG_DEPTH = exports.MAX_HIGHLOAD_GROUP_MSG_NUM = exports.MAX_EXT_MSG_SIZE = exports.SOLIDITY_METHOD_NAME_REGEX = exports.SOLIDITY_SIGNATURE_REGEX = exports.DEFAULT_DELAY = exports.MAX_ITERATION_COUNT = exports.FIXED_POINT_SHIFT = exports.DYNAMIC_JETTON_WALLET_CODE_HASHES = exports.USDT_JETTON_WALLET_CODE_HASH = exports.LEGACY_NFT_TRANSFER_WITH_FORWARD_OUTBOUND_MESSAGE_COUNT = exports.LEGACY_NFT_TRANSFER_BASE_OUTBOUND_MESSAGE_COUNT = exports.LEGACY_NFT_ITEM_MIN_TONS_FOR_STORAGE = exports.LEGACY_JETTON_WALLET_TRANSFER_GAS_AND_STORAGE = exports.LEGACY_JETTON_TRANSFER_WITH_FORWARD_OUTBOUND_MESSAGE_COUNT = exports.LEGACY_JETTON_TRANSFER_BASE_OUTBOUND_MESSAGE_COUNT = exports.LEGACY_JETTON_WALLET_GAS_CONSUMPTION_COUNT = exports.LEGACY_JETTON_WALLET_GAS_CONSUMPTION = exports.LEGACY_JETTON_WALLET_MIN_TONS_FOR_STORAGE = exports.LEGACY_STRICTLY_GREATER_THAN_FEE_EPSILON = exports.LEGACY_FORWARD_FEE_ESTIMATE_DENOMINATOR = exports.LEGACY_FORWARD_FEE_ESTIMATE_NUMERATOR = exports.NFT_TRANSFER_FORWARD_TON_AMOUNT = exports.JETTON_TRANSFER_FORWARD_TON_AMOUNT = void 0;
|
|
4
|
-
exports.HTTP_NOT_FOUND_STATUS_CODE = exports.IGNORE_OPCODE = exports.
|
|
4
|
+
exports.HTTP_NOT_FOUND_STATUS_CODE = exports.IGNORE_OPCODE = exports.DEFAULT_EIP1559_PRIORITY_FEE = void 0;
|
|
5
5
|
const ton_1 = require("@ton/ton");
|
|
6
6
|
exports.JETTON_TRANSFER_FORWARD_TON_AMOUNT = (0, ton_1.toNano)(0.2);
|
|
7
7
|
exports.NFT_TRANSFER_FORWARD_TON_AMOUNT = (0, ton_1.toNano)(0.3);
|
|
@@ -55,7 +55,6 @@ exports.IGNORE_MSG_VALUE_1_NANO = 1n;
|
|
|
55
55
|
exports.CROSS_CHAIN_MESSAGE_VERSION_V1 = 1n;
|
|
56
56
|
exports.NFT_BRIDGE_AMOUNT = 1n;
|
|
57
57
|
exports.DEFAULT_EIP1559_PRIORITY_FEE = 0n;
|
|
58
|
-
exports.SHARDS_KEY_RANDOM_RANGE = 1e18;
|
|
59
58
|
exports.IGNORE_OPCODE = [
|
|
60
59
|
0xd53276db, // Excess
|
|
61
60
|
];
|
|
@@ -4,9 +4,10 @@ exports.LiteSequencerClient = void 0;
|
|
|
4
4
|
const errors_1 = require("../errors");
|
|
5
5
|
const instances_1 = require("../errors/instances");
|
|
6
6
|
const AxiosHttpClient_1 = require("./AxiosHttpClient");
|
|
7
|
+
const Consts_1 = require("./Consts");
|
|
7
8
|
const Utils_1 = require("./Utils");
|
|
8
9
|
class LiteSequencerClient {
|
|
9
|
-
constructor(endpoint, maxChunkSize = 100, httpClient = new AxiosHttpClient_1.AxiosHttpClient()) {
|
|
10
|
+
constructor(endpoint, maxChunkSize = 100, httpClient = new AxiosHttpClient_1.AxiosHttpClient({ timeout: Consts_1.DEFAULT_HTTP_CLIENT_TIMEOUT_MS })) {
|
|
10
11
|
this.endpoint = endpoint;
|
|
11
12
|
this.maxChunkSize = maxChunkSize;
|
|
12
13
|
this.httpClient = httpClient;
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { ILiteSequencerClient, ILiteSequencerClientFactory, ILogger, IOperationTracker } from '../interfaces';
|
|
2
|
-
import { ConvertCurrencyParams, ConvertedCurrencyResult, ExecutionStages, ExecutionStagesByOperationId, ExecutionStagesV2, ExecutionStagesV2ByOperationId, GetTVMExecutorFeeParams,
|
|
1
|
+
import { IConfiguration, ILiteSequencerClient, ILiteSequencerClientFactory, ILogger, IOperationTracker } from '../interfaces';
|
|
2
|
+
import { ConvertCurrencyParams, ConvertedCurrencyResult, ExecutionStages, ExecutionStagesByOperationId, ExecutionStagesV2, ExecutionStagesV2ByOperationId, GetTVMExecutorFeeParams, OperationIdsByShardsKey, OperationIdWithLogIndex, OperationType, OperationTypeV2Info, SimplifiedStatuses, StatusInfo, StatusInfosByOperationId, SuggestedTVMExecutorFee, TACSimulationParams, TACSimulationResult, TransactionLinker, WaitOptions } from '../structs/Struct';
|
|
3
3
|
export declare class DefaultLiteSequencerClientFactory implements ILiteSequencerClientFactory {
|
|
4
4
|
createClients(endpoints: string[]): ILiteSequencerClient[];
|
|
5
5
|
}
|
|
6
6
|
export declare class OperationTracker implements IOperationTracker {
|
|
7
7
|
private readonly clients;
|
|
8
8
|
private readonly logger;
|
|
9
|
-
|
|
9
|
+
private readonly config;
|
|
10
|
+
constructor(config: IConfiguration, logger?: ILogger, clientFactory?: ILiteSequencerClientFactory);
|
|
10
11
|
getOperationIdByTransactionHash(transactionHash: string, waitOptions?: WaitOptions<string> | null): Promise<string>;
|
|
11
12
|
getOperationIdByTacTransactionHash(transactionHash: string, waitOptions?: WaitOptions<OperationIdWithLogIndex[]> | null): Promise<OperationIdWithLogIndex[]>;
|
|
12
13
|
getOperationIdByTonTransactionHash(transactionHash: string, waitOptions?: WaitOptions<string> | null): Promise<string>;
|
|
14
|
+
getOperationIdByTonTransactionBoc(boc: string, waitOptions?: WaitOptions<string> | null): Promise<string>;
|
|
15
|
+
private getOperationIdByTonTransaction;
|
|
13
16
|
getOperationType(operationId: string, waitOptions?: WaitOptions<OperationType> | null): Promise<OperationType>;
|
|
14
17
|
getOperationTypeV2(operationId: string, waitOptions?: WaitOptions<OperationTypeV2Info> | null): Promise<OperationTypeV2Info>;
|
|
15
18
|
getOperationId(transactionLinker: TransactionLinker, waitOptions?: WaitOptions<string> | null): Promise<string>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OperationTracker = exports.DefaultLiteSequencerClientFactory = void 0;
|
|
4
|
-
const
|
|
4
|
+
const ton_1 = require("@ton/ton");
|
|
5
5
|
const errors_1 = require("../errors");
|
|
6
6
|
const instances_1 = require("../errors/instances");
|
|
7
7
|
const Struct_1 = require("../structs/Struct");
|
|
@@ -16,23 +16,10 @@ class DefaultLiteSequencerClientFactory {
|
|
|
16
16
|
}
|
|
17
17
|
exports.DefaultLiteSequencerClientFactory = DefaultLiteSequencerClientFactory;
|
|
18
18
|
class OperationTracker {
|
|
19
|
-
constructor(
|
|
20
|
-
|
|
21
|
-
if (network === Struct_1.Network.DEV) {
|
|
22
|
-
if (!customLiteSequencerEndpoints || customLiteSequencerEndpoints.length === 0) {
|
|
23
|
-
throw new Error('For DEV network, custom lite sequencer endpoints must be provided');
|
|
24
|
-
}
|
|
25
|
-
endpoints = customLiteSequencerEndpoints;
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
const artifacts = network === Struct_1.Network.MAINNET ? artifacts_1.mainnet : artifacts_1.testnet;
|
|
29
|
-
endpoints =
|
|
30
|
-
customLiteSequencerEndpoints && customLiteSequencerEndpoints.length !== 0
|
|
31
|
-
? customLiteSequencerEndpoints
|
|
32
|
-
: artifacts.PUBLIC_LITE_SEQUENCER_ENDPOINTS;
|
|
33
|
-
}
|
|
34
|
-
this.clients = clientFactory.createClients(endpoints);
|
|
19
|
+
constructor(config, logger = new Logger_1.NoopLogger(), clientFactory = new DefaultLiteSequencerClientFactory()) {
|
|
20
|
+
this.clients = clientFactory.createClients(config.liteSequencerEndpoints);
|
|
35
21
|
this.logger = logger;
|
|
22
|
+
this.config = config;
|
|
36
23
|
}
|
|
37
24
|
async getOperationIdByTransactionHash(transactionHash, waitOptions) {
|
|
38
25
|
const requestFn = async () => {
|
|
@@ -71,11 +58,49 @@ class OperationTracker {
|
|
|
71
58
|
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation IDs by TAC transaction hash ${(0, Utils_1.formatObjectForLogging)(transactionHash)}`);
|
|
72
59
|
}
|
|
73
60
|
async getOperationIdByTonTransactionHash(transactionHash, waitOptions) {
|
|
61
|
+
return this.getOperationIdByTonTransaction(async () => transactionHash, `OperationTracker: Getting operation ID by TON transaction hash ${(0, Utils_1.formatObjectForLogging)(transactionHash)}`, waitOptions);
|
|
62
|
+
}
|
|
63
|
+
async getOperationIdByTonTransactionBoc(boc, waitOptions) {
|
|
64
|
+
if (!this.config.TONParams.tonIndexer) {
|
|
65
|
+
throw errors_1.tonIndexerRequiredForTonTransactionBocError;
|
|
66
|
+
}
|
|
67
|
+
let message;
|
|
68
|
+
try {
|
|
69
|
+
message = (0, ton_1.loadMessage)(ton_1.Cell.fromBase64(boc).beginParse());
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
const reason = error instanceof Error ? error.message : undefined;
|
|
73
|
+
throw (0, errors_1.invalidTonExternalMessageBocError)(reason);
|
|
74
|
+
}
|
|
75
|
+
if (message.info.type !== 'external-in') {
|
|
76
|
+
throw (0, errors_1.externalInMessageRequiredError)(message.info.type);
|
|
77
|
+
}
|
|
78
|
+
const destination = ton_1.Address.parse(message.info.dest.toString());
|
|
79
|
+
const messageHash = (0, Utils_1.getNormalizedExtMessageHash)(message);
|
|
80
|
+
return this.getOperationIdByTonTransaction(async () => {
|
|
81
|
+
const transaction = await this.config.TONParams.contractOpener.getTransactionByHash(destination, messageHash);
|
|
82
|
+
return transaction?.hash().toString('base64') ?? '';
|
|
83
|
+
}, 'OperationTracker: Getting operation ID by TON transaction BOC', waitOptions);
|
|
84
|
+
}
|
|
85
|
+
async getOperationIdByTonTransaction(resolveTransactionHash, operationDescription, waitOptions) {
|
|
74
86
|
const requestFn = async () => {
|
|
87
|
+
const transactionHash = await resolveTransactionHash();
|
|
88
|
+
if (!transactionHash) {
|
|
89
|
+
return '';
|
|
90
|
+
}
|
|
91
|
+
let eventTxHash = transactionHash;
|
|
92
|
+
const tonIndexer = this.config.TONParams.tonIndexer;
|
|
93
|
+
if (tonIndexer) {
|
|
94
|
+
const cclTransaction = await tonIndexer.findCollectibleCrossChainLayerTransaction(transactionHash, this.config.TONParams.crossChainLayerAddress);
|
|
95
|
+
if (!cclTransaction) {
|
|
96
|
+
return '';
|
|
97
|
+
}
|
|
98
|
+
eventTxHash = `0x${(0, Utils_1.normalizeHashToHex)(cclTransaction.hash)}`;
|
|
99
|
+
}
|
|
75
100
|
let lastError;
|
|
76
101
|
for (const client of this.clients) {
|
|
77
102
|
try {
|
|
78
|
-
const id = await client.getOperationIdByTonTransactionHash(
|
|
103
|
+
const id = await client.getOperationIdByTonTransactionHash(eventTxHash);
|
|
79
104
|
return id;
|
|
80
105
|
}
|
|
81
106
|
catch (error) {
|
|
@@ -86,7 +111,7 @@ class OperationTracker {
|
|
|
86
111
|
};
|
|
87
112
|
return waitOptions === null
|
|
88
113
|
? await requestFn()
|
|
89
|
-
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn,
|
|
114
|
+
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, operationDescription);
|
|
90
115
|
}
|
|
91
116
|
async getOperationType(operationId, waitOptions) {
|
|
92
117
|
const requestFn = async () => {
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { ContractOpener, ILogger } from '../interfaces';
|
|
2
2
|
import { ITxFinalizer } from '../interfaces/ITxFinalizer';
|
|
3
3
|
import { ExecutionStages, Network, TransactionLinkerWithOperationId } from '../structs/Struct';
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated Use `TacSdk.sendCrossChainTransaction(...)` instead. It already waits for operation ID
|
|
6
|
+
* and full cross-chain finalization by default via `waitOperationId` and `waitFinalization` options.
|
|
7
|
+
*/
|
|
4
8
|
export declare function startTracking(transactionLinker: TransactionLinkerWithOperationId, network: Network, options?: {
|
|
5
9
|
customLiteSequencerEndpoints?: string[];
|
|
6
10
|
delay?: number;
|
|
@@ -12,6 +16,10 @@ export declare function startTracking(transactionLinker: TransactionLinkerWithOp
|
|
|
12
16
|
contractOpener?: ContractOpener;
|
|
13
17
|
cclAddress?: string;
|
|
14
18
|
}): Promise<void | ExecutionStages>;
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated Use `TacSdk.sendCrossChainTransaction(...)` for new single-transaction flows. It already waits
|
|
21
|
+
* for operation ID and full cross-chain finalization by default via `waitOperationId` and `waitFinalization` options.
|
|
22
|
+
*/
|
|
15
23
|
export declare function startTrackingMultiple(transactionLinkers: TransactionLinkerWithOperationId[], network: Network, options?: {
|
|
16
24
|
customLiteSequencerEndpoints?: string[];
|
|
17
25
|
delay?: number;
|
|
@@ -4,13 +4,27 @@ exports.startTracking = startTracking;
|
|
|
4
4
|
exports.startTrackingMultiple = startTrackingMultiple;
|
|
5
5
|
exports.printExecutionStagesTable = printExecutionStagesTable;
|
|
6
6
|
const Struct_1 = require("../structs/Struct");
|
|
7
|
+
const Artifacts_1 = require("./Artifacts");
|
|
8
|
+
const Configuration_1 = require("./Configuration");
|
|
7
9
|
const Consts_1 = require("./Consts");
|
|
8
10
|
const Logger_1 = require("./Logger");
|
|
9
11
|
const OperationTracker_1 = require("./OperationTracker");
|
|
10
12
|
const Utils_1 = require("./Utils");
|
|
13
|
+
/**
|
|
14
|
+
* @deprecated Use `TacSdk.sendCrossChainTransaction(...)` instead. It already waits for operation ID
|
|
15
|
+
* and full cross-chain finalization by default via `waitOperationId` and `waitFinalization` options.
|
|
16
|
+
*/
|
|
11
17
|
async function startTracking(transactionLinker, network, options) {
|
|
12
18
|
const { customLiteSequencerEndpoints, delay = 10, maxIterationCount = Consts_1.MAX_ITERATION_COUNT, returnValue = false, tableView = true, logger = new Logger_1.NoopLogger(), txFinalizer, contractOpener, cclAddress, } = options || {};
|
|
13
|
-
const
|
|
19
|
+
const artifacts = (0, Artifacts_1.getArtifacts)(network);
|
|
20
|
+
const liteSequencerEndpoints = customLiteSequencerEndpoints && customLiteSequencerEndpoints.length !== 0
|
|
21
|
+
? customLiteSequencerEndpoints
|
|
22
|
+
: artifacts.PUBLIC_LITE_SEQUENCER_ENDPOINTS;
|
|
23
|
+
if (network === Struct_1.Network.DEV && liteSequencerEndpoints.length === 0) {
|
|
24
|
+
throw new Error('For DEV network, custom lite sequencer endpoints must be provided');
|
|
25
|
+
}
|
|
26
|
+
const trackerConfig = new Configuration_1.Configuration(network, artifacts, {}, {}, liteSequencerEndpoints, logger);
|
|
27
|
+
const tracker = new OperationTracker_1.OperationTracker(trackerConfig, logger);
|
|
14
28
|
logger.debug(`Start tracking operation\n` +
|
|
15
29
|
`caller: ${transactionLinker.caller}\n` +
|
|
16
30
|
`shardsKey: ${transactionLinker.shardsKey}\n` +
|
|
@@ -102,6 +116,10 @@ async function startTracking(transactionLinker, network, options) {
|
|
|
102
116
|
logger.debug(formatExecutionStages(profilingData));
|
|
103
117
|
}
|
|
104
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* @deprecated Use `TacSdk.sendCrossChainTransaction(...)` for new single-transaction flows. It already waits
|
|
121
|
+
* for operation ID and full cross-chain finalization by default via `waitOperationId` and `waitFinalization` options.
|
|
122
|
+
*/
|
|
105
123
|
async function startTrackingMultiple(transactionLinkers, network, options) {
|
|
106
124
|
const { customLiteSequencerEndpoints, delay = 10, maxIterationCount = Consts_1.MAX_ITERATION_COUNT, returnValue = false, tableView = true, txFinalizer, contractOpener, cclAddress, logger = new Logger_1.NoopLogger(), } = options || {};
|
|
107
125
|
logger.debug(`Start tracking ${transactionLinkers.length} operations`);
|
|
@@ -37,7 +37,7 @@ class TACTransactionManager {
|
|
|
37
37
|
tvmExecutorFee = BigInt(suggestedFee.inTAC);
|
|
38
38
|
}
|
|
39
39
|
const protocolFee = await this.config.TACParams.crossChainLayer.getProtocolFee();
|
|
40
|
-
const shardsKey = BigInt(
|
|
40
|
+
const shardsKey = BigInt((0, Utils_1.generateRandomNumberByTimestamp)().randomNumber);
|
|
41
41
|
this.logger.debug(`Shards key: ${shardsKey}, Protocol fee: ${protocolFee}`);
|
|
42
42
|
const [toBridge, toBridgeNFT] = await Promise.all([
|
|
43
43
|
Promise.all(assets
|
|
@@ -189,11 +189,11 @@ class TACTransactionManager {
|
|
|
189
189
|
if (!shouldWaitForOperationId) {
|
|
190
190
|
return { txHash: tx.hash };
|
|
191
191
|
}
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
|
|
192
|
+
const waitOperationIdOptions = options?.waitOperationIdOptions ?? {};
|
|
193
|
+
waitOperationIdOptions.successCheck = waitOperationIdOptions.successCheck ?? ((id) => !!id);
|
|
194
|
+
waitOperationIdOptions.logger = waitOperationIdOptions.logger ?? this.logger;
|
|
195
195
|
const operationId = await this.operationTracker
|
|
196
|
-
.getOperationIdByTransactionHash(tx.hash,
|
|
196
|
+
.getOperationIdByTransactionHash(tx.hash, waitOperationIdOptions)
|
|
197
197
|
.catch((error) => {
|
|
198
198
|
this.logger.error(`Error while waiting for operation ID by transaction hash: ${error}`);
|
|
199
199
|
return undefined;
|
|
@@ -11,6 +11,7 @@ export declare class TONTransactionManager implements ITONTransactionManager {
|
|
|
11
11
|
private prepareCrossChainTransaction;
|
|
12
12
|
private generateCrossChainMessages;
|
|
13
13
|
sendCrossChainTransaction(evmProxyMsg: EvmProxyMsg, sender: SenderAbstraction, tx: CrosschainTx): Promise<TransactionLinkerWithOperationId>;
|
|
14
|
+
private resolveOperationId;
|
|
14
15
|
sendCrossChainTransactions(sender: SenderAbstraction, txs: BatchCrossChainTx[], options?: CrossChainTransactionsOptions): Promise<TransactionLinkerWithOperationId[]>;
|
|
15
16
|
private prepareBatchTransactions;
|
|
16
17
|
private waitForOperationIds;
|
|
@@ -188,18 +188,13 @@ class TONTransactionManager {
|
|
|
188
188
|
await this.config.TONParams.contractOpener.trackTransactionTree(sender.getSenderAddress(), hash);
|
|
189
189
|
this.logger.info(`Transaction tree successful`);
|
|
190
190
|
}
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
const operationId = await this.
|
|
195
|
-
.getOperationId(transactionLinker, waitOptions)
|
|
196
|
-
.catch((error) => {
|
|
197
|
-
this.logger.error(`Error while waiting for operation ID: ${error}`);
|
|
198
|
-
return undefined;
|
|
199
|
-
});
|
|
191
|
+
const waitOperationIdOptions = tx.options?.waitOperationIdOptions ?? {};
|
|
192
|
+
waitOperationIdOptions.successCheck = waitOperationIdOptions.successCheck ?? ((id) => !!id);
|
|
193
|
+
waitOperationIdOptions.logger = waitOperationIdOptions.logger ?? this.logger;
|
|
194
|
+
const operationId = await this.resolveOperationId(sendTransactionResult.boc, transactionLinker, waitOperationIdOptions);
|
|
200
195
|
const shouldWaitForFinalization = tx.options?.waitFinalization ?? true;
|
|
201
196
|
if (!shouldWaitForFinalization) {
|
|
202
|
-
return { sendTransactionResult, ...transactionLinker };
|
|
197
|
+
return { sendTransactionResult, operationId, ...transactionLinker };
|
|
203
198
|
}
|
|
204
199
|
if (!operationId) {
|
|
205
200
|
throw errors_1.operationIdRequiredForFinalizationError;
|
|
@@ -224,6 +219,24 @@ class TONTransactionManager {
|
|
|
224
219
|
await this.operationTracker.getStageProfiling(operationId, finalizationWaitOptions);
|
|
225
220
|
return { sendTransactionResult, operationId, ...transactionLinker };
|
|
226
221
|
}
|
|
222
|
+
async resolveOperationId(boc, transactionLinker, waitOperationIdOptions) {
|
|
223
|
+
if (this.config.TONParams.tonIndexer) {
|
|
224
|
+
const operationId = await this.operationTracker
|
|
225
|
+
.getOperationIdByTonTransactionBoc(boc, waitOperationIdOptions)
|
|
226
|
+
.catch((error) => {
|
|
227
|
+
this.logger.error(`Error while waiting for operation ID by TON transaction BOC: ${error}`);
|
|
228
|
+
return undefined;
|
|
229
|
+
});
|
|
230
|
+
if (operationId) {
|
|
231
|
+
return operationId;
|
|
232
|
+
}
|
|
233
|
+
this.logger.debug('Operation ID by TON transaction BOC not found; trying transaction linker');
|
|
234
|
+
}
|
|
235
|
+
return this.operationTracker.getOperationId(transactionLinker, waitOperationIdOptions).catch((error) => {
|
|
236
|
+
this.logger.error(`Error while waiting for operation ID by transaction linker: ${error}`);
|
|
237
|
+
return undefined;
|
|
238
|
+
});
|
|
239
|
+
}
|
|
227
240
|
async sendCrossChainTransactions(sender, txs, options) {
|
|
228
241
|
const caller = sender.getSenderAddress();
|
|
229
242
|
this.logger.debug(`Preparing ${txs.length} cross-chain transactions for ${caller}`);
|
|
@@ -238,7 +251,7 @@ class TONTransactionManager {
|
|
|
238
251
|
}
|
|
239
252
|
const shouldWaitForOperationIds = options?.waitOperationIds ?? true;
|
|
240
253
|
return shouldWaitForOperationIds
|
|
241
|
-
? await this.waitForOperationIds(transactionLinkers, caller, options?.
|
|
254
|
+
? await this.waitForOperationIds(transactionLinkers, caller, options?.waitOperationIdOptions ?? {})
|
|
242
255
|
: transactionLinkers;
|
|
243
256
|
}
|
|
244
257
|
async prepareBatchTransactions(txs, sender) {
|
|
@@ -260,15 +273,15 @@ class TONTransactionManager {
|
|
|
260
273
|
transactionLinkers: results.map((r) => r.transactionLinker),
|
|
261
274
|
};
|
|
262
275
|
}
|
|
263
|
-
async waitForOperationIds(transactionLinkers, caller,
|
|
276
|
+
async waitForOperationIds(transactionLinkers, caller, waitOperationIdOptions) {
|
|
264
277
|
this.logger.debug(`Waiting for operation IDs`);
|
|
265
278
|
try {
|
|
266
|
-
|
|
267
|
-
|
|
279
|
+
waitOperationIdOptions.successCheck =
|
|
280
|
+
waitOperationIdOptions.successCheck ??
|
|
268
281
|
((operationIds) => Object.keys(operationIds).length == transactionLinkers.length &&
|
|
269
282
|
Object.values(operationIds).every((ids) => ids.operationIds.length > 0));
|
|
270
|
-
|
|
271
|
-
const operationIds = await this.operationTracker.getOperationIdsByShardsKeys(transactionLinkers.map((linker) => linker.shardsKey), caller,
|
|
283
|
+
waitOperationIdOptions.logger = waitOperationIdOptions.logger ?? this.logger;
|
|
284
|
+
const operationIds = await this.operationTracker.getOperationIdsByShardsKeys(transactionLinkers.map((linker) => linker.shardsKey), caller, waitOperationIdOptions);
|
|
272
285
|
this.logger.debug(`Operation IDs: ${(0, Utils_1.formatObjectForLogging)(operationIds)}`);
|
|
273
286
|
return transactionLinkers.map((linker) => ({
|
|
274
287
|
...linker,
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TacExplorerClient = void 0;
|
|
4
|
-
const
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
5
|
const AxiosHttpClient_1 = require("./AxiosHttpClient");
|
|
6
|
+
const Consts_1 = require("./Consts");
|
|
6
7
|
const Utils_1 = require("./Utils");
|
|
7
8
|
class TacExplorerClient {
|
|
8
|
-
constructor(explorerApiEndpoint, httpClient = new AxiosHttpClient_1.AxiosHttpClient()) {
|
|
9
|
+
constructor(explorerApiEndpoint, httpClient = new AxiosHttpClient_1.AxiosHttpClient({ timeout: Consts_1.DEFAULT_HTTP_CLIENT_TIMEOUT_MS })) {
|
|
9
10
|
this.explorerApiEndpoint = explorerApiEndpoint;
|
|
10
11
|
this.httpClient = httpClient;
|
|
11
12
|
}
|
|
@@ -15,7 +16,7 @@ class TacExplorerClient {
|
|
|
15
16
|
return response.data;
|
|
16
17
|
}
|
|
17
18
|
catch (error) {
|
|
18
|
-
throw (0,
|
|
19
|
+
throw (0, errors_1.gasPriceFetchError)(`endpoint ${this.explorerApiEndpoint} failed to complete request`, error);
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
22
|
}
|
package/dist/src/sdk/TacSdk.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { JettonMinterData, NFTItemData } from '../../artifacts/tonTypes';
|
|
|
3
3
|
import { FT, NFT, TAC, TON } from '../assets';
|
|
4
4
|
import { ContractOpener, IConfiguration, ILogger, IOperationTracker, ITacExplorerClient, ITacSDK } from '../interfaces';
|
|
5
5
|
import type { SenderAbstraction } from '../sender';
|
|
6
|
-
import { AssetFromFTArg, AssetFromNFTCollectionArg, AssetFromNFTItemArg, AssetLike, BatchCrossChainTxWithAssetLike, CrossChainPayloadResult, CrossChainTransactionOptions, CrossChainTransactionsOptions, CrossChainTransactionToTONOptions, CrosschainTx, EVMAddress, EvmProxyMsg, ExecutionFeeEstimationResult, NFTAddressType, SDKParams, SuggestedTVMExecutorFee, TACCrossChainTransactionResult, TacGasPrice, TACSimulationParams, TACSimulationResult, TransactionLinkerWithOperationId, TVMAddress, UserWalletBalanceExtended
|
|
6
|
+
import { AssetFromFTArg, AssetFromNFTCollectionArg, AssetFromNFTItemArg, AssetLike, BatchCrossChainTxWithAssetLike, CrossChainPayloadResult, CrossChainTransactionOptions, CrossChainTransactionsOptions, CrossChainTransactionToTONOptions, CrosschainTx, EVMAddress, EvmProxyMsg, ExecutionFeeEstimationResult, NFTAddressType, SDKParams, SuggestedTVMExecutorFee, TACCrossChainTransactionResult, TacGasPrice, TACSimulationParams, TACSimulationResult, TransactionLinkerWithOperationId, TVMAddress, UserWalletBalanceExtended } from '../structs/Struct';
|
|
7
7
|
export declare class TacSdk implements ITacSDK {
|
|
8
8
|
readonly config: IConfiguration;
|
|
9
9
|
readonly contactOpener: ContractOpener;
|
|
@@ -12,7 +12,6 @@ export declare class TacSdk implements ITacSDK {
|
|
|
12
12
|
private readonly simulator;
|
|
13
13
|
private readonly tonTransactionManager;
|
|
14
14
|
private readonly tacTransactionManager;
|
|
15
|
-
private readonly tonIndexer;
|
|
16
15
|
private constructor();
|
|
17
16
|
static create(sdkParams: SDKParams, logger?: ILogger): Promise<TacSdk>;
|
|
18
17
|
closeConnections(): unknown;
|
|
@@ -26,8 +25,6 @@ export declare class TacSdk implements ITacSDK {
|
|
|
26
25
|
sendCrossChainTransaction(evmProxyMsg: EvmProxyMsg, sender: SenderAbstraction, assets?: AssetLike[], options?: CrossChainTransactionOptions): Promise<TransactionLinkerWithOperationId>;
|
|
27
26
|
sendCrossChainTransactionToTON(signer: Wallet, tonTarget: string, assets?: AssetLike[], options?: CrossChainTransactionToTONOptions): Promise<TACCrossChainTransactionResult>;
|
|
28
27
|
sendCrossChainTransactions(sender: SenderAbstraction, txs: BatchCrossChainTxWithAssetLike[], options?: CrossChainTransactionsOptions): Promise<TransactionLinkerWithOperationId[]>;
|
|
29
|
-
getOperationIdByTonTransactionHash(transactionHash: string, waitOptions?: WaitOptions<string> | null): Promise<string>;
|
|
30
|
-
getOperationIdByTonTransactionBoc(boc: string, waitOptions?: WaitOptions<string> | null): Promise<string>;
|
|
31
28
|
bridgeTokensToTON(signer: Wallet, value: bigint, tonTarget: string, assets?: AssetLike[], tvmExecutorFee?: bigint, tvmValidExecutors?: string[]): Promise<string>;
|
|
32
29
|
isContractDeployedOnTVM(address: string): Promise<boolean>;
|
|
33
30
|
simulateTACMessage(req: TACSimulationParams): Promise<TACSimulationResult>;
|
|
@@ -51,5 +48,4 @@ export declare class TacSdk implements ITacSDK {
|
|
|
51
48
|
prepareCrossChainTransactionPayload(evmProxyMsg: EvmProxyMsg, senderAddress: string, assets?: AssetLike[], options?: CrossChainTransactionOptions): Promise<CrossChainPayloadResult[]>;
|
|
52
49
|
getTACGasPrice(): Promise<TacGasPrice>;
|
|
53
50
|
getTonContractOpener(): ContractOpener;
|
|
54
|
-
private toSequencerTonTransactionHash;
|
|
55
51
|
}
|
package/dist/src/sdk/TacSdk.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TacSdk = void 0;
|
|
4
|
-
const ton_1 = require("@ton/ton");
|
|
5
|
-
const artifacts_1 = require("../../artifacts");
|
|
6
|
-
const adapters_1 = require("../adapters");
|
|
7
4
|
const assets_1 = require("../assets");
|
|
8
|
-
const errors_1 = require("../errors");
|
|
9
5
|
const Struct_1 = require("../structs/Struct");
|
|
6
|
+
const Artifacts_1 = require("./Artifacts");
|
|
10
7
|
const Configuration_1 = require("./Configuration");
|
|
11
8
|
const Consts_1 = require("./Consts");
|
|
12
9
|
const Logger_1 = require("./Logger");
|
|
@@ -17,7 +14,7 @@ const TACTransactionManager_1 = require("./TACTransactionManager");
|
|
|
17
14
|
const TONTransactionManager_1 = require("./TONTransactionManager");
|
|
18
15
|
const Utils_1 = require("./Utils");
|
|
19
16
|
class TacSdk {
|
|
20
|
-
constructor(config, simulator, tonTransactionManager, tacTransactionManager, operationTracker, explorerClient
|
|
17
|
+
constructor(config, simulator, tonTransactionManager, tacTransactionManager, operationTracker, explorerClient) {
|
|
21
18
|
this.config = config;
|
|
22
19
|
this.contactOpener = config.TONParams.contractOpener;
|
|
23
20
|
this.simulator = simulator;
|
|
@@ -25,34 +22,19 @@ class TacSdk {
|
|
|
25
22
|
this.tacTransactionManager = tacTransactionManager;
|
|
26
23
|
this.operationTracker = operationTracker;
|
|
27
24
|
this.explorerClient = explorerClient;
|
|
28
|
-
this.tonIndexer = tonIndexer;
|
|
29
25
|
}
|
|
30
26
|
static async create(sdkParams, logger = new Logger_1.NoopLogger()) {
|
|
31
27
|
const network = sdkParams.network;
|
|
32
28
|
const delay = sdkParams.delay ?? Consts_1.DEFAULT_DELAY;
|
|
33
29
|
const passLoggerToOpeners = sdkParams.passLoggerToOpeners ?? true;
|
|
34
|
-
|
|
35
|
-
switch (network) {
|
|
36
|
-
case Struct_1.Network.MAINNET:
|
|
37
|
-
artifacts = artifacts_1.mainnet;
|
|
38
|
-
break;
|
|
39
|
-
case Struct_1.Network.TESTNET:
|
|
40
|
-
artifacts = artifacts_1.testnet;
|
|
41
|
-
break;
|
|
42
|
-
case Struct_1.Network.DEV:
|
|
43
|
-
artifacts = artifacts_1.dev;
|
|
44
|
-
break;
|
|
45
|
-
default:
|
|
46
|
-
throw new Error(`Unsupported network: ${network}`);
|
|
47
|
-
}
|
|
30
|
+
const artifacts = (0, Artifacts_1.getArtifacts)(network);
|
|
48
31
|
const config = await Configuration_1.Configuration.create(network, artifacts, sdkParams.TONParams, sdkParams.TACParams, sdkParams.customLiteSequencerEndpoints, delay, logger, passLoggerToOpeners);
|
|
49
|
-
const operationTracker = new OperationTracker_1.OperationTracker(
|
|
32
|
+
const operationTracker = new OperationTracker_1.OperationTracker(config, logger);
|
|
50
33
|
const explorerClient = new TacExplorerClient_1.TacExplorerClient(artifacts.TAC_EXPLORER_API_ENDPOINT);
|
|
51
34
|
const simulator = new Simulator_1.Simulator(config, operationTracker, logger);
|
|
52
35
|
const tonTransactionManager = new TONTransactionManager_1.TONTransactionManager(config, simulator, operationTracker, logger);
|
|
53
36
|
const tacTransactionManager = new TACTransactionManager_1.TACTransactionManager(config, operationTracker, logger);
|
|
54
|
-
|
|
55
|
-
return new TacSdk(config, simulator, tonTransactionManager, tacTransactionManager, operationTracker, explorerClient, tonIndexer);
|
|
37
|
+
return new TacSdk(config, simulator, tonTransactionManager, tacTransactionManager, operationTracker, explorerClient);
|
|
56
38
|
}
|
|
57
39
|
closeConnections() {
|
|
58
40
|
return this.config.closeConnections();
|
|
@@ -104,32 +86,6 @@ class TacSdk {
|
|
|
104
86
|
})));
|
|
105
87
|
return this.tonTransactionManager.sendCrossChainTransactions(sender, normalizedTxs, options);
|
|
106
88
|
}
|
|
107
|
-
async getOperationIdByTonTransactionHash(transactionHash, waitOptions) {
|
|
108
|
-
const cclTransaction = await this.tonIndexer.findCollectibleCrossChainLayerTransaction(transactionHash, this.config.TONParams.crossChainLayerAddress);
|
|
109
|
-
if (!cclTransaction) {
|
|
110
|
-
return '';
|
|
111
|
-
}
|
|
112
|
-
return this.operationTracker.getOperationIdByTonTransactionHash(this.toSequencerTonTransactionHash(cclTransaction), waitOptions);
|
|
113
|
-
}
|
|
114
|
-
async getOperationIdByTonTransactionBoc(boc, waitOptions) {
|
|
115
|
-
let message;
|
|
116
|
-
try {
|
|
117
|
-
message = (0, ton_1.loadMessage)(ton_1.Cell.fromBase64(boc).beginParse());
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
const reason = error instanceof Error ? error.message : undefined;
|
|
121
|
-
throw (0, errors_1.invalidTonExternalMessageBocError)(reason);
|
|
122
|
-
}
|
|
123
|
-
if (message.info.type !== 'external-in') {
|
|
124
|
-
throw (0, errors_1.externalInMessageRequiredError)(message.info.type);
|
|
125
|
-
}
|
|
126
|
-
const destination = message.info.dest;
|
|
127
|
-
const transaction = await this.contactOpener.getTransactionByHash(ton_1.Address.parse(destination.toString()), (0, Utils_1.getNormalizedExtMessageHash)(message));
|
|
128
|
-
if (!transaction) {
|
|
129
|
-
return '';
|
|
130
|
-
}
|
|
131
|
-
return this.getOperationIdByTonTransactionHash(transaction.hash().toString('base64'), waitOptions);
|
|
132
|
-
}
|
|
133
89
|
async bridgeTokensToTON(signer, value, tonTarget, assets, tvmExecutorFee, tvmValidExecutors) {
|
|
134
90
|
const normalizedAssets = await (0, Utils_1.normalizeAssets)(this.config, assets);
|
|
135
91
|
return this.tacTransactionManager.bridgeTokensToTON(signer, value, tonTarget, normalizedAssets, tvmExecutorFee, tvmValidExecutors);
|
|
@@ -235,8 +191,5 @@ class TacSdk {
|
|
|
235
191
|
getTonContractOpener() {
|
|
236
192
|
return this.contactOpener;
|
|
237
193
|
}
|
|
238
|
-
toSequencerTonTransactionHash(transaction) {
|
|
239
|
-
return `0x${(0, Utils_1.normalizeHashToHex)(transaction.hash)}`;
|
|
240
|
-
}
|
|
241
194
|
}
|
|
242
195
|
exports.TacSdk = TacSdk;
|