@tonappchain/sdk 0.7.3-rc7 → 0.8.0

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.
Files changed (98) hide show
  1. package/README.md +0 -3
  2. package/dist/artifacts/dev/tac/internal/artifacts/contracts/interfaces/ICrossChainLayer.sol/ICrossChainLayer.json +0 -7
  3. package/dist/artifacts/dev/tac/internal/artifacts/contracts/interfaces/ISettings.sol/ISettings.json +0 -7
  4. package/dist/artifacts/dev/tac/internal/artifacts/contracts/interfaces/ITokenUtils.sol/ITokenUtils.json +0 -7
  5. package/dist/artifacts/dev/tac/internal/artifacts/contracts/smart-account/interfaces/ISAFactory.sol/ISAFactory.json +0 -7
  6. package/dist/artifacts/dev/tac/internal/typechain-types/contracts/interfaces/ICrossChainLayer.d.ts +1 -5
  7. package/dist/artifacts/dev/tac/internal/typechain-types/contracts/interfaces/ISettings.d.ts +1 -5
  8. package/dist/artifacts/dev/tac/internal/typechain-types/contracts/interfaces/ITokenUtils.d.ts +1 -5
  9. package/dist/artifacts/dev/tac/internal/typechain-types/contracts/smart-account/interfaces/ISAFactory.d.ts +1 -5
  10. package/dist/artifacts/dev/ton/internal/build/Settings.compiled.json +1 -1
  11. package/dist/artifacts/dev/ton/internal/wrappers/Settings.d.ts +1 -0
  12. package/dist/artifacts/dev/ton/internal/wrappers/Settings.js +11 -7
  13. package/dist/artifacts/index.d.ts +5 -3
  14. package/dist/artifacts/index.js +6 -3
  15. package/dist/artifacts/mainnet/tac/internal/artifacts/contracts/interfaces/ICrossChainLayer.sol/ICrossChainLayer.json +0 -7
  16. package/dist/artifacts/mainnet/tac/internal/artifacts/contracts/interfaces/ISettings.sol/ISettings.json +0 -7
  17. package/dist/artifacts/mainnet/tac/internal/artifacts/contracts/interfaces/ITokenUtils.sol/ITokenUtils.json +0 -7
  18. package/dist/artifacts/mainnet/tac/internal/artifacts/contracts/smart-account/interfaces/ISAFactory.sol/ISAFactory.json +0 -7
  19. package/dist/artifacts/mainnet/tac/internal/typechain-types/contracts/interfaces/ICrossChainLayer.d.ts +1 -5
  20. package/dist/artifacts/mainnet/tac/internal/typechain-types/contracts/interfaces/ISettings.d.ts +1 -5
  21. package/dist/artifacts/mainnet/tac/internal/typechain-types/contracts/interfaces/ITokenUtils.d.ts +1 -5
  22. package/dist/artifacts/mainnet/tac/internal/typechain-types/contracts/smart-account/interfaces/ISAFactory.d.ts +1 -5
  23. package/dist/artifacts/mainnet/ton/internal/build/CrossChainLayer.compiled.json +1 -1
  24. package/dist/artifacts/mainnet/ton/internal/build/Executor.compiled.json +1 -1
  25. package/dist/artifacts/mainnet/ton/internal/build/JettonMinter.compiled.json +1 -1
  26. package/dist/artifacts/mainnet/ton/internal/build/JettonProxy.compiled.json +1 -1
  27. package/dist/artifacts/mainnet/ton/internal/build/JettonWallet.compiled.json +1 -1
  28. package/dist/artifacts/mainnet/ton/internal/build/NFTCollection.compiled.json +1 -1
  29. package/dist/artifacts/mainnet/ton/internal/build/NFTItem.compiled.json +1 -1
  30. package/dist/artifacts/mainnet/ton/internal/build/NFTProxy.compiled.json +1 -1
  31. package/dist/artifacts/mainnet/ton/internal/build/Settings.compiled.json +1 -1
  32. package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.d.ts +65 -6
  33. package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.js +169 -18
  34. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.d.ts +4 -2
  35. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.js +5 -3
  36. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonProxy.d.ts +9 -0
  37. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonProxy.js +11 -2
  38. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonWallet.d.ts +7 -0
  39. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonWallet.js +9 -2
  40. package/dist/artifacts/mainnet/ton/internal/wrappers/NFTCollection.d.ts +11 -1
  41. package/dist/artifacts/mainnet/ton/internal/wrappers/NFTCollection.js +17 -5
  42. package/dist/artifacts/mainnet/ton/internal/wrappers/NFTItem.d.ts +9 -1
  43. package/dist/artifacts/mainnet/ton/internal/wrappers/NFTItem.js +15 -5
  44. package/dist/artifacts/mainnet/ton/internal/wrappers/NFTProxy.d.ts +9 -1
  45. package/dist/artifacts/mainnet/ton/internal/wrappers/NFTProxy.js +16 -6
  46. package/dist/artifacts/mainnet/ton/internal/wrappers/Settings.d.ts +2 -0
  47. package/dist/artifacts/mainnet/ton/internal/wrappers/Settings.js +11 -6
  48. package/dist/artifacts/mainnet/ton/internal/wrappers/utils/CrossChainLayerPayload.d.ts +10 -0
  49. package/dist/artifacts/mainnet/ton/internal/wrappers/utils/CrossChainLayerPayload.js +24 -0
  50. package/dist/artifacts/mainnet/ton/internal/wrappers/utils/MerkleRoots.d.ts +2 -1
  51. package/dist/artifacts/mainnet/ton/internal/wrappers/utils/MerkleRoots.js +9 -1
  52. package/dist/artifacts/testnet/tac/internal/artifacts/contracts/interfaces/ICrossChainLayer.sol/ICrossChainLayer.json +0 -7
  53. package/dist/artifacts/testnet/tac/internal/artifacts/contracts/interfaces/ISettings.sol/ISettings.json +0 -7
  54. package/dist/artifacts/testnet/tac/internal/artifacts/contracts/interfaces/ITokenUtils.sol/ITokenUtils.json +0 -7
  55. package/dist/artifacts/testnet/tac/internal/artifacts/contracts/smart-account/interfaces/ISAFactory.sol/ISAFactory.json +0 -7
  56. package/dist/artifacts/testnet/tac/internal/typechain-types/contracts/interfaces/ICrossChainLayer.d.ts +1 -5
  57. package/dist/artifacts/testnet/tac/internal/typechain-types/contracts/interfaces/ISettings.d.ts +1 -5
  58. package/dist/artifacts/testnet/tac/internal/typechain-types/contracts/interfaces/ITokenUtils.d.ts +1 -5
  59. package/dist/artifacts/testnet/tac/internal/typechain-types/contracts/smart-account/interfaces/ISAFactory.d.ts +1 -5
  60. package/dist/artifacts/testnet/ton/internal/build/Settings.compiled.json +1 -1
  61. package/dist/artifacts/testnet/ton/internal/wrappers/Settings.d.ts +1 -0
  62. package/dist/artifacts/testnet/ton/internal/wrappers/Settings.js +11 -7
  63. package/dist/src/adapters/RetryableContractOpener.js +5 -2
  64. package/dist/src/adapters/ToncenterV3Indexer.js +1 -1
  65. package/dist/src/assets/AssetCache.d.ts +4 -4
  66. package/dist/src/assets/AssetCache.js +11 -6
  67. package/dist/src/assets/AssetFactory.js +2 -2
  68. package/dist/src/errors/index.d.ts +1 -1
  69. package/dist/src/errors/index.js +5 -3
  70. package/dist/src/errors/instances.d.ts +2 -0
  71. package/dist/src/errors/instances.js +4 -1
  72. package/dist/src/index.d.ts +1 -0
  73. package/dist/src/index.js +3 -1
  74. package/dist/src/interfaces/IConfiguration.d.ts +2 -2
  75. package/dist/src/interfaces/IOperationTracker.d.ts +14 -1
  76. package/dist/src/interfaces/ITacSDK.d.ts +1 -21
  77. package/dist/src/sdk/Artifacts.d.ts +3 -0
  78. package/dist/src/sdk/Artifacts.js +17 -0
  79. package/dist/src/sdk/Configuration.d.ts +4 -4
  80. package/dist/src/sdk/Configuration.js +8 -3
  81. package/dist/src/sdk/Consts.d.ts +0 -1
  82. package/dist/src/sdk/Consts.js +1 -2
  83. package/dist/src/sdk/LiteSequencerClient.js +2 -1
  84. package/dist/src/sdk/OperationTracker.d.ts +6 -3
  85. package/dist/src/sdk/OperationTracker.js +44 -19
  86. package/dist/src/sdk/StartTracking.d.ts +8 -0
  87. package/dist/src/sdk/StartTracking.js +19 -1
  88. package/dist/src/sdk/TACTransactionManager.js +5 -5
  89. package/dist/src/sdk/TONTransactionManager.d.ts +1 -0
  90. package/dist/src/sdk/TONTransactionManager.js +29 -16
  91. package/dist/src/sdk/TacExplorerClient.js +4 -3
  92. package/dist/src/sdk/TacSdk.d.ts +1 -5
  93. package/dist/src/sdk/TacSdk.js +5 -52
  94. package/dist/src/sdk/TxFinalizer.js +1 -1
  95. package/dist/src/sdk/Utils.js +37 -4
  96. package/dist/src/structs/InternalStruct.d.ts +2 -1
  97. package/dist/src/structs/Struct.d.ts +4 -4
  98. package/package.json +1 -1
