@tonappchain/sdk 0.7.2-scaled-ui-support-2 → 0.7.2
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/LICENSE +20 -20
- package/README.md +198 -198
- package/dist/artifacts/dev/index.d.ts +2 -2
- package/dist/artifacts/dev/index.js +2 -1
- package/dist/artifacts/dev/tac/endpoints.d.ts +1 -0
- package/dist/artifacts/dev/tac/endpoints.js +2 -1
- package/dist/artifacts/dev/ton/internal/build/CrossChainLayer.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/build/Executor.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/build/JettonProxy.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/build/JettonWallet.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/build/NFTItem.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/build/NFTProxy.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/build/Settings.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/wrappers/CrossChainLayer.d.ts +53 -6
- package/dist/artifacts/dev/ton/internal/wrappers/CrossChainLayer.js +130 -17
- package/dist/artifacts/dev/ton/internal/wrappers/JettonMinter.d.ts +2 -0
- package/dist/artifacts/dev/ton/internal/wrappers/JettonMinter.js +3 -1
- package/dist/artifacts/dev/ton/internal/wrappers/JettonProxy.d.ts +9 -0
- package/dist/artifacts/dev/ton/internal/wrappers/JettonProxy.js +10 -1
- package/dist/artifacts/dev/ton/internal/wrappers/JettonWallet.d.ts +7 -0
- package/dist/artifacts/dev/ton/internal/wrappers/JettonWallet.js +9 -2
- package/dist/artifacts/dev/ton/internal/wrappers/NFTCollection.d.ts +9 -0
- package/dist/artifacts/dev/ton/internal/wrappers/NFTCollection.js +9 -0
- package/dist/artifacts/dev/ton/internal/wrappers/NFTItem.d.ts +7 -0
- package/dist/artifacts/dev/ton/internal/wrappers/NFTItem.js +7 -0
- package/dist/artifacts/dev/ton/internal/wrappers/NFTProxy.d.ts +7 -0
- package/dist/artifacts/dev/ton/internal/wrappers/NFTProxy.js +8 -1
- package/dist/artifacts/dev/ton/internal/wrappers/Settings.d.ts +1 -0
- package/dist/artifacts/dev/ton/internal/wrappers/Settings.js +1 -0
- package/dist/artifacts/dev/ton/internal/wrappers/utils/CrossChainLayerPayload.d.ts +10 -0
- package/dist/artifacts/dev/ton/internal/wrappers/utils/CrossChainLayerPayload.js +24 -0
- package/dist/artifacts/dev/ton/internal/wrappers/utils/MerkleRoots.d.ts +2 -1
- package/dist/artifacts/dev/ton/internal/wrappers/utils/MerkleRoots.js +9 -1
- package/dist/artifacts/mainnet/index.d.ts +2 -2
- package/dist/artifacts/mainnet/index.js +2 -1
- package/dist/artifacts/mainnet/tac/endpoints.d.ts +1 -0
- package/dist/artifacts/mainnet/tac/endpoints.js +2 -1
- package/dist/artifacts/mainnet/ton/endpoints.d.ts +1 -1
- package/dist/artifacts/mainnet/ton/endpoints.js +1 -1
- 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 +1 -13
- package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.js +7 -45
- package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.d.ts +2 -2
- package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.js +2 -2
- package/dist/artifacts/testnet/index.d.ts +2 -2
- package/dist/artifacts/testnet/index.js +2 -1
- package/dist/artifacts/testnet/tac/endpoints.d.ts +1 -0
- package/dist/artifacts/testnet/tac/endpoints.js +2 -1
- package/dist/artifacts/testnet/ton/endpoints.d.ts +1 -1
- package/dist/artifacts/testnet/ton/endpoints.js +1 -1
- package/dist/artifacts/testnet/ton/internal/build/CrossChainLayer.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/build/Executor.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/build/JettonProxy.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/build/JettonWallet.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/build/NFTItem.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/build/NFTProxy.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/build/Settings.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/wrappers/CrossChainLayer.d.ts +53 -6
- package/dist/artifacts/testnet/ton/internal/wrappers/CrossChainLayer.js +130 -17
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonMinter.d.ts +2 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonMinter.js +3 -1
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonProxy.d.ts +9 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonProxy.js +10 -1
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonWallet.d.ts +7 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonWallet.js +9 -2
- package/dist/artifacts/testnet/ton/internal/wrappers/NFTCollection.d.ts +9 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/NFTCollection.js +9 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/NFTItem.d.ts +7 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/NFTItem.js +7 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/NFTProxy.d.ts +7 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/NFTProxy.js +8 -1
- package/dist/artifacts/testnet/ton/internal/wrappers/Settings.d.ts +1 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/Settings.js +1 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/utils/CrossChainLayerPayload.d.ts +10 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/utils/CrossChainLayerPayload.js +24 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/utils/MerkleRoots.d.ts +2 -1
- package/dist/artifacts/testnet/ton/internal/wrappers/utils/MerkleRoots.js +9 -1
- package/dist/src/adapters/BaseContractOpener.d.ts +76 -0
- package/dist/src/adapters/BaseContractOpener.js +440 -0
- package/dist/src/adapters/LiteClientOpener.d.ts +38 -0
- package/dist/src/adapters/LiteClientOpener.js +141 -0
- package/dist/src/adapters/OpenerUtils.d.ts +3 -0
- package/dist/src/adapters/OpenerUtils.js +40 -0
- package/dist/src/adapters/RetryableContractOpener.d.ts +40 -0
- package/dist/src/adapters/RetryableContractOpener.js +290 -0
- package/dist/src/adapters/SandboxOpener.d.ts +15 -0
- package/dist/src/adapters/SandboxOpener.js +35 -0
- package/dist/src/adapters/TonClient4Opener.d.ts +24 -0
- package/dist/src/adapters/TonClient4Opener.js +95 -0
- package/dist/src/adapters/TonClientOpener.d.ts +19 -0
- package/dist/src/adapters/TonClientOpener.js +82 -0
- package/dist/src/adapters/index.d.ts +7 -2
- package/dist/src/adapters/index.js +7 -2
- package/dist/src/assets/AssetCache.d.ts +8 -8
- package/dist/src/assets/AssetCache.js +3 -0
- package/dist/src/assets/AssetFactory.js +8 -2
- package/dist/src/assets/FT.d.ts +2 -3
- package/dist/src/assets/FT.js +4 -7
- package/dist/src/assets/NFT.d.ts +1 -1
- package/dist/src/assets/NFT.js +1 -1
- package/dist/src/assets/TON.d.ts +3 -2
- package/dist/src/assets/TON.js +2 -1
- package/dist/src/errors/errors.d.ts +12 -1
- package/dist/src/errors/errors.js +66 -2
- package/dist/src/errors/index.d.ts +2 -2
- package/dist/src/errors/index.js +4 -1
- package/dist/src/errors/instances.d.ts +7 -2
- package/dist/src/errors/instances.js +67 -2
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.js +6 -4
- package/dist/src/interfaces/Asset.d.ts +4 -9
- package/dist/src/interfaces/ContractOpener.d.ts +76 -2
- package/dist/src/interfaces/IOperationTracker.d.ts +22 -22
- package/dist/src/interfaces/ISimulator.d.ts +9 -1
- package/dist/src/interfaces/ITONTransactionManager.d.ts +20 -1
- package/dist/src/interfaces/ITacExplorerClient.d.ts +8 -0
- package/dist/src/interfaces/ITacExplorerClient.js +2 -0
- package/dist/src/interfaces/ITacSDK.d.ts +25 -1
- package/dist/src/interfaces/ITxFinalizer.d.ts +4 -0
- package/dist/src/interfaces/ITxFinalizer.js +2 -0
- package/dist/src/interfaces/WalletInstanse.d.ts +4 -8
- package/dist/src/interfaces/index.d.ts +1 -0
- package/dist/src/interfaces/index.js +1 -0
- package/dist/src/sdk/Configuration.d.ts +5 -3
- package/dist/src/sdk/Configuration.js +54 -7
- package/dist/src/sdk/Consts.d.ts +18 -1
- package/dist/src/sdk/Consts.js +21 -2
- package/dist/src/sdk/Fees.d.ts +21 -0
- package/dist/src/sdk/Fees.js +201 -0
- package/dist/src/sdk/LiteSequencerClient.d.ts +1 -0
- package/dist/src/sdk/LiteSequencerClient.js +39 -17
- package/dist/src/sdk/OperationTracker.d.ts +11 -11
- package/dist/src/sdk/OperationTracker.js +46 -94
- package/dist/src/sdk/Simulator.d.ts +10 -2
- package/dist/src/sdk/Simulator.js +102 -0
- package/dist/src/sdk/StartTracking.d.ts +12 -7
- package/dist/src/sdk/StartTracking.js +75 -49
- package/dist/src/sdk/TONTransactionManager.d.ts +5 -4
- package/dist/src/sdk/TONTransactionManager.js +63 -8
- package/dist/src/sdk/TacExplorerClient.d.ts +8 -0
- package/dist/src/sdk/TacExplorerClient.js +22 -0
- package/dist/src/sdk/TacSdk.d.ts +8 -2
- package/dist/src/sdk/TacSdk.js +27 -4
- package/dist/src/sdk/TxFinalizer.d.ts +4 -3
- package/dist/src/sdk/TxFinalizer.js +41 -41
- package/dist/src/sdk/Utils.d.ts +20 -1
- package/dist/src/sdk/Utils.js +158 -10
- package/dist/src/sender/BatchSender.js +19 -0
- package/dist/src/sender/MockSender.d.ts +2 -0
- package/dist/src/sender/MockSender.js +13 -0
- package/dist/src/sender/RawSender.js +34 -1
- package/dist/src/sender/SenderFactory.js +1 -1
- package/dist/src/sender/TonConnectSender.js +2 -0
- package/dist/src/sender/index.d.ts +1 -0
- package/dist/src/sender/index.js +1 -0
- package/dist/src/structs/InternalStruct.d.ts +98 -4
- package/dist/src/structs/Struct.d.ts +183 -7
- package/dist/src/structs/Struct.js +4 -3
- package/dist/src/wrappers/HighloadWalletV3.d.ts +5 -3
- package/dist/src/wrappers/HighloadWalletV3.js +14 -3
- package/package.json +121 -117
- package/dist/src/adapters/contractOpener.d.ts +0 -20
- package/dist/src/adapters/contractOpener.js +0 -126
- package/dist/src/adapters/retryableContractOpener.d.ts +0 -24
- package/dist/src/adapters/retryableContractOpener.js +0 -111
|
@@ -35,96 +35,78 @@ class OperationTracker {
|
|
|
35
35
|
this.logger = logger;
|
|
36
36
|
}
|
|
37
37
|
async getOperationIdByTransactionHash(transactionHash, waitOptions) {
|
|
38
|
-
this.logger.debug(`Getting operation ID for transactionHash: ${(0, Utils_1.formatObjectForLogging)(transactionHash)}`);
|
|
39
38
|
const requestFn = async () => {
|
|
40
39
|
let lastError;
|
|
41
40
|
for (const client of this.clients) {
|
|
42
41
|
try {
|
|
43
42
|
const id = await client.getOperationIdByTransactionHash(transactionHash);
|
|
44
|
-
this.logger.debug(`Operation ID ${id == '' ? 'does not exist' : 'retrieved successfully'}`);
|
|
45
43
|
return id;
|
|
46
44
|
}
|
|
47
45
|
catch (error) {
|
|
48
|
-
this.logger.warn(`Failed to get OperationId by transactionHash using one of the endpoints`);
|
|
49
46
|
lastError = error;
|
|
50
47
|
}
|
|
51
48
|
}
|
|
52
|
-
|
|
53
|
-
throw (0, errors_1.allEndpointsFailedError)(lastError);
|
|
49
|
+
throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
|
|
54
50
|
};
|
|
55
|
-
return waitOptions
|
|
56
|
-
? await (
|
|
57
|
-
: await requestFn();
|
|
51
|
+
return waitOptions === null
|
|
52
|
+
? await requestFn()
|
|
53
|
+
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation ID by transaction hash ${(0, Utils_1.formatObjectForLogging)(transactionHash)}`);
|
|
58
54
|
}
|
|
59
55
|
async getOperationType(operationId, waitOptions) {
|
|
60
|
-
this.logger.debug(`Getting operation type for ${(0, Utils_1.formatObjectForLogging)(operationId)}`);
|
|
61
56
|
const requestFn = async () => {
|
|
62
57
|
let lastError;
|
|
63
58
|
for (const client of this.clients) {
|
|
64
59
|
try {
|
|
65
60
|
const type = await client.getOperationType(operationId);
|
|
66
|
-
this.logger.debug(`Operation retrieved successfully`);
|
|
67
61
|
return type;
|
|
68
62
|
}
|
|
69
63
|
catch (error) {
|
|
70
|
-
this.logger.warn(`Failed to get operationType using one of the endpoints`);
|
|
71
64
|
lastError = error;
|
|
72
65
|
}
|
|
73
66
|
}
|
|
74
|
-
|
|
75
|
-
throw (0, errors_1.allEndpointsFailedError)(lastError);
|
|
67
|
+
throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
|
|
76
68
|
};
|
|
77
|
-
return waitOptions
|
|
78
|
-
? await (
|
|
79
|
-
: await requestFn();
|
|
69
|
+
return waitOptions === null
|
|
70
|
+
? await requestFn()
|
|
71
|
+
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation type for ${(0, Utils_1.formatObjectForLogging)(operationId)}`);
|
|
80
72
|
}
|
|
81
73
|
async getOperationId(transactionLinker, waitOptions) {
|
|
82
|
-
this.logger.debug(`Getting operation ID for transaction linker: ${(0, Utils_1.formatObjectForLogging)(transactionLinker)}`);
|
|
83
74
|
const requestFn = async () => {
|
|
84
75
|
let lastError;
|
|
85
76
|
for (const client of this.clients) {
|
|
86
77
|
try {
|
|
87
78
|
const id = await client.getOperationId(transactionLinker);
|
|
88
|
-
this.logger.debug(`Operation ID ${id == '' ? 'does not exist' : 'retrieved successfully'}`);
|
|
89
79
|
return id;
|
|
90
80
|
}
|
|
91
81
|
catch (error) {
|
|
92
|
-
this.logger.warn(`Failed to get OperationId using one of the endpoints`);
|
|
93
82
|
lastError = error;
|
|
94
83
|
}
|
|
95
84
|
}
|
|
96
|
-
|
|
97
|
-
throw (0, errors_1.allEndpointsFailedError)(lastError);
|
|
85
|
+
throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
|
|
98
86
|
};
|
|
99
|
-
return waitOptions
|
|
100
|
-
? await (
|
|
101
|
-
: await requestFn();
|
|
87
|
+
return waitOptions === null
|
|
88
|
+
? await requestFn()
|
|
89
|
+
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation ID by transaction linker ${(0, Utils_1.formatObjectForLogging)(transactionLinker)}`);
|
|
102
90
|
}
|
|
103
91
|
async getOperationIdsByShardsKeys(shardsKeys, caller, waitOptions, chunkSize = 100) {
|
|
104
|
-
this.logger.debug(`Getting operation IDs for shards keys: ${(0, Utils_1.formatObjectForLogging)(shardsKeys)}`);
|
|
105
|
-
this.logger.debug(`Caller: ${caller}, Chunk size: ${chunkSize}`);
|
|
106
92
|
const requestFn = async () => {
|
|
107
93
|
let lastError;
|
|
108
94
|
for (const client of this.clients) {
|
|
109
95
|
try {
|
|
110
96
|
const result = await client.getOperationIdsByShardsKeys(shardsKeys, caller, chunkSize);
|
|
111
|
-
this.logger.debug(`Operation IDs by shards keys retrieved successfully`);
|
|
112
97
|
return result;
|
|
113
98
|
}
|
|
114
99
|
catch (error) {
|
|
115
|
-
this.logger.warn(`Failed to get OperationIds using one of the endpoints`);
|
|
116
100
|
lastError = error;
|
|
117
101
|
}
|
|
118
102
|
}
|
|
119
|
-
|
|
120
|
-
throw (0, errors_1.allEndpointsFailedError)(lastError);
|
|
103
|
+
throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
|
|
121
104
|
};
|
|
122
|
-
return waitOptions
|
|
123
|
-
? await (
|
|
124
|
-
: await requestFn();
|
|
105
|
+
return waitOptions === null
|
|
106
|
+
? await requestFn()
|
|
107
|
+
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation IDs by shards keys ${(0, Utils_1.formatObjectForLogging)(shardsKeys)} caller=${caller} chunkSize=${chunkSize}`);
|
|
125
108
|
}
|
|
126
109
|
async getStageProfiling(operationId, waitOptions) {
|
|
127
|
-
this.logger.debug(`Getting stage profiling for operation ${operationId}`);
|
|
128
110
|
const requestFn = async () => {
|
|
129
111
|
let lastError;
|
|
130
112
|
for (const client of this.clients) {
|
|
@@ -132,72 +114,57 @@ class OperationTracker {
|
|
|
132
114
|
const map = await client.getStageProfilings([operationId]);
|
|
133
115
|
const result = map[operationId];
|
|
134
116
|
if (!result) {
|
|
135
|
-
this.logger.warn(`No stageProfiling data for operationId=${operationId}`);
|
|
136
117
|
throw new Error(`No stageProfiling data for operationId=${operationId}`);
|
|
137
118
|
}
|
|
138
|
-
this.logger.debug(`Stage profiling retrieved successfully`);
|
|
139
119
|
return result;
|
|
140
120
|
}
|
|
141
121
|
catch (error) {
|
|
142
|
-
this.logger.warn(`Failed to get stage profiling using one of the endpoints`);
|
|
143
122
|
lastError = error;
|
|
144
123
|
}
|
|
145
124
|
}
|
|
146
|
-
|
|
147
|
-
throw (0, errors_1.allEndpointsFailedError)(lastError);
|
|
125
|
+
throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
|
|
148
126
|
};
|
|
149
|
-
return waitOptions
|
|
150
|
-
? await (
|
|
151
|
-
: await
|
|
127
|
+
return waitOptions === null
|
|
128
|
+
? await requestFn()
|
|
129
|
+
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting stage profiling for operation ${operationId}`);
|
|
152
130
|
}
|
|
153
131
|
async getStageProfilings(operationIds, waitOptions, chunkSize = 100) {
|
|
154
|
-
this.logger.debug(`Getting stage profilings for operations: ${operationIds.join(', ')}`);
|
|
155
|
-
this.logger.debug(`Chunk size: ${chunkSize}`);
|
|
156
132
|
const requestFn = async () => {
|
|
157
133
|
let lastError;
|
|
158
134
|
for (const client of this.clients) {
|
|
159
135
|
try {
|
|
160
136
|
const result = await client.getStageProfilings(operationIds, chunkSize);
|
|
161
|
-
this.logger.debug(`Stage profilings retrieved successfully`);
|
|
162
137
|
return result;
|
|
163
138
|
}
|
|
164
139
|
catch (error) {
|
|
165
|
-
this.logger.warn(`Failed to get stage profilings using one of the endpoints`);
|
|
166
140
|
lastError = error;
|
|
167
141
|
}
|
|
168
142
|
}
|
|
169
|
-
|
|
170
|
-
throw (0, errors_1.allEndpointsFailedError)(lastError);
|
|
143
|
+
throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
|
|
171
144
|
};
|
|
172
|
-
return waitOptions
|
|
173
|
-
? await (
|
|
174
|
-
: await requestFn();
|
|
145
|
+
return waitOptions === null
|
|
146
|
+
? await requestFn()
|
|
147
|
+
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting stage profilings for operations: ${operationIds.join(', ')} chunkSize=${chunkSize}`);
|
|
175
148
|
}
|
|
176
149
|
async getOperationStatuses(operationIds, waitOptions, chunkSize = 100) {
|
|
177
|
-
this.logger.debug(`Getting operation statuses for operations: ${(0, Utils_1.formatObjectForLogging)(operationIds)}`);
|
|
178
|
-
this.logger.debug(`Chunk size: ${chunkSize}`);
|
|
179
150
|
const requestFn = async () => {
|
|
180
151
|
let lastError;
|
|
181
152
|
for (const client of this.clients) {
|
|
182
153
|
try {
|
|
183
154
|
const result = await client.getOperationStatuses(operationIds, chunkSize);
|
|
184
|
-
this.logger.debug(`Operation statuses retrieved successfully`);
|
|
185
155
|
return result;
|
|
186
156
|
}
|
|
187
157
|
catch (error) {
|
|
188
|
-
this.logger.warn(`Failed to get operation statuses using one of the endpoints`);
|
|
189
158
|
lastError = error;
|
|
190
159
|
}
|
|
191
160
|
}
|
|
192
|
-
|
|
193
|
-
throw (0, errors_1.allEndpointsFailedError)(lastError);
|
|
161
|
+
throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
|
|
194
162
|
};
|
|
195
|
-
return waitOptions
|
|
196
|
-
? await (
|
|
197
|
-
: await requestFn();
|
|
163
|
+
return waitOptions === null
|
|
164
|
+
? await requestFn()
|
|
165
|
+
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation statuses for operations: ${(0, Utils_1.formatObjectForLogging)(operationIds)} chunkSize=${chunkSize}`);
|
|
198
166
|
}
|
|
199
167
|
async getOperationStatus(operationId, waitOptions) {
|
|
200
|
-
this.logger.debug(`Getting operation status for ${(0, Utils_1.formatObjectForLogging)(operationId)}`);
|
|
201
168
|
const requestFn = async () => {
|
|
202
169
|
let lastError;
|
|
203
170
|
for (const client of this.clients) {
|
|
@@ -205,26 +172,23 @@ class OperationTracker {
|
|
|
205
172
|
const map = await client.getOperationStatuses([operationId]);
|
|
206
173
|
const result = map[operationId];
|
|
207
174
|
if (!result) {
|
|
208
|
-
this.logger.warn(`No operation status for operationId=${operationId}`);
|
|
209
175
|
throw new Error(`No operation status for operationId=${operationId}`);
|
|
210
176
|
}
|
|
211
|
-
this.logger.debug(`Operation status retrieved successfully`);
|
|
212
177
|
return result;
|
|
213
178
|
}
|
|
214
179
|
catch (error) {
|
|
215
|
-
this.logger.warn(`Failed to get operation status using one of the endpoints`);
|
|
216
180
|
lastError = error;
|
|
217
181
|
}
|
|
218
182
|
}
|
|
219
|
-
|
|
220
|
-
throw (0, errors_1.allEndpointsFailedError)(lastError);
|
|
183
|
+
throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
|
|
221
184
|
};
|
|
222
|
-
|
|
223
|
-
? await (
|
|
224
|
-
: await requestFn();
|
|
185
|
+
const status = waitOptions === null
|
|
186
|
+
? await requestFn()
|
|
187
|
+
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation status for ${(0, Utils_1.formatObjectForLogging)(operationId)}`);
|
|
188
|
+
this.logger.debug(`operation status resolved stage=${status.stage ?? 'unknown'} success=${String(status.success)}`);
|
|
189
|
+
return status;
|
|
225
190
|
}
|
|
226
191
|
async getSimplifiedOperationStatus(transactionLinker) {
|
|
227
|
-
this.logger.debug(`Getting simplified operation status for transaction linker: ${(0, Utils_1.formatObjectForLogging)(transactionLinker)}`);
|
|
228
192
|
const operationId = await this.getOperationId(transactionLinker);
|
|
229
193
|
if (operationId == '') {
|
|
230
194
|
this.logger.warn('Operation ID not found');
|
|
@@ -243,71 +207,59 @@ class OperationTracker {
|
|
|
243
207
|
if (params.value <= 0n) {
|
|
244
208
|
throw instances_1.convertCurrencyNegativeOrZeroValueError;
|
|
245
209
|
}
|
|
246
|
-
this.logger.debug(`Converting currency: ${(0, Utils_1.formatObjectForLogging)(params)}`);
|
|
247
210
|
const requestFn = async () => {
|
|
248
211
|
let lastError;
|
|
249
212
|
for (const client of this.clients) {
|
|
250
213
|
try {
|
|
251
214
|
const result = await client.convertCurrency(params);
|
|
252
|
-
this.logger.debug(`Conversion result retrieved successfully`);
|
|
253
215
|
return result;
|
|
254
216
|
}
|
|
255
217
|
catch (error) {
|
|
256
|
-
this.logger.warn(`Failed to convert currency using one of the endpoints`);
|
|
257
218
|
lastError = error;
|
|
258
219
|
}
|
|
259
220
|
}
|
|
260
|
-
|
|
261
|
-
throw (0, errors_1.allEndpointsFailedError)(lastError);
|
|
221
|
+
throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
|
|
262
222
|
};
|
|
263
|
-
return waitOptions
|
|
264
|
-
? await (
|
|
265
|
-
: await requestFn();
|
|
223
|
+
return waitOptions === null
|
|
224
|
+
? await requestFn()
|
|
225
|
+
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Converting currency ${(0, Utils_1.formatObjectForLogging)(params)}`);
|
|
266
226
|
}
|
|
267
227
|
async simulateTACMessage(params, waitOptions) {
|
|
268
228
|
Validator_1.Validator.validateTACSimulationParams(params);
|
|
269
|
-
this.logger.debug(`Simulating TAC message: ${(0, Utils_1.formatObjectForLogging)(params)}`);
|
|
270
229
|
const requestFn = async () => {
|
|
271
230
|
let lastError;
|
|
272
231
|
for (const client of this.clients) {
|
|
273
232
|
try {
|
|
274
233
|
const result = await client.simulateTACMessage(params);
|
|
275
|
-
this.logger.debug(`Simulation result retrieved successfully`);
|
|
276
234
|
return result;
|
|
277
235
|
}
|
|
278
236
|
catch (error) {
|
|
279
|
-
this.logger.warn(`Failed to simulate TAC message using one of the endpoints`);
|
|
280
237
|
lastError = error;
|
|
281
238
|
}
|
|
282
239
|
}
|
|
283
|
-
|
|
284
|
-
throw (0, errors_1.allEndpointsFailedError)(lastError);
|
|
240
|
+
throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
|
|
285
241
|
};
|
|
286
|
-
return waitOptions
|
|
287
|
-
? await (
|
|
288
|
-
: await requestFn();
|
|
242
|
+
return waitOptions === null
|
|
243
|
+
? await requestFn()
|
|
244
|
+
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Simulating TAC message ${(0, Utils_1.formatObjectForLogging)(params)}`);
|
|
289
245
|
}
|
|
290
246
|
async getTVMExecutorFee(params, waitOptions) {
|
|
291
|
-
this.logger.debug(`get TVM executor fee: ${(0, Utils_1.formatObjectForLogging)(params)}`);
|
|
292
247
|
const requestFn = async () => {
|
|
293
248
|
let lastError;
|
|
294
249
|
for (const client of this.clients) {
|
|
295
250
|
try {
|
|
296
251
|
const result = await client.getTVMExecutorFee(params);
|
|
297
|
-
this.logger.debug(`Suggested TVM executor fee retrieved successfully`);
|
|
298
252
|
return result;
|
|
299
253
|
}
|
|
300
254
|
catch (error) {
|
|
301
|
-
this.logger.warn(`Failed to get TVM executor fee using one of the endpoints`);
|
|
302
255
|
lastError = error;
|
|
303
256
|
}
|
|
304
257
|
}
|
|
305
|
-
|
|
306
|
-
throw (0, errors_1.allEndpointsFailedError)(lastError);
|
|
258
|
+
throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
|
|
307
259
|
};
|
|
308
|
-
return waitOptions
|
|
309
|
-
? await (
|
|
310
|
-
: await requestFn();
|
|
260
|
+
return waitOptions === null
|
|
261
|
+
? await requestFn()
|
|
262
|
+
: await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting TVM executor fee ${(0, Utils_1.formatObjectForLogging)(params)}`);
|
|
311
263
|
}
|
|
312
264
|
}
|
|
313
265
|
exports.OperationTracker = OperationTracker;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { IConfiguration, ILogger, IOperationTracker, ISimulator } from '../interfaces';
|
|
1
|
+
import { Asset, IConfiguration, ILogger, IOperationTracker, ISimulator } from '../interfaces';
|
|
2
2
|
import type { SenderAbstraction } from '../sender';
|
|
3
|
-
import { CrosschainTx, ExecutionFeeEstimationResult } from '../structs/Struct';
|
|
3
|
+
import { CrosschainTx, ExecutionFeeEstimationResult, GeneratePayloadParams } from '../structs/Struct';
|
|
4
4
|
export declare class Simulator implements ISimulator {
|
|
5
5
|
private readonly config;
|
|
6
6
|
private readonly operationTracker;
|
|
@@ -8,4 +8,12 @@ export declare class Simulator implements ISimulator {
|
|
|
8
8
|
constructor(config: IConfiguration, operationTracker: IOperationTracker, logger?: ILogger);
|
|
9
9
|
getSimulationsInfo(sender: SenderAbstraction, txs: CrosschainTx[]): Promise<ExecutionFeeEstimationResult[]>;
|
|
10
10
|
getSimulationInfo(sender: SenderAbstraction, tx: CrosschainTx): Promise<ExecutionFeeEstimationResult>;
|
|
11
|
+
private calculateTONFees;
|
|
12
|
+
private calculateTransactionPipeline;
|
|
13
|
+
private calculateTONCrosschainFee;
|
|
14
|
+
private calculateJettonTransferCrosschainFee;
|
|
15
|
+
private calculateJettonBurnCrosschainFee;
|
|
16
|
+
private calculateNftTransferCrosschainFee;
|
|
17
|
+
private calculateNftBurnCrosschainFee;
|
|
18
|
+
estimateTONFee(asset: Asset, params: GeneratePayloadParams): bigint;
|
|
11
19
|
}
|
|
@@ -2,6 +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 instances_1 = require("../errors/instances");
|
|
8
|
+
const Struct_1 = require("../structs/Struct");
|
|
9
|
+
const Fees_1 = require("./Fees");
|
|
5
10
|
const Logger_1 = require("./Logger");
|
|
6
11
|
const Utils_1 = require("./Utils");
|
|
7
12
|
const Validator_1 = require("./Validator");
|
|
@@ -66,5 +71,102 @@ class Simulator {
|
|
|
66
71
|
}
|
|
67
72
|
return { feeParams, simulation };
|
|
68
73
|
}
|
|
74
|
+
calculateTONFees({
|
|
75
|
+
// Contract usage
|
|
76
|
+
accountBits, accountCells, timeDelta,
|
|
77
|
+
// Message size
|
|
78
|
+
msgBits, msgCells,
|
|
79
|
+
// Gas and computation
|
|
80
|
+
gasUsed, accountBitPrice, accountCellPrice, lumpPrice, gasPrice, firstFrac, ihrPriceFactor, msgBitPrice, msgCellPrice, }) {
|
|
81
|
+
// Storage Fee (nanotons)
|
|
82
|
+
const storageFee = Math.ceil(((accountBits * accountBitPrice + accountCells * accountCellPrice) * timeDelta) / Fees_1.FIXED_POINT_SHIFT);
|
|
83
|
+
// Computation Fee (nanotons)
|
|
84
|
+
const computeFee = (gasUsed * gasPrice) / Fees_1.FIXED_POINT_SHIFT;
|
|
85
|
+
// Forwarding Fee (nanotons)
|
|
86
|
+
const msgFwdFees = lumpPrice + Math.ceil((msgBitPrice * msgBits + msgCellPrice * msgCells) / Fees_1.FIXED_POINT_SHIFT);
|
|
87
|
+
const ihrFwdFees = Math.ceil((msgFwdFees * ihrPriceFactor) / Fees_1.FIXED_POINT_SHIFT);
|
|
88
|
+
const totalFwdFees = msgFwdFees + ihrFwdFees;
|
|
89
|
+
// Action Fee (nanotons)
|
|
90
|
+
const actionFee = Math.floor((msgFwdFees * firstFrac) / Fees_1.FIXED_POINT_SHIFT);
|
|
91
|
+
// Combine all fees
|
|
92
|
+
const totalFees = storageFee + computeFee + actionFee + totalFwdFees;
|
|
93
|
+
return BigInt(Math.ceil(totalFees));
|
|
94
|
+
}
|
|
95
|
+
calculateTransactionPipeline(steps) {
|
|
96
|
+
return steps.reduce((total, step) => total + this.calculateTONFees({ ...step, ...this.config.TONParams.feesParams }), 0n);
|
|
97
|
+
}
|
|
98
|
+
calculateTONCrosschainFee(msgBits, msgCells) {
|
|
99
|
+
return this.calculateTransactionPipeline([
|
|
100
|
+
(0, Fees_1.createCrossChainLayerTvmMsgToEvmStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
101
|
+
]);
|
|
102
|
+
}
|
|
103
|
+
calculateJettonTransferCrosschainFee(msgBits, msgCells) {
|
|
104
|
+
return this.calculateTransactionPipeline([
|
|
105
|
+
(0, Fees_1.createJettonWalletInternalTransferStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
106
|
+
(0, Fees_1.createJettonWalletReceiveStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
107
|
+
(0, Fees_1.createJettonProxyOwnershipAssignedStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
108
|
+
(0, Fees_1.createCrossChainLayerTvmMsgToEvmStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
109
|
+
(0, Fees_1.createErrorNotificationGasStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
110
|
+
(0, Fees_1.createEstimatedSendTransferGasStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
111
|
+
(0, Fees_1.createEstimatedReceiveTransferGasStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
114
|
+
calculateJettonBurnCrosschainFee(msgBits, msgCells) {
|
|
115
|
+
return this.calculateTransactionPipeline([
|
|
116
|
+
(0, Fees_1.createJettonWalletBurnStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
117
|
+
(0, Fees_1.createJettonMinterBurnNotificationStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
118
|
+
(0, Fees_1.createCrossChainLayerTvmMsgToEvmStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
119
|
+
(0, Fees_1.createMintAfterErrorGasStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
120
|
+
(0, Fees_1.createJettonWalletReceiveStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
121
|
+
]);
|
|
122
|
+
}
|
|
123
|
+
calculateNftTransferCrosschainFee(msgBits, msgCells) {
|
|
124
|
+
return this.calculateTransactionPipeline([
|
|
125
|
+
(0, Fees_1.createNftItemSendStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
126
|
+
(0, Fees_1.createNftProxyOwnershipAssignedStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
127
|
+
(0, Fees_1.createCrossChainLayerTvmMsgToEvmStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
128
|
+
(0, Fees_1.createNftProxyErrorNotificationStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
129
|
+
(0, Fees_1.createNftItemSendStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
130
|
+
]);
|
|
131
|
+
}
|
|
132
|
+
calculateNftBurnCrosschainFee(msgBits, msgCells) {
|
|
133
|
+
return this.calculateTransactionPipeline([
|
|
134
|
+
(0, Fees_1.createNftItemBurnStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
135
|
+
(0, Fees_1.createCrossChainLayerTvmMsgToEvmStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
|
|
136
|
+
(0, Fees_1.createNftItemErrorNotificationStep)(this.config.TONParams.contractFeeUsageParams),
|
|
137
|
+
]);
|
|
138
|
+
}
|
|
139
|
+
estimateTONFee(asset, params) {
|
|
140
|
+
const payload = asset.generatePayload(params);
|
|
141
|
+
const { bits: msgBits, cells: msgCells } = (0, Utils_1.recurisivelyCollectCellStats)(payload);
|
|
142
|
+
switch (asset.type) {
|
|
143
|
+
case Struct_1.AssetType.FT:
|
|
144
|
+
if (asset instanceof assets_1.TON) {
|
|
145
|
+
// Pipeline: wallet -> ccl -> log
|
|
146
|
+
return this.calculateTONCrosschainFee(msgBits, msgCells);
|
|
147
|
+
}
|
|
148
|
+
if (asset.origin === Struct_1.Origin.TON) {
|
|
149
|
+
// Pipeline: wallet -> jetton wallet -> jetton wallet -> jetton proxy -> ccl -> log
|
|
150
|
+
return this.calculateJettonTransferCrosschainFee(msgBits, msgCells);
|
|
151
|
+
}
|
|
152
|
+
if (asset.origin === Struct_1.Origin.TAC) {
|
|
153
|
+
// Pipeline: wallet -> jetton wallet -> jetton minter -> ccl -> log
|
|
154
|
+
return this.calculateJettonBurnCrosschainFee(msgBits, msgCells);
|
|
155
|
+
}
|
|
156
|
+
throw (0, instances_1.unknownAssetOriginError)(asset.origin);
|
|
157
|
+
case Struct_1.AssetType.NFT:
|
|
158
|
+
if (asset.origin === Struct_1.Origin.TON) {
|
|
159
|
+
// Pipeline: wallet -> nft item -> nft proxy -> ccl -> log
|
|
160
|
+
return this.calculateNftTransferCrosschainFee(msgBits, msgCells);
|
|
161
|
+
}
|
|
162
|
+
if (asset.origin === Struct_1.Origin.TAC) {
|
|
163
|
+
// Pipeline: wallet -> nft item -> ccl -> log
|
|
164
|
+
return this.calculateNftBurnCrosschainFee(msgBits, msgCells);
|
|
165
|
+
}
|
|
166
|
+
throw (0, instances_1.unknownAssetOriginError)(asset.origin);
|
|
167
|
+
default:
|
|
168
|
+
throw (0, errors_1.unknownTokenTypeError)(asset.type);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
69
171
|
}
|
|
70
172
|
exports.Simulator = Simulator;
|
|
@@ -1,21 +1,26 @@
|
|
|
1
|
-
import { ILogger } from '../interfaces';
|
|
2
|
-
import {
|
|
3
|
-
import { ExecutionStages, Network,
|
|
4
|
-
export declare function startTracking(transactionLinker:
|
|
1
|
+
import { ContractOpener, ILogger } from '../interfaces';
|
|
2
|
+
import { ITxFinalizer } from '../interfaces/ITxFinalizer';
|
|
3
|
+
import { ExecutionStages, Network, TransactionLinkerWithOperationId } from '../structs/Struct';
|
|
4
|
+
export declare function startTracking(transactionLinker: TransactionLinkerWithOperationId, network: Network, options?: {
|
|
5
5
|
customLiteSequencerEndpoints?: string[];
|
|
6
6
|
delay?: number;
|
|
7
7
|
maxIterationCount?: number;
|
|
8
8
|
returnValue?: boolean;
|
|
9
9
|
tableView?: boolean;
|
|
10
|
-
txFinalizerConfig?: TxFinalizerConfig;
|
|
11
10
|
logger?: ILogger;
|
|
11
|
+
txFinalizer?: ITxFinalizer;
|
|
12
|
+
contractOpener?: ContractOpener;
|
|
13
|
+
cclAddress?: string;
|
|
12
14
|
}): Promise<void | ExecutionStages>;
|
|
13
|
-
export declare function startTrackingMultiple(transactionLinkers:
|
|
15
|
+
export declare function startTrackingMultiple(transactionLinkers: TransactionLinkerWithOperationId[], network: Network, options?: {
|
|
14
16
|
customLiteSequencerEndpoints?: string[];
|
|
15
17
|
delay?: number;
|
|
16
18
|
maxIterationCount?: number;
|
|
17
19
|
returnValue?: boolean;
|
|
18
20
|
tableView?: boolean;
|
|
19
|
-
txFinalizerConfig?: TxFinalizerConfig;
|
|
20
21
|
logger?: ILogger;
|
|
22
|
+
txFinalizer?: ITxFinalizer;
|
|
23
|
+
contractOpener?: ContractOpener;
|
|
24
|
+
cclAddress?: string;
|
|
21
25
|
}): Promise<void | ExecutionStages[]>;
|
|
26
|
+
export declare function printExecutionStagesTable(stages: ExecutionStages, logger: ILogger): void;
|