@pizzaton/ton 0.0.0-stage → 0.1.0

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 (96) hide show
  1. package/CONTRACTS.md +239 -0
  2. package/README.md +481 -2
  3. package/dist/airdrop/index.d.mts +18 -0
  4. package/dist/airdrop/index.mjs +86 -0
  5. package/dist/connect/errors.d.mts +4 -0
  6. package/dist/connect/errors.mjs +21 -0
  7. package/dist/connect/index.d.mts +23 -0
  8. package/dist/connect/index.mjs +34 -0
  9. package/dist/contracts/catalog/index.d.mts +361 -0
  10. package/dist/contracts/catalog/index.mjs +403 -0
  11. package/dist/contracts/client.d.mts +18 -0
  12. package/dist/contracts/client.mjs +31 -0
  13. package/dist/contracts/codecs.d.mts +14 -0
  14. package/dist/contracts/codecs.mjs +61 -0
  15. package/dist/contracts/hipo.d.mts +138 -0
  16. package/dist/contracts/hipo.mjs +198 -0
  17. package/dist/contracts/index.d.mts +23 -0
  18. package/dist/contracts/index.mjs +20 -0
  19. package/dist/contracts/metadata.d.mts +38 -0
  20. package/dist/contracts/metadata.mjs +50 -0
  21. package/dist/contracts/module-client.d.mts +20 -0
  22. package/dist/contracts/module-client.mjs +34 -0
  23. package/dist/contracts/module.d.mts +8 -0
  24. package/dist/contracts/module.mjs +11 -0
  25. package/dist/contracts/wrappers/base.d.mts +18 -0
  26. package/dist/contracts/wrappers/base.mjs +31 -0
  27. package/dist/contracts/wrappers/index.d.mts +12 -0
  28. package/dist/contracts/wrappers/index.mjs +12 -0
  29. package/dist/contracts/wrappers/jvault-protocols.d.mts +206 -0
  30. package/dist/contracts/wrappers/jvault-protocols.mjs +432 -0
  31. package/dist/contracts/wrappers/jvault-support.d.mts +135 -0
  32. package/dist/contracts/wrappers/jvault-support.mjs +269 -0
  33. package/dist/contracts/wrappers/jvault.d.mts +123 -0
  34. package/dist/contracts/wrappers/jvault.mjs +258 -0
  35. package/dist/contracts/wrappers/memeland.d.mts +253 -0
  36. package/dist/contracts/wrappers/memeland.mjs +396 -0
  37. package/dist/contracts/wrappers/multix.d.mts +92 -0
  38. package/dist/contracts/wrappers/multix.mjs +156 -0
  39. package/dist/contracts/wrappers/pizzabox.d.mts +66 -0
  40. package/dist/contracts/wrappers/pizzabox.mjs +105 -0
  41. package/dist/contracts/wrappers/ton-raffles.d.mts +215 -0
  42. package/dist/contracts/wrappers/ton-raffles.mjs +398 -0
  43. package/dist/contracts/wrappers/tonresistor.d.mts +189 -0
  44. package/dist/contracts/wrappers/tonresistor.mjs +276 -0
  45. package/dist/core/address.d.mts +25 -0
  46. package/dist/core/address.mjs +45 -0
  47. package/dist/core/amount.d.mts +8 -0
  48. package/dist/core/amount.mjs +34 -0
  49. package/dist/core/bytes.d.mts +5 -0
  50. package/dist/core/bytes.mjs +18 -0
  51. package/dist/core/constants.d.mts +14 -0
  52. package/dist/core/constants.mjs +15 -0
  53. package/dist/core/errors.d.mts +9 -0
  54. package/dist/core/errors.mjs +16 -0
  55. package/dist/core/http.mjs +39 -0
  56. package/dist/core/index.d.mts +8 -0
  57. package/dist/core/index.mjs +8 -0
  58. package/dist/core/metadata.d.mts +12 -0
  59. package/dist/core/metadata.mjs +35 -0
  60. package/dist/core/network.d.mts +24 -0
  61. package/dist/core/network.mjs +41 -0
  62. package/dist/emulator/index.d.mts +20 -0
  63. package/dist/emulator/index.mjs +24 -0
  64. package/dist/index.d.mts +21 -0
  65. package/dist/index.mjs +19 -0
  66. package/dist/indexer/index.d.mts +90 -0
  67. package/dist/indexer/index.mjs +279 -0
  68. package/dist/jetton/details.d.mts +27 -0
  69. package/dist/jetton/details.mjs +116 -0
  70. package/dist/jetton/index.d.mts +54 -0
  71. package/dist/jetton/index.mjs +92 -0
  72. package/dist/jetton/versions.d.mts +12 -0
  73. package/dist/jetton/versions.mjs +50 -0
  74. package/dist/nft/collection.d.mts +57 -0
  75. package/dist/nft/collection.mjs +148 -0
  76. package/dist/nft/content.d.mts +34 -0
  77. package/dist/nft/content.mjs +142 -0
  78. package/dist/nft/index.d.mts +35 -0
  79. package/dist/nft/index.mjs +51 -0
  80. package/dist/nft/versions.d.mts +11 -0
  81. package/dist/nft/versions.mjs +29 -0
  82. package/dist/provider/index.d.mts +32 -0
  83. package/dist/provider/index.mjs +1 -0
  84. package/dist/react/index.d.mts +13 -0
  85. package/dist/react/index.mjs +48 -0
  86. package/dist/server/index.d.mts +11 -0
  87. package/dist/server/index.mjs +55 -0
  88. package/dist/simulation/index.d.mts +112 -0
  89. package/dist/simulation/index.mjs +310 -0
  90. package/dist/transactions/index.d.mts +33 -0
  91. package/dist/transactions/index.mjs +51 -0
  92. package/dist/vesting/index.d.mts +12 -0
  93. package/dist/vesting/index.mjs +25 -0
  94. package/dist/wallet/index.d.mts +23 -0
  95. package/dist/wallet/index.mjs +71 -0
  96. package/package.json +169 -5
