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
@@ -0,0 +1,387 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getEvents = getEvents;
37
+ exports.getTransactions = getTransactions;
38
+ exports.getAllTransactions = getAllTransactions;
39
+ exports.getEventFromTran = getEventFromTran;
40
+ exports.getTransaction = getTransaction;
41
+ exports.getTransactionFromDb = getTransactionFromDb;
42
+ exports.getEventByTranHash = getEventByTranHash;
43
+ exports.getOpCodeFromCell = getOpCodeFromCell;
44
+ const core_1 = require("@ton/core");
45
+ const encode_decode_1 = require("../code/encode-decode");
46
+ const logger_1 = require("../utils/logger");
47
+ const transResult_1 = require("../transResult/transResult");
48
+ const formatUtil = require('util');
49
+ const opcodes = __importStar(require("../opcodes"));
50
+ const utils_1 = require("../utils/utils");
51
+ const const_value_1 = require("../const/const-value");
52
+ const DbAccess_1 = require("../db/DbAccess");
53
+ const client_interface_1 = require("../client/client-interface");
54
+ async function getEvents(client, scAddress, limit, lt, to_lt, eventName, hash) {
55
+ logger_1.logger.info("scAddress:%s,limit:%s,lt:%s,to_lt:%s,eventName:%s", scAddress, limit, lt, to_lt, eventName);
56
+ if (!client) {
57
+ throw new Error("client does not exist");
58
+ }
59
+ if (!core_1.Address.isAddress(core_1.Address.parse(scAddress))) {
60
+ throw new Error("scAddress is invalid");
61
+ }
62
+ if (limit > const_value_1.MAX_LIMIT) {
63
+ throw new Error("limit is more than MAX_LIMIT(1000)");
64
+ }
65
+ let events = [];
66
+ let trans = [];
67
+ trans = await getTransactions(client, scAddress, { limit, lt, to_lt, archival: true });
68
+ for (let tran of trans) {
69
+ logger_1.logger.info(formatUtil.format("tran=>", tran.hash().toString('base64')));
70
+ let event = await getEventFromTran(client, tran, scAddress);
71
+ if (event != null) {
72
+ logger_1.logger.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!==found event==!!!!!!!!!!!!!!!!!!!!!!!!!!!", event);
73
+ if (eventName && event.eventName.toLowerCase() != eventName.toLowerCase()) {
74
+ continue;
75
+ }
76
+ events.push(event);
77
+ }
78
+ }
79
+ return events;
80
+ }
81
+ async function getTransactions(client, scAddress, opts) {
82
+ logger_1.logger.info("getTransactions opts = %s", opts);
83
+ let ret = await getTransactionsFromDb(client, scAddress, opts);
84
+ if (ret && ret.length != 0) {
85
+ return ret;
86
+ }
87
+ logger_1.logger.info("getTransactions from RPC server opts = %s", opts);
88
+ let scAddr = core_1.Address.parse(scAddress);
89
+ logger_1.logger.info(formatUtil.format("contractAddr=>", scAddress));
90
+ try {
91
+ ret = await client.getTransactions(scAddr, opts);
92
+ }
93
+ catch (err) {
94
+ logger_1.logger.error((0, utils_1.formatError)(err));
95
+ }
96
+ return ret;
97
+ }
98
+ async function getTransactionsFromDb(client, scAddress, opts) {
99
+ logger_1.logger.info("getTransactionsFromDb opts = %s", opts);
100
+ let scAddr = core_1.Address.parse(scAddress);
101
+ logger_1.logger.info(formatUtil.format("contractAddr=>", scAddress));
102
+ let dbAccess = await DbAccess_1.DBAccess.getDBAccess();
103
+ if (!dbAccess) {
104
+ logger_1.logger.error("not using db cache");
105
+ return null;
106
+ }
107
+ let retTx = null;
108
+ let retry = const_value_1.MAX_RETRY;
109
+ while (retry-- > 0 && !retTx) {
110
+ try {
111
+ if (!dbAccess?.has(scAddress)) {
112
+ await dbAccess.addDbByName(scAddress);
113
+ }
114
+ retTx = await dbAccess?.getTxsByLtRange(scAddress, opts.lt ? BigInt(opts.lt) : BigInt(0), opts.to_lt ? BigInt(opts.to_lt) : BigInt(0));
115
+ }
116
+ catch (err) {
117
+ logger_1.logger.error("getTxsByLtRange err", (0, utils_1.formatError)(err), "retry", retry, "dbName", "scAddress", scAddress, "opts", opts);
118
+ }
119
+ await (0, utils_1.sleep)(10000);
120
+ }
121
+ logger_1.logger.info("getTransactionsFromDb success", "scAddress", scAddress, "lt", opts.lt, "tranHash", opts.hash, "retTx", retTx);
122
+ return retTx;
123
+ }
124
+ async function getAllTransactions(client, scAddress, limit, retry) {
125
+ let trans = [];
126
+ let transCount = limit;
127
+ let opts = {
128
+ limit,
129
+ archival: true,
130
+ };
131
+ let maxRetry = retry;
132
+ while (transCount) {
133
+ let getSuccess = false;
134
+ while (maxRetry-- > 0 && (!getSuccess)) {
135
+ try {
136
+ logger_1.logger.info("maxRetry = %s, getSuccess = %s, transCount = %s, scAddress = %s opts = %s", maxRetry, getSuccess, transCount, scAddress, JSON.stringify(opts, utils_1.bigIntReplacer));
137
+ let ret = await client.getTransactions(core_1.Address.parse(scAddress), opts);
138
+ transCount = ret.length;
139
+ logger_1.logger.info("getAllTransactions getTransactions success from rpc", "opts", JSON.stringify(opts, utils_1.bigIntReplacer), "len of getTransactions", transCount, "scAddress", scAddress);
140
+ for (let tran of ret) {
141
+ logger_1.logger.info("=====> tranHash = %s lt = %s", tran.hash().toString('base64'), tran.lt.toString(10));
142
+ trans.push(tran);
143
+ }
144
+ if (ret.length) {
145
+ opts.lt = ret[ret.length - 1].lt.toString(10);
146
+ opts.hash = ret[ret.length - 1].hash().toString('base64');
147
+ }
148
+ getSuccess = true;
149
+ maxRetry = retry;
150
+ }
151
+ catch (e) {
152
+ logger_1.logger.error("err ", (0, utils_1.formatError)(e));
153
+ await (0, utils_1.sleep)(2000);
154
+ }
155
+ }
156
+ if (maxRetry == 0) {
157
+ throw (new Error(formatUtil("getTransactions failed after %d retry. opts is %s", retry, JSON.stringify(opts))));
158
+ }
159
+ await (0, utils_1.sleep)(2000);
160
+ }
161
+ logger_1.logger.info("getAllTransactions success");
162
+ return trans;
163
+ }
164
+ async function getEventFromTran(client, tran, scAddress) {
165
+ logger_1.logger.info("getEventFromTran entering", "client is WanTonClient", (0, client_interface_1.IsWanTonClient)(client));
166
+ let bodyCell = tran.inMessage?.body;
167
+ if (!bodyCell) {
168
+ logger_1.logger.error("body is empty", "tran", tran.hash().toString("base64"));
169
+ return null;
170
+ }
171
+ try {
172
+ let opCode = await getOpCodeFromCell(bodyCell);
173
+ logger_1.logger.info(formatUtil.format("opCode=>", opCode.toString(16)));
174
+ logger_1.logger.info(formatUtil.format("codeTable[opCode]=>", encode_decode_1.codeTable[opCode]));
175
+ if (!encode_decode_1.codeTable[opCode]) {
176
+ logger_1.logger.error("opCode is empty", "tran", "opCode", opCode.toString(16));
177
+ return null;
178
+ }
179
+ logger_1.logger.info("before decode bodyCell");
180
+ let decoded = await encode_decode_1.codeTable[opCode]["deCode"](bodyCell);
181
+ logger_1.logger.info("after decode bodyCell");
182
+ decoded.txHashBase64 = tran.hash().toString("base64");
183
+ decoded.txHash = tran.hash().toString("hex");
184
+ decoded.lt = tran.lt;
185
+ decoded.prevTransactionHash = tran.prevTransactionHash;
186
+ decoded.prevTransactionLt = tran.prevTransactionLt;
187
+ // handle userLock
188
+ if (opCode == opcodes.OP_CROSS_UserLock) {
189
+ logger_1.logger.info(formatUtil.format("getEventFromTran OP_CROSS_UserLock"));
190
+ logger_1.logger.info("getEventFromTran before handleUserLockEvent", "client is WanTonClient", (0, client_interface_1.IsWanTonClient)(client));
191
+ let handleResult = await handleUserLockEvent(client, core_1.Address.parse(scAddress), tran);
192
+ if (!handleResult.valid) {
193
+ logger_1.logger.error(formatUtil.format("handleResult OP_CROSS_UserLock is not valid"));
194
+ return null;
195
+ }
196
+ decoded.origin = handleResult.origin;
197
+ }
198
+ else {
199
+ let handleResult = await handleCommonEvent(client, core_1.Address.parse(scAddress), tran);
200
+ if (!handleResult.valid) {
201
+ logger_1.logger.error(formatUtil.format("handleResult handleCommonEvent is not valid"));
202
+ return null;
203
+ }
204
+ decoded.origin = handleResult.origin;
205
+ }
206
+ return await encode_decode_1.codeTable[opCode]["emitEvent"](decoded);
207
+ }
208
+ catch (err) {
209
+ logger_1.logger.error(formatUtil.format("getEventFromTran err", (0, utils_1.formatError)(err)));
210
+ return null;
211
+ }
212
+ }
213
+ async function getTransaction(client, scAddress, lt, tranHash) {
214
+ logger_1.logger.info("Entering getTransaction", "scAddress", scAddress, "lt", lt, "hash", tranHash, "hash(base64)", (0, utils_1.toBase64)(tranHash));
215
+ let retTranFromDb = await getTransactionFromDb(client, scAddress, lt, (0, utils_1.toBase64)(tranHash));
216
+ if (retTranFromDb) {
217
+ logger_1.logger.info("getTransaction success", "getTransactionFromDb", "retTranFromDb", retTranFromDb.hash().toString("base64"));
218
+ return retTranFromDb;
219
+ }
220
+ logger_1.logger.info("getTransaction", "getTransaction from rpc", "scAddress", scAddress, "lt", lt, "hash", tranHash, "hash(base64)", (0, utils_1.toBase64)(tranHash));
221
+ let tran;
222
+ let trans = [];
223
+ let retry = 2;
224
+ let status = false;
225
+ let foundTran = false;
226
+ let maxTrans = 1000;
227
+ let transChecked = 0;
228
+ while (retry-- > 0) {
229
+ try {
230
+ logger_1.logger.info("before client.getTransaction", "scAddress", scAddress, "lt", lt, "hash", tranHash, "hash(base64)", (0, utils_1.toBase64)(tranHash));
231
+ tran = await client.getTransaction(core_1.Address.parse(scAddress), lt, (0, utils_1.toBase64)(tranHash)); // cannot compute block with specified transaction: cannot find block (0,e56031f43e6493da) lt=33028010000003: lt not in db'
232
+ logger_1.logger.info("client.getTransaction success", "scAddress", scAddress, "lt", lt, "hash", tranHash, "hash(base64)", (0, utils_1.toBase64)(tranHash), "tran = > ", tran);
233
+ return tran;
234
+ }
235
+ catch (err) {
236
+ logger_1.logger.error("getTransaction", "client.getTransaction error", (0, utils_1.formatError)(err), "scAddress", scAddress, "lt", lt, "hash", tranHash, "hash(base64)", (0, utils_1.toBase64)(tranHash));
237
+ await (0, utils_1.sleep)(2000);
238
+ }
239
+ }
240
+ retry = const_value_1.MAX_RETRY;
241
+ let opts = {
242
+ limit: const_value_1.MAX_LIMIT,
243
+ archival: true,
244
+ };
245
+ while (transChecked < maxTrans && !foundTran) {
246
+ status = false;
247
+ while (--retry > 0 && !status) {
248
+ try {
249
+ logger_1.logger.info("getTransactions", "scAddress", scAddress, "opts", opts);
250
+ trans = await client.getTransactions(core_1.Address.parse(scAddress), opts);
251
+ status = true;
252
+ retry = const_value_1.MAX_RETRY;
253
+ }
254
+ catch (err) {
255
+ //logger.error(err.message,err.response?.data?.error,err);
256
+ logger_1.logger.error((0, utils_1.formatError)(err));
257
+ await (0, utils_1.sleep)(2000);
258
+ }
259
+ }
260
+ if (retry == 0) {
261
+ throw (new Error(formatUtil.format("getTransactions ", "scAddress", scAddress, "opts", opts)));
262
+ }
263
+ if (trans.length == 0) {
264
+ break;
265
+ }
266
+ for (let i = 0; i < trans.length; i++) {
267
+ let tx = trans[i];
268
+ if (i == trans.length - 1) {
269
+ opts.lt = tx.lt.toString(10);
270
+ opts.hash = tx.hash().toString('base64');
271
+ }
272
+ logger_1.logger.info("getTransactions from rpc", "i", i, "txHash", tx.hash().toString("base64"));
273
+ if (tx.hash().toString('base64') == (0, utils_1.toBase64)(tranHash)) {
274
+ tran = tx;
275
+ foundTran = true;
276
+ break;
277
+ }
278
+ }
279
+ await (0, utils_1.sleep)(2000);
280
+ transChecked += trans.length;
281
+ }
282
+ if (foundTran) {
283
+ return tran;
284
+ }
285
+ throw (new Error(formatUtil.format("can not getTransactions ", "scAddress", scAddress, "opts", opts)), "hash", tranHash, "hash(bse64)", (0, utils_1.toBase64)(tranHash));
286
+ }
287
+ // tranHash: base64
288
+ async function getTransactionFromDb(client, scAddress, lt, tranHash) {
289
+ logger_1.logger.info("Entering getTransactionFromDb", "scAddress", scAddress, "lt", lt, "tranHash", tranHash);
290
+ let dbAccess = await DbAccess_1.DBAccess.getDBAccess();
291
+ if (!dbAccess) {
292
+ logger_1.logger.error("not using db cache");
293
+ return null;
294
+ }
295
+ let retTx = null;
296
+ let retry = const_value_1.MAX_RETRY;
297
+ while (retry-- > 0 && !retTx) {
298
+ try {
299
+ if (!dbAccess?.has(scAddress)) {
300
+ await dbAccess.addDbByName(scAddress);
301
+ }
302
+ retTx = await dbAccess?.getTxByHashLt(scAddress, tranHash, lt);
303
+ }
304
+ catch (err) {
305
+ logger_1.logger.error("getTxByHashLt err", (0, utils_1.formatError)(err), "retry", retry, "dbName", "scAddress", scAddress, "hash", tranHash);
306
+ }
307
+ await (0, utils_1.sleep)(10000);
308
+ }
309
+ logger_1.logger.info("getTransactionFromDb success", "scAddress", scAddress, "lt", lt, "tranHash", tranHash, "retTx", retTx);
310
+ return retTx;
311
+ }
312
+ async function getEventByTranHash(client, scAddress, lt, tranHash) {
313
+ logger_1.logger.info("entering getEventByTranHash getTransaction success", "tranHash ", tranHash, "lt", lt, "dbName", scAddress);
314
+ let tran = await getTransaction(client, scAddress, lt, tranHash);
315
+ logger_1.logger.info("getEventByTranHash getTransaction success", tran, "tranHash ", tran.hash().toString('hex'));
316
+ logger_1.logger.info("getEventByTranHash before getEventFromTran", "client is WanTonClient", (0, client_interface_1.IsWanTonClient)(client));
317
+ return await getEventFromTran(client, tran, scAddress);
318
+ }
319
+ async function getOpCodeFromCell(cell) {
320
+ if (cell.equals(core_1.Cell.EMPTY)) {
321
+ throw new Error("empty cell");
322
+ }
323
+ let slice = cell.beginParse();
324
+ try {
325
+ return slice.preloadUint(32);
326
+ }
327
+ catch (err) {
328
+ logger_1.logger.error(formatUtil.format("getOpCodeFromCell(err)=>", (0, utils_1.formatError)(err)));
329
+ throw new Error("no opCode find");
330
+ }
331
+ }
332
+ /*
333
+ {
334
+ valid: true|false, // used the trans tree is valid
335
+ origin: Address, // from address, who trigger the lock event.
336
+ }
337
+ */
338
+ async function handleUserLockEvent(client, scAddr, tran) {
339
+ return handleCommonEvent(client, scAddr, tran);
340
+ }
341
+ async function handleCommonEvent(client, scAddr, tran) {
342
+ logger_1.logger.info(formatUtil.format("Entering handleCommonEvent"));
343
+ let transResult = await getTransResult(client, scAddr, tran);
344
+ if (!transResult.success) {
345
+ logger_1.logger.error("the trans tree is not success");
346
+ return {
347
+ valid: false,
348
+ origin: transResult.originAddr.toString()
349
+ };
350
+ }
351
+ logger_1.logger.info(formatUtil.format("Ending handleCommonEvent"));
352
+ return {
353
+ valid: true,
354
+ origin: transResult.originAddr.toString()
355
+ };
356
+ }
357
+ async function decodeUserLock(bodyCell) {
358
+ let bodySlice = bodyCell.asSlice();
359
+ let queryId, dstUserAccount, addrTokenAccount, jwAddrSrc, jwAddrBridgeSc, opCode, smgID, tokenPairID, crossValue;
360
+ opCode = bodySlice.loadUint(32);
361
+ queryId = bodySlice.loadUint(64);
362
+ smgID = bodySlice.loadUintBig(256);
363
+ tokenPairID = bodySlice.loadUint(32);
364
+ crossValue = bodySlice.loadUintBig(256);
365
+ let dstUserAccountBufferLen = bodySlice.loadUint(8);
366
+ let dstUserAccountBuffer = bodySlice.loadBuffer(dstUserAccountBufferLen);
367
+ let extraSlice = bodySlice.loadRef().beginParse();
368
+ addrTokenAccount = extraSlice.loadAddress();
369
+ jwAddrSrc = extraSlice.loadAddress();
370
+ jwAddrBridgeSc = extraSlice.loadAddress();
371
+ extraSlice.endParse();
372
+ dstUserAccount = "0x" + dstUserAccountBuffer.toString('hex');
373
+ return {
374
+ opCode,
375
+ queryId,
376
+ smgID,
377
+ tokenPairID,
378
+ crossValue,
379
+ dstUserAccount,
380
+ addrTokenAccount,
381
+ jwAddrSrc,
382
+ jwAddrBridgeSc
383
+ };
384
+ }
385
+ async function getTransResult(client, scAddr, tran) {
386
+ return await (0, transResult_1.getTranResultByTran)(client, scAddr, tran);
387
+ }
@@ -0,0 +1 @@
1
+ declare function main(): Promise<void>;
@@ -1,8 +1,7 @@
1
- async function main(){
2
- const DB = require('../db/Db').DB;
1
+ async function main() {
2
+ const DB = require('../../db/Db').DB;
3
3
  console.log("Entering main function");
4
4
  let db = new DB('test');
5
5
  await db.init('test');
6
6
  }
7
-
8
- main();
7
+ main();
@@ -0,0 +1 @@
1
+ export {};
@@ -1,20 +1,18 @@
1
- import {getClient} from "../client/client";
2
-
3
- const DBAccess = require("../db/DbAccess").DBAccess;
4
- const scAddress = require('../testData/contractAddress.json');
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const DBAccess = require("../../db/DbAccess").DBAccess;
4
+ const scAddress = require('../../testData/contractAddress.json');
5
5
  let scBridgeAddr = scAddress.bridgeAddress;
6
-
7
- async function main(){
6
+ async function main() {
8
7
  console.log("Entering main function");
9
8
  let dbAccess = await DBAccess.getDBAccess();
10
- if(!dbAccess){
11
- console.error("not using db cache.")
9
+ if (!dbAccess) {
10
+ console.error("not using db cache.");
12
11
  return;
13
12
  }
14
13
  await dbAccess.addDbByName(scBridgeAddr);
15
14
  await dbAccess.addDbByName("EQCABVjsQnmRELMK6vjwGbYNRzHXoTd2hvSX6v_VmVrrJNjW");
16
- };
17
-
15
+ }
16
+ ;
18
17
  main();
19
-
20
18
  // ts-node dbFeedTrans-ex.ts
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("../../utils/utils");
4
+ const config_ex_1 = require("../../config/config-ex");
5
+ const client_1 = require("../../client/client");
6
+ const getEvents_1 = require("../../event/getEvents");
7
+ const DbAccess_1 = require("../../db/DbAccess");
8
+ const core_1 = require("@ton/core");
9
+ const common_1 = require("../../db/common");
10
+ const args = process.argv.slice(2);
11
+ async function main() {
12
+ //await wanTonSdkInit(configMainnet);
13
+ //await wanTonSdkInit(configTestnet);
14
+ await (0, client_1.wanTonSdkInit)(config_ex_1.configTestTonApi);
15
+ //await wanTonSdkInit(configTestTonApiNoDb);
16
+ let scBridgeAddr = args[0];
17
+ let dbAcces = await DbAccess_1.DBAccess.getDBAccess();
18
+ if (!dbAcces) {
19
+ console.error("not using db cache");
20
+ return;
21
+ }
22
+ console.log("scBridgeAddr", scBridgeAddr);
23
+ console.log("scBridgeAddr final address", core_1.Address.parse(scBridgeAddr).toString());
24
+ let client = await (0, client_1.getClient)();
25
+ let scanEvent = async () => {
26
+ console.log("\n\n\n===================================getAllEvents===================================\n");
27
+ console.log("\n===================================getAllEvents===================================\n\n\n");
28
+ let tonTrans = [];
29
+ if (!dbAcces?.has(scBridgeAddr)) {
30
+ await dbAcces.addDbByName(scBridgeAddr);
31
+ await (0, utils_1.sleep)(2000);
32
+ }
33
+ try {
34
+ tonTrans = await dbAcces.getAllTransNotHandled(args[0]);
35
+ console.log("getAllTransNotHandled tonTrans.length", tonTrans.length);
36
+ }
37
+ catch (err) {
38
+ console.error(err.code, err.response?.data?.error);
39
+ }
40
+ if (!tonTrans) {
41
+ return;
42
+ }
43
+ for (let tonTran of tonTrans) {
44
+ try {
45
+ console.log("begin getEventByTranHash", "scBridgeAddr", scBridgeAddr, "lt", tonTran.lt.toString(10), "tranHash", tonTran.hash().toString('hex'));
46
+ let ret = await (0, getEvents_1.getEventByTranHash)(client, scBridgeAddr, tonTran.lt.toString(10), tonTran.hash().toString('hex'));
47
+ console.log("end getEventByTranHash JacobEvent ret = ", ret);
48
+ let tranTonTemp = (0, common_1.convertTranToTonTrans)([tonTran]);
49
+ console.log("begin setTranHandleFlag", "scBridgeAddr", scBridgeAddr, "lt", tonTran.lt.toString(10), "tranHash", tonTran.hash().toString('hex'));
50
+ await dbAcces.setTranHandleFlag(scBridgeAddr, tranTonTemp[0], true);
51
+ }
52
+ catch (err) {
53
+ console.error(err.code, err.response?.data?.error);
54
+ }
55
+ await (0, utils_1.sleep)(1000);
56
+ }
57
+ };
58
+ let round = 1;
59
+ let busy = false;
60
+ setInterval(async () => {
61
+ if (!busy) {
62
+ busy = true;
63
+ console.log("round = ", round++);
64
+ await scanEvent();
65
+ busy = false;
66
+ }
67
+ }, 100000);
68
+ }
69
+ main();
70
+ // ts-node getAllEvents-ex.ts kQDlYDH0PmST2okwTluXJ2mUDMDCzPzXF1gGz24U6H2tE9Wr
@@ -0,0 +1 @@
1
+ export {};
@@ -1,39 +1,35 @@
1
- import {sleep} from "../utils/utils";
2
-
3
- import {configTestnet,configMainnet} from "../config/config-ex";
4
- import {getClient, TonClientConfig, wanTonSdkInit} from "../client/client";
5
- import {getEventByTranHash, getEvents} from "../event/getEvents";
6
- import { logger } from "../utils/logger";
7
-
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const config_ex_1 = require("../../config/config-ex");
4
+ const client_1 = require("../../client/client");
5
+ const getEvents_1 = require("../../event/getEvents");
6
+ const client_interface_1 = require("../../client/client-interface");
8
7
  const args = process.argv.slice(2);
9
-
10
- async function main(){
11
- await wanTonSdkInit(configMainnet);
12
- await wanTonSdkInit(configTestnet);
13
- try{
14
- let client = await getClient();
8
+ async function main() {
9
+ //await wanTonSdkInit(configMainnet);
10
+ //await wanTonSdkInit(configTestnet);
11
+ await (0, client_1.wanTonSdkInit)(config_ex_1.configTestTonApi);
12
+ try {
13
+ let client = await (0, client_1.getClient)();
15
14
  let scBridgeAddr = args[0];
16
15
  let lt = args[1];
17
- let tranHash = Buffer.from(args[2],'hex').toString('base64');
18
-
19
- console.log("scBridgeAddr",scBridgeAddr,"lt",lt,"tranHash",tranHash);
20
- let ret = await getEventByTranHash(client,scBridgeAddr,lt,tranHash);
21
-
22
- console.log("ret = ",ret);
16
+ let tranHash = Buffer.from(args[2], 'hex').toString('base64');
17
+ console.log("scBridgeAddr", scBridgeAddr, "lt", lt, "tranHash", tranHash);
18
+ console.log("before getEventByTranHash", "client is WanTonClient", (0, client_interface_1.IsWanTonClient)(client));
19
+ let ret = await (0, getEvents_1.getEventByTranHash)(client, scBridgeAddr, lt, tranHash);
20
+ console.log("ret = ", ret);
23
21
  client = null;
24
- }catch(err){
25
- console.error(err.code,err.response?.data?.error)
26
22
  }
27
-
23
+ catch (err) {
24
+ console.error(err.code, err.response?.data?.error);
25
+ }
28
26
  }
29
-
30
27
  main();
31
28
  // userLock
32
29
  // ts-node getEventByHash-ex.ts kQDlYDH0PmST2okwTluXJ2mUDMDCzPzXF1gGz24U6H2tE9Wr 33313072000003 5c6cbcef28ef2514ea0b7594a0dda35e4ce08416312d3c5629388ae21ad54e83
33
30
  // ts-node getEventByHash-ex.ts kQDlYDH0PmST2okwTluXJ2mUDMDCzPzXF1gGz24U6H2tE9Wr 33313091000003 095015c23c8323af4b7c20b9bd35b2864aa2a4fbaa85335828fa63bccbfdaeff
34
31
  // ts-node getEventByHash-ex.ts kQDlYDH0PmST2okwTluXJ2mUDMDCzPzXF1gGz24U6H2tE9Wr 33313098000001 391972a7343d4b644e279575ae1e7b4c92fcf4deda69f3fbe5cb5b7b9ea67f2a
35
-
36
32
  // smgRelease
37
33
  // ts-node getEventByHash-ex.ts kQDlYDH0PmST2okwTluXJ2mUDMDCzPzXF1gGz24U6H2tE9Wr 33315421000001 5e654b1798cca9b63adcb8091b0962b364581538bc4431449f9e9c674bb0d5f6
38
34
  // ts-node getEventByHash-ex.ts kQDlYDH0PmST2okwTluXJ2mUDMDCzPzXF1gGz24U6H2tE9Wr 33315410000001 dd22c46a31a348d5ff0b77bb0191b915549af7c450ab905390b3e7d8e6981c32
39
- // ts-node getEventByHash-ex.ts kQDlYDH0PmST2okwTluXJ2mUDMDCzPzXF1gGz24U6H2tE9Wr 33315399000001 458f7592928e02d22584a71b290abbf82def08c618ee26acbf2da3ea2eccb7a2
35
+ // ts-node getEventByHash-ex.ts kQDlYDH0PmST2okwTluXJ2mUDMDCzPzXF1gGz24U6H2tE9Wr 33315399000001 458f7592928e02d22584a71b290abbf82def08c618ee26acbf2da3ea2eccb7a2
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("../../utils/utils");
4
+ const config_ex_1 = require("../../config/config-ex");
5
+ const client_1 = require("../../client/client");
6
+ const getEvents_1 = require("../../event/getEvents");
7
+ const DbAccess_1 = require("../../db/DbAccess");
8
+ const core_1 = require("@ton/core");
9
+ const common_1 = require("../../db/common");
10
+ const args = process.argv.slice(2);
11
+ async function main() {
12
+ //await wanTonSdkInit(configMainnet);
13
+ //await wanTonSdkInit(configTestnet);
14
+ await (0, client_1.wanTonSdkInit)(config_ex_1.configTestTonApi);
15
+ //await wanTonSdkInit(configTestTonApiNoDb);
16
+ let scBridgeAddr = args[0];
17
+ let lt = BigInt(args[1]);
18
+ let to_lt = BigInt(args[2]);
19
+ let dbAcces = await DbAccess_1.DBAccess.getDBAccess();
20
+ if (!dbAcces) {
21
+ console.error("not using db cache");
22
+ return;
23
+ }
24
+ console.log("scBridgeAddr", scBridgeAddr);
25
+ console.log("scBridgeAddr final address", core_1.Address.parse(scBridgeAddr).toString());
26
+ let client = await (0, client_1.getClient)();
27
+ setInterval(async () => {
28
+ console.log("\n\n\n===================================getEventsByRange===================================\n");
29
+ console.log("\n===================================getEventsByRange===================================\n\n\n");
30
+ let tonTrans = [];
31
+ if (!dbAcces?.has(scBridgeAddr)) {
32
+ await dbAcces.addDbByName(scBridgeAddr);
33
+ await (0, utils_1.sleep)(2000);
34
+ }
35
+ try {
36
+ tonTrans = await dbAcces.getAllTransNotHandledByRange(args[0], lt, to_lt);
37
+ console.log("getAllTransNotHandledByRange tonTrans.length", tonTrans.length);
38
+ }
39
+ catch (err) {
40
+ console.error(err.code, err.response?.data?.error);
41
+ }
42
+ for (let tonTran of tonTrans) {
43
+ try {
44
+ console.log("scBridgeAddr", scBridgeAddr, "lt", tonTran.lt.toString(10), "tranHash", tonTran.hash().toString('hex'));
45
+ let ret = await (0, getEvents_1.getEventByTranHash)(client, scBridgeAddr, tonTran.lt.toString(10), tonTran.hash().toString('hex'));
46
+ console.log("JacobEvent ret = ", ret);
47
+ let tranTonTemp = (0, common_1.convertTranToTonTrans)([tonTran]);
48
+ await dbAcces.setTranHandleFlag(scBridgeAddr, tranTonTemp[0], true);
49
+ }
50
+ catch (err) {
51
+ console.error(err.code, err.response?.data?.error);
52
+ }
53
+ await (0, utils_1.sleep)(1000);
54
+ }
55
+ }, 100000);
56
+ }
57
+ main();
58
+ // ts-node getAllEvents-ex.ts kQDlYDH0PmST2okwTluXJ2mUDMDCzPzXF1gGz24U6H2tE9Wr 35100832000001 33781871000003
@@ -0,0 +1 @@
1
+ export {};