wan-ton-sdk 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/dist/Bridge.compile.d.ts +2 -0
  2. package/dist/Bridge.compile.js +9 -0
  3. package/dist/Bridge.d.ts +208 -0
  4. package/dist/Bridge.js +468 -0
  5. package/dist/Fake.compile.d.ts +2 -0
  6. package/dist/Fake.compile.js +9 -0
  7. package/dist/GroupApprove.compile.d.ts +2 -0
  8. package/dist/GroupApprove.compile.js +7 -0
  9. package/dist/GroupApprove.d.ts +124 -0
  10. package/dist/GroupApprove.js +181 -0
  11. package/dist/JettonMinter.compile.d.ts +2 -0
  12. package/dist/JettonMinter.compile.js +6 -0
  13. package/dist/JettonMinter.d.ts +45 -0
  14. package/dist/JettonMinter.js +124 -0
  15. package/dist/JettonWallet.compile.d.ts +2 -0
  16. package/dist/JettonWallet.compile.js +6 -0
  17. package/dist/JettonWallet.d.ts +26 -0
  18. package/dist/JettonWallet.js +103 -0
  19. package/dist/Signature.compile.d.ts +2 -0
  20. package/dist/Signature.compile.js +7 -0
  21. package/dist/Signature.d.ts +44 -0
  22. package/dist/Signature.js +106 -0
  23. package/dist/address.compile.d.ts +2 -0
  24. package/dist/address.compile.js +9 -0
  25. package/dist/client/client-interface.d.ts +35 -0
  26. package/dist/client/client-interface.js +9 -0
  27. package/dist/client/client.d.ts +22 -0
  28. package/dist/client/client.js +86 -0
  29. package/dist/client/tonapi-client.d.ts +4630 -0
  30. package/dist/client/tonapi-client.js +5376 -0
  31. package/dist/code/encode-decode.d.ts +132 -0
  32. package/dist/code/encode-decode.js +645 -0
  33. package/dist/code/userLock.d.ts +39 -0
  34. package/dist/code/userLock.js +284 -0
  35. package/dist/common.d.ts +9 -0
  36. package/dist/common.js +45 -0
  37. package/dist/config/config-ex.d.ts +7 -0
  38. package/dist/config/config-ex.js +73 -0
  39. package/dist/const/const-value.d.ts +21 -0
  40. package/dist/const/const-value.js +26 -0
  41. package/dist/contractAccess/bridgeAccess.d.ts +10 -0
  42. package/dist/contractAccess/bridgeAccess.js +55 -0
  43. package/dist/contractAccess/groupApproveAccess.d.ts +10 -0
  44. package/dist/contractAccess/groupApproveAccess.js +54 -0
  45. package/dist/db/Db.d.ts +24 -0
  46. package/dist/db/Db.js +739 -0
  47. package/dist/db/DbAccess.d.ts +24 -0
  48. package/dist/db/DbAccess.js +211 -0
  49. package/dist/db/common.d.ts +5 -0
  50. package/dist/db/common.js +114 -0
  51. package/dist/event/getEvents.d.ts +17 -0
  52. package/dist/event/getEvents.js +387 -0
  53. package/dist/example/db/createDb-ex.d.ts +1 -0
  54. package/{example/createDb-ex.ts → dist/example/db/createDb-ex.js} +3 -4
  55. package/dist/example/db/dbFeedTrans-ex.d.ts +1 -0
  56. package/{example/dbFeedTrans-ex.ts → dist/example/db/dbFeedTrans-ex.js} +9 -11
  57. package/dist/example/event/getAllEvents-ex.d.ts +1 -0
  58. package/dist/example/event/getAllEvents-ex.js +70 -0
  59. package/dist/example/event/getEventByHash-ex.d.ts +1 -0
  60. package/{example/getEventByHash-ex.ts → dist/example/event/getEventByHash-ex.js} +21 -25
  61. package/dist/example/event/getEventsByRange-ex.d.ts +1 -0
  62. package/dist/example/event/getEventsByRange-ex.js +58 -0
  63. package/dist/example/getAllTrans.d.ts +1 -0
  64. package/dist/example/getAllTrans.js +30 -0
  65. package/dist/example/jetton/getJettonInfo-ex.d.ts +1 -0
  66. package/dist/example/jetton/getJettonInfo-ex.js +32 -0
  67. package/dist/example/lock-release/smgRelease-ex.d.ts +1 -0
  68. package/dist/example/lock-release/smgRelease-ex.js +134 -0
  69. package/dist/example/lock-release/userLock-ex.d.ts +1 -0
  70. package/dist/example/lock-release/userLock-ex.js +69 -0
  71. package/dist/example/manage/addSmg-ex.d.ts +1 -0
  72. package/dist/example/manage/addSmg-ex.js +59 -0
  73. package/dist/example/manage/compileContract-ex.d.ts +1 -0
  74. package/dist/example/manage/compileContract-ex.js +11 -0
  75. package/dist/example/manage/deploy-ex.d.ts +1 -0
  76. package/dist/example/manage/deploy-ex.js +58 -0
  77. package/dist/example/manage/setFee-ex.d.ts +1 -0
  78. package/dist/example/manage/setFee-ex.js +61 -0
  79. package/dist/example/manage/setFeeProxy.d.ts +1 -0
  80. package/dist/example/manage/setFeeProxy.js +47 -0
  81. package/dist/example/manage/upgradeBridgeSc-ex.d.ts +1 -0
  82. package/dist/example/manage/upgradeBridgeSc-ex.js +44 -0
  83. package/dist/example/token/AddToken-ex.d.ts +1 -0
  84. package/dist/example/token/AddToken-ex.js +113 -0
  85. package/dist/example/token/addTokenPair-ex.d.ts +1 -0
  86. package/dist/example/token/addTokenPair-ex.js +59 -0
  87. package/dist/example/token/delTokenPair-ex.d.ts +1 -0
  88. package/dist/example/token/delTokenPair-ex.js +49 -0
  89. package/dist/example/token/getTokenPair-ex.d.ts +1 -0
  90. package/dist/example/token/getTokenPair-ex.js +39 -0
  91. package/dist/example/token/mintToken-ex.d.ts +1 -0
  92. package/dist/example/token/mintToken-ex.js +56 -0
  93. package/dist/example/tran/converTranToTonTran.d.ts +1 -0
  94. package/dist/example/tran/converTranToTonTran.js +32 -0
  95. package/dist/example/tran/getTransByRange-ex.d.ts +1 -0
  96. package/{example/getTransByRange-ex.ts → dist/example/tran/getTransByRange-ex.js} +26 -40
  97. package/dist/example/tran/getTransaction-ex.d.ts +1 -0
  98. package/dist/example/tran/getTransaction-ex.js +47 -0
  99. package/dist/example/tran/isTranSuccess-ex.d.ts +1 -0
  100. package/dist/example/tran/isTranSuccess-ex.js +27 -0
  101. package/dist/fee/fee.d.ts +12 -0
  102. package/dist/fee/fee.js +21 -0
  103. package/dist/index.d.ts +15 -0
  104. package/dist/index.js +95 -0
  105. package/dist/jest.config.d.ts +3 -0
  106. package/dist/jest.config.js +8 -0
  107. package/dist/opcodes.d.ts +55 -0
  108. package/dist/opcodes.js +59 -0
  109. package/dist/sign/buildHash.d.ts +6 -0
  110. package/dist/sign/buildHash.js +39 -0
  111. package/dist/sign/rawTrans.d.ts +36 -0
  112. package/dist/sign/rawTrans.js +89 -0
  113. package/dist/sign/tools-secp256k1.d.ts +21 -0
  114. package/{sign → dist/sign}/tools-secp256k1.js +18 -44
  115. package/dist/testData/JettonMinter.compile.func.d.ts +2 -0
  116. package/dist/testData/JettonMinter.compile.func.js +13 -0
  117. package/dist/testData/JettonWallet.compile.func.d.ts +2 -0
  118. package/dist/testData/JettonWallet.compile.func.js +13 -0
  119. package/dist/testData/bridge.compile.func.d.ts +2 -0
  120. package/dist/testData/bridge.compile.func.js +13 -0
  121. package/dist/transResult/transResult.d.ts +29 -0
  122. package/dist/transResult/transResult.js +528 -0
  123. package/dist/utils/compileContract.d.ts +13 -0
  124. package/dist/utils/compileContract.js +54 -0
  125. package/dist/utils/logger.d.ts +16 -0
  126. package/dist/utils/logger.js +94 -0
  127. package/dist/utils/utils.d.ts +26 -0
  128. package/dist/utils/utils.js +330 -0
  129. package/dist/wallet/balance.d.ts +5 -0
  130. package/dist/wallet/balance.js +29 -0
  131. package/dist/wallet/jetton.d.ts +16 -0
  132. package/dist/wallet/jetton.js +171 -0
  133. package/dist/wallet/walletContract.d.ts +31 -0
  134. package/dist/wallet/walletContract.js +106 -0
  135. package/package.json +8 -6
  136. package/Bridge.compile.ts +0 -8
  137. package/Bridge.ts +0 -645
  138. package/Bridge.ts.org +0 -647
  139. package/Fake.compile.ts +0 -8
  140. package/GroupApprove.compile.ts +0 -6
  141. package/GroupApprove.ts +0 -274
  142. package/JettonMinter.compile.ts +0 -5
  143. package/JettonMinter.ts +0 -135
  144. package/JettonWallet.compile.ts +0 -5
  145. package/JettonWallet.ts +0 -127
  146. package/Signature.compile.ts +0 -6
  147. package/Signature.ts +0 -105
  148. package/address.compile.ts +0 -8
  149. package/client/1.json +0 -1730
  150. package/client/client.ts +0 -73
  151. package/client/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +0 -15
  152. package/code/decode.spec.ts +0 -81
  153. package/code/encode-decode.ts +0 -622
  154. package/code/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +0 -20
  155. package/code/log/wan-ton-sdk.out.2025-01-20 +0 -0
  156. package/code/userLock.ts +0 -291
  157. package/common.ts +0 -62
  158. package/config/config-ex.ts +0 -25
  159. package/config/config.ts +0 -1
  160. package/const/const-value.ts +0 -33
  161. package/contractAccess/bridgeAccess.ts +0 -60
  162. package/contractAccess/groupApproveAccess.ts +0 -59
  163. package/data/EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs.json +0 -7348
  164. package/db/Db.spec.ts +0 -193
  165. package/db/Db.ts +0 -736
  166. package/db/DbAccess.spec.ts +0 -23
  167. package/db/DbAccess.ts +0 -186
  168. package/db/common.ts +0 -94
  169. package/db/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +0 -15
  170. package/db/log/wan-ton-sdk.out.2025-04-21 +0 -0
  171. package/event/getEvents.ts +0 -441
  172. package/event/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +0 -15
  173. package/event/log/wan-ton-sdk.out.2024-12-19 +0 -0
  174. package/example/0:1.txt +0 -1
  175. package/example/AddToken-ex.ts +0 -148
  176. package/example/README.md +0 -21
  177. package/example/addSmg-ex.ts +0 -78
  178. package/example/addTokenPair-ex.ts +0 -73
  179. package/example/compileContract-ex.ts +0 -10
  180. package/example/converTranToTonTran.ts +0 -43
  181. package/example/delTokenPair-ex.ts +0 -63
  182. package/example/deploy-ex.ts +0 -68
  183. package/example/getAllEvents-ex.ts +0 -61
  184. package/example/getAllTrans.ts +0 -32
  185. package/example/getContractState-ex.ts +0 -33
  186. package/example/getEvents-ex.ts +0 -55
  187. package/example/getJettonInfo-ex.ts +0 -44
  188. package/example/getTokenPair-ex.ts +0 -47
  189. package/example/getTransaction-ex.ts +0 -62
  190. package/example/isTranSuccess-ex.ts +0 -33
  191. package/example/locateTx-ex.ts +0 -44
  192. package/example/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +0 -55
  193. package/example/log/wan-ton-sdk.out.2025-04-21 +0 -447
  194. package/example/log/wan-ton-sdk.out.2025-04-22 +0 -1918
  195. package/example/log/wan-ton-sdk.out.2025-04-23 +0 -4216
  196. package/example/log/wan-ton-sdk.out.2025-04-24.gz +0 -0
  197. package/example/log/wan-ton-sdk.out.2025-04-25 +0 -46814
  198. package/example/log/wan-ton-sdk.out.2025-04-27.gz +0 -0
  199. package/example/log/wan-ton-sdk.out.2025-04-28 +0 -4966
  200. package/example/log/wan-ton-sdk.out.2025-04-29 +0 -1328
  201. package/example/log/wan-ton-sdk.out.2025-04-30 +0 -9
  202. package/example/mintToken-ex.ts +0 -82
  203. package/example/setFee-ex.ts +0 -82
  204. package/example/setFeeProxy.ts +0 -70
  205. package/example/smgRelease-ex.ts +0 -173
  206. package/example/upgradeBridgeSc-ex.ts +0 -49
  207. package/example/userLock-ex.ts +0 -78
  208. package/fee/fee.ts +0 -23
  209. package/index.ts +0 -76
  210. package/jest.config.ts +0 -9
  211. package/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +0 -20
  212. package/log/wan-ton-sdk.out.2025-04-21 +0 -0
  213. package/log/wan-ton-sdk.out.2025-04-30 +0 -10
  214. package/opcodes.ts +0 -58
  215. package/publish.sh +0 -78
  216. package/sign/buildHash.ts +0 -47
  217. package/sign/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +0 -15
  218. package/sign/log/wan-ton-sdk.out.2025-04-14 +0 -3
  219. package/sign/rawTrans.spec.ts +0 -117
  220. package/sign/rawTrans.ts +0 -122
  221. package/testData/JettonMinter.compile.func.ts +0 -8
  222. package/testData/JettonWallet.compile.func.ts +0 -8
  223. package/testData/addressList.json +0 -6
  224. package/testData/bridge.compile.func.ts +0 -8
  225. package/testData/bridge.compiled.json +0 -1
  226. package/testData/contractAddress.json +0 -7
  227. package/testData/jettonTokenInfo.json +0 -14
  228. package/testData/prvlist.json +0 -6
  229. package/testData/smg.json +0 -5
  230. package/testData/tokenInfo.json +0 -23
  231. package/transResult/transResult.ts +0 -608
  232. package/tsconfig.json +0 -19
  233. package/utils/.compiled.json +0 -1
  234. package/utils/compileContract.ts +0 -60
  235. package/utils/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +0 -15
  236. package/utils/log/wan-ton-sdk.out.2025-01-08 +0 -0
  237. package/utils/logger.spec.ts +0 -14
  238. package/utils/logger.ts +0 -96
  239. package/utils/utils.spec.ts +0 -21
  240. package/utils/utils.ts +0 -295
  241. package/wallet/balance.ts +0 -29
  242. package/wallet/jetton.spec.ts +0 -27
  243. package/wallet/jetton.ts +0 -159
  244. package/wallet/walletContract.spec.ts +0 -111
  245. package/wallet/walletContract.ts +0 -105
  246. /package/{client/log/wan-ton-sdk.out.2024-12-19 → dist/config/config.d.ts} +0 -0
  247. /package/{code/log/wan-ton-sdk.out.2025-01-15 → dist/config/config.js} +0 -0
