wan-ton-sdk 0.0.6

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 (119) hide show
  1. package/Bridge.compile.ts +8 -0
  2. package/Bridge.ts +645 -0
  3. package/Bridge.ts.org +647 -0
  4. package/Fake.compile.ts +8 -0
  5. package/GroupApprove.compile.ts +6 -0
  6. package/GroupApprove.ts +274 -0
  7. package/JettonMinter.compile.ts +5 -0
  8. package/JettonMinter.ts +135 -0
  9. package/JettonWallet.compile.ts +5 -0
  10. package/JettonWallet.ts +127 -0
  11. package/README.md +24 -0
  12. package/Signature.compile.ts +6 -0
  13. package/Signature.ts +105 -0
  14. package/address.compile.ts +8 -0
  15. package/client/1.json +1730 -0
  16. package/client/client.ts +73 -0
  17. package/client/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +15 -0
  18. package/client/log/wan-ton-sdk.out.2024-12-19 +0 -0
  19. package/code/decode.spec.ts +81 -0
  20. package/code/encode-decode.ts +622 -0
  21. package/code/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +20 -0
  22. package/code/log/wan-ton-sdk.out.2025-01-15 +0 -0
  23. package/code/log/wan-ton-sdk.out.2025-01-20 +0 -0
  24. package/code/userLock.ts +291 -0
  25. package/common.ts +62 -0
  26. package/config/config-ex.ts +25 -0
  27. package/config/config.ts +1 -0
  28. package/const/const-value.ts +33 -0
  29. package/contractAccess/bridgeAccess.ts +60 -0
  30. package/contractAccess/groupApproveAccess.ts +59 -0
  31. package/data/EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs.json +7348 -0
  32. package/db/Db.spec.ts +193 -0
  33. package/db/Db.ts +736 -0
  34. package/db/DbAccess.spec.ts +23 -0
  35. package/db/DbAccess.ts +174 -0
  36. package/db/common.ts +94 -0
  37. package/db/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +15 -0
  38. package/db/log/wan-ton-sdk.out.2025-04-21 +0 -0
  39. package/event/getEvents.ts +441 -0
  40. package/event/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +15 -0
  41. package/event/log/wan-ton-sdk.out.2024-12-19 +0 -0
  42. package/example/0:1.txt +1 -0
  43. package/example/AddToken-ex.ts +148 -0
  44. package/example/README.md +21 -0
  45. package/example/addSmg-ex.ts +78 -0
  46. package/example/addTokenPair-ex.ts +73 -0
  47. package/example/compileContract-ex.ts +10 -0
  48. package/example/converTranToTonTran.ts +43 -0
  49. package/example/createDb-ex.ts +8 -0
  50. package/example/dbFeedTrans-ex.ts +20 -0
  51. package/example/delTokenPair-ex.ts +63 -0
  52. package/example/deploy-ex.ts +68 -0
  53. package/example/getAllEvents-ex.ts +61 -0
  54. package/example/getAllTrans.ts +32 -0
  55. package/example/getContractState-ex.ts +33 -0
  56. package/example/getEventByHash-ex.ts +39 -0
  57. package/example/getEvents-ex.ts +55 -0
  58. package/example/getJettonInfo-ex.ts +44 -0
  59. package/example/getTokenPair-ex.ts +47 -0
  60. package/example/getTransByRange-ex.ts +81 -0
  61. package/example/getTransaction-ex.ts +62 -0
  62. package/example/isTranSuccess-ex.ts +33 -0
  63. package/example/locateTx-ex.ts +44 -0
  64. package/example/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +55 -0
  65. package/example/log/wan-ton-sdk.out.2025-04-21 +447 -0
  66. package/example/log/wan-ton-sdk.out.2025-04-22 +1918 -0
  67. package/example/log/wan-ton-sdk.out.2025-04-23 +4216 -0
  68. package/example/log/wan-ton-sdk.out.2025-04-24.gz +0 -0
  69. package/example/log/wan-ton-sdk.out.2025-04-25 +46814 -0
  70. package/example/log/wan-ton-sdk.out.2025-04-27.gz +0 -0
  71. package/example/log/wan-ton-sdk.out.2025-04-28 +4966 -0
  72. package/example/log/wan-ton-sdk.out.2025-04-29 +1328 -0
  73. package/example/log/wan-ton-sdk.out.2025-04-30 +9 -0
  74. package/example/mintToken-ex.ts +82 -0
  75. package/example/setFee-ex.ts +82 -0
  76. package/example/setFeeProxy.ts +70 -0
  77. package/example/smgRelease-ex.ts +173 -0
  78. package/example/upgradeBridgeSc-ex.ts +49 -0
  79. package/example/userLock-ex.ts +78 -0
  80. package/fee/fee.ts +23 -0
  81. package/index.ts +67 -0
  82. package/jest.config.ts +9 -0
  83. package/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +20 -0
  84. package/log/wan-ton-sdk.out.2025-04-21 +0 -0
  85. package/log/wan-ton-sdk.out.2025-04-30 +10 -0
  86. package/opcodes.ts +58 -0
  87. package/package.json +34 -0
  88. package/publish.sh +78 -0
  89. package/sign/buildHash.ts +47 -0
  90. package/sign/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +15 -0
  91. package/sign/log/wan-ton-sdk.out.2025-04-14 +3 -0
  92. package/sign/rawTrans.spec.ts +117 -0
  93. package/sign/rawTrans.ts +122 -0
  94. package/sign/tools-secp256k1.js +210 -0
  95. package/testData/JettonMinter.compile.func.ts +8 -0
  96. package/testData/JettonWallet.compile.func.ts +8 -0
  97. package/testData/addressList.json +6 -0
  98. package/testData/bridge.compile.func.ts +8 -0
  99. package/testData/bridge.compiled.json +1 -0
  100. package/testData/contractAddress.json +7 -0
  101. package/testData/jettonTokenInfo.json +14 -0
  102. package/testData/prvlist.json +6 -0
  103. package/testData/smg.json +5 -0
  104. package/testData/tokenInfo.json +23 -0
  105. package/transResult/transResult.ts +621 -0
  106. package/tsconfig.json +19 -0
  107. package/utils/.compiled.json +1 -0
  108. package/utils/compileContract.ts +60 -0
  109. package/utils/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +15 -0
  110. package/utils/log/wan-ton-sdk.out.2025-01-08 +0 -0
  111. package/utils/logger.spec.ts +14 -0
  112. package/utils/logger.ts +96 -0
  113. package/utils/utils.spec.ts +21 -0
  114. package/utils/utils.ts +295 -0
  115. package/wallet/balance.ts +29 -0
  116. package/wallet/jetton.spec.ts +27 -0
  117. package/wallet/jetton.ts +159 -0
  118. package/wallet/walletContract.spec.ts +111 -0
  119. package/wallet/walletContract.ts +105 -0
