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 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
- # content of the sub directory
2
- ## client: used for get random http endpoint
3
- ## code : decode encode emit event
4
- ## contractAccess: used for read cross contract
5
- ## event: interface for get event
6
- ## sign: used hash data for mpc signature
7
- ## wallet: interface about wallet contract. (currently support version4)
8
-
9
- # interface of the contract (same as the ABI of the contract)
10
- ## Bridge.ts : include all the read and write interface of Bridge contract
11
- ## GroupApprove.ts: include all the interface of groupApprove
12
-
13
- # example (file name end with *-ex)
14
- ## getTokenPair-ex.ts: example of read contract
15
- ## addTokenPair-ex.ts: example of write contract
16
- ## getEvent-ex.ts: example of scan blockchain to get the event list.
17
-
18
- # how to start?
19
- ## step 1: npm i wan-ton-bridge
20
- ## step 2: reference of the example directory.
21
-
22
- # Attention
23
- ## This SDK only support contract v4 of wallet.
24
- ## If you need more version of wallet contract, you can reference TonWeb SDK.
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 = 60 * 1000;
26
- exports.MAX_SCAN_INTER = 90 * 1000;
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
- let ret = JSON.stringify(obj, utils_1.bigIntReplacer, 2);
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
- let ret = JSON.parse(str, utils_1.bigIntReplacer);
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({ lt: tran.lt.toString(10) }).value();
100
- this.logger.info("insertTrans ", "dbName", this.dbName, "lt", tran.lt, "result", result);
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
- let txHashBas64 = (0, utils_1.toBase64)(tran.hash);
146
- this.db.get('trans').find({ hash: txHashBas64, lt: tran.lt.toString(10) })
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) {
@@ -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;
@@ -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;
@@ -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
- //logger.error(err.message,err.response?.data?.error,err);
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", tran, "tranHash ", tran.hash().toString('hex'));
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
- }, 100000);
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", 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
  }
@@ -13,4 +13,5 @@ export declare class Logger {
13
13
  warn(...params: any[]): void;
14
14
  error(...params: any[]): void;
15
15
  }
16
+ export declare function concatMsg(params: any[]): string;
16
17
  export declare const logger: Logger;
@@ -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(msgFull);
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(msgFull);
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(msgFull);
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(msgFull);
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wan-ton-sdk",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "scripts": {
5
5
  "build": "rm -rf ./dist && tsc",
6
6
  "test": "jest --verbose",