package/db/Db.ts DELETED
@@ -1,736 +0,0 @@
1
- import {convertTranToTonTrans, DBDataDir} from './common'
2
- import path from 'path';
3
- import {
4
- bigIntReplacer,
5
- ensureFileAndPath,
6
- ensurePath,
7
- formatError,
8
- isAddressEqual,
9
- removeFile,
10
- sleep
11
- } from "../utils/utils";
12
- import {getClient, TonClientConfig} from "../client/client";
13
- import {TonClient} from "@ton/ton";
14
- import {Address, beginCell, storeMessage, Transaction} from "@ton/core";
15
- import formatUtil from "util";
16
- import {CommonMessageInfoInternal} from "@ton/core/src/types/CommonMessageInfo";
17
- import {MAX_BACKTRACE_SECONDS, MAX_LIMIT, MAX_RETRY} from "../const/const-value";
18
-
19
- //todo how to provide testnet | mainnet information.
20
- // const config:TonClientConfig = {
21
- // network:"testnet", // testnet|mainnet
22
- // tonClientTimeout: 60 * 1000 * 1000,
23
- // }
24
-
25
- const config:TonClientConfig = {
26
- network:"mainnet", // testnet|mainnet
27
- tonClientTimeout: 60 * 1000 * 1000,
28
- }
29
-
30
- var _ = require('lodash');
31
-
32
- const { Mutex } = require('async-mutex');
33
-
34
- const minLt = BigInt(0)
35
- //const maxLt = 1n << 256n - 1n; //error: "TypeError: Can't parse integer in parameter lt"
36
- const maxLt = 1n << 255n - 1n;
37
-
38
- export enum RangeOpen {
39
- CloseRange, // 0
40
- RightOpenRange, // 1
41
- //LeftOpenRange, // 2
42
- //BothOpenRange // 3
43
- }
44
-
45
- export type TonTransaction = {
46
- hash: string,// hexString
47
- lt:bigint,
48
- raw:string,
49
- in:{
50
- src: string,
51
- inMsgHash:string,
52
- inBodyHash:string,
53
- createdLt:bigint,
54
- createAt:bigint,
55
- },
56
- out:{
57
- dst:string,
58
- outMsgHash:string,
59
- outBodyHash:string,
60
- createdLt:bigint,
61
- createAt:bigint,
62
- }[],
63
- emitEventOrNot:boolean,
64
- }
65
-
66
- type Data = {
67
- trans: TonTransaction[],
68
- isInitial: boolean,
69
- scanTasks:Task[]
70
- }
71
-
72
- type Task = {
73
- rangeStart:bigint,
74
- rangeEnd:bigint,
75
- rangeEndHash?:string,
76
- rangeOpen:RangeOpen,
77
- }
78
-
79
- const defaultData:Data = {
80
- trans:[],
81
- isInitial:true,
82
- scanTasks:[{
83
- rangeStart:minLt,
84
- rangeEnd:maxLt,
85
- rangeOpen:RangeOpen.RightOpenRange,
86
- }],
87
- }
88
-
89
- var serializeWithBig = function(obj:any){
90
- return JSON.stringify(obj,bigIntReplacer,2)
91
- }
92
-
93
- var deserializeWithBig = function(str:string){
94
- return JSON.parse(str,bigIntReplacer);
95
- }
96
-
97
- class DB {
98
- private readonly dbName: string;
99
- private fullFileName: string;
100
- private db = null;
101
- private mutex: any;
102
- constructor(dbName:string) {
103
- this.dbName = dbName;
104
- this.db = null;
105
- this.mutex = new Mutex();
106
- }
107
-
108
- getDbName() {
109
- return this.dbName;
110
- }
111
-
112
- async init(dbName:string) {
113
-
114
- const low = require('lowdb')
115
- const FileSync = require('lowdb/adapters/FileSync')
116
- const fullName = path.join(...[DBDataDir,dbName+'.json'])
117
- console.log("fullName",fullName);
118
- this.fullFileName = fullName;
119
- if(!(await ensurePath(fullName))){
120
- throw new Error(`init db error ${fullName}`);
121
- }
122
-
123
- let myDefaultData = _.cloneDeep(defaultData);
124
- const adapter = new FileSync(fullName,{
125
- defaultValue:myDefaultData,
126
- serialize:serializeWithBig,
127
- deserialize:deserializeWithBig,
128
- });
129
- this.db = low(adapter)
130
- }
131
-
132
- async stopFeedTrans(){
133
- const release = await this.mutex.acquire();
134
- try {
135
- console.log("Entering stopFeedTrans");
136
- } finally {
137
- release();
138
- }
139
- }
140
-
141
- async insertTrans(trans:TonTransaction[]){
142
- console.log("Entering insertTrans","dbName",this.dbName,"tonTrans.length",trans?.length);
143
- if(trans?.length == 0){
144
- return;
145
- }
146
- let copy = {};
147
- const release = await this.mutex.acquire();
148
- try {
149
- copy = _.cloneDeep(this.db.getState())
150
- _.forEach(trans, tran => {
151
- this.db.get('trans').value().push(tran);
152
- });
153
- this.db.write();
154
- }catch(err){
155
- this.db.setState(copy);
156
- console.error("insertTrans","err",formatError(err));
157
- throw err;
158
- }finally {
159
- release();
160
- }
161
- }
162
-
163
- /////////////////////////////////////
164
- // write db
165
- /////////////////////////////////////
166
- async updateTask(tasks:Task[]){
167
- console.log("=======================================Entering updateTask=========================","tasks",JSON.stringify(tasks,bigIntReplacer));
168
- let copy = {};
169
- const release = await this.mutex.acquire();
170
- try {
171
- copy = _.cloneDeep(this.db.getState())
172
- this.db.set("scanTasks",tasks).write();
173
- }catch(err){
174
- this.db.setState(copy)
175
- console.error("updateTask","err",formatError(err));
176
- }
177
- finally {
178
- release();
179
- }
180
- }
181
-
182
- async setTranHandleFlag(tran:TonTransaction,finishOrNot:boolean){
183
- let copy = {};
184
- const release = await this.mutex.acquire();
185
- try {
186
- console.log("Entering setTranHandleFlag");
187
- copy = _.cloneDeep(this.db.getState())
188
-
189
- this.db.get('trans').find({hash: tran.hash,lt:tran.lt})
190
- .assign({emitEventOrNot: finishOrNot})
191
- .write()
192
- } catch (err) {
193
- this.db.setState(copy)
194
- console.log("setTranHandleFlag","err",formatError(err));
195
- }
196
- finally {
197
- release();
198
- }
199
- }
200
-
201
- async setTranHandleFlags(trans:TonTransaction[],finishOrNots:boolean[]){
202
- console.log("Entering setTranHandleFlag");
203
- if(trans.length != finishOrNots.length || trans.length == 0 ){
204
- throw(new Error("setTranHandleFlag fail"))
205
- }
206
- try {
207
- for(let i = 0;i < trans.length; i++){
208
- await this.setTranHandleFlag(trans[i],finishOrNots[i]);
209
- }
210
- }catch(err){
211
- console.log("setTranHandleFlag","err",formatError(err));
212
- }
213
- }
214
- // isInitial (true->false)
215
- async setScanStarted(){
216
- let copy = {};
217
- const release = await this.mutex.acquire();
218
- try {
219
- console.log("Entering setScanStarted");
220
- copy = _.cloneDeep(this.db.getState())
221
- this.db.set('isInitial', false).write();
222
- }catch(err){
223
- this.db.setState(copy);
224
- console.log("setScanStarted","err",formatError(err));
225
- }
226
- finally {
227
- release();
228
- }
229
- }
230
-
231
- async getScanStatus(){
232
- let copy = {};
233
- const release = await this.mutex.acquire();
234
- try {
235
- console.log("Entering getScanStatus");
236
- copy = _.cloneDeep(this.db.getState())
237
- return this.db.get('isInitial').value();
238
- }catch(err){
239
- this.db.setState(copy);
240
- console.log("setScanStarted","err",formatError(err));
241
- }
242
- finally {
243
- release();
244
- }
245
- }
246
-
247
- async scanFun(){
248
- let tasks = await this.getTasks();
249
- console.log("scanFun","dbName",this.dbName,"tasks",JSON.stringify(tasks,bigIntReplacer));
250
- let retTasks = await this.scanTonTxByTasks(tasks);
251
- await this.updateTask(retTasks);
252
- }
253
-
254
- // scan history and increased new trans into db.
255
- async feedTrans(){
256
- console.log("Entering feedTrans..............",this.dbName);
257
- let scanInit = await this.getScanStatus();
258
- if(scanInit){
259
- await this.setScanStarted();
260
- }
261
-
262
-
263
- try{
264
- console.log(`***************************first time feedTrans is working**************************************`,this.dbName);
265
- await this.scanFun();
266
- }catch(e){
267
- console.error(`first time feedTrans error. db:${this.dbName}, err:`,formatError(e));
268
- }
269
-
270
- // todo should open below code.
271
- let isRunning = false;
272
- setInterval(async () => {
273
- let self = this;
274
- if (isRunning) return;
275
- isRunning = true;
276
-
277
- try {
278
- console.log(`***************************feedTrans is working**************************************`,this.dbName);
279
- await self.scanFun();
280
- } catch (e) {
281
- console.error("feedTrans error",formatError(e));
282
- }finally {
283
- isRunning = false;
284
- }
285
- }, 20000);
286
- }
287
-
288
- async scanTonTxByTasks(tasks:Task[]){
289
- console.log("entering scanTonTxByTasks:",this.dbName,"tasks",JSON.stringify(tasks,bigIntReplacer));
290
- let retTask:Task[] = [];
291
- for(let i = tasks.length-1 ; i>= 0; i--){
292
- try{
293
- console.log("----------------------before scanTonTxByTask--------------","input task",tasks[i]);
294
- let retOneTask = await this.scanTonTxByTask(tasks[i])
295
- console.log("----------------------after scanTonTxByTask--------------","output tasks",retOneTask,"input task",tasks[i]);
296
- retTask.push(...retOneTask);
297
- }catch(err){
298
- console.log("scanTonTxByTasks err",formatError(err));
299
- retTask.push(tasks[i]);
300
- }
301
- }
302
- return retTask;
303
- }
304
-
305
- async scanTonTxByTask(task:Task) {
306
- let client:TonClient = await getClient(); //todo check how to provide config.
307
- console.log("entering scanTonTxByTask:", this.dbName, "task", JSON.stringify(task, bigIntReplacer), "typeof task.rangeStart", typeof task.rangeStart);
308
- let rangeStartLt = BigInt(0);
309
- let rangeEndLt = BigInt(0);
310
- if (typeof task.rangeStart === "string") {
311
- let strTemp = String(task.rangeStart)
312
- rangeStartLt = strTemp[strTemp.length - 1] == 'n' ? BigInt(strTemp.slice(0, strTemp.length - 1)) : BigInt(strTemp);
313
- }
314
- if (typeof task.rangeStart === "bigint") {
315
- rangeStartLt = task.rangeStart;
316
- }
317
-
318
- if (typeof task.rangeEnd === "string") {
319
- let strTemp = String(task.rangeEnd)
320
- rangeEndLt = strTemp[strTemp.length - 1] == 'n' ? BigInt(strTemp.slice(0, strTemp.length - 1)) : BigInt(strTemp);
321
- }
322
- if (typeof task.rangeEnd === "bigint") {
323
- rangeEndLt = task.rangeEnd;
324
- }
325
-
326
- if (rangeEndLt >= maxLt) {
327
- let tranPovit :Transaction = null;
328
- //need split one task to two task by povilt trans.
329
- let optsOne: {
330
- limit: number;
331
- lt?: string;
332
- hash?: string;
333
- to_lt?: string;
334
- inclusive?: boolean;
335
- archival?: boolean;
336
- } = {
337
- limit: 1,
338
- archival: true,
339
- }
340
- let scAddress = Address.parse(this.dbName);
341
- try {
342
- let getSuccess = false
343
- let maxRetry = MAX_RETRY;
344
- while ((maxRetry-- > 0) && (!getSuccess)) {
345
- try {
346
-
347
- let trans = await client.getTransactions(scAddress, optsOne)
348
- getSuccess = true;
349
- console.log("get transcations one","optsOne",optsOne,"pivolt tran hash",trans[0].hash().toString('hex'));
350
- tranPovit = trans[0];
351
- } catch (e) {
352
-
353
- console.error("err ", formatError(e));
354
- await sleep(2000);
355
- }
356
- }
357
- if (maxRetry < 0) {
358
- console.log("maxRetry == 0, before throw err.XXXXXXXXXXXXXXX");
359
- throw new Error(formatUtil.format("fail by max_retry getTransactions one failed after %d retry. opts is %s", MAX_RETRY, JSON.stringify(optsOne)))
360
- }
361
- await sleep(2000);
362
- }catch(err){
363
- console.error("err", formatError(err));
364
- throw err;
365
- }
366
- let retTask = [];
367
- if(tranPovit?.lt > rangeStartLt){
368
- retTask.push({
369
- //rangeStart:tranPovit?.lt - BigInt(MAX_BACKTRACE_SECONDS) > rangeStartLt ? tranPovit?.lt-BigInt(MAX_BACKTRACE_SECONDS) : rangeStartLt,
370
- rangeStart:rangeStartLt,
371
- rangeEnd:tranPovit?.lt,
372
- rangeEndHash:tranPovit?.hash().toString('base64'),
373
- rangeOpen:RangeOpen.CloseRange,
374
- });
375
- }
376
- retTask.push({
377
- rangeStart:tranPovit?.lt.toString(10),
378
- rangeEnd:rangeEndLt,
379
- rangeOpen:RangeOpen.CloseRange,
380
- });
381
- return retTask;
382
- }
383
-
384
- let rangeOpen = task.rangeOpen;
385
- let retTask:Task[] = [];
386
- let maxScanedLt = rangeStartLt;
387
- let minScanedLt = rangeEndLt;
388
- let minScannedHash = '';
389
-
390
- let trans = [];
391
- let transCount = MAX_LIMIT;
392
- let limit = MAX_LIMIT;
393
- let maxRetry = MAX_RETRY;
394
- let retry = MAX_RETRY;
395
- let needSlitRange = false;
396
- let opts: {
397
- limit: number;
398
- lt?: string;
399
- hash?: string;
400
- to_lt?: string;
401
- inclusive?: boolean;
402
- archival?: boolean;
403
- } = {
404
- limit,
405
- archival:true,
406
- to_lt:rangeStartLt.toString(10),
407
- lt:rangeEndLt.toString(10),
408
- hash:task.rangeEndHash,
409
- inclusive:true,
410
- }
411
- let scAddress = Address.parse(this.dbName);
412
-
413
- let retraced = false;
414
- let nowTimeStamp = Math.floor((new Date()).getTime()/1000);
415
- let oldestTimeStamp = nowTimeStamp;
416
- try{
417
- while(transCount && !retraced){
418
- let getSuccess = false
419
- let insertSuccess = false
420
- let oldMaxScaanedLt = maxScanedLt;
421
- let oldMinScanedLt = minScanedLt;
422
-
423
- while((maxRetry-- >0) && (!getSuccess || !insertSuccess) ){
424
- try{
425
-
426
- console.log("maxRetry = %s, getSuccess = %s, insertSuccess=%s,transCount = %s, dbName = %s opts = %s",
427
- maxRetry,getSuccess,insertSuccess,transCount,scAddress.toString(),JSON.stringify(opts,bigIntReplacer));
428
-
429
- let ret = await client.getTransactions(scAddress,opts)
430
- getSuccess = true;
431
-
432
- transCount = ret.length;
433
- console.log("getTransactions success","opts",JSON.stringify(opts,bigIntReplacer),"len of getTransactions",transCount,"dbName",this.dbName);
434
- for(let tran of ret){
435
- console.log("(scanTonTxByTask) =====> tranHash = %s lt = %s",tran.hash().toString('base64'),tran.lt.toString(10),"dbName",this.dbName);
436
- trans.push(tran);
437
- }
438
- if(ret.length){
439
- opts.lt = ret[ret.length-1].lt.toString(10);
440
- opts.hash = ret[ret.length-1].hash().toString('base64');
441
- maxScanedLt = ret[0].lt > maxScanedLt ? ret[0].lt : maxScanedLt
442
- minScanedLt = ret[ret.length-1].lt < minScanedLt ? ret[ret.length-1].lt : minScanedLt;
443
- minScannedHash = ret[ret.length-1].hash().toString('base64');
444
- let cci = (ret[ret.length-1].inMessage.info as unknown as CommonMessageInfoInternal);
445
- //console.log("cci=>",cci);
446
- oldestTimeStamp = cci.createdAt;
447
- }
448
- console.log("maxScanedLt",maxScanedLt,"minScanedLt",minScanedLt,"scAddress or dbName",this.dbName);
449
-
450
- let tonTrans:TonTransaction[] = [];
451
- console.log("before convertTranToTonTrans","db",this.dbName,"trans.length",trans?.length);
452
- tonTrans = convertTranToTonTrans(trans);
453
- console.log("before insertTrans","db",this.dbName,"tonTrans.length",tonTrans?.length);
454
- await this.insertTrans(tonTrans);
455
- trans = [];
456
-
457
- insertSuccess = true;
458
- maxRetry = retry;
459
- console.log("scanTonTxByTask","oldestTimeStamp",oldestTimeStamp,"MAX_BACKTRACE_SECONDS",MAX_BACKTRACE_SECONDS,"nowTimeStamp",nowTimeStamp);
460
- if(BigInt(oldestTimeStamp)+BigInt(MAX_BACKTRACE_SECONDS) < BigInt(nowTimeStamp)){
461
- retraced = true;
462
- console.log("scan finish because other are too older.");
463
- break;
464
- }
465
- }catch(e){
466
- maxScanedLt = oldMaxScaanedLt;
467
- minScanedLt = oldMinScanedLt;
468
-
469
- console.error("err ",formatError(e));
470
- await sleep(2000);
471
- }
472
- }
473
- if(maxRetry < 0){
474
- console.log("maxRetry == 0, before throw err.XXXXXXXXXXXXXXX");
475
- throw new Error(formatUtil.format("fail by max_retry getTransactions failed after %d retry. opts is %s",retry,JSON.stringify(opts)))
476
- }
477
-
478
- await sleep(2000);
479
- console.log("last loop transCount",transCount,"retry",maxRetry);
480
- }
481
- }catch(err){
482
- console.error("err",formatError(err));
483
- needSlitRange = true;
484
- }
485
- if(transCount ==0 || retraced){
486
- console.log("scan success","startLt",rangeStartLt.toString(10),"endLt",rangeEndLt.toString(10),"rangeOpen",rangeOpen);
487
- return retTask;
488
- }
489
- console.log("minScanedLt",minScanedLt,"maxScanedLt",maxScanedLt,"rangeStartLt",rangeStartLt,"rangeEndLt",rangeEndLt);
490
- if(maxScanedLt == rangeStartLt){ // no one tran scanned.
491
- retTask.push(task);
492
- return retTask;
493
- }
494
- if(needSlitRange){ // shrink the range
495
- if(rangeStartLt < minScanedLt){
496
- retTask.push({
497
- rangeStart:rangeStartLt,
498
- rangeEnd:minScanedLt,
499
- rangeEndHash:minScannedHash,
500
- rangeOpen:RangeOpen.CloseRange,
501
- });
502
- }
503
- }
504
- console.log(`after scanTonTxByTask, task`,JSON.stringify(retTask,bigIntReplacer),"dbName",this.dbName);
505
- return retTask;
506
- }
507
-
508
-
509
-
510
- async clearDb(){
511
- this.db.setState({}).write();
512
- await removeFile(this.fullFileName);
513
- }
514
-
515
- /////////////////////////////////////
516
- // read db
517
- /////////////////////////////////////
518
-
519
- async getAllTransNotHandled() {
520
- let copy = {};
521
- const release = await this.mutex.acquire();
522
- try {
523
- console.log("getAllTransNotHandled");
524
- copy = _.cloneDeep(this.db.get('trans').value());
525
- } catch (err) {
526
- console.error("getAllTransNotHandled", "err", formatError(err));
527
- } finally {
528
- release();
529
- }
530
-
531
- let result: TonTransaction[] = [];
532
- try {
533
-
534
- result = _.filter(copy, (item) => {
535
- return (item.emitEventOrNot == false);
536
- })
537
- } catch (err) {
538
- console.error("getAllTransNotHandled error","dbName",this.dbName,"err",formatError(err))
539
- } finally {
540
- copy = null;
541
- }
542
- return result;
543
- }
544
-
545
- async getTasks(){
546
- const release = await this.mutex.acquire();
547
- try {
548
- console.log("getTasks");
549
- return _.cloneDeep(this.db.get("scanTasks").value());
550
- }catch(err){
551
- console.log("getTasks","err",formatError(err));
552
- }
553
- finally {
554
- release();
555
- }
556
- }
557
-
558
- async getParentTx(tran:TonTransaction){
559
- //console.log("before getParentTx","dbName",this.dbName,"hash",tran.hash,"lt",tran.lt,"tonTran",JSON.stringify(tran,bigIntReplacer));
560
- console.log("before getParentTx","dbName",this.dbName,"hash",tran.hash,"lt",tran.lt,"tran.in",
561
- JSON.stringify(tran.in,bigIntReplacer),"tran.out",JSON.stringify(tran.out,bigIntReplacer));
562
- if(!tran){
563
- return null;
564
- }
565
- let copy = {};
566
- const release = await this.mutex.acquire();
567
- try {
568
- copy = _.cloneDeep(this.db.get('trans').value());
569
- }catch(err){
570
- console.error("getParentTx","err",formatError(err));
571
- }
572
- finally {
573
- release();
574
- }
575
-
576
- let result :TonTransaction[] = [];
577
- try{
578
- result = _.filter(copy, (tonTran) =>{
579
- return _.some(tonTran.out, (item) => {
580
- return (
581
- (isAddressEqual(this.dbName,tran.in.src) && BigInt(item.createdLt) === tran.in.createdLt) &&
582
- ((item.outMsgHash === tran.in.inMsgHash) || (item.outBodyHash == tran.in.inBodyHash))
583
- );
584
- });
585
- });
586
-
587
- }catch(err){
588
- console.error("error getParentTx","err",formatError(err));
589
- }finally {
590
- copy = null;
591
- }
592
- console.log("after getParentTx","tran hash",tran.hash,"parent hash",result[0].hash,"dbName",this.dbName);
593
- return result;
594
- }
595
-
596
- async getChildTxs(tran:TonTransaction){
597
- let copy = {};
598
- const release = await this.mutex.acquire();
599
- try {
600
- console.log("getChildTxs");
601
- copy = _.cloneDeep(this.db.get('trans').value());
602
- }catch(err){
603
- console.error("getChildTxs","err",formatError(err));
604
- }
605
- finally {
606
- release();
607
- }
608
-
609
- let result:TonTransaction[] = [];
610
- console.log("getChildTxs","db",this.dbName,"tran",tran);
611
- try{
612
- for(let i =0; i<tran.out.length;i++){
613
- console.log("getChildTxs","db",this.dbName,`tran${i}.out`,tran[i].out);
614
- let oneTran = _.filter(copy,(item)=>{
615
- return (isAddressEqual(item.in.src,tran.out[i].dst) &&
616
- (item.in.inMsgHash == tran.out[i].outMsgHash || item.in.inBodyHash == tran.out[i].outBodyHash) &&
617
- BigInt(item.in.createdLt) == tran.out[i].createdLt);
618
- })
619
-
620
- result.push(...oneTran);
621
- }
622
- }catch(err){
623
- console.error("getChildTxs err",formatError(err))
624
- }finally {
625
- copy = null;
626
- }
627
- return result;
628
- }
629
-
630
- async getTxByTxHash(txHash: string) {
631
- let copy = {};
632
- const release = await this.mutex.acquire();
633
- try {
634
- console.log("getChildTxs");
635
- copy = _.cloneDeep(this.db.get('trans').value());
636
- } catch (err) {
637
- console.error("getChildTxs", "err", formatError(err));
638
- } finally {
639
- release();
640
- }
641
-
642
- let result: TonTransaction = null;
643
- try {
644
-
645
- result = _.filter(copy, (item) => {
646
- return (item.hash == txHash);
647
- })
648
- } catch (err) {
649
- console.error("getTxByTxHash error","txHash",txHash,"dbName",this.dbName,"err",formatError(err))
650
- } finally {
651
- copy = null;
652
- }
653
- return result;
654
- }
655
-
656
- async getTxByHashLt(txHash: string,lt:string){
657
- let copy = {};
658
- const release = await this.mutex.acquire();
659
- try {
660
- console.log("getTxByHashLt");
661
- copy = _.cloneDeep(this.db.get('trans').value());
662
- } catch (err) {
663
- console.error("getTxByHashLt", "err", formatError(err),"txHash",txHash,"lt",lt);
664
- } finally {
665
- release();
666
- }
667
-
668
- let result: TonTransaction = null;
669
- try {
670
- console.error("getTxByHashLt","txHash",txHash,"lt",lt,"dbName",this.dbName);
671
- result = _.filter(copy, (item) => {
672
- return ((item.hash == txHash) && item.lt == lt);
673
- })
674
- } catch (err) {
675
- console.error("getTxByHashLt", "err", formatError(err),"txHash",txHash,"lt",lt,"dbName",this.dbName);
676
- } finally {
677
- copy = null;
678
- }
679
- return result;
680
- }
681
-
682
- async getTxByMsg(msgHash:string,bodyHash:string,lt:bigint){
683
- let copy = {};
684
- const release = await this.mutex.acquire();
685
- try {
686
- console.log("getTxByMsg");
687
- copy = _.cloneDeep(this.db.get('trans').value());
688
- } catch (err) {
689
- console.log("getTxByMsg", "err", formatError(err),"dbName",this.dbName,"msgHash",msgHash,"bodyHash",bodyHash,"lt",lt.toString(10));
690
- } finally {
691
- release();
692
- }
693
-
694
- let result: TonTransaction[] = [];
695
- try {
696
- result = _.filter(copy, (item) => {
697
- return (
698
- (item.in.inMsgHash == msgHash || item.in.inBodyHash == bodyHash) &&
699
- BigInt(item.in.createdLt) == lt);
700
- })
701
- } catch (err) {
702
- console.log("getTxByMsg", "err", formatError(err),"dbName",this.dbName,"msgHash",msgHash,"bodyHash",bodyHash,"lt",lt.toString(10));
703
- } finally {
704
- copy = null;
705
- }
706
- return result;
707
- }
708
-
709
- async getTxByOnlyMsgHash(msgHash:string){
710
- let copy = {};
711
- const release = await this.mutex.acquire();
712
- try {
713
- console.log("getTxByMsg");
714
- copy = _.cloneDeep(this.db.get('trans').value());
715
- } catch (err) {
716
- console.log("getTxByOnlyMsgHash", "err", formatError(err),"dbName",this.dbName,"msgHash",msgHash);
717
- } finally {
718
- release();
719
- }
720
-
721
- let result: TonTransaction[] = [];
722
- try {
723
- result = _.filter(copy, (item) => {
724
- return (
725
- (item.in.inMsgHash == msgHash));
726
- })
727
- } catch (err) {
728
- console.log("getTxByOnlyMsgHash", "err", formatError(err),"dbName",this.dbName,"msgHash");
729
- } finally {
730
- copy = null;
731
- }
732
- return result;
733
- }
734
- }
735
-
736
- exports.DB = DB;