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.
- package/Bridge.compile.ts +8 -0
- package/Bridge.ts +645 -0
- package/Bridge.ts.org +647 -0
- package/Fake.compile.ts +8 -0
- package/GroupApprove.compile.ts +6 -0
- package/GroupApprove.ts +274 -0
- package/JettonMinter.compile.ts +5 -0
- package/JettonMinter.ts +135 -0
- package/JettonWallet.compile.ts +5 -0
- package/JettonWallet.ts +127 -0
- package/README.md +24 -0
- package/Signature.compile.ts +6 -0
- package/Signature.ts +105 -0
- package/address.compile.ts +8 -0
- package/client/1.json +1730 -0
- package/client/client.ts +73 -0
- package/client/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +15 -0
- package/client/log/wan-ton-sdk.out.2024-12-19 +0 -0
- package/code/decode.spec.ts +81 -0
- package/code/encode-decode.ts +622 -0
- package/code/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +20 -0
- package/code/log/wan-ton-sdk.out.2025-01-15 +0 -0
- package/code/log/wan-ton-sdk.out.2025-01-20 +0 -0
- package/code/userLock.ts +291 -0
- package/common.ts +62 -0
- package/config/config-ex.ts +25 -0
- package/config/config.ts +1 -0
- package/const/const-value.ts +33 -0
- package/contractAccess/bridgeAccess.ts +60 -0
- package/contractAccess/groupApproveAccess.ts +59 -0
- package/data/EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs.json +7348 -0
- package/db/Db.spec.ts +193 -0
- package/db/Db.ts +736 -0
- package/db/DbAccess.spec.ts +23 -0
- package/db/DbAccess.ts +174 -0
- package/db/common.ts +94 -0
- package/db/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +15 -0
- package/db/log/wan-ton-sdk.out.2025-04-21 +0 -0
- package/event/getEvents.ts +441 -0
- package/event/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +15 -0
- package/event/log/wan-ton-sdk.out.2024-12-19 +0 -0
- package/example/0:1.txt +1 -0
- package/example/AddToken-ex.ts +148 -0
- package/example/README.md +21 -0
- package/example/addSmg-ex.ts +78 -0
- package/example/addTokenPair-ex.ts +73 -0
- package/example/compileContract-ex.ts +10 -0
- package/example/converTranToTonTran.ts +43 -0
- package/example/createDb-ex.ts +8 -0
- package/example/dbFeedTrans-ex.ts +20 -0
- package/example/delTokenPair-ex.ts +63 -0
- package/example/deploy-ex.ts +68 -0
- package/example/getAllEvents-ex.ts +61 -0
- package/example/getAllTrans.ts +32 -0
- package/example/getContractState-ex.ts +33 -0
- package/example/getEventByHash-ex.ts +39 -0
- package/example/getEvents-ex.ts +55 -0
- package/example/getJettonInfo-ex.ts +44 -0
- package/example/getTokenPair-ex.ts +47 -0
- package/example/getTransByRange-ex.ts +81 -0
- package/example/getTransaction-ex.ts +62 -0
- package/example/isTranSuccess-ex.ts +33 -0
- package/example/locateTx-ex.ts +44 -0
- package/example/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +55 -0
- package/example/log/wan-ton-sdk.out.2025-04-21 +447 -0
- package/example/log/wan-ton-sdk.out.2025-04-22 +1918 -0
- package/example/log/wan-ton-sdk.out.2025-04-23 +4216 -0
- package/example/log/wan-ton-sdk.out.2025-04-24.gz +0 -0
- package/example/log/wan-ton-sdk.out.2025-04-25 +46814 -0
- package/example/log/wan-ton-sdk.out.2025-04-27.gz +0 -0
- package/example/log/wan-ton-sdk.out.2025-04-28 +4966 -0
- package/example/log/wan-ton-sdk.out.2025-04-29 +1328 -0
- package/example/log/wan-ton-sdk.out.2025-04-30 +9 -0
- package/example/mintToken-ex.ts +82 -0
- package/example/setFee-ex.ts +82 -0
- package/example/setFeeProxy.ts +70 -0
- package/example/smgRelease-ex.ts +173 -0
- package/example/upgradeBridgeSc-ex.ts +49 -0
- package/example/userLock-ex.ts +78 -0
- package/fee/fee.ts +23 -0
- package/index.ts +67 -0
- package/jest.config.ts +9 -0
- package/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +20 -0
- package/log/wan-ton-sdk.out.2025-04-21 +0 -0
- package/log/wan-ton-sdk.out.2025-04-30 +10 -0
- package/opcodes.ts +58 -0
- package/package.json +34 -0
- package/publish.sh +78 -0
- package/sign/buildHash.ts +47 -0
- package/sign/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +15 -0
- package/sign/log/wan-ton-sdk.out.2025-04-14 +3 -0
- package/sign/rawTrans.spec.ts +117 -0
- package/sign/rawTrans.ts +122 -0
- package/sign/tools-secp256k1.js +210 -0
- package/testData/JettonMinter.compile.func.ts +8 -0
- package/testData/JettonWallet.compile.func.ts +8 -0
- package/testData/addressList.json +6 -0
- package/testData/bridge.compile.func.ts +8 -0
- package/testData/bridge.compiled.json +1 -0
- package/testData/contractAddress.json +7 -0
- package/testData/jettonTokenInfo.json +14 -0
- package/testData/prvlist.json +6 -0
- package/testData/smg.json +5 -0
- package/testData/tokenInfo.json +23 -0
- package/transResult/transResult.ts +621 -0
- package/tsconfig.json +19 -0
- package/utils/.compiled.json +1 -0
- package/utils/compileContract.ts +60 -0
- package/utils/log/.ba8901062aebb86bf525b42c65ff84f9485419e4-audit.json +15 -0
- package/utils/log/wan-ton-sdk.out.2025-01-08 +0 -0
- package/utils/logger.spec.ts +14 -0
- package/utils/logger.ts +96 -0
- package/utils/utils.spec.ts +21 -0
- package/utils/utils.ts +295 -0
- package/wallet/balance.ts +29 -0
- package/wallet/jetton.spec.ts +27 -0
- package/wallet/jetton.ts +159 -0
- package/wallet/walletContract.spec.ts +111 -0
- package/wallet/walletContract.ts +105 -0
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
|
+
}
|