@@ -0,0 +1,396 @@
1
+ import { crc32 } from "../codecs.mjs";
2
+ import { buildJettonBurnBody, buildJettonTransferBody } from "../../jetton/index.mjs";
3
+ import { buildOnchainMetadata } from "../../nft/content.mjs";
4
+ import { ContractWrapper } from "./base.mjs";
5
+ import { Cell, beginCell, contractAddress } from "@ton/core";
6
+ //#region src/contracts/wrappers/memeland.ts
7
+ /** Memeland BCL source revision: https://github.com/PizzaTon/memeland-contracts */
8
+ const MEMELAND_CONTRACTS_COMMIT = "a7e132be091585b80cb6ffc6b7b50c8f0bdc53a2";
9
+ const MEMELAND_OPCODES = {
10
+ deployCoin: crc32("op::deploy_coin"),
11
+ buy: crc32("op::buy"),
12
+ sell: crc32("op::sell"),
13
+ unlockWallet: crc32("op::unlock_wallet"),
14
+ setAdmin: crc32("op::set_admin"),
15
+ setAuthor: crc32("op::set_author"),
16
+ setContent: crc32("op::set_content"),
17
+ setFees: crc32("op::set_fees"),
18
+ setCode: crc32("op::set_code"),
19
+ setData: crc32("op::set_data"),
20
+ setCodeData: crc32("op::set_code_data"),
21
+ collectFees: crc32("op::collect_fees"),
22
+ toggleDeployEnable: crc32("op::toggle_deploy_enable"),
23
+ feePayout: crc32("op::fee_payout"),
24
+ topUp: 3547469196,
25
+ transfer: 260734629,
26
+ burn: 1499400124,
27
+ burnNotification: 2078119902,
28
+ setStatus: 4006754003,
29
+ transferNotification: 1935855772,
30
+ internalTransfer: 395134233,
31
+ excesses: 3576854235,
32
+ provideWalletAddress: 745978227,
33
+ takeWalletAddress: 3513996288,
34
+ mint: 21
35
+ };
36
+ const MEMELAND_GAS = {
37
+ coinDeployment: 50000000n,
38
+ coinBuy: 50000000n,
39
+ coinSell: 60000000n,
40
+ walletUnlock: 50000000n
41
+ };
42
+ const header = (opcode, queryId = 0n) => beginCell().storeUint(opcode, 32).storeUint(queryId, 64);
43
+ function uint(value, bits, field) {
44
+ if (value < 0n || value >= 1n << BigInt(bits)) throw new RangeError(`${field} must fit in uint${String(bits)}`);
45
+ return value;
46
+ }
47
+ function positive(value, field) {
48
+ if (value <= 0n) throw new RangeError(`${field} must be positive`);
49
+ return value;
50
+ }
51
+ function uint16(value, field) {
52
+ if (!Number.isSafeInteger(value) || value < 0 || value > 65535) throw new RangeError(`${field} must fit in uint16`);
53
+ return value;
54
+ }
55
+ function uint32(value, field) {
56
+ if (!Number.isSafeInteger(value) || value < 0 || value > 4294967295) throw new RangeError(`${field} must fit in uint32`);
57
+ return value;
58
+ }
59
+ function requiredText(value, field) {
60
+ if (value.trim().length === 0) throw new RangeError(`${field} is required`);
61
+ return value;
62
+ }
63
+ function buildMemelandFactoryData(config) {
64
+ uint32(config.coinTtl, "coinTtl");
65
+ uint(config.seed, 64, "seed");
66
+ uint16(config.fee.feeNumerator, "feeNumerator");
67
+ uint16(config.fee.feeDenominator, "feeDenominator");
68
+ if (config.fee.feeDenominator === 0) throw new RangeError("feeDenominator must be positive");
69
+ return beginCell().storeAddress(config.loggerAddress).storeAddress(config.admin).storeCoins(config.deploymentFee).storeCoins(config.maxTon).storeRef(beginCell().storeAddress(config.coinAdmin).storeUint(config.coinTtl, 32).storeCoins(config.bclSupply).storeCoins(config.liqSupply).storeCoins(config.tradingCloseFee).storeCoins(config.fullPriceTon).storeCoins(config.fullPriceTonFee).storeBit(config.isEnabled).storeUint(config.seed, 64).endCell()).storeRef(beginCell().storeAddress(config.fee.feeAddress).storeUint(config.fee.feeNumerator, 16).storeUint(config.fee.feeDenominator, 16).endCell()).storeRef(config.coinCode).storeRef(config.walletCode).endCell();
70
+ }
71
+ function memelandMetadata(input) {
72
+ const data = {
73
+ name: requiredText(input.name, "name"),
74
+ decimals: "9",
75
+ ...input.description ? { description: input.description } : {},
76
+ ...input.image ? { image: input.image } : {},
77
+ ...input.symbol ? { symbol: input.symbol } : {},
78
+ ...input.socialLinks ? { social_links: JSON.stringify(input.socialLinks) } : {},
79
+ ...input.extraMetadata ?? {}
80
+ };
81
+ return buildOnchainMetadata(data);
82
+ }
83
+ /** Build the external wallet payload for a factory coin deployment. */
84
+ function buildMemelandDeployCoinBody(input, options) {
85
+ positive(options.deploymentFee, "deploymentFee");
86
+ const message = header(MEMELAND_OPCODES.deployCoin, input.queryId).storeRef(memelandMetadata(input)).storeAddress(input.author).storeRef(input.referral ?? Cell.EMPTY);
87
+ if (!options.firstBuy) return message.storeBit(0).endCell();
88
+ positive(options.firstBuy.tons, "firstBuy.tons");
89
+ positive(options.firstBuy.minReceive, "firstBuy.minReceive");
90
+ const firstBuy = header(MEMELAND_OPCODES.buy, options.firstBuy.queryId).storeCoins(options.firstBuy.minReceive).storeMaybeRef(options.firstBuy.referral ?? null).storeAddress(options.firstBuy.buyer).endCell();
91
+ return message.storeBit(1).storeRef(firstBuy).endCell();
92
+ }
93
+ function buildMemelandBuyBody(input) {
94
+ positive(input.tons, "tons");
95
+ positive(input.minReceive, "minReceive");
96
+ const body = header(MEMELAND_OPCODES.buy, input.queryId).storeCoins(input.minReceive).storeMaybeRef(input.referral ?? null);
97
+ if (input.buyer) body.storeAddress(input.buyer);
98
+ return body.endCell();
99
+ }
100
+ function buildMemelandSellBody(input) {
101
+ positive(input.amount, "amount");
102
+ positive(input.minReceive, "minReceive");
103
+ return header(MEMELAND_OPCODES.sell, input.queryId).storeCoins(input.amount).storeCoins(input.minReceive).storeMaybeRef(input.referral ?? null).endCell();
104
+ }
105
+ function buildMemelandUnlockBody(queryId = 0n) {
106
+ return header(MEMELAND_OPCODES.unlockWallet, queryId).endCell();
107
+ }
108
+ var MemelandBclFactory = class MemelandBclFactory extends ContractWrapper {
109
+ static createFromAddress(address) {
110
+ return new MemelandBclFactory(address);
111
+ }
112
+ static createFromConfig(config, code, workchain = 0) {
113
+ const init = {
114
+ code,
115
+ data: buildMemelandFactoryData(config)
116
+ };
117
+ return new MemelandBclFactory(contractAddress(workchain, init), init);
118
+ }
119
+ async sendDeploy(provider, via, value) {
120
+ await this.send(provider, via, value);
121
+ }
122
+ async sendSetAdmin(provider, via, value, admin) {
123
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setAdmin).storeAddress(admin).endCell());
124
+ }
125
+ async sendSetFees(provider, via, value, deploymentFee, config) {
126
+ uint16(config.feeNumerator, "feeNumerator");
127
+ uint16(config.feeDenominator, "feeDenominator");
128
+ if (config.feeDenominator === 0) throw new RangeError("feeDenominator must be positive");
129
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setFees).storeCoins(positive(deploymentFee, "deploymentFee")).storeAddress(config.feeAddress).storeUint(config.feeNumerator, 16).storeUint(config.feeDenominator, 16).endCell());
130
+ }
131
+ async sendSetCode(provider, via, value, code) {
132
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setCode).storeRef(code).endCell());
133
+ }
134
+ async sendSetData(provider, via, value, data) {
135
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setData).storeRef(data).endCell());
136
+ }
137
+ async sendSetCodeData(provider, via, value, code, data) {
138
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setCodeData).storeRef(code).storeRef(data).endCell());
139
+ }
140
+ async sendCollectFees(provider, via, value, queryId = 0n) {
141
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.collectFees, queryId).endCell());
142
+ }
143
+ async sendToggleDeployEnable(provider, via, value, queryId = 0n) {
144
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.toggleDeployEnable, queryId).endCell());
145
+ }
146
+ async sendTopUp(provider, via, value) {
147
+ await this.send(provider, via, value, beginCell().storeUint(MEMELAND_OPCODES.topUp, 32).endCell());
148
+ }
149
+ async sendDeployCoin(provider, via, value, input, options) {
150
+ positive(options.deploymentFee, "deploymentFee");
151
+ const deploymentGas = options.deploymentGas ?? MEMELAND_GAS.coinDeployment;
152
+ const buyGas = options.buyGas ?? MEMELAND_GAS.coinBuy;
153
+ positive(deploymentGas, "deploymentGas");
154
+ positive(buyGas, "buyGas");
155
+ const message = header(MEMELAND_OPCODES.deployCoin, input.queryId).storeRef(memelandMetadata(input)).storeAddress(input.author).storeRef(input.referral ?? Cell.EMPTY);
156
+ if (!options.firstBuy) {
157
+ if (value < options.deploymentFee + deploymentGas) throw new RangeError("value is below the deployment fee and gas budget");
158
+ await this.send(provider, via, value, message.storeBit(0).endCell());
159
+ return;
160
+ }
161
+ positive(options.firstBuy.tons, "firstBuy.tons");
162
+ positive(options.firstBuy.minReceive, "firstBuy.minReceive");
163
+ if (value < options.deploymentFee + deploymentGas + buyGas + options.firstBuy.tons) throw new RangeError("value is below the deployment, buy, and gas budgets");
164
+ const firstBuy = header(MEMELAND_OPCODES.buy, options.firstBuy.queryId).storeCoins(options.firstBuy.minReceive).storeMaybeRef(options.firstBuy.referral ?? null).storeAddress(options.firstBuy.buyer).endCell();
165
+ await this.send(provider, via, value, message.storeBit(1).storeRef(firstBuy).endCell());
166
+ }
167
+ async getCoinsForTons(provider, tons) {
168
+ const stack = await this.get(provider, "coins_for_tons", [{
169
+ type: "int",
170
+ value: tons
171
+ }]);
172
+ return {
173
+ fees: stack.readBigNumber(),
174
+ coins: stack.readBigNumber()
175
+ };
176
+ }
177
+ async getFactoryData(provider) {
178
+ const stack = await this.get(provider, "get_factory_data");
179
+ return {
180
+ admin: stack.readAddress(),
181
+ deploymentFee: stack.readBigNumber(),
182
+ coinAdmin: stack.readAddress(),
183
+ coinTtl: stack.readNumber(),
184
+ bclSupply: stack.readBigNumber(),
185
+ liqSupply: stack.readBigNumber(),
186
+ feeAddress: stack.readAddress(),
187
+ feeNumerator: stack.readNumber(),
188
+ feeDenominator: stack.readNumber(),
189
+ tradingCloseFee: stack.readBigNumber(),
190
+ fullPriceTon: stack.readBigNumber(),
191
+ fullPriceTonFee: stack.readBigNumber(),
192
+ isEnabled: stack.readBoolean(),
193
+ seed: stack.readBigNumber(),
194
+ coinCode: stack.readCell(),
195
+ walletCode: stack.readCell()
196
+ };
197
+ }
198
+ };
199
+ var MemelandBclJettonMinter = class MemelandBclJettonMinter extends ContractWrapper {
200
+ static createFromAddress(address) {
201
+ return new MemelandBclJettonMinter(address);
202
+ }
203
+ async sendBuy(provider, via, value, input) {
204
+ positive(input.tons, "tons");
205
+ positive(input.minReceive, "minReceive");
206
+ if (value < input.tons + MEMELAND_GAS.coinBuy) throw new RangeError("value is below the buy amount and gas budget");
207
+ const body = header(MEMELAND_OPCODES.buy, input.queryId).storeCoins(input.minReceive).storeMaybeRef(input.referral ?? null);
208
+ if (input.buyer) body.storeAddress(input.buyer);
209
+ await this.send(provider, via, value, body.endCell());
210
+ }
211
+ async sendSetAdmin(provider, via, value, admin) {
212
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setAdmin).storeAddress(admin).endCell());
213
+ }
214
+ async sendSetAuthor(provider, via, value, author) {
215
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setAuthor).storeAddress(author).endCell());
216
+ }
217
+ async sendSetContent(provider, via, value, content) {
218
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setContent).storeRef(content).endCell());
219
+ }
220
+ async sendSetFees(provider, via, value, feeAddress, numerator, denominator) {
221
+ uint16(numerator, "numerator");
222
+ uint16(denominator, "denominator");
223
+ if (denominator === 0) throw new RangeError("denominator must be positive");
224
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setFees).storeAddress(feeAddress).storeUint(numerator, 16).storeUint(denominator, 16).endCell());
225
+ }
226
+ async sendSetCode(provider, via, value, code) {
227
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setCode).storeRef(code).endCell());
228
+ }
229
+ async sendSetData(provider, via, value, data) {
230
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setData).storeRef(data).endCell());
231
+ }
232
+ async sendSetCodeData(provider, via, value, code, data) {
233
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setCodeData).storeRef(code).storeRef(data).endCell());
234
+ }
235
+ async sendTopUp(provider, via, value) {
236
+ await this.send(provider, via, value, beginCell().storeUint(MEMELAND_OPCODES.topUp, 32).endCell());
237
+ }
238
+ async sendMint(provider, via, value, input) {
239
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.mint, input.queryId).storeAddress(input.recipient).storeCoins(input.amount).storeRef(input.masterMessage).endCell());
240
+ }
241
+ async sendProvideWalletAddress(provider, via, value, owner, includeOwnerAddress, queryId = 0n) {
242
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.provideWalletAddress, queryId).storeAddress(owner).storeBit(includeOwnerAddress).endCell());
243
+ }
244
+ async sendBurnNotification(provider, via, value, amount, from, responseAddress, queryId = 0n) {
245
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.burnNotification, queryId).storeCoins(amount).storeAddress(from).storeAddress(responseAddress).endCell());
246
+ }
247
+ async getJettonData(provider) {
248
+ const stack = await this.get(provider, "get_jetton_data");
249
+ return {
250
+ totalSupply: stack.readBigNumber(),
251
+ mintable: stack.readBoolean(),
252
+ admin: stack.readAddressOpt(),
253
+ content: stack.readCell(),
254
+ walletCode: stack.readCell()
255
+ };
256
+ }
257
+ async getWalletAddress(provider, owner) {
258
+ return (await this.get(provider, "get_wallet_address", [{
259
+ type: "slice",
260
+ cell: beginCell().storeAddress(owner).endCell()
261
+ }])).readAddress();
262
+ }
263
+ async getUserWallet(provider, owner) {
264
+ return MemelandBclJettonWallet.createFromAddress(await this.getWalletAddress(provider, owner));
265
+ }
266
+ async getCoinPrice(provider) {
267
+ return (await this.get(provider, "coin_price")).readBigNumber();
268
+ }
269
+ async getCoinsForTons(provider, tons) {
270
+ const stack = await this.get(provider, "coins_for_tons", [{
271
+ type: "int",
272
+ value: tons
273
+ }]);
274
+ return {
275
+ fees: stack.readBigNumber(),
276
+ coins: stack.readBigNumber()
277
+ };
278
+ }
279
+ async getTonsForCoins(provider, coins) {
280
+ const stack = await this.get(provider, "tons_for_coins", [{
281
+ type: "int",
282
+ value: coins
283
+ }]);
284
+ return {
285
+ fees: stack.readBigNumber(),
286
+ tons: stack.readBigNumber()
287
+ };
288
+ }
289
+ async getBclData(provider) {
290
+ const stack = await this.get(provider, "get_bcl_data");
291
+ return {
292
+ totalSupply: stack.readBigNumber(),
293
+ bclSupply: stack.readBigNumber(),
294
+ liqSupply: stack.readBigNumber(),
295
+ admin: stack.readAddress(),
296
+ author: stack.readAddress(),
297
+ content: stack.readCell(),
298
+ feeAddress: stack.readAddress(),
299
+ feeNumerator: stack.readNumber(),
300
+ feeDenominator: stack.readNumber(),
301
+ ttl: stack.readNumber(),
302
+ lastTradeDate: stack.readNumber(),
303
+ tradingEnabled: stack.readBoolean(),
304
+ tonLiquidityCollected: stack.readBigNumber(),
305
+ referral: stack.readCell(),
306
+ tradingCloseFee: stack.readBigNumber(),
307
+ fullPriceTon: stack.readBigNumber(),
308
+ fullPriceTonFee: stack.readBigNumber(),
309
+ routerAddress: stack.readAddress(),
310
+ routerPtonWalletAddress: stack.readAddress()
311
+ };
312
+ }
313
+ };
314
+ function buildMemelandWalletData(config) {
315
+ if (config.status < 0 || config.status > 15) throw new RangeError("status must fit in uint4");
316
+ return beginCell().storeUint(config.status, 4).storeCoins(config.balance).storeAddress(config.owner).storeAddress(config.master).endCell();
317
+ }
318
+ var MemelandBclJettonWallet = class MemelandBclJettonWallet extends ContractWrapper {
319
+ static createFromAddress(address) {
320
+ return new MemelandBclJettonWallet(address);
321
+ }
322
+ static createFromConfig(config, code, workchain = 0) {
323
+ const init = {
324
+ code,
325
+ data: buildMemelandWalletData(config)
326
+ };
327
+ return new MemelandBclJettonWallet(contractAddress(workchain, init), init);
328
+ }
329
+ async sendTransfer(provider, via, value, input) {
330
+ await this.send(provider, via, value, buildJettonTransferBody(input));
331
+ }
332
+ async sendBurn(provider, via, value, input) {
333
+ await this.send(provider, via, value, buildJettonBurnBody(input));
334
+ }
335
+ async sendSell(provider, via, value, amount, minReceive, referral, queryId = 0n) {
336
+ positive(amount, "amount");
337
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.sell, queryId).storeCoins(amount).storeCoins(minReceive).storeMaybeRef(referral ?? null).endCell());
338
+ }
339
+ async sendUnlock(provider, via, value, queryId = 0n) {
340
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.unlockWallet, queryId).endCell());
341
+ }
342
+ async sendSetStatus(provider, via, value, status, queryId = 0n) {
343
+ if (!Number.isInteger(status) || status < 0 || status > 15) throw new RangeError("status must fit in uint4");
344
+ await this.send(provider, via, value, header(MEMELAND_OPCODES.setStatus, queryId).storeUint(status, 4).endCell());
345
+ }
346
+ async getWalletData(provider) {
347
+ const stack = await this.get(provider, "get_wallet_data");
348
+ return {
349
+ balance: stack.readBigNumber(),
350
+ owner: stack.readAddress(),
351
+ master: stack.readAddress(),
352
+ walletCode: stack.readCell()
353
+ };
354
+ }
355
+ async getStatus(provider) {
356
+ return (await this.get(provider, "get_status")).readNumber();
357
+ }
358
+ };
359
+ function buildMemelandFeeCollectorData(config) {
360
+ return beginCell().storeAddress(config.admin).endCell();
361
+ }
362
+ var MemelandFeeCollector = class MemelandFeeCollector extends ContractWrapper {
363
+ static createFromAddress(address) {
364
+ return new MemelandFeeCollector(address);
365
+ }
366
+ static createFromConfig(config, code, workchain = 0) {
367
+ const init = {
368
+ code,
369
+ data: buildMemelandFeeCollectorData(config)
370
+ };
371
+ return new MemelandFeeCollector(contractAddress(workchain, init), init);
372
+ }
373
+ async sendSetAdmin(provider, via, value, admin) {
374
+ await this.send(provider, via, value, beginCell().storeUint(MEMELAND_OPCODES.setAdmin, 32).storeAddress(admin).endCell());
375
+ }
376
+ async sendSetCode(provider, via, value, code) {
377
+ await this.send(provider, via, value, beginCell().storeUint(MEMELAND_OPCODES.setCode, 32).storeRef(code).endCell());
378
+ }
379
+ async sendSetData(provider, via, value, data) {
380
+ await this.send(provider, via, value, beginCell().storeUint(MEMELAND_OPCODES.setData, 32).storeRef(data).endCell());
381
+ }
382
+ async sendSetCodeData(provider, via, value, code, data) {
383
+ await this.send(provider, via, value, beginCell().storeUint(MEMELAND_OPCODES.setCodeData, 32).storeRef(code).storeRef(data).endCell());
384
+ }
385
+ async sendFeePayout(provider, via, value, referral) {
386
+ await this.send(provider, via, value, beginCell().storeUint(MEMELAND_OPCODES.feePayout, 32).storeRef(referral).endCell());
387
+ }
388
+ async sendTopUp(provider, via, value) {
389
+ await this.send(provider, via, value, beginCell().storeUint(MEMELAND_OPCODES.topUp, 32).endCell());
390
+ }
391
+ };
392
+ function buildMemelandReferralPayout(referral) {
393
+ return header(MEMELAND_OPCODES.feePayout).storeRef(referral).endCell();
394
+ }
395
+ //#endregion
396
+ export { MEMELAND_CONTRACTS_COMMIT, MEMELAND_GAS, MEMELAND_OPCODES, MemelandBclFactory, MemelandBclJettonMinter, MemelandBclJettonWallet, MemelandFeeCollector, buildMemelandBuyBody, buildMemelandDeployCoinBody, buildMemelandFactoryData, buildMemelandFeeCollectorData, buildMemelandReferralPayout, buildMemelandSellBody, buildMemelandUnlockBody, buildMemelandWalletData };
@@ -0,0 +1,92 @@
1
+ import { ContractWrapper } from "./base.mjs";
2
+ import { Address, Cell, ContractProvider, Sender } from "@ton/core";
3
+ //#region src/contracts/wrappers/multix.d.ts
4
+ /** Multix DAO / sale contract source: https://github.com/multixcrypto/dao-contract */
5
+ export declare const MULTIX_DAO_COMMIT = "dd03da038d8eecb72141eda77e231d536e5e3cd7";
6
+ export declare const MULTIX_STORAGE_COMMIT = "dd03da038d8eecb72141eda77e231d536e5e3cd7";
7
+ export declare const MULTIX_OPCODES: {
8
+ readonly init: 3372800;
9
+ readonly transferNotification: 1935855772;
10
+ readonly excessesNotification: 3576854235;
11
+ readonly balanceReplenishment: 4471;
12
+ readonly lockContract: 13141;
13
+ readonly unlockContract: 13175;
14
+ readonly saleStart: 30071;
15
+ readonly saleEdit: 30085;
16
+ readonly saleStop: 30088;
17
+ readonly saleParticipate: 30105;
18
+ readonly saleClaim: 29969;
19
+ readonly salesComplete: 2457;
20
+ readonly daoHoldersAdd: 13569;
21
+ readonly daoHoldersDelete: 13573;
22
+ readonly daoHoldersClaim: 13575;
23
+ readonly daoVetoVote: 39169;
24
+ };
25
+ export declare const MULTIX_STORAGE_OPCODES: {
26
+ readonly buyRequest: 14197;
27
+ readonly claimRequestFull: 14465;
28
+ readonly claimRequestAsset: 14467;
29
+ readonly daoVetoVoteRequest: 14739;
30
+ };
31
+ export interface MultixDaoConfig {
32
+ readonly code: Cell;
33
+ readonly data: Cell;
34
+ }
35
+ /**
36
+ * The Tact source defines the nested sale/vesting/DAO records. They are
37
+ * accepted as cells here intentionally: callers can use the generated Tact
38
+ * ABI for those records without this package maintaining a second, divergent
39
+ * schema. The outer message layout is encoded by this adapter.
40
+ */
41
+ export declare class MultixDaoContract extends ContractWrapper {
42
+ static createFromAddress(address: Address): MultixDaoContract;
43
+ static createFromConfig(config: MultixDaoConfig, workchain?: number): MultixDaoContract;
44
+ sendBalanceReplenishment(provider: ContractProvider, via: Sender, value: bigint, queryId?: bigint): Promise<void>;
45
+ sendLockContract(provider: ContractProvider, via: Sender, lockDaoHolders: boolean, lockSales: boolean, value: bigint, queryId?: bigint): Promise<void>;
46
+ sendUnlockContract(provider: ContractProvider, via: Sender, unlockDaoHolders: boolean, unlockSales: boolean, value: bigint, queryId?: bigint): Promise<void>;
47
+ sendSaleStart(provider: ContractProvider, via: Sender, saleOptions: Cell, unlockOptions: Cell, daoHolder: Cell, earlyRoundSignature: Cell, value: bigint, queryId?: bigint): Promise<void>;
48
+ sendSaleEdit(provider: ContractProvider, via: Sender, saleIndex: number, saleOptions: Cell, unlockOptions: Cell, daoHolder: Cell, earlyRoundSignature: Cell, value: bigint, queryId?: bigint): Promise<void>;
49
+ sendSaleStop(provider: ContractProvider, via: Sender, saleIndex: number, value: bigint, queryId?: bigint): Promise<void>;
50
+ sendSaleParticipate(provider: ContractProvider, via: Sender, saleIndex: number, signature: Cell, comment: Cell, value: bigint, queryId?: bigint): Promise<void>;
51
+ sendSaleClaim(provider: ContractProvider, via: Sender, saleIndex: number, comment: Cell, value: bigint, queryId?: bigint): Promise<void>;
52
+ sendSalesComplete(provider: ContractProvider, via: Sender, value: bigint, queryId?: bigint): Promise<void>;
53
+ sendDaoHoldersAdd(provider: ContractProvider, via: Sender, counter: bigint, holders: Cell, value: bigint, queryId?: bigint): Promise<void>;
54
+ sendDaoHoldersDelete(provider: ContractProvider, via: Sender, indexes: Cell, value: bigint, queryId?: bigint): Promise<void>;
55
+ sendDaoHolderClaim(provider: ContractProvider, via: Sender, index: number, commentPrefix: number, comment: Cell, value: bigint, queryId?: bigint): Promise<void>;
56
+ sendDaoVetoVote(provider: ContractProvider, via: Sender, signature: Cell, commentPrefix: number, comment: Cell, value: bigint, queryId?: bigint): Promise<void>;
57
+ getState(provider: ContractProvider): Promise<import("@ton/core").TupleReader>;
58
+ getClientStorageAddress(provider: ContractProvider, client: Address, saleIndex: number): Promise<Address>;
59
+ }
60
+ export interface MultixStorageConfig {
61
+ readonly dexContract: Address;
62
+ readonly clientAddress: Address;
63
+ readonly saleIndex: bigint;
64
+ }
65
+ export declare function buildMultixStorageData(config: MultixStorageConfig): Cell;
66
+ export interface MultixUnlockOptions {
67
+ readonly unlockStartTime: bigint;
68
+ readonly unlockPercentHecto: number;
69
+ readonly cycleDaysOffsetA: number;
70
+ readonly cyclePercentHectoA: number;
71
+ readonly cyclesDaysA: number;
72
+ readonly cycleDaysOffsetB: number;
73
+ readonly cyclePercentHectoB: number;
74
+ readonly cyclesDaysB: number;
75
+ readonly cycleDaysOffsetC: number;
76
+ readonly cyclePercentHectoC: number;
77
+ readonly cyclesDaysC: number;
78
+ readonly cycleDaysOffsetD: number;
79
+ readonly cyclePercentHectoD: number;
80
+ readonly cyclesDaysD: number;
81
+ }
82
+ export declare function buildMultixUnlockOptions(options: MultixUnlockOptions): Cell;
83
+ export declare class MultixStorageContract extends ContractWrapper {
84
+ static createFromAddress(address: Address): MultixStorageContract;
85
+ static createFromConfig(config: MultixStorageConfig, code: Cell, workchain?: number): MultixStorageContract;
86
+ sendBuyRequest(provider: ContractProvider, via: Sender, value: bigint, buyRequestId: bigint, limitTotalAmount: bigint, comment?: Cell): Promise<void>;
87
+ sendClaimRequestFull(provider: ContractProvider, via: Sender, value: bigint, contractTonBalance: bigint, comment?: Cell, queryId?: bigint): Promise<void>;
88
+ sendClaimRequestAsset(provider: ContractProvider, via: Sender, value: bigint, salesFreeTokens: bigint, itemPriceMilli: bigint, unlockOptions: Cell, comment?: Cell, queryId?: bigint): Promise<void>;
89
+ sendDaoVetoVoteRequest(provider: ContractProvider, via: Sender, value: bigint, itemPriceMilli: bigint, comment?: Cell, queryId?: bigint): Promise<void>;
90
+ getState(provider: ContractProvider): Promise<import("@ton/core").TupleReader>;
91
+ }
92
+ //#endregion
@@ -0,0 +1,156 @@
1
+ import { ContractWrapper } from "./base.mjs";
2
+ import { Cell, beginCell, contractAddress } from "@ton/core";
3
+ //#region src/contracts/wrappers/multix.ts
4
+ /** Multix DAO / sale contract source: https://github.com/multixcrypto/dao-contract */
5
+ const MULTIX_DAO_COMMIT = "dd03da038d8eecb72141eda77e231d536e5e3cd7";
6
+ const MULTIX_STORAGE_COMMIT = MULTIX_DAO_COMMIT;
7
+ const MULTIX_OPCODES = {
8
+ init: 3372800,
9
+ transferNotification: 1935855772,
10
+ excessesNotification: 3576854235,
11
+ balanceReplenishment: 4471,
12
+ lockContract: 13141,
13
+ unlockContract: 13175,
14
+ saleStart: 30071,
15
+ saleEdit: 30085,
16
+ saleStop: 30088,
17
+ saleParticipate: 30105,
18
+ saleClaim: 29969,
19
+ salesComplete: 2457,
20
+ daoHoldersAdd: 13569,
21
+ daoHoldersDelete: 13573,
22
+ daoHoldersClaim: 13575,
23
+ daoVetoVote: 39169
24
+ };
25
+ const MULTIX_STORAGE_OPCODES = {
26
+ buyRequest: 14197,
27
+ claimRequestFull: 14465,
28
+ claimRequestAsset: 14467,
29
+ daoVetoVoteRequest: 14739
30
+ };
31
+ const header = (op, queryId = 0n) => beginCell().storeUint(op, 32).storeUint(queryId, 64);
32
+ /**
33
+ * The Tact source defines the nested sale/vesting/DAO records. They are
34
+ * accepted as cells here intentionally: callers can use the generated Tact
35
+ * ABI for those records without this package maintaining a second, divergent
36
+ * schema. The outer message layout is encoded by this adapter.
37
+ */
38
+ var MultixDaoContract = class MultixDaoContract extends ContractWrapper {
39
+ static createFromAddress(address) {
40
+ return new MultixDaoContract(address);
41
+ }
42
+ static createFromConfig(config, workchain = 0) {
43
+ const init = {
44
+ code: config.code,
45
+ data: config.data
46
+ };
47
+ return new MultixDaoContract(contractAddress(workchain, init), init);
48
+ }
49
+ async sendBalanceReplenishment(provider, via, value, queryId = 0n) {
50
+ await this.send(provider, via, value, header(MULTIX_OPCODES.balanceReplenishment, queryId).endCell());
51
+ }
52
+ async sendLockContract(provider, via, lockDaoHolders, lockSales, value, queryId = 0n) {
53
+ await this.send(provider, via, value, header(MULTIX_OPCODES.lockContract, queryId).storeBit(lockDaoHolders).storeBit(lockSales).endCell());
54
+ }
55
+ async sendUnlockContract(provider, via, unlockDaoHolders, unlockSales, value, queryId = 0n) {
56
+ await this.send(provider, via, value, header(MULTIX_OPCODES.unlockContract, queryId).storeBit(unlockDaoHolders).storeBit(unlockSales).endCell());
57
+ }
58
+ async sendSaleStart(provider, via, saleOptions, unlockOptions, daoHolder, earlyRoundSignature, value, queryId = 0n) {
59
+ await this.send(provider, via, value, header(MULTIX_OPCODES.saleStart, queryId).storeRef(saleOptions).storeRef(unlockOptions).storeRef(daoHolder).storeSlice(earlyRoundSignature.asSlice()).endCell());
60
+ }
61
+ async sendSaleEdit(provider, via, saleIndex, saleOptions, unlockOptions, daoHolder, earlyRoundSignature, value, queryId = 0n) {
62
+ await this.send(provider, via, value, header(MULTIX_OPCODES.saleEdit, queryId).storeUint(saleIndex, 32).storeRef(saleOptions).storeRef(unlockOptions).storeRef(daoHolder).storeSlice(earlyRoundSignature.asSlice()).endCell());
63
+ }
64
+ async sendSaleStop(provider, via, saleIndex, value, queryId = 0n) {
65
+ await this.send(provider, via, value, header(MULTIX_OPCODES.saleStop, queryId).storeUint(saleIndex, 32).endCell());
66
+ }
67
+ async sendSaleParticipate(provider, via, saleIndex, signature, comment, value, queryId = 0n) {
68
+ await this.send(provider, via, value, header(MULTIX_OPCODES.saleParticipate, queryId).storeUint(saleIndex, 32).storeSlice(signature.asSlice()).storeSlice(comment.asSlice()).endCell());
69
+ }
70
+ async sendSaleClaim(provider, via, saleIndex, comment, value, queryId = 0n) {
71
+ await this.send(provider, via, value, header(MULTIX_OPCODES.saleClaim, queryId).storeUint(saleIndex, 32).storeSlice(comment.asSlice()).endCell());
72
+ }
73
+ async sendSalesComplete(provider, via, value, queryId = 0n) {
74
+ await this.send(provider, via, value, header(MULTIX_OPCODES.salesComplete, queryId).endCell());
75
+ }
76
+ async sendDaoHoldersAdd(provider, via, counter, holders, value, queryId = 0n) {
77
+ await this.send(provider, via, value, header(MULTIX_OPCODES.daoHoldersAdd, queryId).storeUint(counter, 64).storeRef(holders).endCell());
78
+ }
79
+ async sendDaoHoldersDelete(provider, via, indexes, value, queryId = 0n) {
80
+ await this.send(provider, via, value, header(MULTIX_OPCODES.daoHoldersDelete, queryId).storeRef(indexes).endCell());
81
+ }
82
+ async sendDaoHolderClaim(provider, via, index, commentPrefix, comment, value, queryId = 0n) {
83
+ await this.send(provider, via, value, header(MULTIX_OPCODES.daoHoldersClaim, queryId).storeUint(index, 32).storeUint(commentPrefix, 32).storeSlice(comment.asSlice()).endCell());
84
+ }
85
+ async sendDaoVetoVote(provider, via, signature, commentPrefix, comment, value, queryId = 0n) {
86
+ await this.send(provider, via, value, header(MULTIX_OPCODES.daoVetoVote, queryId).storeSlice(signature.asSlice()).storeUint(commentPrefix, 32).storeSlice(comment.asSlice()).endCell());
87
+ }
88
+ async getState(provider) {
89
+ return this.get(provider, "state");
90
+ }
91
+ async getClientStorageAddress(provider, client, saleIndex) {
92
+ return (await this.get(provider, "getClientStorageAddress", [{
93
+ type: "slice",
94
+ cell: beginCell().storeAddress(client).endCell()
95
+ }, {
96
+ type: "int",
97
+ value: BigInt(saleIndex)
98
+ }])).readAddress();
99
+ }
100
+ };
101
+ function buildMultixStorageData(config) {
102
+ if (config.saleIndex < 0n || config.saleIndex >= 1n << 64n) throw new RangeError("saleIndex must fit in uint64");
103
+ return beginCell().storeAddress(config.dexContract).storeAddress(config.clientAddress).storeUint(config.saleIndex, 64).storeUint(0, 64).storeCoins(0).storeCoins(0).storeCoins(0).storeUint(0, 64).storeBit(0).endCell();
104
+ }
105
+ function buildMultixUnlockOptions(options) {
106
+ if (options.unlockStartTime < 0n || options.unlockStartTime >= 1n << 64n) throw new RangeError("unlockStartTime must fit in uint64");
107
+ const values = [
108
+ options.unlockPercentHecto,
109
+ options.cycleDaysOffsetA,
110
+ options.cyclePercentHectoA,
111
+ options.cyclesDaysA,
112
+ options.cycleDaysOffsetB,
113
+ options.cyclePercentHectoB,
114
+ options.cyclesDaysB,
115
+ options.cycleDaysOffsetC,
116
+ options.cyclePercentHectoC,
117
+ options.cyclesDaysC,
118
+ options.cycleDaysOffsetD,
119
+ options.cyclePercentHectoD,
120
+ options.cyclesDaysD
121
+ ];
122
+ if (values.some((value) => !Number.isInteger(value) || value < 0 || value > 65535)) throw new RangeError("unlock option values must fit in uint16");
123
+ const builder = beginCell().storeUint(options.unlockStartTime, 64);
124
+ for (const value of values) builder.storeUint(value, 16);
125
+ return builder.endCell();
126
+ }
127
+ const storageHeader = (opcode, queryId = 0n) => beginCell().storeUint(opcode, 32).storeUint(queryId, 64);
128
+ var MultixStorageContract = class MultixStorageContract extends ContractWrapper {
129
+ static createFromAddress(address) {
130
+ return new MultixStorageContract(address);
131
+ }
132
+ static createFromConfig(config, code, workchain = 0) {
133
+ const init = {
134
+ code,
135
+ data: buildMultixStorageData(config)
136
+ };
137
+ return new MultixStorageContract(contractAddress(workchain, init), init);
138
+ }
139
+ async sendBuyRequest(provider, via, value, buyRequestId, limitTotalAmount, comment = Cell.EMPTY) {
140
+ await this.send(provider, via, value, storageHeader(MULTIX_STORAGE_OPCODES.buyRequest).storeUint(buyRequestId, 64).storeCoins(limitTotalAmount).storeSlice(comment.beginParse()).endCell());
141
+ }
142
+ async sendClaimRequestFull(provider, via, value, contractTonBalance, comment = Cell.EMPTY, queryId = 0n) {
143
+ await this.send(provider, via, value, storageHeader(MULTIX_STORAGE_OPCODES.claimRequestFull, queryId).storeCoins(contractTonBalance).storeSlice(comment.beginParse()).endCell());
144
+ }
145
+ async sendClaimRequestAsset(provider, via, value, salesFreeTokens, itemPriceMilli, unlockOptions, comment = Cell.EMPTY, queryId = 0n) {
146
+ await this.send(provider, via, value, storageHeader(MULTIX_STORAGE_OPCODES.claimRequestAsset, queryId).storeCoins(salesFreeTokens).storeCoins(itemPriceMilli).storeSlice(unlockOptions.beginParse()).storeSlice(comment.beginParse()).endCell());
147
+ }
148
+ async sendDaoVetoVoteRequest(provider, via, value, itemPriceMilli, comment = Cell.EMPTY, queryId = 0n) {
149
+ await this.send(provider, via, value, storageHeader(MULTIX_STORAGE_OPCODES.daoVetoVoteRequest, queryId).storeCoins(itemPriceMilli).storeSlice(comment.beginParse()).endCell());
150
+ }
151
+ async getState(provider) {
152
+ return this.get(provider, "state");
153
+ }
154
+ };
155
+ //#endregion
156
+ export { MULTIX_DAO_COMMIT, MULTIX_OPCODES, MULTIX_STORAGE_COMMIT, MULTIX_STORAGE_OPCODES, MultixDaoContract, MultixStorageContract, buildMultixStorageData, buildMultixUnlockOptions };