wan-ton-sdk 0.0.10 → 0.0.11
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 -0
- package/README.md +40 -24
- package/dist/const/const-value.js +2 -2
- package/dist/contractAccess/bridgeAccess.js +1 -1
- package/dist/db/Db.js +68 -24
- package/dist/db/DbAccess.d.ts +1 -0
- package/dist/db/DbAccess.js +17 -0
- package/dist/db/common.js +1 -1
- package/dist/event/getEvents.js +13 -14
- package/dist/example/event/getAllEvents-ex.js +3 -2
- package/dist/transResult/transResult.js +5 -6
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.js +84 -8
- package/package.json +1 -1
package/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2025 Wanchain Fundation.
|
2
|
+
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
of this software and associated documentation files (the "Software"), to deal
|
6
|
+
in the Software without restriction, including without limitation the rights
|
7
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the Software is
|
9
|
+
furnished to do so, subject to the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be included in all
|
12
|
+
copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
20
|
+
SOFTWARE.
|
package/README.md
CHANGED
@@ -1,24 +1,40 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
4
|
-
##
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
##
|
24
|
-
|
1
|
+
# TON-WAN-SDK
|
2
|
+
|
3
|
+
|
4
|
+
## Features
|
5
|
+
|
6
|
+
- 🦺 light weight, less dependency.
|
7
|
+
- 💪 Works everywhere: blueprint uni-test, testnet, mainnet
|
8
|
+
- 🚀 Promise-based API
|
9
|
+
- 🏎 support ton-center client, ton-api client
|
10
|
+
|
11
|
+
|
12
|
+
## component
|
13
|
+
|
14
|
+
- client
|
15
|
+
- code-decode cross customer payload of lock, release
|
16
|
+
- event
|
17
|
+
- sign
|
18
|
+
- wallet
|
19
|
+
- db
|
20
|
+
- example
|
21
|
+
- transResult
|
22
|
+
|
23
|
+
## Install
|
24
|
+
|
25
|
+
```bash
|
26
|
+
npm install wan-ton-sdk
|
27
|
+
```
|
28
|
+
|
29
|
+
## example
|
30
|
+
|
31
|
+
- event: get events in Bridge contract
|
32
|
+
- jetton: example about jetton
|
33
|
+
- lock-release:
|
34
|
+
- example lock: ton coin or ton jetton token on ton blockchain
|
35
|
+
- example release: release ton or jetton token on ton blockchain
|
36
|
+
|
37
|
+
|
38
|
+
# License
|
39
|
+
|
40
|
+
MIT
|
@@ -22,5 +22,5 @@ exports.MAX_RETRY = 3;
|
|
22
22
|
exports.MAX_BACKTRACE_SECONDS = 30 * 86400;
|
23
23
|
exports.RETRY_INTERNAL_TIME = 20;
|
24
24
|
exports.TONCLINET_TIMEOUT = 60 * 1000 * 1000;
|
25
|
-
exports.MIN_SCAN_INTER =
|
26
|
-
exports.MAX_SCAN_INTER =
|
25
|
+
exports.MIN_SCAN_INTER = 10 * 1000;
|
26
|
+
exports.MAX_SCAN_INTER = 20 * 1000;
|
@@ -41,7 +41,7 @@ class BridgeAccess {
|
|
41
41
|
return await cOpened[methodName](...parameters);
|
42
42
|
}
|
43
43
|
catch (err) {
|
44
|
-
logger_1.logger.error(formatUtil.format((0, utils_1.formatError)(err)));
|
44
|
+
logger_1.logger.error(formatUtil.format((0, utils_1.formatError)(err)), "methodName", methodName, "parameters", parameters);
|
45
45
|
throw new Error(`${methodName} is not supported Non send method`);
|
46
46
|
}
|
47
47
|
}
|
package/dist/db/Db.js
CHANGED
@@ -36,13 +36,27 @@ const defaultData = {
|
|
36
36
|
}],
|
37
37
|
};
|
38
38
|
var serializeWithBig = function (obj) {
|
39
|
-
|
39
|
+
function _bigIntReplacer(_, value) {
|
40
|
+
return typeof value === 'bigint' ? `#bigint:${value}` : value;
|
41
|
+
}
|
42
|
+
let ret = JSON.stringify(obj, _bigIntReplacer, 2);
|
40
43
|
return ret;
|
41
44
|
};
|
42
45
|
var deserializeWithBig = function (str) {
|
43
|
-
|
46
|
+
function _bigIntReviver(_, value) {
|
47
|
+
if (typeof value === 'string' && value.startsWith('#bigint:')) {
|
48
|
+
return BigInt(value.slice(8));
|
49
|
+
}
|
50
|
+
return value;
|
51
|
+
}
|
52
|
+
let ret = JSON.parse(str, _bigIntReviver);
|
44
53
|
return ret;
|
45
54
|
};
|
55
|
+
// var deserializeWithBig = function(str:string){
|
56
|
+
// //let ret = JSON.parse(str,bigIntReviver); // Cannot convert Azo8veFVYACuH8FrRflqqjH7qNjMbAv8nXP0fPwDX50= to a BigInt
|
57
|
+
// let ret = JSON.parse(str,bigIntReplacer);
|
58
|
+
// return ret;
|
59
|
+
// }
|
46
60
|
class DB {
|
47
61
|
constructor(dbName) {
|
48
62
|
this.db = null;
|
@@ -96,8 +110,9 @@ class DB {
|
|
96
110
|
copy = _.cloneDeep(this.db.getState());
|
97
111
|
_.forEach(trans, tran => {
|
98
112
|
let result = null;
|
99
|
-
result = this.db.get("trans").find({
|
100
|
-
this.
|
113
|
+
//result = this.db.get("trans").find({lt:tran.lt.toString(10)}).value();
|
114
|
+
result = this.db.get("trans").find({ hash: tran.hash, lt: tran.lt }).value();
|
115
|
+
this.logger.info("insertTrans ", "dbName", this.dbName, "lt", tran.lt, "result.hash", result?.hash, "result.lt", result?.lt.toString(10));
|
101
116
|
if (!result) {
|
102
117
|
this.db.get('trans').value().push(tran);
|
103
118
|
this.logger.info("insertTrans inserting ", "dbName", this.dbName, "lt", tran.lt);
|
@@ -110,7 +125,7 @@ class DB {
|
|
110
125
|
}
|
111
126
|
catch (err) {
|
112
127
|
this.db.setState(copy);
|
113
|
-
this.logger.error("insertTrans", "err", (0, utils_1.formatError)(err));
|
128
|
+
this.logger.error("insertTrans", "err", (0, utils_1.formatError)(err), "trans.length", trans.length);
|
114
129
|
throw err;
|
115
130
|
}
|
116
131
|
finally {
|
@@ -130,7 +145,7 @@ class DB {
|
|
130
145
|
}
|
131
146
|
catch (err) {
|
132
147
|
this.db.setState(copy);
|
133
|
-
this.logger.error("updateTask", "err", (0, utils_1.formatError)(err));
|
148
|
+
this.logger.error("updateTask", "err", (0, utils_1.formatError)(err), "tasks", JSON.stringify(tasks, utils_1.bigIntReplacer));
|
134
149
|
}
|
135
150
|
finally {
|
136
151
|
release();
|
@@ -139,18 +154,20 @@ class DB {
|
|
139
154
|
async setTranHandleFlag(tran, finishOrNot) {
|
140
155
|
let copy = {};
|
141
156
|
const release = await this.mutex.acquire();
|
157
|
+
let txHashBas64 = (0, utils_1.toBase64)(tran.hash);
|
142
158
|
try {
|
143
|
-
this.logger.info("Entering setTranHandleFlag", "hash", tran.hash, "lt", tran.lt, "dbName", this.dbName, "finishOrNot", finishOrNot);
|
144
159
|
copy = _.cloneDeep(this.db.getState());
|
145
|
-
|
146
|
-
this.db.get('trans').find({ hash:
|
160
|
+
this.logger.info("Entering setTranHandleFlag", "hash", tran.hash, "lt", tran.lt, "hashBase64", txHashBas64, "dbName", this.dbName, "finishOrNot", finishOrNot);
|
161
|
+
let tranFounded = await this.db.get('trans').find({ hash: tran.hash, lt: tran.lt }).value();
|
162
|
+
this.logger.info("setTranHandleFlag", "tranFounded", tranFounded?.hash, { hash: txHashBas64, lt: tran.lt.toString(10) });
|
163
|
+
this.db.get('trans').find({ hash: tran.hash, lt: tran.lt })
|
147
164
|
.assign({ emitEventOrNot: finishOrNot })
|
148
165
|
.value();
|
149
166
|
this.db.write();
|
150
167
|
}
|
151
168
|
catch (err) {
|
152
169
|
this.db.setState(copy);
|
153
|
-
this.logger.error("Entering setTranHandleFlag", "err", (0, utils_1.formatError)(err), "hash", tran.hash, "lt", tran.lt, "dbName", this.dbName, "finishOrNot", finishOrNot);
|
170
|
+
this.logger.error("Entering setTranHandleFlag", "err", (0, utils_1.formatError)(err), "hash", tran.hash, "lt", tran.lt.toString(10), "hashBase64", txHashBas64, "dbName", this.dbName, "finishOrNot", finishOrNot);
|
154
171
|
}
|
155
172
|
finally {
|
156
173
|
release();
|
@@ -197,7 +214,7 @@ class DB {
|
|
197
214
|
}
|
198
215
|
catch (err) {
|
199
216
|
this.db.setState(copy);
|
200
|
-
this.logger.error("setScanStarted", "err", (0, utils_1.formatError)(err));
|
217
|
+
this.logger.error("setScanStarted", "err", (0, utils_1.formatError)(err), "dbName", this.dbName);
|
201
218
|
}
|
202
219
|
finally {
|
203
220
|
release();
|
@@ -235,7 +252,7 @@ class DB {
|
|
235
252
|
await this.scanFun();
|
236
253
|
}
|
237
254
|
catch (e) {
|
238
|
-
this.logger.error("feedTrans error", (0, utils_1.formatError)(e));
|
255
|
+
this.logger.error("feedTrans error", (0, utils_1.formatError)(e), "dbName", this.dbName);
|
239
256
|
}
|
240
257
|
finally {
|
241
258
|
this.logger.info("**************************finish one round feedTrans********************************", this.dbName, "isRunning:", isRunning, "\n\n\n");
|
@@ -254,7 +271,7 @@ class DB {
|
|
254
271
|
retTask.push(...retOneTask);
|
255
272
|
}
|
256
273
|
catch (err) {
|
257
|
-
this.logger.error("scanTonTxByTasks err", (0, utils_1.formatError)(err));
|
274
|
+
this.logger.error("scanTonTxByTasks err", (0, utils_1.formatError)(err), "tasks", JSON.stringify(tasks, utils_1.bigIntReplacer));
|
258
275
|
retTask.push(tasks[i]);
|
259
276
|
}
|
260
277
|
}
|
@@ -298,22 +315,22 @@ class DB {
|
|
298
315
|
//let trans = await client.getTransactions(scAddress, optsOne)
|
299
316
|
let trans = await client.getTransactions(rawAddr, optsOne);
|
300
317
|
getSuccess = true;
|
301
|
-
this.logger.info("get transcations one", "optsOne", optsOne, "pivolt tran hash", trans[0].hash().toString('hex'));
|
318
|
+
this.logger.info("scanTonTxByTask get transcations one success", "optsOne", optsOne, "pivolt tran hash", trans[0].hash().toString('hex'));
|
302
319
|
tranPovit = trans[0];
|
303
320
|
}
|
304
321
|
catch (e) {
|
305
|
-
this.logger.error("get transcations one err ", (0, utils_1.formatError)(e));
|
322
|
+
this.logger.error("get transcations one err ", (0, utils_1.formatError)(e), "optsOne", optsOne);
|
306
323
|
await (0, utils_1.sleep)(const_value_1.RETRY_INTERNAL_TIME);
|
307
324
|
}
|
308
325
|
}
|
309
326
|
if (maxRetry < 0) {
|
310
|
-
this.logger.info(" get transcations one maxRetry == 0, before throw err");
|
327
|
+
this.logger.info(" scanTonTxByTask get transcations one maxRetry == 0, before throw err");
|
311
328
|
throw new Error(util_1.default.format("fail by max_retry getTransactions one failed after %d retry. opts is %s", const_value_1.MAX_RETRY, JSON.stringify(optsOne)));
|
312
329
|
}
|
313
330
|
await (0, utils_1.sleep)(const_value_1.RETRY_INTERNAL_TIME);
|
314
331
|
}
|
315
332
|
catch (err) {
|
316
|
-
this.logger.error("err", (0, utils_1.formatError)(err));
|
333
|
+
this.logger.error("err", (0, utils_1.formatError)(err), "get transcations one success", "optsOne", optsOne);
|
317
334
|
throw err;
|
318
335
|
}
|
319
336
|
finally {
|
@@ -407,7 +424,7 @@ class DB {
|
|
407
424
|
catch (e) {
|
408
425
|
maxScanedLt = oldMaxScaanedLt;
|
409
426
|
minScanedLt = oldMinScanedLt;
|
410
|
-
this.logger.error("err ", (0, utils_1.formatError)(e));
|
427
|
+
this.logger.error("err ", (0, utils_1.formatError)(e), "scanTonTxByTask", "task", JSON.stringify(task, utils_1.bigIntReplacer));
|
411
428
|
await (0, utils_1.sleep)(const_value_1.RETRY_INTERNAL_TIME);
|
412
429
|
}
|
413
430
|
}
|
@@ -420,7 +437,7 @@ class DB {
|
|
420
437
|
}
|
421
438
|
}
|
422
439
|
catch (err) {
|
423
|
-
this.logger.error("err", (0, utils_1.formatError)(err));
|
440
|
+
this.logger.error("err", (0, utils_1.formatError)(err), "task", JSON.stringify(task, utils_1.bigIntReplacer));
|
424
441
|
needSlitRange = true;
|
425
442
|
}
|
426
443
|
finally {
|
@@ -463,7 +480,7 @@ class DB {
|
|
463
480
|
copy = _.cloneDeep(this.db.get('trans').value());
|
464
481
|
}
|
465
482
|
catch (err) {
|
466
|
-
this.logger.error("getAllTransNotHandled", "err", (0, utils_1.formatError)(err));
|
483
|
+
this.logger.error("getAllTransNotHandled cloneDeep", "err", (0, utils_1.formatError)(err));
|
467
484
|
}
|
468
485
|
finally {
|
469
486
|
release();
|
@@ -482,6 +499,33 @@ class DB {
|
|
482
499
|
}
|
483
500
|
return result;
|
484
501
|
}
|
502
|
+
async getAllTrans() {
|
503
|
+
let copy = {};
|
504
|
+
const release = await this.mutex.acquire();
|
505
|
+
try {
|
506
|
+
this.logger.info("getAllTrans");
|
507
|
+
copy = _.cloneDeep(this.db.get('trans').value());
|
508
|
+
}
|
509
|
+
catch (err) {
|
510
|
+
this.logger.error("getAllTrans cloneDeep", "err", (0, utils_1.formatError)(err));
|
511
|
+
}
|
512
|
+
finally {
|
513
|
+
release();
|
514
|
+
}
|
515
|
+
let result = [];
|
516
|
+
try {
|
517
|
+
result = _.filter(copy, (item) => {
|
518
|
+
return true;
|
519
|
+
});
|
520
|
+
}
|
521
|
+
catch (err) {
|
522
|
+
this.logger.error("getAllTrans error", "dbName", this.dbName, "err", (0, utils_1.formatError)(err));
|
523
|
+
}
|
524
|
+
finally {
|
525
|
+
copy = null;
|
526
|
+
}
|
527
|
+
return result;
|
528
|
+
}
|
485
529
|
async getTasks() {
|
486
530
|
const release = await this.mutex.acquire();
|
487
531
|
try {
|
@@ -507,7 +551,7 @@ class DB {
|
|
507
551
|
copy = _.cloneDeep(this.db.get('trans').value());
|
508
552
|
}
|
509
553
|
catch (err) {
|
510
|
-
this.logger.error("getParentTx", "err", (0, utils_1.formatError)(err));
|
554
|
+
this.logger.error("getParentTx", "err", (0, utils_1.formatError)(err), "dbName", this.dbName, "hash", tran.hash, "lt", tran.lt, "tran.in", JSON.stringify(tran.in, utils_1.bigIntReplacer), "tran.out", JSON.stringify(tran.out, utils_1.bigIntReplacer));
|
511
555
|
}
|
512
556
|
finally {
|
513
557
|
release();
|
@@ -522,7 +566,7 @@ class DB {
|
|
522
566
|
});
|
523
567
|
}
|
524
568
|
catch (err) {
|
525
|
-
this.logger.error("error getParentTx", "err", (0, utils_1.formatError)(err));
|
569
|
+
this.logger.error("error getParentTx", "err", (0, utils_1.formatError)(err), "dbName", this.dbName, "hash", tran.hash, "lt", tran.lt, "tran.in", JSON.stringify(tran.in, utils_1.bigIntReplacer), "tran.out", JSON.stringify(tran.out, utils_1.bigIntReplacer));
|
526
570
|
}
|
527
571
|
finally {
|
528
572
|
copy = null;
|
@@ -577,7 +621,7 @@ class DB {
|
|
577
621
|
copy = _.cloneDeep(this.db.get('trans').value());
|
578
622
|
}
|
579
623
|
catch (err) {
|
580
|
-
this.logger.error("getChildTxs", "err", (0, utils_1.formatError)(err));
|
624
|
+
this.logger.error("getChildTxs", "err", (0, utils_1.formatError)(err), "txHash", txHash, "dbName", this.dbName);
|
581
625
|
}
|
582
626
|
finally {
|
583
627
|
release();
|
@@ -613,7 +657,7 @@ class DB {
|
|
613
657
|
try {
|
614
658
|
this.logger.info("getTxByHashLt", "txHash", txHash, "lt", lt, "dbName", this.dbName);
|
615
659
|
result = _.filter(copy, (item) => {
|
616
|
-
return ((item.hash == txHash) && item.lt == lt);
|
660
|
+
return ((item.hash == txHash) && BigInt(item.lt) == BigInt(lt));
|
617
661
|
});
|
618
662
|
}
|
619
663
|
catch (err) {
|
package/dist/db/DbAccess.d.ts
CHANGED
@@ -17,6 +17,7 @@ export declare class DBAccess {
|
|
17
17
|
getParentTx(dbName: string, tran: TonTransaction): Promise<import("@ton/core").Transaction>;
|
18
18
|
getChildTxs(dbName: string, tran: TonTransaction): Promise<import("@ton/core").Transaction[]>;
|
19
19
|
getAllTransNotHandled(dbName: string): Promise<import("@ton/core").Transaction[]>;
|
20
|
+
getAllTrans(dbName: string): Promise<import("@ton/core").Transaction[]>;
|
20
21
|
getAllTransNotHandledByRange(dbName: string, lt: bigint, to_lt: bigint): Promise<import("@ton/core").Transaction[]>;
|
21
22
|
getTxByOnlyMsgHash(dbName: string, msgCellHash: string): Promise<import("@ton/core").Transaction[]>;
|
22
23
|
getDbNameFinal(dbName: string): string;
|
package/dist/db/DbAccess.js
CHANGED
@@ -172,6 +172,23 @@ class DBAccess {
|
|
172
172
|
return finalRet;
|
173
173
|
}
|
174
174
|
}
|
175
|
+
async getAllTrans(dbName) {
|
176
|
+
logger_1.logger.info("begin getAllTrans", "dbName", dbName);
|
177
|
+
if (!this.has(dbName)) {
|
178
|
+
throw new Error(`db ${dbName} not exists`);
|
179
|
+
}
|
180
|
+
let ret = await this.dbs.get(this.getDbNameFinal(dbName)).getAllTrans();
|
181
|
+
if (!ret || ret.length == 0) {
|
182
|
+
return null;
|
183
|
+
}
|
184
|
+
else {
|
185
|
+
logger_1.logger.info("end getAllTrans", "dbName", dbName);
|
186
|
+
logger_1.logger.info("begin convertTonTransToTrans", "dbName", dbName, "tran.length", ret.length);
|
187
|
+
let finalRet = (0, common_1.convertTonTransToTrans)(ret);
|
188
|
+
logger_1.logger.info("end convertTonTransToTrans", "dbName", dbName, "tran.length", ret.length);
|
189
|
+
return finalRet;
|
190
|
+
}
|
191
|
+
}
|
175
192
|
async getAllTransNotHandledByRange(dbName, lt, to_lt) {
|
176
193
|
if (!this.has(dbName)) {
|
177
194
|
throw new Error(`db ${dbName} not exists`);
|
package/dist/db/common.js
CHANGED
@@ -107,7 +107,7 @@ function convertTonTransToTrans(tonTrans) {
|
|
107
107
|
trans.push(tranTemp);
|
108
108
|
}
|
109
109
|
catch (err) {
|
110
|
-
logger_1.logger.error("convertTonTransToTrans", "tonTran", tonTran, "err", (0, utils_1.formatError)(err));
|
110
|
+
logger_1.logger.error("convertTonTransToTrans", "tonTran.hash", tonTran.hash, "err", (0, utils_1.formatError)(err));
|
111
111
|
}
|
112
112
|
}
|
113
113
|
return trans;
|
package/dist/event/getEvents.js
CHANGED
@@ -91,7 +91,7 @@ async function getTransactions(client, scAddress, opts) {
|
|
91
91
|
ret = await client.getTransactions(scAddr, opts);
|
92
92
|
}
|
93
93
|
catch (err) {
|
94
|
-
logger_1.logger.error((0, utils_1.formatError)(err));
|
94
|
+
logger_1.logger.error((0, utils_1.formatError)(err), "getTransactions from RPC server opts = %s", opts);
|
95
95
|
}
|
96
96
|
return ret;
|
97
97
|
}
|
@@ -101,7 +101,7 @@ async function getTransactionsFromDb(client, scAddress, opts) {
|
|
101
101
|
logger_1.logger.info(formatUtil.format("contractAddr=>", scAddress));
|
102
102
|
let dbAccess = await DbAccess_1.DBAccess.getDBAccess();
|
103
103
|
if (!dbAccess) {
|
104
|
-
logger_1.logger.error("not using db cache");
|
104
|
+
logger_1.logger.error("not using db cache", "getTransactionsFromDb opts = %s", opts);
|
105
105
|
return null;
|
106
106
|
}
|
107
107
|
let retTx = null;
|
@@ -149,7 +149,7 @@ async function getAllTransactions(client, scAddress, limit, retry) {
|
|
149
149
|
maxRetry = retry;
|
150
150
|
}
|
151
151
|
catch (e) {
|
152
|
-
logger_1.logger.error("err ", (0, utils_1.formatError)(e));
|
152
|
+
logger_1.logger.error("err ", (0, utils_1.formatError)(e), "getAllTransactions getTransactions success from rpc", "opts", JSON.stringify(opts, utils_1.bigIntReplacer), "scAddress", scAddress);
|
153
153
|
await (0, utils_1.sleep)(2000);
|
154
154
|
}
|
155
155
|
}
|
@@ -173,7 +173,7 @@ async function getEventFromTran(client, tran, scAddress) {
|
|
173
173
|
logger_1.logger.info(formatUtil.format("opCode=>", opCode.toString(16)));
|
174
174
|
logger_1.logger.info(formatUtil.format("codeTable[opCode]=>", encode_decode_1.codeTable[opCode]));
|
175
175
|
if (!encode_decode_1.codeTable[opCode]) {
|
176
|
-
logger_1.logger.error("opCode is empty", "tran", "opCode", opCode.toString(16));
|
176
|
+
logger_1.logger.error("opCode is empty", "tran", "opCode", opCode.toString(16), tran.hash().toString("base64"));
|
177
177
|
return null;
|
178
178
|
}
|
179
179
|
logger_1.logger.info("before decode bodyCell");
|
@@ -190,7 +190,7 @@ async function getEventFromTran(client, tran, scAddress) {
|
|
190
190
|
logger_1.logger.info("getEventFromTran before handleUserLockEvent", "client is WanTonClient", (0, client_interface_1.IsWanTonClient)(client));
|
191
191
|
let handleResult = await handleUserLockEvent(client, core_1.Address.parse(scAddress), tran);
|
192
192
|
if (!handleResult.valid) {
|
193
|
-
logger_1.logger.error(formatUtil.format("handleResult OP_CROSS_UserLock is not valid"));
|
193
|
+
logger_1.logger.error(formatUtil.format("handleResult OP_CROSS_UserLock is not valid", "tran.hash", tran.hash().toString("base64")));
|
194
194
|
return null;
|
195
195
|
}
|
196
196
|
decoded.origin = handleResult.origin;
|
@@ -198,7 +198,7 @@ async function getEventFromTran(client, tran, scAddress) {
|
|
198
198
|
else {
|
199
199
|
let handleResult = await handleCommonEvent(client, core_1.Address.parse(scAddress), tran);
|
200
200
|
if (!handleResult.valid) {
|
201
|
-
logger_1.logger.error(formatUtil.format("handleResult handleCommonEvent is not valid"));
|
201
|
+
logger_1.logger.error(formatUtil.format("handleResult handleCommonEvent is not valid", "tran.hash", tran.hash().toString("base64")));
|
202
202
|
return null;
|
203
203
|
}
|
204
204
|
decoded.origin = handleResult.origin;
|
@@ -206,7 +206,7 @@ async function getEventFromTran(client, tran, scAddress) {
|
|
206
206
|
return await encode_decode_1.codeTable[opCode]["emitEvent"](decoded);
|
207
207
|
}
|
208
208
|
catch (err) {
|
209
|
-
logger_1.logger.error(formatUtil.format("getEventFromTran err", (0, utils_1.formatError)(err)));
|
209
|
+
logger_1.logger.error(formatUtil.format("getEventFromTran err", (0, utils_1.formatError)(err)), "tran.hash", tran.hash().toString("base64"));
|
210
210
|
return null;
|
211
211
|
}
|
212
212
|
}
|
@@ -252,8 +252,7 @@ async function getTransaction(client, scAddress, lt, tranHash) {
|
|
252
252
|
retry = const_value_1.MAX_RETRY;
|
253
253
|
}
|
254
254
|
catch (err) {
|
255
|
-
|
256
|
-
logger_1.logger.error((0, utils_1.formatError)(err));
|
255
|
+
logger_1.logger.error((0, utils_1.formatError)(err), "getTransactions", "scAddress", scAddress, "opts", opts);
|
257
256
|
await (0, utils_1.sleep)(2000);
|
258
257
|
}
|
259
258
|
}
|
@@ -303,16 +302,16 @@ async function getTransactionFromDb(client, scAddress, lt, tranHash) {
|
|
303
302
|
}
|
304
303
|
catch (err) {
|
305
304
|
logger_1.logger.error("getTxByHashLt err", (0, utils_1.formatError)(err), "retry", retry, "dbName", "scAddress", scAddress, "hash", tranHash);
|
305
|
+
await (0, utils_1.sleep)(const_value_1.RETRY_INTERNAL_TIME);
|
306
306
|
}
|
307
|
-
await (0, utils_1.sleep)(10000);
|
308
307
|
}
|
309
|
-
logger_1.logger.info("getTransactionFromDb success", "scAddress", scAddress, "lt", lt, "tranHash", tranHash, "retTx", retTx);
|
308
|
+
logger_1.logger.info("getTransactionFromDb success", "scAddress", scAddress, "lt", lt, "tranHash", tranHash, "retTx.hash", retTx?.hash().toString('base64'));
|
310
309
|
return retTx;
|
311
310
|
}
|
312
311
|
async function getEventByTranHash(client, scAddress, lt, tranHash) {
|
313
312
|
logger_1.logger.info("entering getEventByTranHash getTransaction success", "tranHash ", tranHash, "lt", lt, "dbName", scAddress);
|
314
313
|
let tran = await getTransaction(client, scAddress, lt, tranHash);
|
315
|
-
logger_1.logger.info("getEventByTranHash getTransaction success",
|
314
|
+
logger_1.logger.info("getEventByTranHash getTransaction success", "tranHash ", tran.hash().toString('hex'));
|
316
315
|
logger_1.logger.info("getEventByTranHash before getEventFromTran", "client is WanTonClient", (0, client_interface_1.IsWanTonClient)(client));
|
317
316
|
return await getEventFromTran(client, tran, scAddress);
|
318
317
|
}
|
@@ -342,13 +341,13 @@ async function handleCommonEvent(client, scAddr, tran) {
|
|
342
341
|
logger_1.logger.info(formatUtil.format("Entering handleCommonEvent"));
|
343
342
|
let transResult = await getTransResult(client, scAddr, tran);
|
344
343
|
if (!transResult.success) {
|
345
|
-
logger_1.logger.error("the trans tree is not success");
|
344
|
+
logger_1.logger.error("the trans tree is not success", "tran.hash", tran.hash().toString('base64'));
|
346
345
|
return {
|
347
346
|
valid: false,
|
348
347
|
origin: transResult.originAddr.toString()
|
349
348
|
};
|
350
349
|
}
|
351
|
-
logger_1.logger.info(formatUtil.format("Ending handleCommonEvent"));
|
350
|
+
logger_1.logger.info(formatUtil.format("Ending handleCommonEvent"), "tran.hash", tran.hash().toString('base64'));
|
352
351
|
return {
|
353
352
|
valid: true,
|
354
353
|
origin: transResult.originAddr.toString()
|
@@ -31,7 +31,8 @@ async function main() {
|
|
31
31
|
await (0, utils_1.sleep)(2000);
|
32
32
|
}
|
33
33
|
try {
|
34
|
-
tonTrans = await dbAcces.getAllTransNotHandled(args[0])
|
34
|
+
//tonTrans = await dbAcces.getAllTransNotHandled(args[0])
|
35
|
+
tonTrans = await dbAcces.getAllTrans(args[0]);
|
35
36
|
console.log("getAllTransNotHandled tonTrans.length", tonTrans.length);
|
36
37
|
}
|
37
38
|
catch (err) {
|
@@ -64,7 +65,7 @@ async function main() {
|
|
64
65
|
await scanEvent();
|
65
66
|
busy = false;
|
66
67
|
}
|
67
|
-
},
|
68
|
+
}, 10000);
|
68
69
|
}
|
69
70
|
main();
|
70
71
|
// ts-node getAllEvents-ex.ts kQDlYDH0PmST2okwTluXJ2mUDMDCzPzXF1gGz24U6H2tE9Wr
|
@@ -164,7 +164,7 @@ async function getUpperSteps(client, scAddr, tran, path) {
|
|
164
164
|
}
|
165
165
|
catch (e) {
|
166
166
|
await sleep(1000);
|
167
|
-
logger_1.logger.error((0, utils_1.formatError)(e));
|
167
|
+
logger_1.logger.error((0, utils_1.formatError)(e), "getUpperSteps getTransactions ", "scAddress", upperAddress, "opts", opts);
|
168
168
|
}
|
169
169
|
}
|
170
170
|
if (retry == 0) {
|
@@ -227,7 +227,7 @@ async function getLowerSteps(client, scAddr, tran, path) {
|
|
227
227
|
let lowerAddr = outMsg.info.dest;
|
228
228
|
let msgCellHash = (0, core_1.beginCell)().store((0, core_1.storeMessage)(outMsg)).endCell().hash().toString('hex');
|
229
229
|
let msgBodyHash = outMsg.body.hash().toString('hex');
|
230
|
-
logger_1.logger.info("===========================before getTranByMsgHash", "outMsg",
|
230
|
+
logger_1.logger.info("===========================before getTranByMsgHash", "outMsg.key", outMsgKey);
|
231
231
|
let lowerTx = await getTranByMsgHash(client, lowerAddr, msgCellHash, msgBodyHash, outMsg.info.createdLt.toString(10));
|
232
232
|
let stepInfoTemp = {
|
233
233
|
addr: lowerAddr,
|
@@ -414,7 +414,6 @@ async function getTranByMsgHash(client, scAddr, msgCellHash, msgBodyHash, lt = '
|
|
414
414
|
}
|
415
415
|
}
|
416
416
|
catch (err) {
|
417
|
-
logger_1.logger.error(err);
|
418
417
|
logger_1.logger.error("getTranByMsgHash from db err", (0, utils_1.formatError)(err), "retry ", maxRetry, "scAddr", scAddr, "msgCellHash", msgCellHash, "msgBodyHash", msgBodyHash, "lt", lt);
|
419
418
|
}
|
420
419
|
await sleep(const_value_1.RETRY_INTERNAL_TIME);
|
@@ -451,7 +450,7 @@ async function getTranByMsgHash(client, scAddr, msgCellHash, msgBodyHash, lt = '
|
|
451
450
|
maxRetry = retry;
|
452
451
|
}
|
453
452
|
catch (e) {
|
454
|
-
logger_1.logger.error("getTranByMsgHash from rpc err ", (0, utils_1.formatError)(e));
|
453
|
+
logger_1.logger.error("getTranByMsgHash from rpc err ", (0, utils_1.formatError)(e), "opts", JSON.stringify(opts, utils_1.bigIntReplacer), "len of getTransactions", transCount, "scAddr", scAddr);
|
455
454
|
await sleep(const_value_1.RETRY_INTERNAL_TIME);
|
456
455
|
}
|
457
456
|
}
|
@@ -481,7 +480,7 @@ async function getTranByOnlyMsgHash(client, scAddr, msgCellHash) {
|
|
481
480
|
}
|
482
481
|
}
|
483
482
|
catch (err) {
|
484
|
-
logger_1.logger.error("getTranByOnlyMsgHash from db err", (0, utils_1.formatError)(err), "retry ", maxRetry);
|
483
|
+
logger_1.logger.error("getTranByOnlyMsgHash from db err", (0, utils_1.formatError)(err), "retry ", maxRetry, "msgCellHash", msgCellHash);
|
485
484
|
}
|
486
485
|
await sleep(10);
|
487
486
|
}
|
@@ -516,7 +515,7 @@ async function getTranByOnlyMsgHash(client, scAddr, msgCellHash) {
|
|
516
515
|
maxRetry = retry;
|
517
516
|
}
|
518
517
|
catch (e) {
|
519
|
-
logger_1.logger.error("err ", (0, utils_1.formatError)(e));
|
518
|
+
logger_1.logger.error("err ", (0, utils_1.formatError)(e), "getTranByOnlyMsgHash getTransactions error from rpc", "opts", JSON.stringify(opts, utils_1.bigIntReplacer), transCount, "scAddr", scAddr);
|
520
519
|
await sleep(const_value_1.RETRY_INTERNAL_TIME);
|
521
520
|
}
|
522
521
|
}
|
package/dist/utils/logger.d.ts
CHANGED
package/dist/utils/logger.js
CHANGED
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
exports.logger = exports.Logger = void 0;
|
7
|
+
exports.concatMsg = concatMsg;
|
7
8
|
const winston_1 = __importDefault(require("winston"));
|
8
9
|
const winston_daily_rotate_file_1 = __importDefault(require("winston-daily-rotate-file"));
|
9
10
|
const moment = require('moment');
|
@@ -53,36 +54,32 @@ class Logger {
|
|
53
54
|
});
|
54
55
|
}
|
55
56
|
debug(...params) {
|
56
|
-
let msgFull = params.join(" ");
|
57
57
|
try {
|
58
|
-
this.logger.debug(
|
58
|
+
this.logger.debug(concatMsg(params));
|
59
59
|
}
|
60
60
|
catch (err) {
|
61
61
|
this.error(err);
|
62
62
|
}
|
63
63
|
}
|
64
64
|
info(...params) {
|
65
|
-
let msgFull = params.join(" ");
|
66
65
|
try {
|
67
|
-
this.logger.info(
|
66
|
+
this.logger.info(concatMsg(params));
|
68
67
|
}
|
69
68
|
catch (err) {
|
70
69
|
this.error(err);
|
71
70
|
}
|
72
71
|
}
|
73
72
|
warn(...params) {
|
74
|
-
let msgFull = params.join(" ");
|
75
73
|
try {
|
76
|
-
this.logger.warning(
|
74
|
+
this.logger.warning(concatMsg(params));
|
77
75
|
}
|
78
76
|
catch (err) {
|
79
77
|
this.error(err);
|
80
78
|
}
|
81
79
|
}
|
82
80
|
error(...params) {
|
83
|
-
let msgFull = params.join(" ");
|
84
81
|
try {
|
85
|
-
this.logger.error(
|
82
|
+
this.logger.error(concatMsg(params));
|
86
83
|
}
|
87
84
|
catch (err) {
|
88
85
|
exports.logger.info(err);
|
@@ -90,5 +87,84 @@ class Logger {
|
|
90
87
|
}
|
91
88
|
}
|
92
89
|
exports.Logger = Logger;
|
90
|
+
function concatMsg(params) {
|
91
|
+
let msgFull = "";
|
92
|
+
try {
|
93
|
+
// Process each element safely
|
94
|
+
const stringParts = params.map((elem) => {
|
95
|
+
if (elem instanceof Array) {
|
96
|
+
let stringObjects = elem.map(item => {
|
97
|
+
if (item instanceof Object) {
|
98
|
+
return JSON.stringify(item, (_, value) => {
|
99
|
+
if (typeof value === 'bigint') {
|
100
|
+
return value.toString(); // Convert BigInt to string
|
101
|
+
}
|
102
|
+
return value;
|
103
|
+
});
|
104
|
+
}
|
105
|
+
else {
|
106
|
+
return String(elem);
|
107
|
+
}
|
108
|
+
});
|
109
|
+
return '[' + stringObjects.join(' ') + ']';
|
110
|
+
}
|
111
|
+
else {
|
112
|
+
if (elem instanceof Object) {
|
113
|
+
return JSON.stringify(elem, (_, value) => {
|
114
|
+
if (typeof value === 'bigint') {
|
115
|
+
return value.toString(); // Convert BigInt to string
|
116
|
+
}
|
117
|
+
return value;
|
118
|
+
});
|
119
|
+
}
|
120
|
+
else {
|
121
|
+
return String(elem);
|
122
|
+
}
|
123
|
+
}
|
124
|
+
});
|
125
|
+
// Join processed parts with spaces
|
126
|
+
msgFull = stringParts.join(' ');
|
127
|
+
}
|
128
|
+
catch (err) {
|
129
|
+
// Fallback: join original elements with spaces
|
130
|
+
msgFull = params.join(' ');
|
131
|
+
}
|
132
|
+
return msgFull;
|
133
|
+
}
|
134
|
+
function concatMsg1(params) {
|
135
|
+
let msgFull = "";
|
136
|
+
try {
|
137
|
+
// Process each element safely
|
138
|
+
const stringParts = params.map((elem) => {
|
139
|
+
if (elem instanceof Array) {
|
140
|
+
let stringObjects = elem.map(item => {
|
141
|
+
if (item instanceof Object) {
|
142
|
+
return JSON.stringify(item, (_, value) => {
|
143
|
+
if (typeof value === 'bigint') {
|
144
|
+
return value.toString(); // Convert BigInt to string
|
145
|
+
}
|
146
|
+
return value;
|
147
|
+
}, 2);
|
148
|
+
}
|
149
|
+
else {
|
150
|
+
return String(elem);
|
151
|
+
}
|
152
|
+
});
|
153
|
+
return stringObjects.join(' ');
|
154
|
+
}
|
155
|
+
else {
|
156
|
+
// Handle primitives (including BigInt, symbol, etc.)
|
157
|
+
return String(elem);
|
158
|
+
}
|
159
|
+
});
|
160
|
+
// Join processed parts with spaces
|
161
|
+
msgFull = stringParts.join(' ');
|
162
|
+
}
|
163
|
+
catch (err) {
|
164
|
+
// Fallback: join original elements with spaces
|
165
|
+
msgFull = params.join(' ');
|
166
|
+
}
|
167
|
+
return msgFull;
|
168
|
+
}
|
93
169
|
const LOG_ROOT = path.join(__dirname, "../log/");
|
94
170
|
exports.logger = new Logger("wan-ton-sdk", path.join(LOG_ROOT, 'wan-ton-sdk.out'), path.join(LOG_ROOT, 'wan-ton-sdk.err'), global.SDK_LOG_LEVEL);
|