@tonappchain/sdk 0.6.6-mainnet-alpha → 0.7.0-rc10

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 (97) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +191 -191
  3. package/dist/adapters/contractOpener.d.ts +6 -5
  4. package/dist/adapters/contractOpener.js +6 -6
  5. package/dist/adapters/retryableContractOpener.d.ts +9 -5
  6. package/dist/adapters/retryableContractOpener.js +2 -2
  7. package/dist/assets/AssetCache.d.ts +23 -0
  8. package/dist/assets/AssetCache.js +36 -0
  9. package/dist/assets/AssetFactory.d.ts +7 -0
  10. package/dist/assets/AssetFactory.js +46 -0
  11. package/dist/assets/FT.d.ts +58 -0
  12. package/dist/assets/FT.js +231 -0
  13. package/dist/assets/NFT.d.ts +65 -0
  14. package/dist/assets/NFT.js +210 -0
  15. package/dist/assets/TON.d.ts +38 -0
  16. package/dist/assets/TON.js +91 -0
  17. package/dist/assets/index.d.ts +4 -0
  18. package/dist/assets/index.js +11 -0
  19. package/dist/errors/errors.d.ts +6 -0
  20. package/dist/errors/errors.js +15 -1
  21. package/dist/errors/index.d.ts +2 -2
  22. package/dist/errors/index.js +26 -22
  23. package/dist/errors/instances.d.ts +4 -1
  24. package/dist/errors/instances.js +11 -2
  25. package/dist/index.d.ts +7 -0
  26. package/dist/index.js +14 -1
  27. package/dist/interfaces/IAsset.d.ts +73 -0
  28. package/dist/interfaces/IAsset.js +2 -0
  29. package/dist/interfaces/IConfiguration.d.ts +35 -0
  30. package/dist/interfaces/IConfiguration.js +2 -0
  31. package/dist/interfaces/IContractOpener.d.ts +21 -0
  32. package/dist/interfaces/IContractOpener.js +2 -0
  33. package/dist/interfaces/IHttpClient.d.ts +16 -0
  34. package/dist/interfaces/IHttpClient.js +2 -0
  35. package/dist/interfaces/ILiteSequencerClient.d.ts +30 -0
  36. package/dist/interfaces/ILiteSequencerClient.js +2 -0
  37. package/dist/interfaces/ILiteSequencerClientFactory.d.ts +9 -0
  38. package/dist/interfaces/ILiteSequencerClientFactory.js +2 -0
  39. package/dist/interfaces/ILogger.d.ts +10 -0
  40. package/dist/interfaces/ILogger.js +2 -0
  41. package/dist/interfaces/IOperationTracker.d.ts +66 -0
  42. package/dist/interfaces/IOperationTracker.js +2 -0
  43. package/dist/interfaces/ISender.d.ts +35 -0
  44. package/dist/interfaces/ISender.js +2 -0
  45. package/dist/interfaces/ISimulator.d.ts +47 -0
  46. package/dist/interfaces/ISimulator.js +2 -0
  47. package/dist/interfaces/ITacSDK.d.ts +147 -0
  48. package/dist/interfaces/ITacSDK.js +2 -0
  49. package/dist/interfaces/ITransactionManager.d.ts +35 -0
  50. package/dist/interfaces/ITransactionManager.js +2 -0
  51. package/dist/interfaces/IWallet.d.ts +20 -0
  52. package/dist/interfaces/IWallet.js +2 -0
  53. package/dist/interfaces/index.d.ts +13 -0
  54. package/dist/interfaces/index.js +29 -0
  55. package/dist/sdk/AxiosHttpClient.d.ts +12 -0
  56. package/dist/sdk/AxiosHttpClient.js +23 -0
  57. package/dist/sdk/Configuration.d.ts +21 -0
  58. package/dist/sdk/Configuration.js +90 -0
  59. package/dist/sdk/LiteSequencerClient.d.ts +6 -2
  60. package/dist/sdk/LiteSequencerClient.js +58 -14
  61. package/dist/sdk/Logger.d.ts +13 -0
  62. package/dist/sdk/Logger.js +25 -0
  63. package/dist/sdk/OperationTracker.d.ts +10 -5
  64. package/dist/sdk/OperationTracker.js +87 -45
  65. package/dist/sdk/Simulator.d.ts +17 -0
  66. package/dist/sdk/Simulator.js +163 -0
  67. package/dist/sdk/StartTracking.d.ts +6 -0
  68. package/dist/sdk/StartTracking.js +69 -32
  69. package/dist/sdk/TacSdk.d.ts +27 -44
  70. package/dist/sdk/TacSdk.js +121 -816
  71. package/dist/sdk/TransactionManager.d.ts +22 -0
  72. package/dist/sdk/TransactionManager.js +272 -0
  73. package/dist/sdk/TxFinalizer.d.ts +10 -0
  74. package/dist/sdk/TxFinalizer.js +104 -0
  75. package/dist/sdk/Utils.d.ts +7 -2
  76. package/dist/sdk/Utils.js +43 -24
  77. package/dist/sdk/Validator.d.ts +9 -0
  78. package/dist/sdk/Validator.js +43 -0
  79. package/dist/sender/BatchSender.d.ts +7 -5
  80. package/dist/sender/BatchSender.js +18 -6
  81. package/dist/sender/RawSender.d.ts +11 -6
  82. package/dist/sender/RawSender.js +46 -18
  83. package/dist/sender/SenderFactory.d.ts +2 -2
  84. package/dist/sender/SenderFactory.js +5 -4
  85. package/dist/sender/TonConnectSender.d.ts +7 -5
  86. package/dist/sender/TonConnectSender.js +14 -10
  87. package/dist/sender/index.d.ts +2 -2
  88. package/dist/sender/index.js +2 -2
  89. package/dist/structs/InternalStruct.d.ts +52 -33
  90. package/dist/structs/Struct.d.ts +92 -94
  91. package/dist/structs/Struct.js +11 -1
  92. package/dist/wrappers/HighloadQueryId.js +0 -1
  93. package/dist/wrappers/HighloadWalletV3.d.ts +4 -3
  94. package/dist/wrappers/HighloadWalletV3.js +5 -2
  95. package/package.json +67 -67
  96. package/dist/sender/SenderAbstraction.d.ts +0 -20
  97. package/dist/sender/SenderAbstraction.js +0 -5
