@tonappchain/sdk 0.7.2-payload-builder-0.3 → 0.7.2-scaled-ui-support-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/artifacts/dev/ton/internal/build/Executor.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/wrappers/JettonMinter.d.ts +4 -0
- package/dist/artifacts/dev/ton/internal/wrappers/JettonMinter.js +7 -0
- 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/NFTItem.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/NFTProxy.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.d.ts +13 -1
- package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.js +45 -7
- package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.d.ts +6 -2
- package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.js +9 -2
- package/dist/artifacts/testnet/ton/internal/build/Executor.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonMinter.d.ts +4 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonMinter.js +7 -0
- package/dist/src/adapters/contractOpener.d.ts +0 -4
- package/dist/src/adapters/contractOpener.js +1 -165
- package/dist/src/adapters/retryableContractOpener.d.ts +1 -5
- package/dist/src/adapters/retryableContractOpener.js +4 -22
- package/dist/src/assets/AssetFactory.js +2 -8
- package/dist/src/assets/FT.d.ts +10 -0
- package/dist/src/assets/FT.js +47 -0
- package/dist/src/assets/TON.d.ts +1 -2
- package/dist/src/assets/TON.js +0 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +4 -1
- package/dist/src/interfaces/Asset.d.ts +1 -2
- package/dist/src/interfaces/ContractOpener.d.ts +1 -5
- package/dist/src/interfaces/ISimulator.d.ts +0 -7
- package/dist/src/interfaces/ITONTransactionManager.d.ts +1 -20
- package/dist/src/interfaces/ITacSDK.d.ts +1 -10
- package/dist/src/interfaces/WalletInstanse.d.ts +8 -4
- package/dist/src/sdk/Consts.d.ts +0 -1
- package/dist/src/sdk/Consts.js +1 -2
- package/dist/src/sdk/Simulator.d.ts +1 -20
- package/dist/src/sdk/Simulator.js +0 -160
- package/dist/src/sdk/StartTracking.d.ts +3 -5
- package/dist/src/sdk/StartTracking.js +40 -60
- package/dist/src/sdk/TONTransactionManager.d.ts +4 -7
- package/dist/src/sdk/TONTransactionManager.js +2 -38
- package/dist/src/sdk/TacSdk.d.ts +1 -2
- package/dist/src/sdk/TacSdk.js +1 -7
- package/dist/src/sdk/TxFinalizer.d.ts +4 -15
- package/dist/src/sdk/TxFinalizer.js +23 -102
- package/dist/src/sdk/Utils.d.ts +6 -6
- package/dist/src/sdk/Utils.js +9 -35
- package/dist/src/sender/BatchSender.js +0 -19
- package/dist/src/sender/RawSender.js +1 -34
- package/dist/src/sender/SenderFactory.js +1 -1
- package/dist/src/sender/TonConnectSender.js +0 -2
- package/dist/src/structs/InternalStruct.d.ts +1 -22
- package/dist/src/structs/Struct.d.ts +2 -20
- package/dist/src/wrappers/HighloadWalletV3.d.ts +3 -5
- package/dist/src/wrappers/HighloadWalletV3.js +3 -14
- package/package.json +3 -2
- package/dist/src/interfaces/ITxFinalizer.d.ts +0 -5
- package/dist/src/interfaces/ITxFinalizer.js +0 -2
|
@@ -2,71 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Simulator = void 0;
|
|
4
4
|
const ton_1 = require("@ton/ton");
|
|
5
|
-
const assets_1 = require("../assets");
|
|
6
|
-
const errors_1 = require("../errors");
|
|
7
|
-
const Struct_1 = require("../structs/Struct");
|
|
8
5
|
const Logger_1 = require("./Logger");
|
|
9
6
|
const Utils_1 = require("./Utils");
|
|
10
7
|
const Validator_1 = require("./Validator");
|
|
11
8
|
class Simulator {
|
|
12
9
|
constructor(config, operationTracker, logger = new Logger_1.NoopLogger()) {
|
|
13
|
-
this.TON_FEE_CONSTANTS = {
|
|
14
|
-
messageSizes: {
|
|
15
|
-
jetton: { bits: 1500, cells: 4 },
|
|
16
|
-
nft: { bits: 1300, cells: 4 },
|
|
17
|
-
ton: { bits: 500, cells: 1 },
|
|
18
|
-
},
|
|
19
|
-
walletSendTokenPrice: 0.006 * 10 ** 9, // 0.006 TON in nanotons
|
|
20
|
-
storageTimeDelta: 1 * 24 * 3600, // 1 day in seconds
|
|
21
|
-
messageOverhead: { bits: 847, cells: 3 },
|
|
22
|
-
};
|
|
23
|
-
this.TRANSACTION_STEPS = {
|
|
24
|
-
crossChainLayer: {
|
|
25
|
-
accountBits: 34534,
|
|
26
|
-
accountCells: 85,
|
|
27
|
-
gasUsed: 13636,
|
|
28
|
-
},
|
|
29
|
-
jettonWallet: {
|
|
30
|
-
accountBits: 949,
|
|
31
|
-
accountCells: 3,
|
|
32
|
-
gasUsed: 11000,
|
|
33
|
-
},
|
|
34
|
-
jettonWalletTransfer: {
|
|
35
|
-
accountBits: 949,
|
|
36
|
-
accountCells: 3,
|
|
37
|
-
gasUsed: 12000,
|
|
38
|
-
},
|
|
39
|
-
jettonWalletBurn: {
|
|
40
|
-
accountBits: 949,
|
|
41
|
-
accountCells: 3,
|
|
42
|
-
gasUsed: 8653,
|
|
43
|
-
},
|
|
44
|
-
jettonProxy: {
|
|
45
|
-
accountBits: 7760,
|
|
46
|
-
accountCells: 16,
|
|
47
|
-
gasUsed: 8515,
|
|
48
|
-
},
|
|
49
|
-
jettonMinter: {
|
|
50
|
-
accountBits: 10208,
|
|
51
|
-
accountCells: 28,
|
|
52
|
-
gasUsed: 10357,
|
|
53
|
-
},
|
|
54
|
-
nftItem: {
|
|
55
|
-
accountBits: 1422,
|
|
56
|
-
accountCells: 5,
|
|
57
|
-
gasUsed: 11722,
|
|
58
|
-
},
|
|
59
|
-
nftItemBurn: {
|
|
60
|
-
accountBits: 1422,
|
|
61
|
-
accountCells: 5,
|
|
62
|
-
gasUsed: 11552,
|
|
63
|
-
},
|
|
64
|
-
nftProxy: {
|
|
65
|
-
accountBits: 7512,
|
|
66
|
-
accountCells: 15,
|
|
67
|
-
gasUsed: 7688,
|
|
68
|
-
},
|
|
69
|
-
};
|
|
70
10
|
this.config = config;
|
|
71
11
|
this.operationTracker = operationTracker;
|
|
72
12
|
this.logger = logger;
|
|
@@ -126,105 +66,5 @@ class Simulator {
|
|
|
126
66
|
}
|
|
127
67
|
return { feeParams, simulation };
|
|
128
68
|
}
|
|
129
|
-
calculateTONFees({
|
|
130
|
-
// Contract usage
|
|
131
|
-
accountBits, accountCells, timeDelta,
|
|
132
|
-
// Message size
|
|
133
|
-
msgBits, msgCells,
|
|
134
|
-
// Gas and computation
|
|
135
|
-
gasUsed,
|
|
136
|
-
// Config values (defaults for BaseChain)
|
|
137
|
-
bitPricePs = 1, cellPricePs = 500, lumpPrice = 400000, gasPrice = 400, firstFrac = 21845, ihrPriceFactor = 0, }) {
|
|
138
|
-
// Storage Fee (nanotons)
|
|
139
|
-
const storageFee = Math.ceil(((accountBits * bitPricePs + accountCells * cellPricePs) * timeDelta) / 2 ** 16);
|
|
140
|
-
// Computation Fee (nanotons)
|
|
141
|
-
const computeFee = gasUsed * gasPrice;
|
|
142
|
-
// Forwarding Fee (nanotons)
|
|
143
|
-
const msgFwdFees = lumpPrice + Math.ceil((bitPricePs * msgBits + cellPricePs * msgCells) / 2 ** 16);
|
|
144
|
-
const ihrFwdFees = Math.ceil((msgFwdFees * ihrPriceFactor) / 2 ** 16);
|
|
145
|
-
const totalFwdFees = msgFwdFees + ihrFwdFees;
|
|
146
|
-
// Action Fee (nanotons)
|
|
147
|
-
const actionFee = Math.floor((msgFwdFees * firstFrac) / 2 ** 16);
|
|
148
|
-
// Combine all fees
|
|
149
|
-
const totalFees = storageFee + computeFee + actionFee + totalFwdFees;
|
|
150
|
-
return totalFees;
|
|
151
|
-
}
|
|
152
|
-
calculateStepFee(step, messageSize) {
|
|
153
|
-
return this.calculateTONFees({
|
|
154
|
-
...step,
|
|
155
|
-
timeDelta: this.TON_FEE_CONSTANTS.storageTimeDelta,
|
|
156
|
-
msgBits: messageSize.bits,
|
|
157
|
-
msgCells: messageSize.cells,
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
calculateTransactionPipeline(steps) {
|
|
161
|
-
return steps.reduce((total, { step, messageSize }) => total + this.calculateStepFee(step, messageSize), this.TON_FEE_CONSTANTS.walletSendTokenPrice);
|
|
162
|
-
}
|
|
163
|
-
estimateTONFees(assets) {
|
|
164
|
-
const { messageSizes, messageOverhead } = this.TON_FEE_CONSTANTS;
|
|
165
|
-
return assets.reduce((totalFees, asset) => {
|
|
166
|
-
const assetFee = (() => {
|
|
167
|
-
switch (asset.type) {
|
|
168
|
-
case Struct_1.AssetType.FT:
|
|
169
|
-
if (asset instanceof assets_1.TON) {
|
|
170
|
-
// Pipeline: wallet -> ccl -> log
|
|
171
|
-
return this.calculateTransactionPipeline([
|
|
172
|
-
{ step: this.TRANSACTION_STEPS.crossChainLayer, messageSize: messageSizes.ton },
|
|
173
|
-
]);
|
|
174
|
-
}
|
|
175
|
-
if (asset.origin === Struct_1.Origin.TON) {
|
|
176
|
-
// Pipeline: wallet -> jetton wallet -> jetton wallet -> jetton proxy -> ccl -> log
|
|
177
|
-
return this.calculateTransactionPipeline([
|
|
178
|
-
{
|
|
179
|
-
step: this.TRANSACTION_STEPS.jettonWallet,
|
|
180
|
-
messageSize: {
|
|
181
|
-
bits: messageSizes.jetton.bits + messageOverhead.bits,
|
|
182
|
-
cells: messageSizes.jetton.cells + messageOverhead.cells,
|
|
183
|
-
},
|
|
184
|
-
},
|
|
185
|
-
{ step: this.TRANSACTION_STEPS.jettonWalletTransfer, messageSize: messageSizes.jetton },
|
|
186
|
-
{ step: this.TRANSACTION_STEPS.jettonProxy, messageSize: messageSizes.jetton },
|
|
187
|
-
{ step: this.TRANSACTION_STEPS.crossChainLayer, messageSize: messageSizes.jetton },
|
|
188
|
-
]);
|
|
189
|
-
}
|
|
190
|
-
if (asset.origin === Struct_1.Origin.TAC) {
|
|
191
|
-
// Pipeline: wallet -> jetton wallet -> jetton minter -> ccl -> log
|
|
192
|
-
return this.calculateTransactionPipeline([
|
|
193
|
-
{
|
|
194
|
-
step: this.TRANSACTION_STEPS.jettonWalletBurn,
|
|
195
|
-
messageSize: {
|
|
196
|
-
bits: messageSizes.jetton.bits + messageOverhead.bits,
|
|
197
|
-
cells: messageSizes.jetton.cells + messageOverhead.cells,
|
|
198
|
-
},
|
|
199
|
-
},
|
|
200
|
-
{ step: this.TRANSACTION_STEPS.jettonMinter, messageSize: messageSizes.jetton },
|
|
201
|
-
{ step: this.TRANSACTION_STEPS.crossChainLayer, messageSize: messageSizes.jetton },
|
|
202
|
-
]);
|
|
203
|
-
}
|
|
204
|
-
return 0;
|
|
205
|
-
case Struct_1.AssetType.NFT:
|
|
206
|
-
if (asset.origin === Struct_1.Origin.TON) {
|
|
207
|
-
// Pipeline: wallet -> nft item -> nft proxy -> ccl -> log
|
|
208
|
-
return this.calculateTransactionPipeline([
|
|
209
|
-
{ step: this.TRANSACTION_STEPS.nftItem, messageSize: messageSizes.nft },
|
|
210
|
-
{ step: this.TRANSACTION_STEPS.nftProxy, messageSize: messageSizes.nft },
|
|
211
|
-
{ step: this.TRANSACTION_STEPS.crossChainLayer, messageSize: messageSizes.nft },
|
|
212
|
-
]);
|
|
213
|
-
}
|
|
214
|
-
if (asset.origin === Struct_1.Origin.TAC) {
|
|
215
|
-
// Pipeline: wallet -> nft item -> ccl -> log
|
|
216
|
-
return this.calculateTransactionPipeline([
|
|
217
|
-
{ step: this.TRANSACTION_STEPS.nftItemBurn, messageSize: messageSizes.nft },
|
|
218
|
-
{ step: this.TRANSACTION_STEPS.crossChainLayer, messageSize: messageSizes.nft },
|
|
219
|
-
]);
|
|
220
|
-
}
|
|
221
|
-
return 0;
|
|
222
|
-
default:
|
|
223
|
-
throw (0, errors_1.unknownTokenTypeError)(asset.type);
|
|
224
|
-
}
|
|
225
|
-
})();
|
|
226
|
-
return totalFees + assetFee;
|
|
227
|
-
}, 0);
|
|
228
|
-
}
|
|
229
69
|
}
|
|
230
70
|
exports.Simulator = Simulator;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ILogger } from '../interfaces';
|
|
2
|
-
import {
|
|
2
|
+
import { TxFinalizerConfig } from '../structs/InternalStruct';
|
|
3
3
|
import { ExecutionStages, Network, TransactionLinker } from '../structs/Struct';
|
|
4
4
|
export declare function startTracking(transactionLinker: TransactionLinker, network: Network, options?: {
|
|
5
5
|
customLiteSequencerEndpoints?: string[];
|
|
@@ -7,9 +7,8 @@ export declare function startTracking(transactionLinker: TransactionLinker, netw
|
|
|
7
7
|
maxIterationCount?: number;
|
|
8
8
|
returnValue?: boolean;
|
|
9
9
|
tableView?: boolean;
|
|
10
|
+
txFinalizerConfig?: TxFinalizerConfig;
|
|
10
11
|
logger?: ILogger;
|
|
11
|
-
txFinalizer?: ITxFinalizer;
|
|
12
|
-
cclAddress?: string;
|
|
13
12
|
}): Promise<void | ExecutionStages>;
|
|
14
13
|
export declare function startTrackingMultiple(transactionLinkers: TransactionLinker[], network: Network, options?: {
|
|
15
14
|
customLiteSequencerEndpoints?: string[];
|
|
@@ -17,7 +16,6 @@ export declare function startTrackingMultiple(transactionLinkers: TransactionLin
|
|
|
17
16
|
maxIterationCount?: number;
|
|
18
17
|
returnValue?: boolean;
|
|
19
18
|
tableView?: boolean;
|
|
19
|
+
txFinalizerConfig?: TxFinalizerConfig;
|
|
20
20
|
logger?: ILogger;
|
|
21
|
-
txFinalizer?: ITxFinalizer;
|
|
22
21
|
}): Promise<void | ExecutionStages[]>;
|
|
23
|
-
export declare function printExecutionStagesTable(stages: ExecutionStages, logger: ILogger): void;
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.startTracking = startTracking;
|
|
4
7
|
exports.startTrackingMultiple = startTrackingMultiple;
|
|
5
|
-
|
|
8
|
+
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
6
9
|
const Struct_1 = require("../structs/Struct");
|
|
7
10
|
const Consts_1 = require("./Consts");
|
|
8
11
|
const Logger_1 = require("./Logger");
|
|
9
12
|
const OperationTracker_1 = require("./OperationTracker");
|
|
13
|
+
const TxFinalizer_1 = require("./TxFinalizer");
|
|
10
14
|
const Utils_1 = require("./Utils");
|
|
11
15
|
async function startTracking(transactionLinker, network, options) {
|
|
12
|
-
const { customLiteSequencerEndpoints, delay = 10, maxIterationCount = Consts_1.MAX_ITERATION_COUNT, returnValue = false, tableView = true, logger = new Logger_1.NoopLogger(),
|
|
16
|
+
const { customLiteSequencerEndpoints, delay = 10, maxIterationCount = Consts_1.MAX_ITERATION_COUNT, returnValue = false, tableView = true, txFinalizerConfig, logger = new Logger_1.NoopLogger(), } = options || {};
|
|
13
17
|
const tracker = new OperationTracker_1.OperationTracker(network, customLiteSequencerEndpoints, logger);
|
|
14
18
|
logger.debug('Start tracking operation');
|
|
15
19
|
logger.debug('caller: ' + transactionLinker.caller);
|
|
@@ -66,12 +70,13 @@ async function startTracking(transactionLinker, network, options) {
|
|
|
66
70
|
// Check if EXECUTED_IN_TON stage exists and use TxFinalizer to verify transaction success
|
|
67
71
|
if (profilingData.executedInTON.exists && profilingData.executedInTON.stageData?.transactions) {
|
|
68
72
|
logger.debug('EXECUTED_IN_TON stage found, verifying transaction success in TON...');
|
|
69
|
-
if (
|
|
73
|
+
if (txFinalizerConfig) {
|
|
74
|
+
const txFinalizer = new TxFinalizer_1.TonTxFinalizer(txFinalizerConfig, logger);
|
|
70
75
|
const transactions = profilingData.executedInTON.stageData.transactions;
|
|
71
76
|
for (const tx of transactions) {
|
|
72
77
|
try {
|
|
73
78
|
logger.debug(`Verifying transaction: ${tx.hash}`);
|
|
74
|
-
await txFinalizer.trackTransactionTree(
|
|
79
|
+
await txFinalizer.trackTransactionTree(tx.hash);
|
|
75
80
|
logger.debug(`Transaction ${tx.hash} verified successfully in TON`);
|
|
76
81
|
}
|
|
77
82
|
catch (error) {
|
|
@@ -99,7 +104,7 @@ async function startTracking(transactionLinker, network, options) {
|
|
|
99
104
|
}
|
|
100
105
|
}
|
|
101
106
|
async function startTrackingMultiple(transactionLinkers, network, options) {
|
|
102
|
-
const { customLiteSequencerEndpoints, delay = 10, maxIterationCount = Consts_1.MAX_ITERATION_COUNT, returnValue = false, tableView = true,
|
|
107
|
+
const { customLiteSequencerEndpoints, delay = 10, maxIterationCount = Consts_1.MAX_ITERATION_COUNT, returnValue = false, tableView = true, txFinalizerConfig, logger = new Logger_1.NoopLogger(), } = options || {};
|
|
103
108
|
logger.debug(`Start tracking ${transactionLinkers.length} operations`);
|
|
104
109
|
const results = await Promise.all(transactionLinkers.map((linker, index) => {
|
|
105
110
|
logger.debug(`\nProcessing operation ${index + 1}/${transactionLinkers.length}`);
|
|
@@ -109,7 +114,7 @@ async function startTrackingMultiple(transactionLinkers, network, options) {
|
|
|
109
114
|
maxIterationCount,
|
|
110
115
|
returnValue: true,
|
|
111
116
|
tableView: false,
|
|
112
|
-
|
|
117
|
+
txFinalizerConfig,
|
|
113
118
|
logger,
|
|
114
119
|
});
|
|
115
120
|
}));
|
|
@@ -155,60 +160,35 @@ function formatExecutionStages(stages) {
|
|
|
155
160
|
bytesError: data.exists && data.stageData && data.stageData.note != null ? data.stageData.note.internalBytesError : '-',
|
|
156
161
|
}));
|
|
157
162
|
}
|
|
158
|
-
/**
|
|
159
|
-
* Simple table formatter that works in both browser and Node.js without external dependencies
|
|
160
|
-
*/
|
|
161
|
-
function createSimpleTable(headers, rows, colWidths) {
|
|
162
|
-
const lines = [];
|
|
163
|
-
// Helper to truncate and pad text to fit column width
|
|
164
|
-
const fitToWidth = (text, width) => {
|
|
165
|
-
// Handle multi-line text by taking only the first line for table cell
|
|
166
|
-
const firstLine = text.split('\n')[0];
|
|
167
|
-
if (firstLine.length > width - 2) {
|
|
168
|
-
return firstLine.substring(0, width - 5) + '...';
|
|
169
|
-
}
|
|
170
|
-
return firstLine.padEnd(width, ' ');
|
|
171
|
-
};
|
|
172
|
-
// Create separator line
|
|
173
|
-
const separator = '+' + colWidths.map((w) => '-'.repeat(w)).join('+') + '+';
|
|
174
|
-
// Create header row
|
|
175
|
-
const headerRow = '|' + headers.map((h, i) => fitToWidth(h, colWidths[i])).join('|') + '|';
|
|
176
|
-
lines.push(separator);
|
|
177
|
-
lines.push(headerRow);
|
|
178
|
-
lines.push(separator);
|
|
179
|
-
// Create data rows
|
|
180
|
-
rows.forEach((row) => {
|
|
181
|
-
const dataRow = '|' + row.map((cell, i) => fitToWidth(cell, colWidths[i])).join('|') + '|';
|
|
182
|
-
lines.push(dataRow);
|
|
183
|
-
});
|
|
184
|
-
lines.push(separator);
|
|
185
|
-
return lines.join('\n');
|
|
186
|
-
}
|
|
187
163
|
function printExecutionStagesTable(stages, logger) {
|
|
188
|
-
const
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
164
|
+
const table = new cli_table3_1.default({
|
|
165
|
+
head: [
|
|
166
|
+
'Stage',
|
|
167
|
+
'Exists',
|
|
168
|
+
'Success',
|
|
169
|
+
'Timestamp',
|
|
170
|
+
'Transactions',
|
|
171
|
+
'NoteContent',
|
|
172
|
+
'ErrorName',
|
|
173
|
+
'InternalMsg',
|
|
174
|
+
'BytesError',
|
|
175
|
+
],
|
|
176
|
+
colWidths: [30, 8, 9, 13, 70, 13, 13, 13, 13],
|
|
177
|
+
wordWrap: true,
|
|
178
|
+
});
|
|
200
179
|
const tableData = formatExecutionStages(stages);
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
180
|
+
tableData.forEach((row) => {
|
|
181
|
+
table.push([
|
|
182
|
+
row.stage,
|
|
183
|
+
row.exists,
|
|
184
|
+
row.success,
|
|
185
|
+
row.timestamp,
|
|
186
|
+
row.transactions,
|
|
187
|
+
row.noteContent,
|
|
188
|
+
row.errorName,
|
|
189
|
+
row.internalMsg,
|
|
190
|
+
row.bytesError,
|
|
191
|
+
]);
|
|
192
|
+
});
|
|
193
|
+
logger.debug(table.toString());
|
|
214
194
|
}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ITxFinalizer } from '../interfaces/ITxFinalizer';
|
|
1
|
+
import { IConfiguration, ILogger, IOperationTracker, ISimulator, ITONTransactionManager } from '../interfaces';
|
|
3
2
|
import type { SenderAbstraction } from '../sender';
|
|
4
|
-
import { BatchCrossChainTx,
|
|
3
|
+
import { BatchCrossChainTx, CrossChainTransactionOptions, CrossChainTransactionsOptions, CrosschainTx, EvmProxyMsg, FeeParams, TransactionLinkerWithOperationId } from '../structs/Struct';
|
|
5
4
|
export declare class TONTransactionManager implements ITONTransactionManager {
|
|
6
5
|
private readonly config;
|
|
7
6
|
private readonly simulator;
|
|
8
7
|
private readonly operationTracker;
|
|
9
8
|
private readonly logger;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
buildFeeParams(options: CrossChainTransactionOptions, evmProxyMsg: EvmProxyMsg, sender: SenderAbstraction, tx: CrosschainTx): Promise<FeeParams>;
|
|
9
|
+
constructor(config: IConfiguration, simulator: ISimulator, operationTracker: IOperationTracker, logger?: ILogger);
|
|
10
|
+
protected buildFeeParams(options: CrossChainTransactionOptions, evmProxyMsg: EvmProxyMsg, sender: SenderAbstraction, tx: CrosschainTx): Promise<FeeParams>;
|
|
13
11
|
private prepareCrossChainTransaction;
|
|
14
12
|
private generateCrossChainMessages;
|
|
15
13
|
sendCrossChainTransaction(evmProxyMsg: EvmProxyMsg, sender: SenderAbstraction, tx: CrosschainTx): Promise<TransactionLinkerWithOperationId>;
|
|
16
14
|
sendCrossChainTransactions(sender: SenderAbstraction, txs: BatchCrossChainTx[], options?: CrossChainTransactionsOptions): Promise<TransactionLinkerWithOperationId[]>;
|
|
17
15
|
private prepareBatchTransactions;
|
|
18
16
|
private waitForOperationIds;
|
|
19
|
-
prepareCrossChainTransactionPayload(evmProxyMsg: EvmProxyMsg, senderAddress: string, assets?: Asset[], options?: CrossChainTransactionOptions): Promise<CrossChainPayloadResult[]>;
|
|
20
17
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TONTransactionManager = void 0;
|
|
4
|
-
const ton_1 = require("@ton/ton");
|
|
5
4
|
const assets_1 = require("../assets");
|
|
6
5
|
const errors_1 = require("../errors");
|
|
7
6
|
const instances_1 = require("../errors/instances");
|
|
@@ -10,12 +9,11 @@ const Logger_1 = require("./Logger");
|
|
|
10
9
|
const Utils_1 = require("./Utils");
|
|
11
10
|
const Validator_1 = require("./Validator");
|
|
12
11
|
class TONTransactionManager {
|
|
13
|
-
constructor(config, simulator, operationTracker, logger = new Logger_1.NoopLogger()
|
|
12
|
+
constructor(config, simulator, operationTracker, logger = new Logger_1.NoopLogger()) {
|
|
14
13
|
this.config = config;
|
|
15
14
|
this.simulator = simulator;
|
|
16
15
|
this.operationTracker = operationTracker;
|
|
17
16
|
this.logger = logger;
|
|
18
|
-
this.txFinalizer = txFinalizer;
|
|
19
17
|
}
|
|
20
18
|
async buildFeeParams(options, evmProxyMsg, sender, tx) {
|
|
21
19
|
const { withoutSimulation, protocolFee, evmExecutorFee, tvmExecutorFee, isRoundTrip } = options;
|
|
@@ -113,9 +111,6 @@ class TONTransactionManager {
|
|
|
113
111
|
address: this.config.TONParams.crossChainLayerAddress,
|
|
114
112
|
value: crossChainTonAmount + feeTonAmount + Consts_1.TRANSACTION_TON_AMOUNT,
|
|
115
113
|
payload: await ton.generatePayload({ excessReceiver: caller, evmData, feeParams }),
|
|
116
|
-
extra: {
|
|
117
|
-
networkFeeIncluded: Consts_1.TRANSACTION_TON_AMOUNT,
|
|
118
|
-
},
|
|
119
114
|
},
|
|
120
115
|
];
|
|
121
116
|
}
|
|
@@ -134,9 +129,6 @@ class TONTransactionManager {
|
|
|
134
129
|
address,
|
|
135
130
|
value: crossChainTonAmount + feeTonAmount + Consts_1.TRANSACTION_TON_AMOUNT,
|
|
136
131
|
payload,
|
|
137
|
-
extra: {
|
|
138
|
-
networkFeeIncluded: Consts_1.TRANSACTION_TON_AMOUNT,
|
|
139
|
-
},
|
|
140
132
|
});
|
|
141
133
|
crossChainTonAmount = 0n;
|
|
142
134
|
feeTonAmount = 0n;
|
|
@@ -157,17 +149,7 @@ class TONTransactionManager {
|
|
|
157
149
|
if (!shouldWaitForOperationId) {
|
|
158
150
|
return { sendTransactionResult, ...transactionLinker };
|
|
159
151
|
}
|
|
160
|
-
const waitOptions = tx.options?.waitOptions ?? {
|
|
161
|
-
ensureTxExecuted: true,
|
|
162
|
-
};
|
|
163
|
-
if (waitOptions.ensureTxExecuted && sendTransactionResult.boc) {
|
|
164
|
-
const hash = (0, Utils_1.getNormalizedExtMessageHash)((0, ton_1.loadMessage)(ton_1.Cell.fromBase64(sendTransactionResult.boc).beginParse()));
|
|
165
|
-
this.logger.info(`Tracking transaction tree for hash: ${hash}`);
|
|
166
|
-
await this.txFinalizer.trackTransactionTree(sender.getSenderAddress(), hash, {
|
|
167
|
-
maxDepth: 10,
|
|
168
|
-
});
|
|
169
|
-
this.logger.info(`Transaction tree successful`);
|
|
170
|
-
}
|
|
152
|
+
const waitOptions = tx.options?.waitOptions ?? {};
|
|
171
153
|
waitOptions.successCheck = waitOptions.successCheck ?? ((id) => !!id);
|
|
172
154
|
waitOptions.logger = waitOptions.logger ?? this.logger;
|
|
173
155
|
const operationId = await this.operationTracker
|
|
@@ -234,23 +216,5 @@ class TONTransactionManager {
|
|
|
234
216
|
return transactionLinkers;
|
|
235
217
|
}
|
|
236
218
|
}
|
|
237
|
-
async prepareCrossChainTransactionPayload(evmProxyMsg, senderAddress, assets = [], options) {
|
|
238
|
-
this.logger.debug('Preparing cross-chain transaction payload');
|
|
239
|
-
const mockSender = {
|
|
240
|
-
getSenderAddress: () => senderAddress,
|
|
241
|
-
sendShardTransaction: async () => ({ success: true, boc: '' }),
|
|
242
|
-
sendShardTransactions: async () => [],
|
|
243
|
-
getBalance: async () => 0n,
|
|
244
|
-
getBalanceOf: async () => 0n,
|
|
245
|
-
};
|
|
246
|
-
const result = await this.prepareCrossChainTransaction(evmProxyMsg, mockSender, assets, options, true);
|
|
247
|
-
return result.transaction.messages.map((r) => ({
|
|
248
|
-
body: r.payload,
|
|
249
|
-
destinationAddress: r.address,
|
|
250
|
-
tonAmount: r.value,
|
|
251
|
-
networkFee: r.extra.networkFeeIncluded,
|
|
252
|
-
transactionLinker: result.transactionLinker,
|
|
253
|
-
}));
|
|
254
|
-
}
|
|
255
219
|
}
|
|
256
220
|
exports.TONTransactionManager = TONTransactionManager;
|
package/dist/src/sdk/TacSdk.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { JettonMinterData, NFTItemData } from '../../artifacts/tonTypes';
|
|
|
3
3
|
import { FT, NFT } from '../assets';
|
|
4
4
|
import { IConfiguration, ILogger, IOperationTracker, ITacSDK } from '../interfaces';
|
|
5
5
|
import type { SenderAbstraction } from '../sender';
|
|
6
|
-
import { AssetFromFTArg, AssetFromNFTCollectionArg, AssetFromNFTItemArg, AssetLike, BatchCrossChainTxWithAssetLike,
|
|
6
|
+
import { AssetFromFTArg, AssetFromNFTCollectionArg, AssetFromNFTItemArg, AssetLike, BatchCrossChainTxWithAssetLike, CrossChainTransactionOptions, CrossChainTransactionsOptions, CrosschainTx, EVMAddress, EvmProxyMsg, ExecutionFeeEstimationResult, NFTAddressType, SDKParams, SuggestedTVMExecutorFee, TACSimulationParams, TACSimulationResult, TransactionLinkerWithOperationId, TVMAddress, UserWalletBalanceExtended } from '../structs/Struct';
|
|
7
7
|
export declare class TacSdk implements ITacSDK {
|
|
8
8
|
readonly config: IConfiguration;
|
|
9
9
|
readonly operationTracker: IOperationTracker;
|
|
@@ -41,5 +41,4 @@ export declare class TacSdk implements ITacSDK {
|
|
|
41
41
|
getTVMNFTAddress(evmNFTAddress: string, tokenId?: number | bigint): Promise<string>;
|
|
42
42
|
getEVMNFTAddress(tvmNFTAddress: string, addressType: NFTAddressType): Promise<string>;
|
|
43
43
|
getOperationTracker(): IOperationTracker;
|
|
44
|
-
prepareCrossChainTransactionPayload(evmProxyMsg: EvmProxyMsg, senderAddress: string, assets?: AssetLike[], options?: CrossChainTransactionOptions): Promise<CrossChainPayloadResult[]>;
|
|
45
44
|
}
|
package/dist/src/sdk/TacSdk.js
CHANGED
|
@@ -11,7 +11,6 @@ const OperationTracker_1 = require("./OperationTracker");
|
|
|
11
11
|
const Simulator_1 = require("./Simulator");
|
|
12
12
|
const TACTransactionManager_1 = require("./TACTransactionManager");
|
|
13
13
|
const TONTransactionManager_1 = require("./TONTransactionManager");
|
|
14
|
-
const TxFinalizer_1 = require("./TxFinalizer");
|
|
15
14
|
const Utils_1 = require("./Utils");
|
|
16
15
|
class TacSdk {
|
|
17
16
|
constructor(config, simulator, tonTransactionManager, tacTransactionManager, operationTracker) {
|
|
@@ -41,8 +40,7 @@ class TacSdk {
|
|
|
41
40
|
const config = await Configuration_1.Configuration.create(network, artifacts, sdkParams.TONParams, sdkParams.TACParams, sdkParams.customLiteSequencerEndpoints, delay);
|
|
42
41
|
const operationTracker = new OperationTracker_1.OperationTracker(network, config.liteSequencerEndpoints);
|
|
43
42
|
const simulator = new Simulator_1.Simulator(config, operationTracker, logger);
|
|
44
|
-
const
|
|
45
|
-
const tonTransactionManager = new TONTransactionManager_1.TONTransactionManager(config, simulator, operationTracker, logger, txFinalizer);
|
|
43
|
+
const tonTransactionManager = new TONTransactionManager_1.TONTransactionManager(config, simulator, operationTracker, logger);
|
|
46
44
|
const tacTransactionManager = new TACTransactionManager_1.TACTransactionManager(config, operationTracker, logger);
|
|
47
45
|
return new TacSdk(config, simulator, tonTransactionManager, tacTransactionManager, operationTracker);
|
|
48
46
|
}
|
|
@@ -179,9 +177,5 @@ class TacSdk {
|
|
|
179
177
|
getOperationTracker() {
|
|
180
178
|
return this.operationTracker;
|
|
181
179
|
}
|
|
182
|
-
async prepareCrossChainTransactionPayload(evmProxyMsg, senderAddress, assets = [], options) {
|
|
183
|
-
const normalizedAssets = await (0, Utils_1.normalizeAssets)(this.config, assets);
|
|
184
|
-
return this.tonTransactionManager.prepareCrossChainTransactionPayload(evmProxyMsg, senderAddress, normalizedAssets, options);
|
|
185
|
-
}
|
|
186
180
|
}
|
|
187
181
|
exports.TacSdk = TacSdk;
|
|
@@ -1,22 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ITxFinalizer } from '../interfaces/ITxFinalizer';
|
|
1
|
+
import { IHttpClient, ILogger } from '../interfaces';
|
|
3
2
|
import { TxFinalizerConfig } from '../structs/InternalStruct';
|
|
4
|
-
export declare class TonTxFinalizer
|
|
5
|
-
private logger;
|
|
6
|
-
private contractOpener;
|
|
7
|
-
constructor(contractOpener: ContractOpener, logger?: ILogger);
|
|
8
|
-
private fetchAdjacentTransactions;
|
|
9
|
-
trackTransactionTree(address: string, hash: string, params: {
|
|
10
|
-
maxDepth?: number;
|
|
11
|
-
}): Promise<void>;
|
|
12
|
-
}
|
|
13
|
-
export declare class TonTxFinalizerV3 implements ITxFinalizer {
|
|
3
|
+
export declare class TonTxFinalizer {
|
|
14
4
|
private logger;
|
|
15
5
|
private apiConfig;
|
|
16
6
|
private readonly httpClient;
|
|
17
7
|
constructor(apiConfig: TxFinalizerConfig, logger?: ILogger, httpClient?: IHttpClient);
|
|
8
|
+
private logHashFormats;
|
|
18
9
|
private fetchAdjacentTransactions;
|
|
19
|
-
trackTransactionTree(
|
|
20
|
-
maxDepth?: number;
|
|
21
|
-
}): Promise<void>;
|
|
10
|
+
trackTransactionTree(hash: string, maxDepth?: number): Promise<void>;
|
|
22
11
|
}
|