@@ -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 tracker = new OperationTracker_1.OperationTracker(network, customLiteSequencerEndpoints, logger);
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(Math.round(Math.random() * Consts_1.SHARDS_KEY_RANDOM_RANGE));
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 waitOptions = options?.waitOptions ?? {};
193
- waitOptions.successCheck = waitOptions.successCheck ?? ((id) => !!id);
194
- waitOptions.logger = waitOptions.logger ?? this.logger;
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, waitOptions)
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 waitOptions = tx.options?.waitOptions ?? {};
192
- waitOptions.successCheck = waitOptions.successCheck ?? ((id) => !!id);
193
- waitOptions.logger = waitOptions.logger ?? this.logger;
194
- const operationId = await this.operationTracker
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?.waitOptions ?? {})
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, waitOptions) {
276
+ async waitForOperationIds(transactionLinkers, caller, waitOperationIdOptions) {
264
277
  this.logger.debug(`Waiting for operation IDs`);
265
278
  try {
266
- waitOptions.successCheck =
267
- waitOptions.successCheck ??
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
- waitOptions.logger = waitOptions.logger ?? this.logger;
271
- const operationIds = await this.operationTracker.getOperationIdsByShardsKeys(transactionLinkers.map((linker) => linker.shardsKey), caller, waitOptions);
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 instances_1 = require("../errors/instances");
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, instances_1.gasPriceFetchError)(`endpoint ${this.explorerApiEndpoint} failed to complete request`, error);
19
+ throw (0, errors_1.gasPriceFetchError)(`endpoint ${this.explorerApiEndpoint} failed to complete request`, error);
19
20
  }
20
21
  }
