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,274 @@
1
+ import { Address, beginCell, Cell, Contract, contractAddress, ContractProvider, Sender, SendMode, Slice } from '@ton/core';
2
+ import * as opcodes from "./opcodes";
3
+ import { HttpApi } from '@ton/ton';
4
+ import { getHttpEndpoint } from "@orbs-network/ton-access";
5
+ import internal from 'stream';
6
+
7
+ import {BIP44_CHAINID} from './const/const-value';
8
+ import {codeTable} from "./code/encode-decode";
9
+
10
+ import {logger} from './utils/logger'
11
+ import {OP_GROUPAPPROVE_Proposol_TransferOwner} from "./opcodes";
12
+ const formatUtil = require('util');
13
+
14
+
15
+
16
+ export type GroupApproveConfig = {
17
+ chainId: number;
18
+ taskId: number;
19
+ foundation: Address;
20
+ bridge: Address;
21
+ };
22
+
23
+ export function GroupApproveConfigToCell(config: GroupApproveConfig): Cell {
24
+ return beginCell()
25
+ .storeUint(config.taskId, 256)
26
+ .storeAddress(config.foundation)
27
+ .storeAddress(config.bridge)
28
+ .storeDict()
29
+ .endCell();
30
+ }
31
+
32
+
33
+ export class GroupApprove implements Contract {
34
+ constructor(readonly address: Address, readonly init?: { code: Cell; data: Cell }) {}
35
+
36
+ static createFromAddress(address: Address) {
37
+ return new GroupApprove(address);
38
+ }
39
+
40
+ static createFromConfig(config: GroupApproveConfig, code: Cell) {
41
+ const data = GroupApproveConfigToCell(config);
42
+ const init = { code, data };
43
+ return new GroupApprove(contractAddress(0, init), init);
44
+ }
45
+
46
+
47
+ async sendDeploy(provider: ContractProvider, via: Sender, value: bigint) {
48
+ await provider.internal(via, {
49
+ value,
50
+ body: beginCell().endCell(),
51
+ });
52
+ }
53
+
54
+ async sendTransferCrossOwner(provider: ContractProvider, sender: Sender,
55
+ opts: {
56
+ value: bigint,
57
+ queryID?: number,
58
+ chainId:number,
59
+ toAddr: Address,
60
+ owner: Address,
61
+ }
62
+ ) {
63
+ await provider.internal(sender, {
64
+ value: opts.value,
65
+ body: codeTable[opcodes.OP_GROUPAPPROVE_Proposol_TransferOwner].enCode(opts)
66
+ });
67
+ }
68
+ async sendTransferOracleAdmin(provider: ContractProvider, sender: Sender,
69
+ opts: {
70
+ value: bigint,
71
+ queryID?: number,
72
+ chainId:number,
73
+ toAddr: Address,
74
+ oracleAdmin: Address,
75
+ }
76
+ ) {
77
+ await provider.internal(sender, {
78
+ value: opts.value,
79
+ body: codeTable[opcodes.OP_GROUPAPPROVE_Proposol_TransferOracleAdmin].enCode(opts)
80
+ });
81
+ }
82
+ async sendTransferRobotAdmin(provider: ContractProvider, sender: Sender,
83
+ opts: {
84
+ value: bigint,
85
+ queryID?: number,
86
+ chainId:number,
87
+ toAddr: Address,
88
+ operator: Address,
89
+ }
90
+ ) {
91
+ await provider.internal(sender, {
92
+ value: opts.value,
93
+ body: codeTable[opcodes.OP_GROUPAPPROVE_Proposol_TransferOperator].enCode(opts)
94
+ });
95
+ }
96
+ async sendTransferFoundation(provider: ContractProvider, sender: Sender,
97
+ opts: {
98
+ value: bigint,
99
+ queryID?: number,
100
+ chainId:number,
101
+ toAddr: Address,
102
+ foundation: Address,
103
+ }
104
+ ) {
105
+ await provider.internal(sender, {
106
+ value: opts.value,
107
+ body: codeTable[opcodes.OP_GROUPAPPROVE_Proposol_TranferFoundation].enCode(opts)
108
+ });
109
+
110
+ }
111
+ async sendCrossHalt(
112
+ provider: ContractProvider, sender: Sender,
113
+ opts: {
114
+ value: bigint,
115
+ queryID?: number,
116
+ chainId:number,
117
+ toAddr: Address,
118
+ halt: number,
119
+ }
120
+ ) {
121
+ await provider.internal(sender, {
122
+ value: opts.value,
123
+ body: codeTable[opcodes.OP_GROUPAPPROVE_Proposol_SetHalt].enCode(opts)
124
+ });
125
+ }
126
+ async sendAddCrossAdmin(provider: ContractProvider, sender: Sender,
127
+ opts: {
128
+ value: bigint,
129
+ queryID?: number,
130
+ chainId:number,
131
+ toAddr: Address,
132
+ admin: Address,
133
+ }
134
+ ) {
135
+ await provider.internal(sender, {
136
+ value: opts.value,
137
+ body: codeTable[opcodes.OP_GROUPAPPROVE_Proposol_AddCrossAdmin].enCode(opts)
138
+ });
139
+ }
140
+ async sendRemoveCrossAdmin(provider: ContractProvider, sender: Sender,
141
+ opts: {
142
+ value: bigint,
143
+ queryID?: number,
144
+ chainId:number,
145
+ toAddr: Address,
146
+ admin: Address,
147
+ }
148
+ ) {
149
+ await provider.internal(sender, {
150
+ value: opts.value,
151
+ body: codeTable[opcodes.OP_GROUPAPPROVE_Proposol_DelCrossAdmin].enCode(opts)
152
+ });
153
+ }
154
+ async sendAddTokenPair(provider: ContractProvider, sender: Sender,
155
+ opts: {
156
+ value: bigint,
157
+ queryID?: number,
158
+ chainId:number,
159
+ toAddr: Address,
160
+ tokenPairId:number,
161
+ fromChainID:number,
162
+ fromAccount:string,
163
+ toChainID:number,
164
+ toAccount:string,
165
+ jettonAdminAddr:string
166
+ }
167
+ ) {
168
+ await provider.internal(sender, {
169
+ value: opts.value,
170
+ body: codeTable[opcodes.OP_GROUPAPPROVE_Proposol_TOKENPAIR_Upsert].enCode(opts)
171
+ });
172
+ }
173
+ async sendRemoveTokenPair(provider: ContractProvider, sender: Sender,
174
+ opts: {
175
+ value: bigint,
176
+ queryID?: number,
177
+ chainId:number,
178
+ toAddr: Address,
179
+ tokenPairId: number,
180
+ }
181
+ ) {
182
+ await provider.internal(sender, {
183
+ value: opts.value,
184
+ body: codeTable[opcodes.OP_GROUPAPPROVE_Proposol_TOKENPAIR_Remove].enCode(opts)
185
+ });
186
+ }
187
+ async sendSetFeeProxy(provider: ContractProvider, sender: Sender,
188
+ opts: {
189
+ value: bigint,
190
+ queryID?: number,
191
+ chainId:number,
192
+ toAddr: Address,
193
+ feeProxy: Address,
194
+ }
195
+ ) {
196
+ await provider.internal(sender, {
197
+ value: opts.value,
198
+ body: codeTable[opcodes.OP_GROUPAPPROVE_Proposol_SetSmgFeeProxy].enCode(opts)
199
+ });
200
+ }
201
+ async sendUpgradeSC(provider: ContractProvider, sender: Sender,
202
+ opts: {
203
+ value: bigint,
204
+ queryID?: number,
205
+ chainId:number,
206
+ toAddr: Address,
207
+ code: Cell,
208
+ }
209
+ ) {
210
+ await provider.internal(sender, {
211
+ value: opts.value,
212
+ body: codeTable[opcodes.OP_GROUPAPPROVE_Proposol_UpgradeSc].enCode(opts)
213
+ });
214
+ }
215
+
216
+ async sendApproveExec(
217
+ provider: ContractProvider, sender: Sender,
218
+ opts: {
219
+ value: bigint,
220
+ queryID?: number,
221
+ taskId: number,
222
+ smgId: bigint,
223
+ e:bigint,
224
+ p:bigint,
225
+ s:bigint,
226
+ }
227
+ ) {
228
+ let proof = beginCell()
229
+ .storeUint(opts.e, 256)
230
+ .storeUint(opts.p, 256)
231
+ .storeUint(opts.s, 256)
232
+ .endCell();
233
+ await provider.internal(sender, {
234
+ value: opts.value,
235
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
236
+ body: beginCell()
237
+ .storeUint(opcodes.OP_GROUPAPPROVE_Execute, 32)
238
+ .storeUint(opts.queryID ?? 0, 64)
239
+ .storeUint(opts.smgId, 256)
240
+ .storeUint(opts.taskId,64)
241
+ .storeRef(proof)
242
+ .endCell(),
243
+ });
244
+ }
245
+ async getProposolCount(provider: ContractProvider) {
246
+ const result = await provider.get('get_proposol_count', []);
247
+ return result.stack.readNumber()
248
+ }
249
+ async getConfig(provider: ContractProvider) {
250
+ const result = await provider.get('get_config', []);
251
+ let foundation = result.stack.readAddress();
252
+ let bridge = result.stack.readAddress();
253
+ return {
254
+ foundation, bridge
255
+ }
256
+ }
257
+ async getProposolById(provider: ContractProvider, id: bigint) {
258
+ const result = await provider.get('get_proposol', [{ type: 'int', value: id }]);
259
+ return {
260
+ toAddr: result.stack.readAddress(),
261
+ msg:result.stack.readCell().asSlice(),
262
+ executed: result.stack.readNumber()
263
+ }
264
+ }
265
+
266
+ static computeHash(proposolId:bigint, currentChainId: bigint) {
267
+ let msg = beginCell()
268
+ .storeUint(proposolId, 64)
269
+ .storeUint(currentChainId, 32)
270
+ .endCell()
271
+
272
+ return msg.hash();
273
+ }
274
+ }
@@ -0,0 +1,5 @@
1
+ import { CompilerConfig } from '@ton/blueprint';
2
+
3
+ export const compile: CompilerConfig = {
4
+ targets: ['contracts/jetton/jetton-minter.func'],
5
+ };
@@ -0,0 +1,135 @@
1
+ import { Address, beginCell, Cell, Contract, contractAddress, ContractProvider, Sender, SendMode, toNano } from '@ton/core';
2
+
3
+ export type JettonMinterContent = {
4
+ type:0|1,
5
+ uri:string
6
+ };
7
+ export type JettonMinterConfig = {admin: Address; content: Cell; wallet_code: Cell};
8
+
9
+ export function jettonMinterConfigToCell(config: JettonMinterConfig): Cell {
10
+ return beginCell()
11
+ .storeCoins(0)
12
+ .storeAddress(config.admin)
13
+ .storeRef(config.content)
14
+ .storeRef(config.wallet_code)
15
+ .endCell();
16
+ }
17
+
18
+ export function jettonContentToCell(content:JettonMinterContent) {
19
+ return beginCell()
20
+ .storeUint(content.type, 8)
21
+ .storeStringTail(content.uri) //Snake logic under the hood
22
+ .endCell();
23
+ }
24
+
25
+ export class JettonMinter implements Contract {
26
+ constructor(readonly address: Address, readonly init?: { code: Cell; data: Cell }) {}
27
+
28
+ static createFromAddress(address: Address) {
29
+ return new JettonMinter(address);
30
+ }
31
+
32
+ static createFromConfig(config: JettonMinterConfig, code: Cell, workchain = 0) {
33
+ const data = jettonMinterConfigToCell(config);
34
+ const init = { code, data };
35
+ return new JettonMinter(contractAddress(workchain, init), init);
36
+ }
37
+
38
+ async sendDeploy(provider: ContractProvider, via: Sender, value: bigint) {
39
+ await provider.internal(via, {
40
+ value,
41
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
42
+ body: beginCell().endCell(),
43
+ });
44
+ }
45
+
46
+ static mintMessage(to: Address, jetton_amount: bigint, forward_ton_amount: bigint, total_ton_amount: bigint,) {
47
+ return beginCell().storeUint(0x1674b0a0, 32).storeUint(0, 64) // op, queryId
48
+ .storeAddress(to).storeCoins(jetton_amount)
49
+ .storeCoins(forward_ton_amount).storeCoins(total_ton_amount)
50
+ .endCell();
51
+ }
52
+ async sendMint(provider: ContractProvider, via: Sender, to: Address, jetton_amount: bigint, forward_ton_amount: bigint, total_ton_amount: bigint,) {
53
+ await provider.internal(via, {
54
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
55
+ body: JettonMinter.mintMessage(to, jetton_amount, forward_ton_amount, total_ton_amount,),
56
+ value: total_ton_amount + toNano("0.1"),
57
+ });
58
+ }
59
+
60
+ /* provide_wallet_address#2c76b973 query_id:uint64 owner_address:MsgAddress include_address:Bool = InternalMsgBody;
61
+ */
62
+ static discoveryMessage(owner: Address, include_address: boolean) {
63
+ return beginCell().storeUint(0x2c76b973, 32).storeUint(0, 64) // op, queryId
64
+ .storeAddress(owner).storeBit(include_address)
65
+ .endCell();
66
+ }
67
+
68
+ async sendDiscovery(provider: ContractProvider, via: Sender, owner: Address, include_address: boolean, value:bigint = toNano('0.1')) {
69
+ await provider.internal(via, {
70
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
71
+ body: JettonMinter.discoveryMessage(owner, include_address),
72
+ value: value,
73
+ });
74
+ }
75
+
76
+ static changeAdminMessage(newOwner: Address) {
77
+ return beginCell().storeUint(0x4840664f, 32).storeUint(0, 64) // op, queryId
78
+ .storeAddress(newOwner)
79
+ .endCell();
80
+ }
81
+
82
+ async sendChangeAdmin(provider: ContractProvider, via: Sender, newOwner: Address) {
83
+ await provider.internal(via, {
84
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
85
+ body: JettonMinter.changeAdminMessage(newOwner),
86
+ value: toNano("0.1"),
87
+ });
88
+ }
89
+ static changeContentMessage(content: Cell) {
90
+ return beginCell().storeUint(0x5773d1f5, 32).storeUint(0, 64) // op, queryId
91
+ .storeRef(content)
92
+ .endCell();
93
+ }
94
+
95
+ async sendChangeContent(provider: ContractProvider, via: Sender, content: Cell) {
96
+ await provider.internal(via, {
97
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
98
+ body: JettonMinter.changeContentMessage(content),
99
+ value: toNano("0.1"),
100
+ });
101
+ }
102
+ async getWalletAddress(provider: ContractProvider, owner: Address): Promise<Address> {
103
+ const res = await provider.get('get_wallet_address', [{ type: 'slice', cell: beginCell().storeAddress(owner).endCell() }])
104
+ return res.stack.readAddress()
105
+ }
106
+
107
+ async getJettonData(provider: ContractProvider) {
108
+ let res = await provider.get('get_jetton_data', []);
109
+ let totalSupply = res.stack.readBigNumber();
110
+ let mintable = res.stack.readBoolean();
111
+ let adminAddress = res.stack.readAddress();
112
+ let content = res.stack.readCell();
113
+ let walletCode = res.stack.readCell();
114
+ return {
115
+ totalSupply,
116
+ mintable,
117
+ adminAddress,
118
+ content,
119
+ walletCode
120
+ };
121
+ }
122
+
123
+ async getTotalSupply(provider: ContractProvider) {
124
+ let res = await this.getJettonData(provider);
125
+ return res.totalSupply;
126
+ }
127
+ async getAdminAddress(provider: ContractProvider) {
128
+ let res = await this.getJettonData(provider);
129
+ return res.adminAddress;
130
+ }
131
+ async getContent(provider: ContractProvider) {
132
+ let res = await this.getJettonData(provider);
133
+ return res.content;
134
+ }
135
+ }
@@ -0,0 +1,5 @@
1
+ import { CompilerConfig } from '@ton/blueprint';
2
+
3
+ export const compile: CompilerConfig = {
4
+ targets: ['contracts/jetton/jetton-wallet.func'],
5
+ };
@@ -0,0 +1,127 @@
1
+ import { Address, beginCell, Cell, Contract, contractAddress, ContractProvider, Sender, SendMode, toNano } from '@ton/core';
2
+
3
+
4
+ export type JettonWalletConfig = {};
5
+
6
+ export function jettonWalletConfigToCell(config: JettonWalletConfig): Cell {
7
+ return beginCell().endCell();
8
+ }
9
+
10
+ export class JettonWallet implements Contract {
11
+ constructor(readonly address: Address, readonly init?: { code: Cell; data: Cell }) {}
12
+
13
+ static createFromAddress(address: Address) {
14
+ return new JettonWallet(address);
15
+ }
16
+
17
+ static createFromConfig(config: JettonWalletConfig, code: Cell, workchain = 0) {
18
+ const data = jettonWalletConfigToCell(config);
19
+ const init = { code, data };
20
+ return new JettonWallet(contractAddress(workchain, init), init);
21
+ }
22
+
23
+ async sendDeploy(provider: ContractProvider, via: Sender, value: bigint) {
24
+ await provider.internal(via, {
25
+ value,
26
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
27
+ body: beginCell().endCell(),
28
+ });
29
+ }
30
+
31
+ async getJettonBalance(provider: ContractProvider) {
32
+ let state = await provider.getState();
33
+ if (state.state.type !== 'active') {
34
+ return 0n;
35
+ }
36
+ let res = await provider.get('get_wallet_data', []);
37
+ return res.stack.readBigNumber();
38
+ }
39
+ static transferMessage(jetton_amount: bigint, to: Address,
40
+ responseAddress:Address,
41
+ customPayload: Cell,
42
+ forward_ton_amount: bigint,
43
+ forwardPayload: Cell) {
44
+ return beginCell().storeUint(0xf8a7ea5, 32).storeUint(0, 64) // op, queryId
45
+ .storeCoins(jetton_amount).storeAddress(to)
46
+ .storeAddress(responseAddress)
47
+ .storeMaybeRef(customPayload)
48
+ .storeCoins(forward_ton_amount)
49
+ .storeMaybeRef(forwardPayload)
50
+ .endCell();
51
+ }
52
+ async sendTransfer(provider: ContractProvider, via: Sender,
53
+ value: bigint,
54
+ jetton_amount: bigint,
55
+ to: Address,
56
+ responseAddress:Address,
57
+ customPayload: Cell,
58
+ forward_ton_amount: bigint,
59
+ forwardPayload: Cell) {
60
+ await provider.internal(via, {
61
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
62
+ body: JettonWallet.transferMessage(jetton_amount, to, responseAddress, customPayload, forward_ton_amount, forwardPayload),
63
+ value:value
64
+ });
65
+
66
+ }
67
+ /*
68
+ burn#595f07bc query_id:uint64 amount:(VarUInteger 16)
69
+ response_destination:MsgAddress custom_payload:(Maybe ^Cell)
70
+ = InternalMsgBody;
71
+ */
72
+ static burnMessage(jetton_amount: bigint,
73
+ responseAddress:Address,
74
+ customPayload: Cell) {
75
+ return beginCell().storeUint(0x595f07bc, 32).storeUint(0, 64) // op, queryId
76
+ .storeCoins(jetton_amount).storeAddress(responseAddress)
77
+ .storeMaybeRef(customPayload)
78
+ .endCell();
79
+ }
80
+
81
+ async sendBurn(provider: ContractProvider, via: Sender, value: bigint,
82
+ jetton_amount: bigint,
83
+ responseAddress:Address,
84
+ customPayload: Cell) {
85
+ await provider.internal(via, {
86
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
87
+ body: JettonWallet.burnMessage(jetton_amount, responseAddress, customPayload),
88
+ value:value
89
+ });
90
+
91
+ }
92
+ /*
93
+ withdraw_tons#107c49ef query_id:uint64 = InternalMsgBody;
94
+ */
95
+ static withdrawTonsMessage() {
96
+ return beginCell().storeUint(0x6d8e5e3c, 32).storeUint(0, 64) // op, queryId
97
+ .endCell();
98
+ }
99
+
100
+ async sendWithdrawTons(provider: ContractProvider, via: Sender) {
101
+ await provider.internal(via, {
102
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
103
+ body: JettonWallet.withdrawTonsMessage(),
104
+ value:toNano('0.1')
105
+ });
106
+
107
+ }
108
+ /*
109
+ withdraw_jettons#10 query_id:uint64 wallet:MsgAddressInt amount:Coins = InternalMsgBody;
110
+ */
111
+ static withdrawJettonsMessage(from:Address, amount:bigint) {
112
+ return beginCell().storeUint(0x768a50b2, 32).storeUint(0, 64) // op, queryId
113
+ .storeAddress(from)
114
+ .storeCoins(amount)
115
+ .storeMaybeRef(null)
116
+ .endCell();
117
+ }
118
+
119
+ async sendWithdrawJettons(provider: ContractProvider, via: Sender, from:Address, amount:bigint) {
120
+ await provider.internal(via, {
121
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
122
+ body: JettonWallet.withdrawJettonsMessage(from, amount),
123
+ value:toNano('0.1')
124
+ });
125
+
126
+ }
127
+ }
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # content of the sub directory
2
+ ## client: used for get random http endpoint
3
+ ## code : decode encode emit event
4
+ ## contractAccess: used for read cross contract
5
+ ## event: interface for get event
6
+ ## sign: used hash data for mpc signature
7
+ ## wallet: interface about wallet contract. (currently support version4)
8
+
9
+ # interface of the contract (same as the ABI of the contract)
10
+ ## Bridge.ts : include all the read and write interface of Bridge contract
11
+ ## GroupApprove.ts: include all the interface of groupApprove
12
+
13
+ # example (file name end with *-ex)
14
+ ## getTokenPair-ex.ts: example of read contract
15
+ ## addTokenPair-ex.ts: example of write contract
16
+ ## getEvent-ex.ts: example of scan blockchain to get the event list.
17
+
18
+ # how to start?
19
+ ## step 1: npm i wan-ton-bridge
20
+ ## step 2: reference of the example directory.
21
+
22
+ # Attention
23
+ ## This SDK only support contract v4 of wallet.
24
+ ## If you need more version of wallet contract, you can reference TonWeb SDK.
@@ -0,0 +1,6 @@
1
+ import { CompilerConfig } from '@ton/blueprint';
2
+
3
+ export const compile: CompilerConfig = {
4
+ lang: 'func',
5
+ targets: ['contracts/signature.fc'],
6
+ };
package/Signature.ts ADDED
@@ -0,0 +1,105 @@
1
+ import { Address, beginCell, Cell, Contract, contractAddress, ContractProvider, Sender, SendMode } from '@ton/core';
2
+ import * as opcodes from "./opcodes";
3
+
4
+ export type SignatureConfig = {
5
+ id: number;
6
+ counter: number;
7
+ };
8
+
9
+ export function signatureConfigToCell(config: SignatureConfig): Cell {
10
+ return beginCell().endCell();
11
+ }
12
+
13
+ export const Opcodes = {
14
+ verify: 0x7e8764ef, //todo should update verify
15
+ verifyEcdsa:0x7e8764ee,
16
+ };
17
+
18
+ export class Signature implements Contract {
19
+ constructor(readonly address: Address, readonly init?: { code: Cell; data: Cell }) {}
20
+
21
+ static createFromAddress(address: Address) {
22
+ return new Signature(address);
23
+ }
24
+
25
+ static createFromConfig(config: SignatureConfig, code: Cell, workchain = 0) {
26
+ const data = signatureConfigToCell(config);
27
+ const init = { code, data };
28
+ return new Signature(contractAddress(workchain, init), init);
29
+ }
30
+
31
+ async sendDeploy(provider: ContractProvider, via: Sender, value: bigint) {
32
+ await provider.internal(via, {
33
+ value,
34
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
35
+ body: beginCell().endCell(),
36
+ });
37
+ }
38
+
39
+ async sendVerify(
40
+ provider: ContractProvider,
41
+ via: Sender,
42
+ opts: {
43
+ s:bigint,
44
+ gpk_x:bigint,
45
+ gpk_y:bigint,
46
+ e:bigint,
47
+ p:bigint,
48
+ msg:bigint,
49
+ value: bigint;
50
+ queryID?: number;
51
+ }
52
+ ) {
53
+ let extraCell = beginCell()
54
+ .storeUint(opts.e, 256)
55
+ .storeUint(opts.p, 256)
56
+ .storeUint(opts.msg, 256)
57
+ .endCell()
58
+ await provider.internal(via, {
59
+ value: opts.value,
60
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
61
+ body: beginCell()
62
+ .storeUint(opcodes.OP_SIG_Verify, 32)
63
+ .storeUint(opts.queryID ?? 0, 64)
64
+ .storeUint(opts.s, 256)
65
+ .storeUint(opts.gpk_x, 256)
66
+ .storeUint(opts.gpk_y, 256)
67
+ .storeRef(extraCell)
68
+ .endCell(),
69
+ });
70
+ }
71
+
72
+ async sendVerifyEcdsa(
73
+ provider: ContractProvider,
74
+ via: Sender,
75
+ opts: {
76
+ s:bigint,
77
+ gpk_x:bigint,
78
+ gpk_y:bigint,
79
+ e:bigint,
80
+ p:bigint,
81
+ msg:bigint,
82
+ value: bigint;
83
+ queryID?: number;
84
+ }
85
+ ) {
86
+ let extraCell = beginCell()
87
+ .storeUint(opts.e, 256)
88
+ .storeUint(opts.p, 256)
89
+ .storeUint(opts.msg, 256)
90
+ .endCell()
91
+ await provider.internal(via, {
92
+ value: opts.value,
93
+ sendMode: SendMode.PAY_GAS_SEPARATELY,
94
+ body: beginCell()
95
+ .storeUint(opcodes.OP_SIG_VerifyEcdsa, 32)
96
+ .storeUint(opts.queryID ?? 0, 64)
97
+ .storeUint(opts.s, 256)
98
+ .storeUint(opts.gpk_x, 256)
99
+ .storeUint(opts.gpk_y, 256)
100
+ .storeRef(extraCell)
101
+ .endCell(),
102
+ });
103
+ }
104
+
105
+ }
@@ -0,0 +1,8 @@
1
+ import { CompilerConfig } from '@ton/blueprint';
2
+
3
+ export const compile: CompilerConfig = {
4
+ lang: 'func',
5
+ targets: [
6
+ 'contracts/address.fc',
7
+ ],
8
+ };