@@ -1,3 +1,5 @@
1
+ import { TxFinalizerConfig } from '../structs/InternalStruct';
2
+ import { ILogger } from '../interfaces';
1
3
  import { ExecutionStages, Network, TransactionLinker } from '../structs/Struct';
2
4
  export declare function startTracking(transactionLinker: TransactionLinker, network: Network, options?: {
3
5
  customLiteSequencerEndpoints?: string[];
@@ -5,6 +7,8 @@ export declare function startTracking(transactionLinker: TransactionLinker, netw
5
7
  maxIterationCount?: number;
6
8
  returnValue?: boolean;
7
9
  tableView?: boolean;
10
+ txFinalizerConfig?: TxFinalizerConfig;
11
+ logger?: ILogger;
8
12
  }): Promise<void | ExecutionStages>;
9
13
  export declare function startTrackingMultiple(transactionLinkers: TransactionLinker[], network: Network, options?: {
10
14
  customLiteSequencerEndpoints?: string[];
@@ -12,4 +16,6 @@ export declare function startTrackingMultiple(transactionLinkers: TransactionLin
12
16
  maxIterationCount?: number;
13
17
  returnValue?: boolean;
14
18
  tableView?: boolean;
19
+ txFinalizerConfig?: TxFinalizerConfig;
20
+ logger?: ILogger;
15
21
  }): Promise<void | ExecutionStages[]>;
@@ -5,19 +5,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.startTracking = startTracking;
7
7
  exports.startTrackingMultiple = startTrackingMultiple;
8
+ const cli_table3_1 = __importDefault(require("cli-table3"));
8
9
  const Struct_1 = require("../structs/Struct");
9
10
  const Consts_1 = require("./Consts");
11
+ const Logger_1 = require("./Logger");
10
12
  const OperationTracker_1 = require("./OperationTracker");
13
+ const TxFinalizer_1 = require("./TxFinalizer");
11
14
  const Utils_1 = require("./Utils");
12
- const cli_table3_1 = __importDefault(require("cli-table3"));
13
15
  async function startTracking(transactionLinker, network, options) {
14
- const { customLiteSequencerEndpoints, delay = 10, maxIterationCount = Consts_1.MAX_ITERATION_COUNT, returnValue = false, tableView = true, } = options || {};
15
- const tracker = new OperationTracker_1.OperationTracker(network, customLiteSequencerEndpoints);
16
- console.log('Start tracking operation');
17
- console.log('caller: ', transactionLinker.caller);
18
- console.log('shardsKey: ', transactionLinker.shardsKey);
19
- console.log('shardCount: ', transactionLinker.shardCount);
20
- console.log('timestamp: ', transactionLinker.timestamp);
16
+ const { customLiteSequencerEndpoints, delay = 10, maxIterationCount = Consts_1.MAX_ITERATION_COUNT, returnValue = false, tableView = true, txFinalizerConfig, logger = new Logger_1.NoopLogger(), } = options || {};
17
+ const tracker = new OperationTracker_1.OperationTracker(network, customLiteSequencerEndpoints, logger);
18
+ logger.debug('Start tracking operation');
19
+ logger.debug('caller: ' + transactionLinker.caller);
20
+ logger.debug('shardsKey: ' + transactionLinker.shardsKey);
21
+ logger.debug('shardCount: ' + transactionLinker.shardCount);
22
+ logger.debug('timestamp: ' + transactionLinker.timestamp);
21
23
  let operationId = '';
22
24
  let iteration = 0; // number of iterations
23
25
  let operationType = '';
@@ -31,11 +33,13 @@ async function startTracking(transactionLinker, network, options) {
31
33
  break;
32
34
  }
33
35
  if (operationId == '') {
34
- console.log('request operationId');
36
+ logger.debug('request operationId');
35
37
  try {
36
38
  operationId = await tracker.getOperationId(transactionLinker);
37
39
  }
38
- catch (err) { }
40
+ catch {
41
+ // Ignore error and continue
42
+ }
39
43
  }
40
44
  else {
41
45
  try {
@@ -45,47 +49,73 @@ async function startTracking(transactionLinker, network, options) {
45
49
  }
46
50
  }
47
51
  catch (err) {
48
- console.log('failed to get operation type:', err);
52
+ logger.debug('failed to get operation type: ' + err);
49
53
  }
50
- console.log(`
51
- operationId: ${operationId}
52
- operationType: ${operationType}
53
- time: ${new Date().toISOString()} (${Math.floor(+new Date() / 1000)})
54
+ logger.debug(`
55
+ operationId: ${operationId}
56
+ operationType: ${operationType}
57
+ time: ${new Date().toISOString()} (${Math.floor(+new Date() / 1000)})
54
58
  `);
55
59
  }
56
60
  await (0, Utils_1.sleep)(delay * 1000);
57
61
  }
58
- console.log('Tracking finished');
62
+ logger.debug('Tracking finished');
59
63
  if (!ok) {
60
64
  if (returnValue) {
61
65
  throw Error(errorMessage);
62
66
  }
63
- console.log(errorMessage);
67
+ logger.debug(errorMessage);
64
68
  }
65
69
  const profilingData = await tracker.getStageProfiling(operationId);
70
+ // Check if EXECUTED_IN_TON stage exists and use TxFinalizer to verify transaction success
71
+ if (profilingData.executedInTON.exists && profilingData.executedInTON.stageData?.transactions) {
72
+ logger.debug('EXECUTED_IN_TON stage found, verifying transaction success in TON...');
73
+ if (txFinalizerConfig) {
74
+ const txFinalizer = new TxFinalizer_1.TonTxFinalizer(txFinalizerConfig, logger);
75
+ const transactions = profilingData.executedInTON.stageData.transactions;
76
+ for (const tx of transactions) {
77
+ try {
78
+ logger.debug(`Verifying transaction: ${tx.hash}`);
79
+ await txFinalizer.trackTransactionTree(tx.hash);
80
+ logger.debug(`Transaction ${tx.hash} verified successfully in TON`);
81
+ }
82
+ catch (error) {
83
+ logger.debug(`Transaction ${tx.hash} failed verification in TON: ${error}`);
84
+ if (returnValue) {
85
+ throw error;
86
+ }
87
+ }
88
+ }
89
+ }
90
+ else {
91
+ logger.debug('TxFinalizer config not provided, skipping TON transaction verification');
92
+ }
93
+ }
66
94
  if (returnValue) {
67
95
  return profilingData;
68
96
  }
69
- console.log(profilingData.operationType);
70
- console.log(profilingData.metaInfo);
97
+ logger.debug(profilingData.operationType);
98
+ logger.debug(profilingData.metaInfo);
71
99
  if (tableView) {
72
- printExecutionStagesTable(profilingData);
100
+ printExecutionStagesTable(profilingData, logger);
73
101
  }
74
102
  else {
75
- console.log(formatExecutionStages(profilingData));
103
+ logger.debug(formatExecutionStages(profilingData));
76
104
  }
77
105
  }
78
106
  async function startTrackingMultiple(transactionLinkers, network, options) {
79
- const { customLiteSequencerEndpoints, delay = 10, maxIterationCount = Consts_1.MAX_ITERATION_COUNT, returnValue = false, tableView = true, } = options || {};
80
- console.log(`Start tracking ${transactionLinkers.length} operations`);
107
+ const { customLiteSequencerEndpoints, delay = 10, maxIterationCount = Consts_1.MAX_ITERATION_COUNT, returnValue = false, tableView = true, txFinalizerConfig, logger = new Logger_1.NoopLogger(), } = options || {};
108
+ logger.debug(`Start tracking ${transactionLinkers.length} operations`);
81
109
  const results = await Promise.all(transactionLinkers.map((linker, index) => {
82
- console.log(`\nProcessing operation ${index + 1}/${transactionLinkers.length}`);
110
+ logger.debug(`\nProcessing operation ${index + 1}/${transactionLinkers.length}`);
83
111
  return startTracking(linker, network, {
84
112
  customLiteSequencerEndpoints,
85
113
  delay,
86
114
  maxIterationCount,
87
115
  returnValue: true,
88
116
  tableView: false,
117
+ txFinalizerConfig,
118
+ logger,
89
119
  });
90
120
  }));
91
121
  if (returnValue) {
@@ -93,20 +123,27 @@ async function startTrackingMultiple(transactionLinkers, network, options) {
93
123
  }
94
124
  if (tableView) {
95
125
  results.forEach((result, index) => {
96
- console.log(`\nResults for operation ${index + 1}:`);
97
- printExecutionStagesTable(result);
126
+ logger.debug(`\nResults for operation ${index + 1}:`);
127
+ printExecutionStagesTable(result, logger);
98
128
  });
99
129
  }
100
130
  else {
101
131
  results.forEach((result, index) => {
102
- console.log(`\nResults for operation ${index + 1}:`);
103
- console.log(formatExecutionStages(result));
132
+ logger.debug(`\nResults for operation ${index + 1}:`);
133
+ logger.debug(formatExecutionStages(result));
104
134
  });
105
135
  }
106
136
  }
107
137
  function formatExecutionStages(stages) {
108
- const { operationType, metaInfo, ...stagesData } = stages;
109
- return Object.entries(stagesData).map(([stage, data]) => ({
138
+ const { collectedInTAC, includedInTACConsensus, executedInTAC, collectedInTON, includedInTONConsensus, executedInTON, } = stages;
139
+ return Object.entries({
140
+ collectedInTAC,
141
+ includedInTACConsensus,
142
+ executedInTAC,
143
+ collectedInTON,
144
+ includedInTONConsensus,
145
+ executedInTON,
146
+ }).map(([stage, data]) => ({
110
147
  stage: stage,
111
148
  exists: data.exists ? 'Yes' : 'No',
112
149
  success: data.exists && data.stageData ? (data.stageData.success ? 'Yes' : 'No') : '-',
@@ -123,7 +160,7 @@ function formatExecutionStages(stages) {
123
160
  bytesError: data.exists && data.stageData && data.stageData.note != null ? data.stageData.note.internalBytesError : '-',
124
161
  }));
125
162
  }
126
- function printExecutionStagesTable(stages) {
163
+ function printExecutionStagesTable(stages, logger) {
127
164
  const table = new cli_table3_1.default({
128
165
  head: [
129
166
  'Stage',
@@ -153,5 +190,5 @@ function printExecutionStagesTable(stages) {
153
190
  row.bytesError,
154
191
  ]);
155
192
  });
156
- console.log(table.toString());
193
+ logger.debug(table.toString());
157
194
  }
@@ -1,57 +1,40 @@
1
- import { mainnet, testnet } from '@tonappchain/artifacts';
2
1
  import { Wallet } from 'ethers';
3
- import type { SenderAbstraction } from '../sender';
4
- import { InternalTACParams, InternalTONParams } from '../structs/InternalStruct';
5
- import { AssetBridgingData, CrossChainTransactionOptions, CrosschainTx, EvmProxyMsg, ExecutionFeeEstimationResult, Network, NFTAddressType, NFTItemData, OperationIdsByShardsKey, RawAssetBridgingData, SDKParams, SuggestedTONExecutorFee, TACSimulationRequest, TACSimulationResult, TransactionLinkerWithOperationId, UserWalletBalanceExtended, WaitOptions, WithAddressNFTCollectionItem } from '../structs/Struct';
6
- import { OperationTracker } from './OperationTracker';
7
- export declare class TacSdk {
8
- readonly network: Network;
9
- readonly delay: number;
10
- readonly artifacts: typeof testnet | typeof mainnet;
11
- readonly TONParams: InternalTONParams;
12
- readonly TACParams: InternalTACParams;
13
- readonly liteSequencerEndpoints: string[];
14
- readonly operationTracker: OperationTracker;
15
- readonly debug: boolean;
2
+ import { FT, NFT } from '../assets';
3
+ import type { ISender } from '../sender';
4
+ import { IAsset, CrossChainTransactionOptions, CrosschainTx, EVMAddress, EvmProxyMsg, ExecutionFeeEstimationResult, NFTAddressType, NFTItemData, OperationIdsByShardsKey, SDKParams, SuggestedTONExecutorFee, TACSimulationRequest, TACSimulationResult, TransactionLinkerWithOperationId, TVMAddress, UserWalletBalanceExtended, WaitOptions, AssetFromFTArg, AssetFromNFTCollectionArg, AssetFromNFTItemArg } from '../structs/Struct';
5
+ import { IConfiguration, ILogger, ITacSDK } from '../interfaces';
6
+ import { JettonMasterData } from '../wrappers/JettonMaster';
7
+ export declare class TacSdk implements ITacSDK {
8
+ readonly config: IConfiguration;
9
+ private readonly simulator;
10
+ private readonly transactionManager;
16
11
  private constructor();
17
- static create(sdkParams: SDKParams): Promise<TacSdk>;
18
- private static prepareTONParams;
19
- private static prepareTACParams;
12
+ static create(sdkParams: SDKParams, logger?: ILogger): Promise<TacSdk>;
20
13
  closeConnections(): unknown;
21
14
  get nativeTONAddress(): string;
22
15
  nativeTACAddress(): Promise<string>;
16
+ get getTrustedTACExecutors(): string[];
17
+ get getTrustedTONExecutors(): string[];
18
+ getTransactionSimulationInfo(evmProxyMsg: EvmProxyMsg, sender: ISender, assets?: IAsset[]): Promise<ExecutionFeeEstimationResult>;
19
+ getTVMExecutorFeeInfo(assets: IAsset[], feeSymbol: string, tvmValidExecutors?: string[]): Promise<SuggestedTONExecutorFee>;
20
+ sendCrossChainTransaction(evmProxyMsg: EvmProxyMsg, sender: ISender, assets?: IAsset[], options?: CrossChainTransactionOptions, waitOptions?: WaitOptions<string>): Promise<TransactionLinkerWithOperationId>;
21
+ sendCrossChainTransactions(sender: ISender, txs: CrosschainTx[], waitOptions?: WaitOptions<OperationIdsByShardsKey>): Promise<TransactionLinkerWithOperationId[]>;
22
+ bridgeTokensToTON(signer: Wallet, value: bigint, tonTarget: string, assets?: IAsset[], tvmExecutorFee?: bigint, tvmValidExecutors?: string[]): Promise<string>;
23
+ isContractDeployedOnTVM(address: string): Promise<boolean>;
24
+ simulateTACMessage(req: TACSimulationRequest): Promise<TACSimulationResult>;
25
+ simulateTransactions(sender: ISender, txs: CrosschainTx[]): Promise<TACSimulationResult[]>;
26
+ getAsset(args: AssetFromFTArg): Promise<FT>;
27
+ getAsset(args: AssetFromNFTCollectionArg): Promise<NFT>;
28
+ getAsset(args: AssetFromNFTItemArg): Promise<NFT>;
23
29
  getUserJettonWalletAddress(userAddress: string, tokenAddress: string): Promise<string>;
24
30
  getUserJettonBalance(userAddress: string, tokenAddress: string): Promise<bigint>;
25
31
  getUserJettonBalanceExtended(userAddress: string, tokenAddress: string): Promise<UserWalletBalanceExtended>;
26
- private getJettonTransferPayload;
27
- private getJettonBurnPayload;
28
- private getNFTBurnPayload;
29
- private getNFTTransferPayload;
30
- private getTonTransferPayload;
31
- private debugLog;
32
- private getJettonOpType;
33
- private getNFTOpType;
34
- private getNFTItemAddressTON;
35
- getNFTItemData(itemAddress: string): Promise<NFTItemData>;
36
- private aggregateTokens;
37
- private generateJettonPayload;
38
- private generateNFTPayload;
39
- private generateCrossChainMessages;
40
- private getRawAmount;
41
- private convertAssetsToRawFormat;
42
- private getFeeInfo;
43
- getTransactionSimulationInfo(evmProxyMsg: EvmProxyMsg, sender: SenderAbstraction, assets?: AssetBridgingData[]): Promise<ExecutionFeeEstimationResult>;
44
- getTVMExecutorFeeInfo(assets: AssetBridgingData[], feeSymbol: string): Promise<SuggestedTONExecutorFee>;
45
- private prepareCrossChainTransaction;
46
- sendCrossChainTransaction(evmProxyMsg: EvmProxyMsg, sender: SenderAbstraction, assets?: AssetBridgingData[], options?: CrossChainTransactionOptions, waitOptions?: WaitOptions<string>): Promise<TransactionLinkerWithOperationId>;
47
- sendCrossChainTransactions(sender: SenderAbstraction, txs: CrosschainTx[], waitOptions?: WaitOptions<OperationIdsByShardsKey>): Promise<TransactionLinkerWithOperationId[]>;
48
- bridgeTokensToTON(signer: Wallet, value: bigint, tonTarget: string, assets?: RawAssetBridgingData<WithAddressNFTCollectionItem>[], tvmExecutorFee?: bigint): Promise<string>;
49
- get getTrustedTACExecutors(): string[];
50
- get getTrustedTONExecutors(): string[];
32
+ getJettonData(itemAddress: TVMAddress): Promise<JettonMasterData>;
33
+ getFT(address: TVMAddress | EVMAddress): Promise<FT>;
34
+ getNFTItemData(itemAddress: TVMAddress): Promise<NFTItemData>;
35
+ getNFT(args: AssetFromNFTCollectionArg | AssetFromNFTItemArg): Promise<NFT>;
51
36
  getEVMTokenAddress(tvmTokenAddress: string): Promise<string>;
52
37
  getTVMTokenAddress(evmTokenAddress: string): Promise<string>;
53
38
  getTVMNFTAddress(evmNFTAddress: string, tokenId?: number | bigint): Promise<string>;
54
39
  getEVMNFTAddress(tvmNFTAddress: string, addressType: NFTAddressType): Promise<string>;
55
- isContractDeployedOnTVM(address: string): Promise<boolean>;
56
- simulateTACMessage(req: TACSimulationRequest): Promise<TACSimulationResult>;
57
40
  }