21
22
  }
@@ -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, WaitOptions } from '../structs/Struct';
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
  }
@@ -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, tonIndexer) {
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
- let artifacts;
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(network, config.liteSequencerEndpoints, logger);
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
- const tonIndexer = sdkParams.TONParams?.tonIndexer ?? new adapters_1.ToncenterV3Indexer(artifacts.TONCENTER_V3_INDEXER_ENDPOINT);
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;
@@ -7,7 +7,7 @@ const Consts_1 = require("./Consts");
7
7
  const Logger_1 = require("./Logger");
8
8
  const Utils_1 = require("./Utils");
9
9
  class TonTxFinalizer {
10
- constructor(apiConfig, logger = new Logger_1.NoopLogger(), httpClient = new AxiosHttpClient_1.AxiosHttpClient()) {
10
+ constructor(apiConfig, logger = new Logger_1.NoopLogger(), httpClient = new AxiosHttpClient_1.AxiosHttpClient({ timeout: Consts_1.DEFAULT_HTTP_CLIENT_TIMEOUT_MS })) {
11
11
  this.apiConfig = apiConfig;
12
12
  this.logger = logger;
13
13
  this.httpClient = httpClient;
@@ -108,11 +108,44 @@ const convertKeysToCamelCase = (data) => {
108
108
  return data;
109
109
  };
110
110
  exports.convertKeysToCamelCase = convertKeysToCamelCase;
111
+ function formatFiniteNumber(amount) {
112
+ const amountString = amount.toString();
113
+ if (!amountString.includes('e')) {
114
+ return amountString;
115
+ }
116
+ const [coefficient, exponentString] = amountString.split('e');
117
+ const exponent = Number(exponentString);
118
+ const [integerPart, fractionalPart = ''] = coefficient.split('.');
119
+ const digits = integerPart + fractionalPart;
120
+ const decimalIndex = integerPart.length + exponent;
121
+ let expanded;
122
+ if (decimalIndex <= 0) {
123
+ expanded = `0.${'0'.repeat(-decimalIndex)}${digits}`;
124
+ }
125
+ else if (decimalIndex >= digits.length) {
126
+ expanded = `${digits}${'0'.repeat(decimalIndex - digits.length)}`;
127
+ }
128
+ else {
129
+ expanded = `${digits.slice(0, decimalIndex)}.${digits.slice(decimalIndex)}`;
130
+ }
131
+ return expanded;
132
+ }
111
133
  const calculateRawAmount = (amount, decimals) => {
112
- const [integerPart, fractionalPart = ''] = amount.toString().split('.');
113
- // Ensure the fractional part has enough digits
114
- const paddedFraction = fractionalPart.padEnd(decimals, '0').slice(0, decimals);
115
- return BigInt(integerPart + paddedFraction);
134
+ if (!Number.isFinite(amount)) {
135
+ throw (0, errors_1.invalidAmountError)('Amount must be finite');
136
+ }
137
+ if (amount < 0) {
138
+ throw (0, errors_1.invalidAmountError)('Amount must be non-negative');
139
+ }
140
+ if (!Number.isInteger(decimals) || decimals < 0) {
141
+ throw (0, errors_1.invalidAmountError)('Token decimals must be a non-negative integer');
142
+ }
143
+ const amountString = formatFiniteNumber(amount);
144
+ const [integerPart, fractionalPart = ''] = amountString.split('.');
145
+ if (fractionalPart.length > decimals) {
146
+ throw (0, errors_1.invalidAmountError)('Amount has more fractional digits than token decimals');
147
+ }
148
+ return BigInt(integerPart + fractionalPart.padEnd(decimals, '0'));
116
149
  };
117
150
  exports.calculateRawAmount = calculateRawAmount;
118
151
  const calculateAmount = (rawAmount, decimals) => {
@@ -1,7 +1,7 @@
1
1
  import type { Address, Cell, Message } from '@ton/ton';
2
2
  import { AbstractProvider, ethers } from 'ethers';
3
3
  import { ICrossChainLayer, ISAFactory, ISettings, ITokenUtils } from '../../artifacts/tacTypes';
4
- import { ContractOpener } from '../interfaces';
4
+ import { ContractOpener, IToncenterV3Indexer } from '../interfaces';
5
5
  import { CurrencyType, ExecutionStagesByOperationId, ExecutionStagesV2ByOperationId, Network, OperationIdsByShardsKey, OperationIdWithLogIndex, OperationType, OperationTypeV2Info, StatusInfosByOperationId, SuggestedTVMExecutorFee, TACSimulationResult, ToncenterV3IndexedTransaction, TransactionLinker } from './Struct';
6
6
  export type ShardMessage = {
7
7
  address: string;
@@ -37,6 +37,7 @@ export type RandomNumberByTimestamp = {
37
37
  };
38
38
  export type InternalTONParams = {
39
39
  contractOpener: ContractOpener;
40
+ tonIndexer?: IToncenterV3Indexer;
40
41
  jettonProxyAddress: string;
41
42
  nftProxyAddress: string;
42
43
  crossChainLayerAddress: string;
@@ -468,7 +468,7 @@ export type CrossChainTransactionOptions = {
468
468
  * Retry policy used while resolving the operation ID.
469
469
  * Use this to control timeout, attempts, delay, logger, callbacks, and success criteria.
470
470
  */
471
- waitOptions?: WaitOptions<string>;
471
+ waitOperationIdOptions?: WaitOptions<string>;
472
472
  /**
473
473
  * If true, waits for full cross-chain finalization after the operation ID is known:
474
474
  * the SDK waits for a final operation type, fetches stage profiling, and validates
@@ -489,10 +489,10 @@ export type CrossChainTransactionOptions = {
489
489
  */
490
490
  evmDataBuilder?: evmDataBuilder;
491
491
  };
492
- export type BatchCrossChainTransactionOptions = Omit<CrossChainTransactionOptions, 'waitOperationId' | 'waitOptions' | 'ensureTxExecuted' | 'waitFinalization' | 'finalizationWaitOptions'>;
492
+ export type BatchCrossChainTransactionOptions = Omit<CrossChainTransactionOptions, 'waitOperationId' | 'waitOperationIdOptions' | 'ensureTxExecuted' | 'waitFinalization' | 'finalizationWaitOptions'>;
493
493
  export type CrossChainTransactionsOptions = {
494
494
  waitOperationIds?: boolean;
495
- waitOptions?: WaitOptions<OperationIdsByShardsKey>;
495
+ waitOperationIdOptions?: WaitOptions<OperationIdsByShardsKey>;
496
496
  };
497
497
  export type CrossChainTransactionToTONOptions = {
498
498
  /**
@@ -522,7 +522,7 @@ export type CrossChainTransactionToTONOptions = {
522
522
  * Retry policy used while resolving the operation ID.
523
523
  * Use this to control timeout, attempts, delay, logger, callbacks, and success criteria.
524
524
  */
525
- waitOptions?: WaitOptions<string>;
525
+ waitOperationIdOptions?: WaitOptions<string>;
526
526
  /**
527
527
  * Wait options used to finalize the cross-chain operation after operationId resolution.
528
528
  * Use this to configure retries, delay, logger, successCheck, and onSuccess callback
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonappchain/sdk",
3
- "version": "0.7.3-rc7",
3
+ "version": "0.8.0",
4
4
  "repository": "https://github.com/TacBuild/tac-sdk.git",
5
5
  "author": "TAC. <developers@tac>",
6
6
  "license": "MIT",