@@ -0,0 +1,8 @@
1
+ import { CompilerConfig } from '@ton/blueprint';
2
+
3
+ export const compile: CompilerConfig = {
4
+ lang: 'func',
5
+ targets: [
6
+ 'contracts/bridge.fc'
7
+ ],
8
+ };
package/Bridge.ts ADDED
@@ -0,0 +1,645 @@
1
+ import {logger} from './utils/logger'
2
+ const formatUtil = require('util');
3
+ import {buildUserLockMessages} from './code/userLock'
4
+
5
+ import {
6
+ Address,
7
+ beginCell,
8
+ Cell,
9
+ Contract,
10
+ contractAddress,
11
+ ContractProvider,
12
+ Sender,
13
+ SendMode,
14
+ toNano
15
+ } from '@ton/core';
16
+ import {JettonMinter} from "./JettonMinter";
17
+ import {JettonWallet} from "./JettonWallet";
18
+ import {HexStringToBuffer,BufferrToHexString} from "./utils/utils";
19
+ import * as fs from "fs";
20
+ import * as opcodes from "./opcodes"
21
+ import {OP_CROSS_SmgRelease, OP_FEE_SetSmgFeeProxy} from "./opcodes";
22
+ import {codeTable} from "./code/encode-decode";
23
+ import {BIP44_CHAINID,TON_COIN_ACCOUT,TON_COIN_ACCOUNT_STR,WK_CHIANID} from "./const/const-value";
24
+ import {TonClient} from "@ton/ton";
25
+ import {Blockchain} from "@ton/sandbox";
26
+
27
+ export type BridgeConfig = {
28
+ owner:Address,
29
+ halt: number,
30
+ init: number,
31
+ smgFeeProxy:Address,
32
+ oracleAdmin:Address,
33
+ operator:Address,
34
+ };
35
+
36
+ export type CrossConfig = {
37
+ owner:Address,
38
+ admin:Address,
39
+ halt: number,
40
+ init: number,
41
+ };
42
+
43
+ export function bridgeConfigToCell(config: BridgeConfig): Cell {
44
+ return beginCell()
45
+ .storeAddress(config.owner)
46
+ // .storeAddress(config.admin)
47
+ .storeUint(config.halt,2)
48
+ .storeUint(config.init,2)
49
+
50
+ .storeRef(beginCell() // *****about fee begin*****
51
+ .storeAddress(config.smgFeeProxy) // feeProxyAddress
52
+ .storeAddress(config.operator) // operator
53
+ .storeDict() // about Contract and Agent fee
54
+ .storeDict() // about tokenPairFee
55
+ .storeDict() // cross_admin
56
+ .endCell()) // *****about fee end*****
57
+
58
+ .storeRef(beginCell() // *****about oracle begin*****
59
+ .storeAddress(config.oracleAdmin) // oracleAdmin
60
+ .storeDict() // mapSmgConfig
61
+ .storeDict() // mapSmgConfigCommit
62
+ .storeDict() // mapSmgTxStatus
63
+ .endCell()) // *****about oracle end*****
64
+
65
+ .storeRef(beginCell() // *****about tm begin*****
66
+ .storeDict() // mapTokenPairInfo
67
+ //.storeDict() // mapWrappedToken
68
+ .endCell()) // *****about tm end*****
69
+
70
+ .storeRef(beginCell()
71
+ .endCell()) // extended
72
+ .endCell();
73
+ }
74
+
75
+
76
+ export class Bridge implements Contract {
77
+ constructor(readonly address: Address, readonly init?: { code: Cell; data: Cell }) {}
78
+
79
+ static createFromAddress(address: Address) {
80
+ return new Bridge(address);
81
+ }
82
+
83
+ static createFromConfig(config: BridgeConfig, code: Cell, workchain = 0) {
84
+ const data = bridgeConfigToCell(config);
85
+ const init = { code, data };
86
+ return new Bridge(contractAddress(workchain, init), init);
87
+ }
88
+
89
+ async sendDeploy(provider: ContractProvider, via: Sender, value: bigint) {
90
+ await provider.internal(via, {
91
+ value,
92
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
93
+ body: beginCell().endCell(),
94
+ });
95
+ }
96
+
97
+ async sendSetTokenPairFee(
98
+ provider: ContractProvider,
99
+ via: Sender,
100
+ opts: {
101
+ value: bigint,
102
+ queryID?: number,
103
+ tokenPairID:number,
104
+ fee:number,
105
+ }
106
+ ) {
107
+
108
+ await provider.internal(via, {
109
+ value: opts.value,
110
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
111
+ body: codeTable[opcodes.OP_FEE_SetTokenPairFee].enCode(opts),
112
+ });
113
+ }
114
+ async sendSetTokenPairFees(
115
+ provider: ContractProvider,
116
+ via: Sender,
117
+ opts: {
118
+ value: bigint,
119
+ queryID?: number,
120
+ tokenPairID:number[],
121
+ fee:number[],
122
+ }
123
+ ) {
124
+
125
+ await provider.internal(via, {
126
+ value: opts.value,
127
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
128
+ body: codeTable[opcodes.OP_FEE_SetTokenPairFees].enCode(opts),
129
+ });
130
+ }
131
+ async sendSetChainFee(
132
+ provider: ContractProvider,
133
+ via: Sender,
134
+ opts: {
135
+ value: bigint,
136
+ queryID?: number,
137
+ srcChainId:number,
138
+ dstChainId:number,
139
+ contractFee:number,
140
+ agentFee:number,
141
+ }
142
+ ) {
143
+
144
+ await provider.internal(via, {
145
+ value: opts.value,
146
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
147
+ body: codeTable[opcodes.OP_FEE_SetChainFee].enCode(opts),
148
+ });
149
+ }
150
+ async sendSetChainFees(
151
+ provider: ContractProvider,
152
+ via: Sender,
153
+ opts: {
154
+ value: bigint,
155
+ queryID?: number,
156
+ srcChainId:number[],
157
+ dstChainId:number[],
158
+ contractFee:number[],
159
+ agentFee:number[],
160
+ }
161
+ ) {
162
+
163
+ await provider.internal(via, {
164
+ value: opts.value,
165
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
166
+ body: codeTable[opcodes.OP_FEE_SetChainFees].enCode(opts),
167
+ });
168
+ }
169
+
170
+ async sendAddTokenPair(
171
+ provider: ContractProvider,
172
+ via: Sender,
173
+ opts: {
174
+ value: bigint,
175
+ queryID?: number,
176
+ tokenPairId:number,
177
+ fromChainID:number,
178
+ fromAccount:string,
179
+ toChainID:number,
180
+ toAccount:string,
181
+ jettonAdminAddr:string,
182
+ }
183
+ ) {
184
+
185
+ let bodyHex = codeTable[opcodes.OP_TOKENPAIR_Upsert].enCode(opts).toBoc().toString('hex');
186
+ logger.info(formatUtil.format("bodyHex %s",bodyHex));
187
+ await provider.internal(via, {
188
+ value: opts.value,
189
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
190
+ body: codeTable[opcodes.OP_TOKENPAIR_Upsert].enCode(opts),
191
+ });
192
+ }
193
+ async sendRemoveTokenPair(
194
+ provider: ContractProvider,
195
+ via: Sender,
196
+ opts: {
197
+ value: bigint,
198
+ queryID?: number,
199
+ tokenPairId:number,
200
+ }
201
+ ) {
202
+ let bodyCell = codeTable[opcodes.OP_TOKENPAIR_Remove].enCode(opts);
203
+ await provider.internal(via, {
204
+ value: opts.value,
205
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
206
+ body: bodyCell,
207
+ });
208
+ }
209
+
210
+ async getJettonWalletAddr(provider: ContractProvider,jettonMaster:Address,owner:Address){
211
+ let c = JettonMinter.createFromAddress(jettonMaster);
212
+ let jettonMinterScOpened = await provider.open(c);
213
+ return await jettonMinterScOpened.getWalletAddress(owner);
214
+ }
215
+
216
+ async getJettonAdminAddr(provider: ContractProvider,jettonMaster:Address){
217
+ let c = JettonMinter.createFromAddress(jettonMaster);
218
+ let jettonMinterScOpened = await provider.open(c);
219
+ return await jettonMinterScOpened.getAdminAddress();
220
+ }
221
+
222
+ async getTokenAccount(provider: ContractProvider,tokenPairID:number){
223
+ // 1. get tokenpair from bridge
224
+ let tokePairInfo = await this.getTokenPair(provider,tokenPairID);
225
+ logger.info(formatUtil.format("tokePairInfo",tokePairInfo));
226
+
227
+ // 2. check src account and dst account
228
+ let tokenAccount = "";
229
+ if (tokePairInfo.fromChainID == BIP44_CHAINID){
230
+ tokenAccount = tokePairInfo.fromAccount;
231
+ }else{
232
+ if(tokePairInfo.toChainID == BIP44_CHAINID){
233
+ tokenAccount = tokePairInfo.toAccount;
234
+ }else{
235
+ throw "TokenPair not support"
236
+ }
237
+ }
238
+ return tokenAccount;
239
+ }
240
+
241
+ async sendUserLock(
242
+ provider: ContractProvider,
243
+ via: Sender,
244
+ opts: {
245
+ value: bigint,
246
+ queryID?: number,
247
+ smgID:string,
248
+ tokenPairID:number,
249
+ crossValue:bigint,
250
+ dstUserAccount:string, // hex string
251
+ client:TonClient|Blockchain,
252
+ senderAccount:string,
253
+ bridgeScAddr:string,
254
+ },
255
+ ) {
256
+
257
+ let ret = await buildUserLockMessages({
258
+ value: opts.value,
259
+ smgID: opts.smgID,
260
+ tokenPairID: opts.tokenPairID,
261
+ crossValue: opts.crossValue,
262
+ dstUserAccount: opts.dstUserAccount,
263
+ bridgeScAddr: opts.bridgeScAddr,
264
+ client: opts.client,
265
+ senderAccount: opts.senderAccount
266
+ })
267
+ console.log("ret==>",ret);
268
+ console.log("ret.to==>",ret.to);
269
+
270
+ if(ret.to.toString() == this.address.toString()){
271
+ console.log("entering lock coin");
272
+ let totalValue:bigint;
273
+ totalValue = ret.value;
274
+ await provider.internal(via, {
275
+ value: totalValue,
276
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
277
+ body: ret.body});
278
+ }else{
279
+ console.log("entering lock token");
280
+ let provider = await opts.client.provider(ret.to as unknown as Address);
281
+ await provider.internal(via, {
282
+ value: opts.value,
283
+ //sendMode: SendMode.PAY_GAS_SEPARATELY,
284
+ sendMode: SendMode.NONE,
285
+ body: ret.body})
286
+ }
287
+ }
288
+
289
+ async sendSmgRelease(
290
+ provider: ContractProvider,
291
+ via: Sender,
292
+ opts: {
293
+ value: bigint,
294
+ queryID?: number,
295
+ uniqueID:bigint,
296
+ smgID:string,
297
+ tokenPairID:number,
298
+ releaseValue:bigint,
299
+ fee:bigint,
300
+ userAccount:Address,
301
+ bridgeJettonWalletAddr: Address, // used to send wrapped token
302
+ e:bigint,
303
+ p:bigint,
304
+ s:bigint,
305
+ fwTonAmount:bigint,
306
+ totalTonAmount:bigint,
307
+ }
308
+ ) {
309
+ console.log("opts1",opts);
310
+ let body = codeTable[opcodes.OP_CROSS_SmgRelease].enCode(opts);
311
+ await provider.internal(via, {
312
+ value: opts.value,
313
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
314
+ body: body});
315
+ }
316
+
317
+ async sendHalt(
318
+ provider: ContractProvider,
319
+ via: Sender,
320
+ opts: {
321
+ value: bigint,
322
+ queryID?: number,
323
+ halt:number,
324
+ }){
325
+ await provider.internal(via, {
326
+ value: opts.value,
327
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
328
+ body: beginCell()
329
+ .storeUint(opcodes.OP_COMMON_SetHalt, 32)
330
+ .storeUint(opts.queryID ?? 0, 64)
331
+ .storeUint(opts.halt, 2)
332
+ .endCell(),
333
+ });
334
+ }
335
+ async sendTransferCrossOwner(provider: ContractProvider, sender: Sender,
336
+ opts: {
337
+ value: bigint,
338
+ queryID?: number,
339
+ owner: Address,
340
+ }
341
+ ) {
342
+ await provider.internal(sender, {
343
+ value: opts.value,
344
+ body: beginCell()
345
+ .storeUint(opcodes.OP_COMMON_TransferOwner, 32) // op (op #1 = increment)
346
+ .storeUint(opts.queryID?opts.queryID:0, 64) // query id
347
+ .storeAddress(opts.owner)
348
+ .endCell()
349
+ });
350
+ }
351
+
352
+ async getCrossConfig(provider: ContractProvider) {
353
+ const common = await provider.get('get_cross_config', []);
354
+ let oracleAdmin = await provider.get('get_oracle_admin', [])
355
+ let feeConfig = await provider.get('get_fee_config', [])
356
+ return {
357
+ owner: common.stack.readAddress(),
358
+ halt:common.stack.readNumber(),
359
+ init:common.stack.readNumber(),
360
+ oracleAdmin: oracleAdmin.stack.readAddress(),
361
+ feeProxyAdmin: feeConfig.stack.readAddress(),
362
+ operator: feeConfig.stack.readAddress(),
363
+ }
364
+ }
365
+
366
+ async getChainFee(provider: ContractProvider,srcChainId:number,dstChainId:number) {
367
+ const result = await provider.get('get_chain_fee', [{ type: 'int', value: BigInt(srcChainId) },
368
+ { type: 'int', value: BigInt(dstChainId)}]);
369
+ return {
370
+ contractFee:result.stack.readNumber(),
371
+ agentFee:result.stack.readNumber()
372
+ }
373
+ }
374
+ async getTokenPairFee(provider: ContractProvider,tokenpair:number) {
375
+ const result = await provider.get('get_tokenpair_fee', [{ type: 'int', value: BigInt(tokenpair) }]);
376
+ return result.stack.readNumber()
377
+ }
378
+
379
+ async getTokenPair(provider: ContractProvider,tokenPairId:number) {
380
+ const result = await provider.get('get_token_pair', [{ type: 'int', value: BigInt(tokenPairId) }]);
381
+ let fromChainID = result.stack.readNumber();
382
+ let fromAccount = result.stack.readBuffer();
383
+ let toChainID = result.stack.readNumber();
384
+ let toAccount = result.stack.readBuffer();
385
+ let jettonAdminAddr = result.stack.readBuffer();
386
+ let pair = {fromChainID, toChainID, fromAccount:"", toAccount:"", jettonAdminAddr:""}
387
+ if(pair.fromChainID == 0 || pair.toChainID == 0) {
388
+ return pair
389
+ }
390
+ if(BIP44_CHAINID == fromChainID) {
391
+ let addr = new Address(0, fromAccount)
392
+ pair['fromAccount'] = addr.toString()
393
+ pair['toAccount'] = "0x"+toAccount.toString('hex')
394
+ } else {
395
+ let addr = new Address(0, toAccount)
396
+ pair['toAccount'] = addr.toString()
397
+ pair['fromAccount'] = "0x"+fromAccount.toString('hex')
398
+ }
399
+ pair['jettonAdminAddr'] = (new Address(0, jettonAdminAddr)).toString()
400
+ return pair
401
+ }
402
+
403
+ async getFirstTokenPairID(provider: ContractProvider) {
404
+ const result = await provider.get('get_first_tokenpair_id', []);
405
+ // todo getTokenPair
406
+ return result.stack.readNumber()
407
+ }
408
+
409
+ async getNextTokenPairID(provider: ContractProvider, id: number) {
410
+ const result = await provider.get('get_next_tokenpair_id', [{ type: 'int', value: BigInt(id) }]);
411
+ // todo getTokenPair
412
+ return result.stack.readNumber()
413
+ }
414
+
415
+ async getFirstStoremanGroupID(provider: ContractProvider) {
416
+ const { stack } = await provider.get("get_first_smg_id", []);
417
+ return stack.readBigNumber();
418
+ }
419
+
420
+ async getNextStoremanGroupID(provider: ContractProvider, id: bigint) {
421
+ const { stack } = await provider.get("get_next_smg_id", [{ type: 'int', value: id }]);
422
+ return stack.readBigNumber();
423
+ }
424
+ async getFirstStoremanGroupIDCommited(provider: ContractProvider) {
425
+ const { stack } = await provider.get("get_first_smg_id_Commited", []);
426
+ return stack.readBigNumber();
427
+ }
428
+
429
+ async getNextStoremanGroupIDCommited(provider: ContractProvider, id: bigint) {
430
+ const { stack } = await provider.get("get_next_smg_id_Commited", [{ type: 'int', value: id }]);
431
+ return stack.readBigNumber();
432
+ }
433
+ async getStoremanGroupConfig(provider: ContractProvider, id: bigint) {
434
+ const { stack } = await provider.get("get_smgConfig", [{ type: 'int', value: id }]);
435
+ return {
436
+ gpkX:stack.readBigNumber(),
437
+ gpkY:stack.readBigNumber(),
438
+ startTime:stack.readBigNumber(),
439
+ endTime:stack.readBigNumber(),
440
+ }
441
+ }
442
+ async getStoremanGroupConfigCommited(provider: ContractProvider, id: bigint) {
443
+ const { stack } = await provider.get("get_smgConfigCommited", [{ type: 'int', value: id }]);
444
+ return {
445
+ gpkX:stack.readBigNumber(),
446
+ gpkY:stack.readBigNumber(),
447
+ startTime:stack.readBigNumber(),
448
+ endTime:stack.readBigNumber(),
449
+ }
450
+ }
451
+ async sendSetStoremanGroupConfig(provider: ContractProvider, sender: Sender,
452
+ opts: {
453
+ id: bigint, gpkX: bigint, gpkY:bigint, startTime: number, endTime: number,
454
+ value: bigint,
455
+ queryID?: number,
456
+ }
457
+ ) {
458
+ await provider.internal(sender, {
459
+ value: opts.value,
460
+ body: beginCell()
461
+ .storeUint(opcodes.OP_ORACLE_SetSMG, 32)
462
+ .storeUint(0, 64) // query id
463
+ .storeUint(opts.id, 256)
464
+ .storeUint(opts.gpkX, 256)
465
+ .storeUint(opts.gpkY, 256)
466
+ .storeUint(opts.startTime, 64)
467
+ .storeUint(opts.endTime, 64)
468
+ .endCell()
469
+ });
470
+ }
471
+ async sendRemoveStoremanGroup(provider: ContractProvider, sender: Sender,
472
+ opts: {
473
+ id: bigint,
474
+ value: bigint,
475
+ queryID?: number,
476
+ }
477
+ ) {
478
+ await provider.internal(sender, {
479
+ value: opts.value,
480
+ body: beginCell()
481
+ .storeUint(opcodes.OP_ORACLE_DeleteSMG, 32)
482
+ .storeUint(0, 64) // query id
483
+ .storeUint(opts.id, 256)
484
+ .endCell()
485
+ });
486
+ }
487
+ async sendSetStoremanGroupConfigCommit(provider: ContractProvider, sender: Sender,
488
+ opts: {
489
+ id: bigint, gpkX: bigint, gpkY:bigint, startTime: number, endTime: number,
490
+ value: bigint,
491
+ queryID?: number,
492
+ }
493
+ ) {
494
+ await provider.internal(sender, {
495
+ value: opts.value,
496
+ body: beginCell()
497
+ .storeUint(opcodes.OP_ORACLE_CommitSMG, 32)
498
+ .storeUint(0, 64) // query id
499
+ .storeUint(opts.id, 256)
500
+ .storeUint(opts.gpkX, 256)
501
+ .storeUint(opts.gpkY, 256)
502
+ .storeUint(opts.startTime, 64)
503
+ .storeUint(opts.endTime, 64)
504
+ .endCell()
505
+ });
506
+ }
507
+ async getBalance(provider: ContractProvider) {
508
+ let state = await provider.getState();
509
+ return state.balance;
510
+ }
511
+ async sendAddAdmin(
512
+ provider: ContractProvider,
513
+ via:Sender,
514
+ opts: {
515
+ value: bigint,
516
+ queryID?: number,
517
+ adminAddr:Address,
518
+ }
519
+ ) {
520
+ let isValid = Address.isAddress(opts.adminAddr)
521
+ if (!isValid){
522
+ await Promise.reject("in valid address")
523
+ }
524
+ await provider.internal(via, {
525
+ value: opts.value,
526
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
527
+ body: beginCell()
528
+ .storeUint(opcodes.OP_FEE_AddCrossAdmin, 32)
529
+ .storeUint(opts.queryID ?? 0, 64)
530
+ .storeAddress(opts.adminAddr)
531
+ .endCell(),
532
+ });
533
+ }
534
+ async sendRemoveAdmin(
535
+ provider: ContractProvider,
536
+ via:Sender,
537
+ opts: {
538
+ value: bigint,
539
+ queryID?: number,
540
+ adminAddr:Address,
541
+ }
542
+ ) {
543
+ let isValid = Address.isAddress(opts.adminAddr)
544
+ if (!isValid){
545
+ await Promise.reject("in valid address")
546
+ }
547
+ return await provider.internal(via, {
548
+ value: opts.value,
549
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
550
+ body: beginCell()
551
+ .storeUint(opcodes.OP_FEE_DelCrossAdmin, 32)
552
+ .storeUint(opts.queryID ?? 0, 64)
553
+ .storeAddress(opts.adminAddr)
554
+ .endCell(),
555
+ });
556
+ }
557
+ async sendSetFeeProxy(
558
+ provider: ContractProvider,
559
+ via:Sender,
560
+ opts: {
561
+ value: bigint,
562
+ queryID?: number,
563
+ feeProxy:Address,
564
+ }
565
+ ) {
566
+ let isValid = Address.isAddress(opts.feeProxy)
567
+ if (!isValid){
568
+ await Promise.reject("in valid address")
569
+ }
570
+ return await provider.internal(via, {
571
+ value: opts.value,
572
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
573
+ body: beginCell()
574
+ .storeUint(opcodes.OP_FEE_SetSmgFeeProxy, 32)
575
+ .storeUint(opts.queryID ?? 0, 64)
576
+ .storeAddress(opts.feeProxy)
577
+ .endCell(),
578
+ });
579
+ }
580
+ async getFirstAdmin(provider: ContractProvider,){
581
+ const { stack } = await provider.get("get_first_crossAdmin", []);
582
+ let s = stack.readBuffer();
583
+ if(s.toString('hex') == '0000000000000000000000000000000000000000000000000000000000000000') {
584
+ return ""
585
+ }
586
+ let addr = new Address(0, s)
587
+ return addr.toString()
588
+ }
589
+
590
+ async getNextAdmin(provider: ContractProvider,adminAddr:Address){
591
+ const { stack } = await provider.get("get_next_crossAdmin", [{ type: 'slice', cell: beginCell().storeAddress(adminAddr).endCell()}]);
592
+ let s = stack.readBuffer();
593
+ if (s.toString('hex') == '0000000000000000000000000000000000000000000000000000000000000000') {
594
+ return ""
595
+ }
596
+ let addr = new Address(0, s)
597
+ return addr.toString()
598
+ }
599
+
600
+
601
+
602
+ // for upgrade sc test
603
+ async getUpdatedInt(provider: ContractProvider) {
604
+ const result = await provider.get('get_updated_int', []);
605
+ return result.stack.readNumber()
606
+ }
607
+
608
+ async sendUpdateInt(provider: ContractProvider,
609
+ opts: {
610
+ sender: Sender,
611
+ value: bigint,
612
+ queryID?: number,
613
+ }
614
+ ) {
615
+ await provider.internal(opts.sender, {
616
+ value: opts.value,
617
+ body: beginCell()
618
+ .storeUint(opcodes.OP_EXTEND_UpdateAddInt, 32) // op (op #1 = increment)
619
+ .storeUint(0, 64) // query id
620
+ .endCell()
621
+ });
622
+ }
623
+
624
+ async sendUpgradeSC(provider: ContractProvider,via:Sender,
625
+ opts: {
626
+ value: bigint,
627
+ queryID?: number,
628
+ code:Cell,
629
+ }
630
+ ) {
631
+ await provider.internal(via, {
632
+ value: opts.value,
633
+ body: beginCell()
634
+ .storeUint(opcodes.OP_UPGRADE_Code, 32) // op (op #1 = increment)
635
+ .storeUint(0, 64) // query id
636
+ .storeRef(opts.code)
637
+ .endCell()
638
+ });
639
+ }
640
+
641
+ async getVersion(provider: ContractProvider) {
642
+ const result = await provider.get('version', []);
643
+ return result.stack.readString()
644
+ }
645
+ }