@silvana-one/abi 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 (117) hide show
  1. package/README.md +1 -0
  2. package/dist/node/contracts.d.ts +17 -0
  3. package/dist/node/contracts.js +19 -0
  4. package/dist/node/contracts.js.map +1 -0
  5. package/dist/node/fee.d.ts +2 -0
  6. package/dist/node/fee.js +3 -0
  7. package/dist/node/fee.js.map +1 -0
  8. package/dist/node/fetch.d.ts +14 -0
  9. package/dist/node/fetch.js +59 -0
  10. package/dist/node/fetch.js.map +1 -0
  11. package/dist/node/index.cjs +1119 -0
  12. package/dist/node/index.d.ts +6 -0
  13. package/dist/node/index.js +7 -0
  14. package/dist/node/index.js.map +1 -0
  15. package/dist/node/info/address.d.ts +1 -0
  16. package/dist/node/info/address.js +20 -0
  17. package/dist/node/info/address.js.map +1 -0
  18. package/dist/node/info/index.d.ts +1 -0
  19. package/dist/node/info/index.js +2 -0
  20. package/dist/node/info/index.js.map +1 -0
  21. package/dist/node/token/build.d.ts +46 -0
  22. package/dist/node/token/build.js +789 -0
  23. package/dist/node/token/build.js.map +1 -0
  24. package/dist/node/token/contracts.d.ts +17 -0
  25. package/dist/node/token/contracts.js +13 -0
  26. package/dist/node/token/contracts.js.map +1 -0
  27. package/dist/node/token/index.d.ts +3 -0
  28. package/dist/node/token/index.js +4 -0
  29. package/dist/node/token/index.js.map +1 -0
  30. package/dist/node/token/info.d.ts +11 -0
  31. package/dist/node/token/info.js +528 -0
  32. package/dist/node/token/info.js.map +1 -0
  33. package/dist/node/types.d.ts +4 -0
  34. package/dist/node/types.js +2 -0
  35. package/dist/node/types.js.map +1 -0
  36. package/dist/node/vk/devnet.d.ts +2 -0
  37. package/dist/node/vk/devnet.js +86 -0
  38. package/dist/node/vk/devnet.js.map +1 -0
  39. package/dist/node/vk/index.d.ts +4 -0
  40. package/dist/node/vk/index.js +5 -0
  41. package/dist/node/vk/index.js.map +1 -0
  42. package/dist/node/vk/mainnet.d.ts +2 -0
  43. package/dist/node/vk/mainnet.js +86 -0
  44. package/dist/node/vk/mainnet.js.map +1 -0
  45. package/dist/node/vk/types.d.ts +10 -0
  46. package/dist/node/vk/types.js +2 -0
  47. package/dist/node/vk/types.js.map +1 -0
  48. package/dist/node/vk/vk.d.ts +2 -0
  49. package/dist/node/vk/vk.js +7 -0
  50. package/dist/node/vk/vk.js.map +1 -0
  51. package/dist/tsconfig.tsbuildinfo +1 -0
  52. package/dist/tsconfig.web.tsbuildinfo +1 -0
  53. package/dist/web/contracts.d.ts +17 -0
  54. package/dist/web/contracts.js +19 -0
  55. package/dist/web/contracts.js.map +1 -0
  56. package/dist/web/fee.d.ts +2 -0
  57. package/dist/web/fee.js +3 -0
  58. package/dist/web/fee.js.map +1 -0
  59. package/dist/web/fetch.d.ts +14 -0
  60. package/dist/web/fetch.js +59 -0
  61. package/dist/web/fetch.js.map +1 -0
  62. package/dist/web/index.d.ts +6 -0
  63. package/dist/web/index.js +7 -0
  64. package/dist/web/index.js.map +1 -0
  65. package/dist/web/info/address.d.ts +1 -0
  66. package/dist/web/info/address.js +20 -0
  67. package/dist/web/info/address.js.map +1 -0
  68. package/dist/web/info/index.d.ts +1 -0
  69. package/dist/web/info/index.js +2 -0
  70. package/dist/web/info/index.js.map +1 -0
  71. package/dist/web/token/build.d.ts +46 -0
  72. package/dist/web/token/build.js +789 -0
  73. package/dist/web/token/build.js.map +1 -0
  74. package/dist/web/token/contracts.d.ts +17 -0
  75. package/dist/web/token/contracts.js +13 -0
  76. package/dist/web/token/contracts.js.map +1 -0
  77. package/dist/web/token/index.d.ts +3 -0
  78. package/dist/web/token/index.js +4 -0
  79. package/dist/web/token/index.js.map +1 -0
  80. package/dist/web/token/info.d.ts +11 -0
  81. package/dist/web/token/info.js +528 -0
  82. package/dist/web/token/info.js.map +1 -0
  83. package/dist/web/types.d.ts +4 -0
  84. package/dist/web/types.js +2 -0
  85. package/dist/web/types.js.map +1 -0
  86. package/dist/web/vk/devnet.d.ts +2 -0
  87. package/dist/web/vk/devnet.js +86 -0
  88. package/dist/web/vk/devnet.js.map +1 -0
  89. package/dist/web/vk/index.d.ts +4 -0
  90. package/dist/web/vk/index.js +5 -0
  91. package/dist/web/vk/index.js.map +1 -0
  92. package/dist/web/vk/mainnet.d.ts +2 -0
  93. package/dist/web/vk/mainnet.js +86 -0
  94. package/dist/web/vk/mainnet.js.map +1 -0
  95. package/dist/web/vk/types.d.ts +10 -0
  96. package/dist/web/vk/types.js +2 -0
  97. package/dist/web/vk/types.js.map +1 -0
  98. package/dist/web/vk/vk.d.ts +2 -0
  99. package/dist/web/vk/vk.js +7 -0
  100. package/dist/web/vk/vk.js.map +1 -0
  101. package/package.json +69 -0
  102. package/src/contracts.ts +50 -0
  103. package/src/fee.ts +2 -0
  104. package/src/fetch.ts +73 -0
  105. package/src/index.ts +6 -0
  106. package/src/info/address.ts +25 -0
  107. package/src/info/index.ts +1 -0
  108. package/src/token/build.ts +1014 -0
  109. package/src/token/contracts.ts +40 -0
  110. package/src/token/index.ts +3 -0
  111. package/src/token/info.ts +600 -0
  112. package/src/types.ts +4 -0
  113. package/src/vk/devnet.ts +88 -0
  114. package/src/vk/index.ts +4 -0
  115. package/src/vk/mainnet.ts +88 -0
  116. package/src/vk/types.ts +16 -0
  117. package/src/vk/vk.ts +8 -0
@@ -0,0 +1,1119 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // dist/node/index.js
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ LAUNCH_FEE: () => LAUNCH_FEE,
24
+ TRANSACTION_FEE: () => TRANSACTION_FEE,
25
+ buildTokenLaunchTransaction: () => buildTokenLaunchTransaction,
26
+ buildTokenTransaction: () => buildTokenTransaction,
27
+ checkAddress: () => checkAddress,
28
+ devnet: () => devnet,
29
+ fetchMinaAccount: () => fetchMinaAccount,
30
+ getContractInfo: () => getContractInfo,
31
+ getTokenSymbolAndAdmin: () => getTokenSymbolAndAdmin,
32
+ mainnet: () => mainnet,
33
+ tokenBalance: () => tokenBalance,
34
+ tokenContracts: () => tokenContracts,
35
+ tokenVerificationKeys: () => tokenVerificationKeys
36
+ });
37
+ module.exports = __toCommonJS(index_exports);
38
+
39
+ // dist/node/fee.js
40
+ var LAUNCH_FEE = 1e10;
41
+ var TRANSACTION_FEE = 1e8;
42
+
43
+ // dist/node/token/build.js
44
+ var import_storage = require("@silvana-one/storage");
45
+
46
+ // dist/node/fetch.js
47
+ var import_o1js = require("o1js");
48
+ async function fetchMinaAccount(params) {
49
+ const { publicKey, tokenId, force = false } = params;
50
+ const timeout = 1e3 * 60 * 3;
51
+ let attempt = 0;
52
+ const startTime = Date.now();
53
+ let result = { account: void 0 };
54
+ while (Date.now() - startTime < timeout) {
55
+ try {
56
+ const result2 = await (0, import_o1js.fetchAccount)({
57
+ publicKey,
58
+ tokenId
59
+ });
60
+ return result2.account;
61
+ } catch (error) {
62
+ if (force === true)
63
+ console.log("Error in fetchMinaAccount:", {
64
+ error,
65
+ publicKey: typeof publicKey === "string" ? publicKey : publicKey.toBase58(),
66
+ tokenId: tokenId?.toString(),
67
+ force
68
+ });
69
+ else {
70
+ console.log("fetchMinaAccount error", {
71
+ error,
72
+ publicKey: typeof publicKey === "string" ? publicKey : publicKey.toBase58(),
73
+ tokenId: tokenId?.toString(),
74
+ force
75
+ });
76
+ return result.account;
77
+ }
78
+ }
79
+ attempt++;
80
+ await sleep(1e3 * 6 * attempt);
81
+ }
82
+ if (force === true)
83
+ throw new Error(`fetchMinaAccount timeout
84
+ ${{
85
+ publicKey: typeof publicKey === "string" ? publicKey : publicKey.toBase58(),
86
+ tokenId: tokenId?.toString(),
87
+ force
88
+ }}`);
89
+ else
90
+ console.log("fetchMinaAccount timeout", typeof publicKey === "string" ? publicKey : publicKey.toBase58(), tokenId?.toString(), force);
91
+ return result.account;
92
+ }
93
+ function sleep(ms) {
94
+ return new Promise((resolve) => setTimeout(resolve, ms));
95
+ }
96
+
97
+ // dist/node/token/build.js
98
+ var import_token = require("@silvana-one/token");
99
+
100
+ // dist/node/vk/devnet.js
101
+ var devnet = {
102
+ o1js: "2.2.0",
103
+ vk: {
104
+ NFT: {
105
+ hash: "11840382732064931640435917684245815329181717734233274982467687213333743677377",
106
+ data: "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",
107
+ type: "nft"
108
+ },
109
+ Collection: {
110
+ hash: "8119731345447459819772663409770065608102060883054572650702593018706950415831",
111
+ data: "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",
112
+ type: "collection"
113
+ },
114
+ NonFungibleTokenOfferContract: {
115
+ hash: "8547452427762838584951648728722457733553962093547901731683261758052034563177",
116
+ data: "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",
117
+ type: "user"
118
+ },
119
+ NFTAdmin: {
120
+ hash: "6563805542946172457708061315758852085613368174461197079047467342240527277159",
121
+ data: "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",
122
+ type: "admin"
123
+ },
124
+ VerificationKeyUpgradeAuthority: {
125
+ hash: "24248690097061452380259183021520676826201948296409686318469332616191300421924",
126
+ data: "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",
127
+ type: "upgrade"
128
+ },
129
+ NFTAdvancedAdmin: {
130
+ hash: "5221711868207025493063299639147894617662757900199208030236880609997056902339",
131
+ data: "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",
132
+ type: "admin"
133
+ },
134
+ AdvancedCollection: {
135
+ hash: "8119731345447459819772663409770065608102060883054572650702593018706950415831",
136
+ data: "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",
137
+ type: "collection"
138
+ },
139
+ FungibleToken: {
140
+ hash: "11275266297357989434659649579180929660472107786900344600948115953037388411671",
141
+ data: "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",
142
+ type: "token"
143
+ },
144
+ BondingCurveFungibleToken: {
145
+ hash: "11275266297357989434659649579180929660472107786900344600948115953037388411671",
146
+ data: "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",
147
+ type: "token"
148
+ },
149
+ FungibleTokenBondingCurveAdmin: {
150
+ hash: "11804002163247634780922906197957555357468413118249371346549192499154574714919",
151
+ data: "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",
152
+ type: "admin"
153
+ },
154
+ FungibleTokenAdmin: {
155
+ hash: "18691595165066726042633902806776623651617801388146374388725017604854573364243",
156
+ data: "AAAquFdEgAiP0gVQOFC1AYSsV9ylHwU1kj9trP0Iz00FP8zx9+7n59XMLqpjue1wA4VfgD2aXaC4seFCHAfaZwUkB+uHOnxXH7vN8sUeDQi50gWdXzRlzSS1jsT9t+XsQwHNWgMQp04pKmF+0clYz1zwOO95BwHGcQ/olrSYW4tbJCzCu0+M5beMUxHl3qo9fsP2UE6wUyrUH+bkM1NQAsAz0p0Kf7RXT4K2tC3hCxybh9Cj1ZLfvzg03OR4HBo61jF6ax6ymlATB4YBL0ETiEPTE/Qk1zGWUSL2UB6aY45/LlfTLCKlyLq7cR3HOucFfBncVfzI7D8j5n4wVqY+vAI4cf+Yv7iVRLbeFcycXtsuPQntgBzKa/mcqcWuVM7p2SYRrtKdX8EKvOO6NhfLx4x0atAi8pKf+vZR76LSP4iOA8hwXvk6MNvPt1fxCS96ZAKuAzZnAcK+MH1OcKeLj+EHtZmf40WRb3AEG5TWRKuD6DT5noDclZsE8ROZKUSOKAUGIBvt7MpzOWPPchmnromWEevmXo3GoPUZCKnWX6ZLAtJwAszLUgiVS8rx3JnLXuXrtcVFto5FFQhwSHZyzuYZAICibQ4M3dkHCAr0P1Gxd3XyBTYPYbzu4ApWhX6qbnUz6ujRwJALYQUcUXjXlKgITu5lQCfNhLVHx4c/6afLHReoSbV5V2OuTWWFfopRMVqez5f9o4gltroK1cocgSO7Bt3/mpa9SEEFzzF/lDaLFf9pIgBSUJS7x8eM+ocg9GYmJ5M/KjfmCc2/EsnV7Mhax350ZtrXdzh/HWIWzEZKKxcbERFbRtf+fkMOOLNpNov1FEFvKOU612vDOIbrVHeBN9mwuepUrJctcfgLc0Mi3Sxs3+NA0I74qm5ktjmplDwgUtKzIs3IrVFv6b1pg/J32HmwNzJZw2fYzpFE1LDjBSK/SX3axwMy5yEd8+jl4uAdQZpa9UQQIHu1Y1ZMgJSDDicXz6D1bZMA1Q2/lU+8AYbldgQVmlLq/lzr63krX+AM9/H5AgCJV70ArSgtyXca/hMFyS8i1CQeX5zmkB5mXjpUmEvg9TYLMldwU6SIruFvYgv15tQD+GqN5uX3eIDyL/OGnSdxVSZ3KthkdADsntDB4ccz2sDzjQ29GmO7e2UpwXP1yIba0F77Ug5jL5Nl7V0w+s8KV7y5C+skax4UIzb59l19FcR35ItoigIxtMfkv3rdlCOeBVI93oVl5esiH8AvYGHhulWIvrNfKol3Viir41zv4qMBOcQg8+ygqjwqREU5+qiYeJlQ2AtT0/PVeZWg4mHC39uz1Lld3N2hyyxRo+Z0nC/8220uuf9gAnQ+JFixgyYW0NowUtuFj+uYAV9Dh/Zpe4LyAOkU0kBW4CEuOxNr+gz+9h0BoPfBHlMuuQAUc5L8uMunJC7uBKZiL+/tT1ZGfyIuqU47fEP9Hghxmip8v7gpf+4wB0MVUUwav9QRe9g88ER1HcJPqYb4EIOc2kbYSX75bT0mAFqR8lwZrj6lbQtNS0QQboG5fzoyYGi8YnSXhC2T5fFDpGJ319GHUsna58o5wk8LMwKWNTxq+FN6XiRgu0BFOrtG6MtT1OxYE9Dti6WatGDsWv+KMLDHjxUK1bhiSRnvkWYNcnuDJ0Ry+PRGHNUijVU0SbchntC2JHdhwKbwIofwKHE8HhvlK8FgQ1VOLDioA26UFzr23LpCTqwSJ7/sAqttNGcPR8MSeeR9TQvXNYQPKrA7Gh720X+7LD6BuHdy4vkcr9EKBU0ccUJ2ABBiyPdji+AgEbUCL/wrp6/GX8pui5YJGWx3XmIFj/RnYS2Je5FZ7w74JclD3XhLUo5Dhpq5RznHplpLB9mNdZdm5269US/XCgC/ZKyUxW3+0ajdBY1cLzF6qglitaYTp3MVUENVOkACM2RyKw6jIK2Leq3qLp6AUz21VXj4WznZcdI8MXqT9v8HxjXbAI9dtbhLRZRpJmu/129vrVmwSTHvsVoA7vXyYh/iO3ZMcy+D1x+HZU6Q/oDYCicqOPHxpSc9QGehmNyeGzI//524Gz3RudkU7s6MPdLWqZrieRTnWsTIrCDieu4ValfP8BFz7asYUv0t9jMWpv3yjbY7c5h8N/m7IUXwTQCzFpjPV7HC72BjVwPaYqh5/oAQsSNcv5I3c2GsCGj5C4hFFoT7eWfVtu/6ibQl0COhRDsegnOBtZ7NGfybI8IIO/4yrgel92bypb3eSxeMvdE5wzURluGDkBVVIACD8C5W1MzqrejUiiTfc3mkLhQ0xKRRhT0qqkmYWlbGN5hmMOA9YaYx8OFTgMys1WbzdidWgEkyvvdkWctGlges6eg/lJE61tJ8wGxvJfKtpyDW/2MRvsnO1+2EXIQ2eV3hkxg=",
157
+ type: "admin"
158
+ },
159
+ AdvancedFungibleToken: {
160
+ hash: "11275266297357989434659649579180929660472107786900344600948115953037388411671",
161
+ data: "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",
162
+ type: "token"
163
+ },
164
+ FungibleTokenAdvancedAdmin: {
165
+ hash: "8783499160580712605701253373775518561598736722248443106986637209009167661283",
166
+ data: "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",
167
+ type: "admin"
168
+ },
169
+ FungibleTokenBidContract: {
170
+ hash: "19351502230897769307293360543295215811735977681920232551845147909346244559333",
171
+ data: "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",
172
+ type: "user"
173
+ },
174
+ FungibleTokenOfferContract: {
175
+ hash: "13912535440179903924827710208678166629189315950923802724246255217343535090656",
176
+ data: "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",
177
+ type: "user"
178
+ },
179
+ FungibleTokenClaimContract: {
180
+ hash: "26073072509794773512815124952537939952626223979091748527795661822286836926053",
181
+ data: "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",
182
+ type: "user"
183
+ }
184
+ }
185
+ };
186
+
187
+ // dist/node/vk/mainnet.js
188
+ var mainnet = {
189
+ o1js: "2.2.0",
190
+ vk: {
191
+ NFT: {
192
+ hash: "11510318025893859422482952918693907155880273225165466507725691048640041393360",
193
+ data: "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",
194
+ type: "nft"
195
+ },
196
+ Collection: {
197
+ hash: "23278695109924488121345443156209494254701390223055037273351166165643009871022",
198
+ data: "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",
199
+ type: "collection"
200
+ },
201
+ NonFungibleTokenOfferContract: {
202
+ hash: "6814366054303460006786227738424585404619502154485123864765817193634847999364",
203
+ data: "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",
204
+ type: "user"
205
+ },
206
+ NFTAdmin: {
207
+ hash: "27644776832362870047117169398104964311361100452869928193934630293792354270550",
208
+ data: "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",
209
+ type: "admin"
210
+ },
211
+ VerificationKeyUpgradeAuthority: {
212
+ hash: "11985403017286473627966300663722292870964778138598849061271153789533016168559",
213
+ data: "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",
214
+ type: "upgrade"
215
+ },
216
+ NFTAdvancedAdmin: {
217
+ hash: "9548845893397712104498998550794951465304149395990020081754604067409282853786",
218
+ data: "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",
219
+ type: "admin"
220
+ },
221
+ AdvancedCollection: {
222
+ hash: "23278695109924488121345443156209494254701390223055037273351166165643009871022",
223
+ data: "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",
224
+ type: "collection"
225
+ },
226
+ FungibleToken: {
227
+ hash: "18335904450268115742916300374904684680550450188257481973810475185988053152387",
228
+ data: "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",
229
+ type: "token"
230
+ },
231
+ BondingCurveFungibleToken: {
232
+ hash: "18335904450268115742916300374904684680550450188257481973810475185988053152387",
233
+ data: "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",
234
+ type: "token"
235
+ },
236
+ FungibleTokenBondingCurveAdmin: {
237
+ hash: "15786394508755430713503409108269701590171755926170792630086090094004842017959",
238
+ data: "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",
239
+ type: "admin"
240
+ },
241
+ FungibleTokenAdmin: {
242
+ hash: "18313778512774155670856755989313062419954804408798514573373489608748527149311",
243
+ data: "AAAquFdEgAiP0gVQOFC1AYSsV9ylHwU1kj9trP0Iz00FP8zx9+7n59XMLqpjue1wA4VfgD2aXaC4seFCHAfaZwUkB+uHOnxXH7vN8sUeDQi50gWdXzRlzSS1jsT9t+XsQwHNWgMQp04pKmF+0clYz1zwOO95BwHGcQ/olrSYW4tbJCzCu0+M5beMUxHl3qo9fsP2UE6wUyrUH+bkM1NQAsAz0p0Kf7RXT4K2tC3hCxybh9Cj1ZLfvzg03OR4HBo61jF6ax6ymlATB4YBL0ETiEPTE/Qk1zGWUSL2UB6aY45/LlfTLCKlyLq7cR3HOucFfBncVfzI7D8j5n4wVqY+vAI4cf+Yv7iVRLbeFcycXtsuPQntgBzKa/mcqcWuVM7p2SYRrtKdX8EKvOO6NhfLx4x0atAi8pKf+vZR76LSP4iOA8hwXvk6MNvPt1fxCS96ZAKuAzZnAcK+MH1OcKeLj+EHtZmf40WRb3AEG5TWRKuD6DT5noDclZsE8ROZKUSOKAUGIBvt7MpzOWPPchmnromWEevmXo3GoPUZCKnWX6ZLAtJwAszLUgiVS8rx3JnLXuXrtcVFto5FFQhwSHZyzuYZABmLK0xFON4mQu0LDOzfjmxKtmgZKGNB2maJfIouxTYNq98pnQyorU+qaQy/xKbTs29G+vrt0RCiBIgazS2Y4w1gV0A9zpaCiOdWNabtMfuIzwAfF+WkDjt0iq6VuBBtNcO/B+HmSNhyC3s8toJWz5mLlvseBaIEOJo/8aLW02MiJ5M/KjfmCc2/EsnV7Mhax350ZtrXdzh/HWIWzEZKKxcbERFbRtf+fkMOOLNpNov1FEFvKOU612vDOIbrVHeBN9mwuepUrJctcfgLc0Mi3Sxs3+NA0I74qm5ktjmplDwgUtKzIs3IrVFv6b1pg/J32HmwNzJZw2fYzpFE1LDjBSK/SX3axwMy5yEd8+jl4uAdQZpa9UQQIHu1Y1ZMgJSDDicXz6D1bZMA1Q2/lU+8AYbldgQVmlLq/lzr63krX+AMY+S6GA8SzTVsSwW1A6Ndqe+i79yAR89+IOsZS6pSNwi3O5L2C+U/+lHB/JZ+uwKl3yzimXDrwOzV+K8n3TnQE6Gp2bNIr9qIE5NDrfgpTuyP+Nwfgiym17jutIJ+w/kW7+a3PtX++mBPK6U3Vi+VKQtQ4YlPWw1RIwf9WQYQRiL59l19FcR35ItoigIxtMfkv3rdlCOeBVI93oVl5esiH8AvYGHhulWIvrNfKol3Viir41zv4qMBOcQg8+ygqjwqREU5+qiYeJlQ2AtT0/PVeZWg4mHC39uz1Lld3N2hyyxRo+Z0nC/8220uuf9gAnQ+JFixgyYW0NowUtuFj+uYAV9Dh/Zpe4LyAOkU0kBW4CEuOxNr+gz+9h0BoPfBHlMuuQAUc5L8uMunJC7uBKZiL+/tT1ZGfyIuqU47fEP9Hghxmip8v7gpf+4wB0MVUUwav9QRe9g88ER1HcJPqYb4EIOc2kbYSX75bT0mAFqR8lwZrj6lbQtNS0QQboG5fzoyYGi8YnSXhC2T5fFDpGJ319GHUsna58o5wk8LMwKWNTxq+FN6XiRgu0BFOrtG6MtT1OxYE9Dti6WatGDsWv+KMLDHjxUK1bhiSRnvkWYNcnuDJ0Ry+PRGHNUijVU0SbchntC2JHdhwKbwIofwKHE8HhvlK8FgQ1VOLDioA26UFzr23LpCTqwSJ7/sAqttNGcPR8MSeeR9TQvXNYQPKrA7Gh720X+7LD6BuHdy4vkcr9EKBU0ccUJ2ABBiyPdji+AgEbUCL/wrp6/GX8pui5YJGWx3XmIFj/RnYS2Je5FZ7w74JclD3XhLUo5Dhpq5RznHplpLB9mNdZdm5269US/XCgC/ZKyUxW3+0ajdBY1cLzF6qglitaYTp3MVUENVOkACM2RyKw6jIK2Leq3qLp6AUz21VXj4WznZcdI8MXqT9v8HxjXbAI9dtbhLRZRpJmu/129vrVmwSTHvsVoA7vXyYh/iO3ZMcy+D1x+HZU6Q/oDYCicqOPHxpSc9QGehmNyeGzI//524Gz3RudkU7s6MPdLWqZrieRTnWsTIrCDieu4ValfP8BFz7asYUv0t9jMWpv3yjbY7c5h8N/m7IUXwTQCzFpjPV7HC72BjVwPaYqh5/oAQsSNcv5I3c2GsCGj5C4hFFoT7eWfVtu/6ibQl0COhRDsegnOBtZ7NGfybI8IIO/4yrgel92bypb3eSxeMvdE5wzURluGDkBVVIACD8C5W1MzqrejUiiTfc3mkLhQ0xKRRhT0qqkmYWlbGN5hmMOA9YaYx8OFTgMys1WbzdidWgEkyvvdkWctGlges6eg/lJE61tJ8wGxvJfKtpyDW/2MRvsnO1+2EXIQ2eV3hkxg=",
244
+ type: "admin"
245
+ },
246
+ AdvancedFungibleToken: {
247
+ hash: "18335904450268115742916300374904684680550450188257481973810475185988053152387",
248
+ data: "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",
249
+ type: "token"
250
+ },
251
+ FungibleTokenAdvancedAdmin: {
252
+ hash: "3001786142689045145900918039681503601049056601794437758761839074934580215736",
253
+ data: "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",
254
+ type: "admin"
255
+ },
256
+ FungibleTokenBidContract: {
257
+ hash: "28879787158379653532568174849320009402582417561269014871892250140460382661152",
258
+ data: "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",
259
+ type: "user"
260
+ },
261
+ FungibleTokenOfferContract: {
262
+ hash: "11109606693576493343067830052270559970882892326352146813340888874229372638970",
263
+ data: "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",
264
+ type: "user"
265
+ },
266
+ FungibleTokenClaimContract: {
267
+ hash: "14412353279864305144700641376290760101576596550573387075087682086668733960560",
268
+ data: "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",
269
+ type: "user"
270
+ }
271
+ }
272
+ };
273
+
274
+ // dist/node/vk/vk.js
275
+ var tokenVerificationKeys = {
276
+ devnet,
277
+ mainnet
278
+ };
279
+
280
+ // dist/node/token/build.js
281
+ var import_o1js2 = require("o1js");
282
+ async function buildTokenLaunchTransaction(params) {
283
+ const { chain, args } = params;
284
+ const { uri, symbol, memo, nonce, adminContract: adminType } = args;
285
+ if (memo && typeof memo !== "string")
286
+ throw new Error("Memo must be a string");
287
+ if (memo && memo.length > 30)
288
+ throw new Error("Memo must be less than 30 characters");
289
+ if (!symbol || typeof symbol !== "string")
290
+ throw new Error("Symbol must be a string");
291
+ if (symbol.length >= 7)
292
+ throw new Error("Symbol must be less than 7 characters");
293
+ const sender = import_o1js2.PublicKey.fromBase58(args.sender);
294
+ if (nonce === void 0)
295
+ throw new Error("Nonce is required");
296
+ if (typeof nonce !== "number")
297
+ throw new Error("Nonce must be a number");
298
+ const fee = 1e8;
299
+ if (uri && typeof uri !== "string")
300
+ throw new Error("Uri must be a string");
301
+ if (!args.tokenAddress || typeof args.tokenAddress !== "string")
302
+ throw new Error("tokenAddress is required");
303
+ if (!args.adminContractAddress || typeof args.adminContractAddress !== "string")
304
+ throw new Error("adminContractAddress is required");
305
+ const adminContract = adminType === "advanced" ? import_token.FungibleTokenAdvancedAdmin : adminType === "bondingCurve" ? import_token.FungibleTokenBondingCurveAdmin : import_token.FungibleTokenAdmin;
306
+ const tokenContract = adminType === "advanced" ? import_token.AdvancedFungibleToken : adminType === "bondingCurve" ? import_token.BondingCurveFungibleToken : import_token.FungibleToken;
307
+ const vk = tokenVerificationKeys[chain === "mainnet" ? "mainnet" : "devnet"].vk;
308
+ if (!vk || !vk.FungibleTokenOfferContract || !vk.FungibleTokenOfferContract.hash || !vk.FungibleTokenOfferContract.data || !vk.FungibleTokenBidContract || !vk.FungibleTokenBidContract.hash || !vk.FungibleTokenBidContract.data || !vk.FungibleTokenAdvancedAdmin || !vk.FungibleTokenAdvancedAdmin.hash || !vk.FungibleTokenAdvancedAdmin.data || !vk.FungibleTokenAdmin || !vk.FungibleTokenAdmin.hash || !vk.FungibleTokenAdmin.data || !vk.FungibleTokenBondingCurveAdmin || !vk.FungibleTokenBondingCurveAdmin.hash || !vk.FungibleTokenBondingCurveAdmin.data || !vk.AdvancedFungibleToken || !vk.AdvancedFungibleToken.hash || !vk.AdvancedFungibleToken.data || !vk.FungibleToken || !vk.FungibleToken.hash || !vk.FungibleToken.data)
309
+ throw new Error("Cannot get verification key from vk");
310
+ const adminVerificationKey = adminType === "advanced" ? vk.FungibleTokenAdvancedAdmin : adminType === "bondingCurve" ? vk.FungibleTokenBondingCurveAdmin : vk.FungibleTokenAdmin;
311
+ const tokenVerificationKey = adminType === "advanced" ? vk.AdvancedFungibleToken : adminType === "bondingCurve" ? vk.BondingCurveFungibleToken : vk.FungibleToken;
312
+ if (!adminVerificationKey || !tokenVerificationKey)
313
+ throw new Error("Cannot get verification keys");
314
+ await fetchMinaAccount({
315
+ publicKey: sender,
316
+ force: true
317
+ });
318
+ if (!import_o1js2.Mina.hasAccount(sender)) {
319
+ throw new Error("Sender does not have account");
320
+ }
321
+ const whitelist = "whitelist" in args && args.whitelist ? typeof args.whitelist === "string" ? import_storage.Whitelist.fromString(args.whitelist) : (await import_storage.Whitelist.create({ list: args.whitelist, name: symbol })).whitelist : import_storage.Whitelist.empty();
322
+ const tokenAddress = import_o1js2.PublicKey.fromBase58(args.tokenAddress);
323
+ const adminContractAddress = import_o1js2.PublicKey.fromBase58(args.adminContractAddress);
324
+ const zkToken = new tokenContract(tokenAddress);
325
+ const zkAdmin = new adminContract(adminContractAddress);
326
+ const provingKey = params.provingKey ? import_o1js2.PublicKey.fromBase58(params.provingKey) : sender;
327
+ const provingFee = params.provingFee ? import_o1js2.UInt64.from(Math.round(params.provingFee)) : void 0;
328
+ const developerFee = args.developerFee ? import_o1js2.UInt64.from(Math.round(args.developerFee)) : void 0;
329
+ const developerAddress = params.developerAddress ? import_o1js2.PublicKey.fromBase58(params.developerAddress) : void 0;
330
+ const totalSupply = "totalSupply" in args && args.totalSupply ? import_o1js2.UInt64.from(Math.round(args.totalSupply)) : import_o1js2.UInt64.MAXINT();
331
+ const requireAdminSignatureForMint = "requireAdminSignatureForMint" in args && args.requireAdminSignatureForMint ? (0, import_o1js2.Bool)(args.requireAdminSignatureForMint) : (0, import_o1js2.Bool)(false);
332
+ const anyoneCanMint = "canMint" in args && args.canMint ? (0, import_o1js2.Bool)(args.canMint === "anyone") : (0, import_o1js2.Bool)(false);
333
+ const decimals = import_o1js2.UInt8.from(args.decimals ? Math.round(args.decimals) : 9);
334
+ const tx = await import_o1js2.Mina.transaction({ sender, fee, memo: memo ?? `launch ${symbol}`, nonce }, async () => {
335
+ if (zkAdmin instanceof import_token.FungibleTokenBondingCurveAdmin) {
336
+ console.log("deploying bonding curve admin", {
337
+ verificationKey: adminVerificationKey.hash,
338
+ tokenAddress: tokenAddress.toBase58(),
339
+ feeMaster: provingKey.toBase58(),
340
+ adminContractAddress: adminContractAddress.toBase58()
341
+ });
342
+ await zkAdmin.deploy({
343
+ verificationKey: adminVerificationKey
344
+ });
345
+ zkAdmin.account.tokenSymbol.set("BC");
346
+ zkAdmin.account.zkappUri.set(uri);
347
+ await zkAdmin.initialize({
348
+ tokenAddress,
349
+ startPrice: import_o1js2.UInt64.from(1e4),
350
+ curveK: import_o1js2.UInt64.from(1e4),
351
+ feeMaster: provingKey,
352
+ fee: import_o1js2.UInt32.from(1e3),
353
+ // 1000 = 1%
354
+ launchFee: import_o1js2.UInt64.from(1e10),
355
+ numberOfNewAccounts: import_o1js2.UInt64.from(4)
356
+ });
357
+ } else {
358
+ const feeAccountUpdate = import_o1js2.AccountUpdate.createSigned(sender);
359
+ feeAccountUpdate.balance.subInPlace(3e9 + (adminType === "advanced" ? 1e9 : 0));
360
+ if (provingFee && provingKey)
361
+ feeAccountUpdate.send({
362
+ to: provingKey,
363
+ amount: provingFee
364
+ });
365
+ if (developerAddress && developerFee) {
366
+ feeAccountUpdate.send({
367
+ to: developerAddress,
368
+ amount: developerFee
369
+ });
370
+ }
371
+ await zkAdmin.deploy({
372
+ adminPublicKey: sender,
373
+ tokenContract: tokenAddress,
374
+ verificationKey: adminVerificationKey,
375
+ whitelist,
376
+ totalSupply,
377
+ requireAdminSignatureForMint,
378
+ anyoneCanMint
379
+ });
380
+ if (adminType === "advanced") {
381
+ const adminUpdate = import_o1js2.AccountUpdate.create(adminContractAddress, import_o1js2.TokenId.derive(adminContractAddress));
382
+ zkAdmin.approve(adminUpdate);
383
+ }
384
+ zkAdmin.account.zkappUri.set(uri);
385
+ }
386
+ await zkToken.deploy({
387
+ symbol,
388
+ src: uri,
389
+ verificationKey: tokenVerificationKey,
390
+ allowUpdates: true
391
+ });
392
+ await zkToken.initialize(
393
+ adminContractAddress,
394
+ decimals,
395
+ // We can set `startPaused` to `Bool(false)` here, because we are doing an atomic deployment
396
+ // If you are not deploying the admin and token contracts in the same transaction,
397
+ // it is safer to start the tokens paused, and resume them only after verifying that
398
+ // the admin contract has been deployed
399
+ (0, import_o1js2.Bool)(false)
400
+ );
401
+ });
402
+ return {
403
+ request: adminType === "advanced" ? {
404
+ ...args,
405
+ whitelist: whitelist.toString()
406
+ } : args,
407
+ tx,
408
+ adminType,
409
+ verificationKeyHashes: [
410
+ adminVerificationKey.hash,
411
+ tokenVerificationKey.hash
412
+ ]
413
+ };
414
+ }
415
+ async function buildTokenTransaction(params) {
416
+ const { chain, args } = params;
417
+ const { nonce, txType } = args;
418
+ if (nonce === void 0)
419
+ throw new Error("Nonce is required");
420
+ if (typeof nonce !== "number")
421
+ throw new Error("Nonce must be a number");
422
+ if (txType === void 0)
423
+ throw new Error("Tx type is required");
424
+ if (typeof txType !== "string")
425
+ throw new Error("Tx type must be a string");
426
+ const sender = import_o1js2.PublicKey.fromBase58(args.sender);
427
+ const tokenAddress = import_o1js2.PublicKey.fromBase58(args.tokenAddress);
428
+ const offerAddress = "offerAddress" in args && args.offerAddress ? import_o1js2.PublicKey.fromBase58(args.offerAddress) : void 0;
429
+ if (!offerAddress && (txType === "token:offer:create" || txType === "token:offer:buy" || txType === "token:offer:withdraw"))
430
+ throw new Error("Offer address is required");
431
+ const bidAddress = "bidAddress" in args && args.bidAddress ? import_o1js2.PublicKey.fromBase58(args.bidAddress) : void 0;
432
+ if (!bidAddress && (txType === "token:bid:create" || txType === "token:bid:sell" || txType === "token:bid:withdraw"))
433
+ throw new Error("Bid address is required");
434
+ const to = "to" in args && args.to ? import_o1js2.PublicKey.fromBase58(args.to) : void 0;
435
+ if (!to && (txType === "token:transfer" || txType === "token:airdrop" || txType === "token:mint"))
436
+ throw new Error("To address is required");
437
+ const from = "from" in args && args.from ? import_o1js2.PublicKey.fromBase58(args.from) : void 0;
438
+ if (!from && txType === "token:burn")
439
+ throw new Error("From address is required for token:burn");
440
+ const amount = "amount" in args ? import_o1js2.UInt64.from(Math.round(args.amount)) : void 0;
441
+ const price = "price" in args && args.price ? import_o1js2.UInt64.from(Math.round(args.price)) : void 0;
442
+ const slippage = import_o1js2.UInt32.from(Math.round("slippage" in args && args.slippage !== void 0 ? args.slippage : 50));
443
+ await fetchMinaAccount({
444
+ publicKey: sender,
445
+ force: true
446
+ });
447
+ if (!import_o1js2.Mina.hasAccount(sender)) {
448
+ throw new Error("Sender does not have account");
449
+ }
450
+ const { symbol, adminContractAddress, adminAddress, adminType, isToNewAccount, verificationKeyHashes } = await getTokenSymbolAndAdmin({
451
+ txType,
452
+ tokenAddress,
453
+ chain,
454
+ to,
455
+ offerAddress,
456
+ bidAddress
457
+ });
458
+ const memo = args.memo ?? `${txType} ${symbol}`;
459
+ const fee = 1e8;
460
+ const provingKey = params.provingKey ? import_o1js2.PublicKey.fromBase58(params.provingKey) : sender;
461
+ const provingFee = params.provingFee ? import_o1js2.UInt64.from(Math.round(params.provingFee)) : void 0;
462
+ const developerFee = args.developerFee ? import_o1js2.UInt64.from(Math.round(args.developerFee)) : void 0;
463
+ const developerAddress = params.developerAddress ? import_o1js2.PublicKey.fromBase58(params.developerAddress) : void 0;
464
+ const advancedAdminContract = new import_token.FungibleTokenAdvancedAdmin(adminContractAddress);
465
+ const bondingCurveAdminContract = new import_token.FungibleTokenBondingCurveAdmin(adminContractAddress);
466
+ const tokenContract = adminType === "advanced" && txType === "token:mint" ? import_token.AdvancedFungibleToken : adminType === "bondingCurve" && (txType === "token:mint" || txType === "token:redeem") ? import_token.BondingCurveFungibleToken : import_token.FungibleToken;
467
+ if ((txType === "token:admin:whitelist" || txType === "token:bid:whitelist" || txType === "token:offer:whitelist") && !args.whitelist) {
468
+ throw new Error("Whitelist is required");
469
+ }
470
+ const whitelist = "whitelist" in args && args.whitelist ? typeof args.whitelist === "string" ? import_storage.Whitelist.fromString(args.whitelist) : (await import_storage.Whitelist.create({ list: args.whitelist, name: symbol })).whitelist : import_storage.Whitelist.empty();
471
+ const zkToken = new tokenContract(tokenAddress);
472
+ const tokenId = zkToken.deriveTokenId();
473
+ if (txType === "token:mint" && adminType === "standard" && adminAddress.toBase58() !== sender.toBase58())
474
+ throw new Error("Invalid sender for FungibleToken mint with standard admin");
475
+ await fetchMinaAccount({
476
+ publicKey: sender,
477
+ tokenId,
478
+ force: [
479
+ "token:transfer",
480
+ "token:airdrop"
481
+ ].includes(txType)
482
+ });
483
+ if (to) {
484
+ await fetchMinaAccount({
485
+ publicKey: to,
486
+ tokenId,
487
+ force: false
488
+ });
489
+ }
490
+ if (from) {
491
+ await fetchMinaAccount({
492
+ publicKey: from,
493
+ tokenId,
494
+ force: false
495
+ });
496
+ }
497
+ if (offerAddress)
498
+ await fetchMinaAccount({
499
+ publicKey: offerAddress,
500
+ tokenId,
501
+ force: [
502
+ "token:offer:whitelist",
503
+ "token:offer:buy",
504
+ "token:offer:withdraw"
505
+ ].includes(txType)
506
+ });
507
+ if (bidAddress)
508
+ await fetchMinaAccount({
509
+ publicKey: bidAddress,
510
+ force: [
511
+ "token:bid:whitelist",
512
+ "token:bid:sell",
513
+ "token:bid:withdraw"
514
+ ].includes(txType)
515
+ });
516
+ const offerContract = offerAddress ? new import_token.FungibleTokenOfferContract(offerAddress, tokenId) : void 0;
517
+ const bidContract = bidAddress ? new import_token.FungibleTokenBidContract(bidAddress) : void 0;
518
+ const offerContractDeployment = offerAddress ? new import_token.FungibleTokenOfferContract(offerAddress, tokenId) : void 0;
519
+ const bidContractDeployment = bidAddress ? new import_token.FungibleTokenBidContract(bidAddress) : void 0;
520
+ const vk = tokenVerificationKeys[chain === "mainnet" ? "mainnet" : "devnet"].vk;
521
+ if (!vk || !vk.FungibleTokenOfferContract || !vk.FungibleTokenOfferContract.hash || !vk.FungibleTokenOfferContract.data || !vk.FungibleTokenBidContract || !vk.FungibleTokenBidContract.hash || !vk.FungibleTokenBidContract.data || !vk.FungibleTokenAdvancedAdmin || !vk.FungibleTokenAdvancedAdmin.hash || !vk.FungibleTokenAdvancedAdmin.data || !vk.FungibleTokenBondingCurveAdmin || !vk.FungibleTokenBondingCurveAdmin.hash || !vk.FungibleTokenBondingCurveAdmin.data || !vk.FungibleTokenAdmin || !vk.FungibleTokenAdmin.hash || !vk.FungibleTokenAdmin.data || !vk.AdvancedFungibleToken || !vk.AdvancedFungibleToken.hash || !vk.AdvancedFungibleToken.data || !vk.FungibleToken || !vk.FungibleToken.hash || !vk.FungibleToken.data)
522
+ throw new Error("Cannot get verification key from vk");
523
+ const offerVerificationKey = import_token.FungibleTokenOfferContract._verificationKey ?? {
524
+ hash: (0, import_o1js2.Field)(vk.FungibleTokenOfferContract.hash),
525
+ data: vk.FungibleTokenOfferContract.data
526
+ };
527
+ const bidVerificationKey = import_token.FungibleTokenBidContract._verificationKey ?? {
528
+ hash: (0, import_o1js2.Field)(vk.FungibleTokenBidContract.hash),
529
+ data: vk.FungibleTokenBidContract.data
530
+ };
531
+ const isNewBidOfferAccount = txType === "token:offer:create" && offerAddress ? !import_o1js2.Mina.hasAccount(offerAddress, tokenId) : txType === "token:bid:create" && bidAddress ? !import_o1js2.Mina.hasAccount(bidAddress) : false;
532
+ const isNewBuyAccount = txType === "token:offer:buy" ? !import_o1js2.Mina.hasAccount(sender, tokenId) : false;
533
+ let isNewSellAccount = false;
534
+ if (txType === "token:bid:sell") {
535
+ if (!bidAddress || !bidContract)
536
+ throw new Error("Bid address is required");
537
+ await fetchMinaAccount({
538
+ publicKey: bidAddress,
539
+ force: true
540
+ });
541
+ const buyer = bidContract.buyer.get();
542
+ await fetchMinaAccount({
543
+ publicKey: buyer,
544
+ tokenId,
545
+ force: false
546
+ });
547
+ isNewSellAccount = !import_o1js2.Mina.hasAccount(buyer, tokenId);
548
+ }
549
+ if (txType === "token:burn") {
550
+ await fetchMinaAccount({
551
+ publicKey: sender,
552
+ force: true
553
+ });
554
+ await fetchMinaAccount({
555
+ publicKey: sender,
556
+ tokenId,
557
+ force: false
558
+ });
559
+ if (!import_o1js2.Mina.hasAccount(sender, tokenId))
560
+ throw new Error("Sender does not have tokens to burn");
561
+ }
562
+ const isNewTransferMintAccount = (txType === "token:transfer" || txType === "token:airdrop" || txType === "token:mint") && to ? !import_o1js2.Mina.hasAccount(to, tokenId) : false;
563
+ const accountCreationFee = (isNewBidOfferAccount ? 1e9 : 0) + (isNewBuyAccount ? 1e9 : 0) + (isNewSellAccount ? 1e9 : 0) + (isNewTransferMintAccount ? 1e9 : 0) + (isToNewAccount && txType === "token:mint" && adminType === "advanced" && advancedAdminContract.whitelist.get().isSome().toBoolean() ? 1e9 : 0);
564
+ console.log("accountCreationFee", accountCreationFee / 1e9);
565
+ switch (txType) {
566
+ case "token:offer:buy":
567
+ case "token:offer:withdraw":
568
+ case "token:offer:whitelist":
569
+ if (offerContract === void 0)
570
+ throw new Error("Offer contract is required");
571
+ if (import_o1js2.Mina.getAccount(offerContract.address, tokenId).zkapp?.verificationKey?.hash.toJSON() !== vk.FungibleTokenOfferContract.hash)
572
+ throw new Error("Invalid offer verification key, offer contract has to be upgraded");
573
+ break;
574
+ }
575
+ switch (txType) {
576
+ case "token:bid:sell":
577
+ case "token:bid:withdraw":
578
+ case "token:bid:whitelist":
579
+ if (bidContract === void 0)
580
+ throw new Error("Bid contract is required");
581
+ if (import_o1js2.Mina.getAccount(bidContract.address).zkapp?.verificationKey?.hash.toJSON() !== vk.FungibleTokenBidContract.hash)
582
+ throw new Error("Invalid bid verification key, bid contract has to be upgraded");
583
+ break;
584
+ }
585
+ switch (txType) {
586
+ case "token:mint":
587
+ case "token:burn":
588
+ case "token:redeem":
589
+ case "token:transfer":
590
+ case "token:airdrop":
591
+ case "token:offer:create":
592
+ case "token:bid:create":
593
+ case "token:offer:buy":
594
+ case "token:offer:withdraw":
595
+ case "token:bid:sell":
596
+ if (import_o1js2.Mina.getAccount(zkToken.address).zkapp?.verificationKey?.hash.toJSON() !== vk.FungibleToken.hash)
597
+ throw new Error("Invalid token verification key, token contract has to be upgraded");
598
+ break;
599
+ }
600
+ const tx = await import_o1js2.Mina.transaction({ sender, fee, memo, nonce }, async () => {
601
+ if (adminType !== "bondingCurve" || txType !== "token:mint" && txType !== "token:redeem") {
602
+ const feeAccountUpdate = import_o1js2.AccountUpdate.createSigned(sender);
603
+ if (accountCreationFee > 0) {
604
+ feeAccountUpdate.balance.subInPlace(accountCreationFee);
605
+ }
606
+ if (provingKey && provingFee)
607
+ feeAccountUpdate.send({
608
+ to: provingKey,
609
+ amount: provingFee
610
+ });
611
+ if (developerAddress && developerFee) {
612
+ feeAccountUpdate.send({
613
+ to: developerAddress,
614
+ amount: developerFee
615
+ });
616
+ }
617
+ }
618
+ switch (txType) {
619
+ case "token:mint":
620
+ if (amount === void 0)
621
+ throw new Error("Error: Amount is required");
622
+ if (to === void 0)
623
+ throw new Error("Error: To address is required");
624
+ if (adminType === "bondingCurve") {
625
+ if (price === void 0)
626
+ throw new Error("Error: Price is required for bonding curve mint");
627
+ await bondingCurveAdminContract.mint(to, amount, price);
628
+ } else {
629
+ await zkToken.mint(to, amount);
630
+ }
631
+ break;
632
+ case "token:redeem":
633
+ if (adminType !== "bondingCurve")
634
+ throw new Error("Error: Invalid admin type for redeem");
635
+ if (amount === void 0)
636
+ throw new Error("Error: Amount is required");
637
+ if (price === void 0)
638
+ throw new Error("Error: Price is required");
639
+ if (slippage === void 0)
640
+ throw new Error("Error: Slippage is required");
641
+ await bondingCurveAdminContract.redeem(amount, price, slippage);
642
+ break;
643
+ case "token:transfer":
644
+ if (amount === void 0)
645
+ throw new Error("Error: Amount is required");
646
+ if (to === void 0)
647
+ throw new Error("Error: From address is required");
648
+ await zkToken.transfer(sender, to, amount);
649
+ break;
650
+ case "token:burn":
651
+ if (amount === void 0)
652
+ throw new Error("Error: Amount is required");
653
+ if (from === void 0)
654
+ throw new Error("Error: From address is required");
655
+ await zkToken.burn(from, amount);
656
+ break;
657
+ case "token:offer:create":
658
+ if (price === void 0)
659
+ throw new Error("Error: Price is required");
660
+ if (amount === void 0)
661
+ throw new Error("Error: Amount is required");
662
+ if (offerContract === void 0)
663
+ throw new Error("Error: Offer address is required");
664
+ if (offerContractDeployment === void 0)
665
+ throw new Error("Error: Offer address is required");
666
+ if (isNewBidOfferAccount) {
667
+ await offerContractDeployment.deploy({
668
+ verificationKey: offerVerificationKey,
669
+ whitelist: whitelist ?? import_storage.Whitelist.empty()
670
+ });
671
+ offerContract.account.zkappUri.set(`Offer for ${symbol}`);
672
+ await offerContract.initialize(sender, tokenAddress, amount, price);
673
+ await zkToken.approveAccountUpdates([
674
+ offerContractDeployment.self,
675
+ offerContract.self
676
+ ]);
677
+ } else {
678
+ await offerContract.offer(amount, price);
679
+ await zkToken.approveAccountUpdate(offerContract.self);
680
+ }
681
+ break;
682
+ case "token:offer:buy":
683
+ if (amount === void 0)
684
+ throw new Error("Error: Amount is required");
685
+ if (offerContract === void 0)
686
+ throw new Error("Error: Offer address is required");
687
+ await offerContract.buy(amount);
688
+ await zkToken.approveAccountUpdate(offerContract.self);
689
+ break;
690
+ case "token:offer:withdraw":
691
+ if (amount === void 0)
692
+ throw new Error("Error: Amount is required");
693
+ if (offerContract === void 0)
694
+ throw new Error("Error: Offer address is required");
695
+ await offerContract.withdraw(amount);
696
+ await zkToken.approveAccountUpdate(offerContract.self);
697
+ break;
698
+ case "token:bid:create":
699
+ if (price === void 0)
700
+ throw new Error("Error: Price is required");
701
+ if (amount === void 0)
702
+ throw new Error("Error: Amount is required");
703
+ if (bidContract === void 0)
704
+ throw new Error("Error: Bid address is required");
705
+ if (bidContractDeployment === void 0)
706
+ throw new Error("Error: Bid address is required");
707
+ if (isNewBidOfferAccount) {
708
+ await bidContractDeployment.deploy({
709
+ verificationKey: bidVerificationKey,
710
+ whitelist: whitelist ?? import_storage.Whitelist.empty()
711
+ });
712
+ bidContract.account.zkappUri.set(`Bid for ${symbol}`);
713
+ await bidContract.initialize(tokenAddress, amount, price);
714
+ await zkToken.approveAccountUpdates([
715
+ bidContractDeployment.self,
716
+ bidContract.self
717
+ ]);
718
+ } else {
719
+ await bidContract.bid(amount, price);
720
+ await zkToken.approveAccountUpdate(bidContract.self);
721
+ }
722
+ break;
723
+ case "token:bid:sell":
724
+ if (amount === void 0)
725
+ throw new Error("Error: Amount is required");
726
+ if (bidContract === void 0)
727
+ throw new Error("Error: Bid address is required");
728
+ await bidContract.sell(amount);
729
+ await zkToken.approveAccountUpdate(bidContract.self);
730
+ break;
731
+ case "token:bid:withdraw":
732
+ if (amount === void 0)
733
+ throw new Error("Error: Amount is required");
734
+ if (bidContract === void 0)
735
+ throw new Error("Error: Bid address is required");
736
+ await bidContract.withdraw(amount);
737
+ break;
738
+ case "token:admin:whitelist":
739
+ if (adminType !== "advanced")
740
+ throw new Error("Invalid admin type for updateAdminWhitelist");
741
+ await advancedAdminContract.updateWhitelist(whitelist);
742
+ break;
743
+ case "token:bid:whitelist":
744
+ if (bidContract === void 0)
745
+ throw new Error("Error: Bid address is required");
746
+ await bidContract.updateWhitelist(whitelist);
747
+ break;
748
+ case "token:offer:whitelist":
749
+ if (offerContract === void 0)
750
+ throw new Error("Error: Offer address is required");
751
+ await offerContract.updateWhitelist(whitelist);
752
+ break;
753
+ default:
754
+ throw new Error(`Unknown transaction type: ${txType}`);
755
+ }
756
+ });
757
+ return {
758
+ request: txType === "token:offer:create" || txType === "token:bid:create" || txType === "token:offer:whitelist" || txType === "token:bid:whitelist" || txType === "token:admin:whitelist" ? {
759
+ ...args,
760
+ whitelist: whitelist?.toString()
761
+ } : args,
762
+ tx,
763
+ adminType,
764
+ adminContractAddress,
765
+ adminAddress,
766
+ symbol,
767
+ verificationKeyHashes
768
+ };
769
+ }
770
+ async function getTokenSymbolAndAdmin(params) {
771
+ const { txType, tokenAddress, chain, to, offerAddress, bidAddress } = params;
772
+ const vk = tokenVerificationKeys[chain === "mainnet" ? "mainnet" : "devnet"].vk;
773
+ let verificationKeyHashes = [];
774
+ if (bidAddress) {
775
+ verificationKeyHashes.push(vk.FungibleTokenBidContract.hash);
776
+ }
777
+ if (offerAddress) {
778
+ verificationKeyHashes.push(vk.FungibleTokenOfferContract.hash);
779
+ }
780
+ class FungibleTokenState extends (0, import_o1js2.Struct)({
781
+ decimals: import_o1js2.UInt8,
782
+ admin: import_o1js2.PublicKey,
783
+ paused: import_o1js2.Bool
784
+ }) {
785
+ }
786
+ const FungibleTokenStateSize = FungibleTokenState.sizeInFields();
787
+ class FungibleTokenAdminState extends (0, import_o1js2.Struct)({
788
+ adminPublicKey: import_o1js2.PublicKey
789
+ }) {
790
+ }
791
+ const FungibleTokenAdminStateSize = FungibleTokenAdminState.sizeInFields();
792
+ await fetchMinaAccount({ publicKey: tokenAddress, force: true });
793
+ if (!import_o1js2.Mina.hasAccount(tokenAddress)) {
794
+ throw new Error("Token contract account not found");
795
+ }
796
+ const tokenId = import_o1js2.TokenId.derive(tokenAddress);
797
+ await fetchMinaAccount({ publicKey: tokenAddress, tokenId, force: true });
798
+ if (!import_o1js2.Mina.hasAccount(tokenAddress, tokenId)) {
799
+ throw new Error("Token contract totalSupply account not found");
800
+ }
801
+ const account = import_o1js2.Mina.getAccount(tokenAddress);
802
+ const verificationKey = account.zkapp?.verificationKey;
803
+ if (!verificationKey) {
804
+ throw new Error("Token contract verification key not found");
805
+ }
806
+ if (!verificationKeyHashes.includes(verificationKey.hash.toJSON())) {
807
+ verificationKeyHashes.push(verificationKey.hash.toJSON());
808
+ }
809
+ if (account.zkapp?.appState === void 0) {
810
+ throw new Error("Token contract state not found");
811
+ }
812
+ const state = FungibleTokenState.fromFields(account.zkapp?.appState.slice(0, FungibleTokenStateSize));
813
+ const symbol = account.tokenSymbol;
814
+ const adminContractPublicKey = state.admin;
815
+ await fetchMinaAccount({
816
+ publicKey: adminContractPublicKey,
817
+ force: true
818
+ });
819
+ if (!import_o1js2.Mina.hasAccount(adminContractPublicKey)) {
820
+ throw new Error("Admin contract account not found");
821
+ }
822
+ const adminContract = import_o1js2.Mina.getAccount(adminContractPublicKey);
823
+ const adminVerificationKey = adminContract.zkapp?.verificationKey;
824
+ if (!adminVerificationKey) {
825
+ throw new Error("Admin verification key not found");
826
+ }
827
+ if (!verificationKeyHashes.includes(adminVerificationKey.hash.toJSON())) {
828
+ verificationKeyHashes.push(adminVerificationKey.hash.toJSON());
829
+ }
830
+ let adminType = "unknown";
831
+ if (vk.FungibleTokenAdvancedAdmin.hash === adminVerificationKey.hash.toJSON() && vk.FungibleTokenAdvancedAdmin.data === adminVerificationKey.data) {
832
+ adminType = "advanced";
833
+ } else if (vk.FungibleTokenAdmin.hash === adminVerificationKey.hash.toJSON() && vk.FungibleTokenAdmin.data === adminVerificationKey.data) {
834
+ adminType = "standard";
835
+ } else if (vk.FungibleTokenBondingCurveAdmin.hash === adminVerificationKey.hash.toJSON() && vk.FungibleTokenBondingCurveAdmin.data === adminVerificationKey.data) {
836
+ adminType = "bondingCurve";
837
+ } else {
838
+ console.error("Unknown admin verification key", {
839
+ hash: adminVerificationKey.hash.toJSON(),
840
+ symbol,
841
+ address: adminContractPublicKey.toBase58()
842
+ });
843
+ }
844
+ let isToNewAccount = void 0;
845
+ if (to) {
846
+ if (adminType === "advanced") {
847
+ const adminTokenId = import_o1js2.TokenId.derive(adminContractPublicKey);
848
+ await fetchMinaAccount({
849
+ publicKey: to,
850
+ tokenId: adminTokenId,
851
+ force: false
852
+ });
853
+ isToNewAccount = !import_o1js2.Mina.hasAccount(to, adminTokenId);
854
+ }
855
+ if (adminType === "bondingCurve") {
856
+ const adminTokenId = import_o1js2.TokenId.derive(adminContractPublicKey);
857
+ await fetchMinaAccount({
858
+ publicKey: adminContractPublicKey,
859
+ tokenId: adminTokenId,
860
+ force: true
861
+ });
862
+ }
863
+ }
864
+ const adminAddress0 = adminContract.zkapp?.appState[0];
865
+ const adminAddress1 = adminContract.zkapp?.appState[1];
866
+ if (adminAddress0 === void 0 || adminAddress1 === void 0) {
867
+ throw new Error("Cannot fetch admin address from admin contract");
868
+ }
869
+ const adminAddress = import_o1js2.PublicKey.fromFields([adminAddress0, adminAddress1]);
870
+ for (const hash of verificationKeyHashes) {
871
+ const found = Object.values(vk).some((key) => key.hash === hash);
872
+ if (!found) {
873
+ console.error(`Final check: unknown verification key hash: ${hash}`);
874
+ verificationKeyHashes = verificationKeyHashes.filter((h) => h !== hash);
875
+ }
876
+ }
877
+ verificationKeyHashes.sort((a, b) => {
878
+ const typeA = Object.values(vk).find((key) => key.hash === a)?.type;
879
+ const typeB = Object.values(vk).find((key) => key.hash === b)?.type;
880
+ if (typeA === void 0 || typeB === void 0) {
881
+ throw new Error("Unknown verification key hash");
882
+ }
883
+ const typeOrder = {
884
+ upgrade: 0,
885
+ nft: 1,
886
+ admin: 2,
887
+ collection: 3,
888
+ token: 4,
889
+ user: 5
890
+ };
891
+ return typeOrder[typeA] - typeOrder[typeB];
892
+ });
893
+ return {
894
+ adminContractAddress: adminContractPublicKey,
895
+ adminAddress,
896
+ symbol,
897
+ adminType,
898
+ isToNewAccount,
899
+ verificationKeyHashes
900
+ };
901
+ }
902
+
903
+ // dist/node/token/contracts.js
904
+ var import_token2 = require("@silvana-one/token");
905
+ var tokenContracts = {
906
+ FungibleToken: import_token2.FungibleToken,
907
+ FungibleTokenAdmin: import_token2.FungibleTokenAdmin,
908
+ AdvancedFungibleToken: import_token2.AdvancedFungibleToken,
909
+ BondingCurveFungibleToken: import_token2.BondingCurveFungibleToken,
910
+ FungibleTokenAdvancedAdmin: import_token2.FungibleTokenAdvancedAdmin,
911
+ FungibleTokenBondingCurveAdmin: import_token2.FungibleTokenBondingCurveAdmin,
912
+ FungibleTokenBidContract: import_token2.FungibleTokenBidContract,
913
+ FungibleTokenOfferContract: import_token2.FungibleTokenOfferContract,
914
+ FungibleTokenClaimContract: import_token2.FungibleTokenClaimContract
915
+ };
916
+
917
+ // dist/node/token/info.js
918
+ var import_o1js4 = require("o1js");
919
+
920
+ // dist/node/info/address.js
921
+ var import_o1js3 = require("o1js");
922
+ async function checkAddress(address) {
923
+ if (!address || typeof address !== "string") {
924
+ console.error("checkAddress params are invalid:", address);
925
+ return false;
926
+ }
927
+ try {
928
+ const publicKey = import_o1js3.PublicKey.fromBase58(address);
929
+ if (address !== publicKey.toBase58()) {
930
+ console.error("checkAddress: address is not valid", address, publicKey.toBase58());
931
+ return false;
932
+ }
933
+ return true;
934
+ } catch (error) {
935
+ console.error("checkAddress catch", { address, error });
936
+ return false;
937
+ }
938
+ }
939
+
940
+ // dist/node/token/info.js
941
+ var import_token3 = require("@silvana-one/token");
942
+ async function getContractInfo(params) {
943
+ const { address, chain, parentTokenId, decimals } = params;
944
+ const vk = tokenVerificationKeys[chain].vk;
945
+ const info = [];
946
+ if (typeof address === "string" && !checkAddress(address)) {
947
+ throw new Error("Invalid address");
948
+ }
949
+ const publicKey = typeof address === "string" ? import_o1js4.PublicKey.fromBase58(address) : address;
950
+ const tokenId = params.tokenId ? typeof params.tokenId === "string" ? import_o1js4.TokenId.fromBase58(params.tokenId) : params.tokenId : void 0;
951
+ await fetchMinaAccount({ publicKey, tokenId, force: false });
952
+ if (!import_o1js4.Mina.hasAccount(publicKey, tokenId)) {
953
+ throw new Error("Account does not exist");
954
+ }
955
+ const account = import_o1js4.Mina.getAccount(publicKey, tokenId);
956
+ if (account.zkapp?.appState === void 0) {
957
+ throw new Error("The account is not a zkApp");
958
+ }
959
+ const tokenSymbol = account.tokenSymbol;
960
+ const uri = account.zkapp?.zkappUri;
961
+ const verificationKey = account.zkapp?.verificationKey?.data;
962
+ const verificationKeyHash = account.zkapp?.verificationKey?.hash.toJSON();
963
+ const versionData = account.zkapp?.zkappVersion;
964
+ const version = Number(versionData.toBigint());
965
+ const name = Object.keys(vk).find((key) => vk[key].hash === verificationKeyHash);
966
+ const derivedTokenId = import_o1js4.TokenId.derive(publicKey, tokenId);
967
+ const info0 = {
968
+ name: { type: "name", value: name ?? "unknown" },
969
+ address: { type: "address", value: publicKey.toBase58() },
970
+ tokenId: {
971
+ type: "tokenId",
972
+ value: import_o1js4.TokenId.toBase58(tokenId ?? import_o1js4.Field.from(1))
973
+ },
974
+ derivedTokenId: {
975
+ type: "tokenId",
976
+ value: import_o1js4.TokenId.toBase58(derivedTokenId)
977
+ },
978
+ symbol: { type: "symbol", value: tokenSymbol },
979
+ uri: { type: "uri", value: uri },
980
+ verificationKey: { type: "verificationKey", value: verificationKey ?? "" },
981
+ verificationKeyHash: {
982
+ type: "verificationKeyHash",
983
+ value: verificationKeyHash ?? ""
984
+ },
985
+ zkappVersion: { type: "zkappVersion", value: version.toString() }
986
+ };
987
+ switch (name) {
988
+ case "FungibleToken":
989
+ case "AdvancedFungibleToken":
990
+ {
991
+ const zkApp = new import_token3.FungibleToken(publicKey, tokenId);
992
+ const admin = zkApp.admin.get();
993
+ const decimals2 = zkApp.decimals.get();
994
+ const paused = zkApp.paused.get();
995
+ const zkAppTokenId = zkApp.deriveTokenId();
996
+ if (import_o1js4.TokenId.toBase58(zkAppTokenId) !== info0.derivedTokenId.value) {
997
+ throw new Error("Derived tokenId does not match");
998
+ }
999
+ await fetchMinaAccount({
1000
+ publicKey,
1001
+ tokenId: zkAppTokenId,
1002
+ force: false
1003
+ });
1004
+ const totalSupply = import_o1js4.Mina.getBalance(publicKey, zkAppTokenId).toBigInt();
1005
+ info0.admin = { type: "address", value: admin.toBase58() };
1006
+ info0.decimals = {
1007
+ type: "number",
1008
+ value: decimals2.toNumber().toString()
1009
+ };
1010
+ info0.paused = {
1011
+ type: "boolean",
1012
+ value: paused.toBoolean().toString()
1013
+ };
1014
+ info0.totalSupply = {
1015
+ type: "bigint",
1016
+ value: totalSupply.toString(),
1017
+ presentation: formatBalanceInternal(Number(totalSupply / BigInt(10 ** decimals2.toNumber())))
1018
+ };
1019
+ const info1 = await getContractInfo({
1020
+ address: admin,
1021
+ parentTokenId: zkAppTokenId,
1022
+ decimals: decimals2.toNumber(),
1023
+ chain
1024
+ });
1025
+ info.push(...info1);
1026
+ }
1027
+ break;
1028
+ case "FungibleTokenAdmin":
1029
+ {
1030
+ const adminAddress0 = account.zkapp?.appState[0];
1031
+ const adminAddress1 = account.zkapp?.appState[1];
1032
+ if (adminAddress0 === void 0 || adminAddress1 === void 0) {
1033
+ throw new Error("Cannot fetch admin address from admin contract");
1034
+ }
1035
+ const adminAddress = import_o1js4.PublicKey.fromFields([
1036
+ adminAddress0,
1037
+ adminAddress1
1038
+ ]);
1039
+ let adminTokenBalance = 0n;
1040
+ if (parentTokenId) {
1041
+ try {
1042
+ await fetchMinaAccount({
1043
+ publicKey: adminAddress,
1044
+ tokenId: parentTokenId,
1045
+ force: false
1046
+ });
1047
+ adminTokenBalance = import_o1js4.Mina.getBalance(adminAddress, parentTokenId).toBigInt();
1048
+ } catch (error) {
1049
+ }
1050
+ }
1051
+ info0.admin = { type: "address", value: adminAddress.toBase58() };
1052
+ info0.adminTokenBalance = {
1053
+ type: "bigint",
1054
+ value: adminTokenBalance.toString(),
1055
+ presentation: formatBalanceInternal(Number(adminTokenBalance / BigInt(1 << (decimals ?? 9))))
1056
+ };
1057
+ }
1058
+ break;
1059
+ }
1060
+ info.push(info0);
1061
+ return info;
1062
+ }
1063
+ function formatBalanceInternal(num) {
1064
+ const fixed = num.toFixed(2);
1065
+ return fixed.endsWith(".00") ? fixed.slice(0, -3) : fixed;
1066
+ }
1067
+ async function tokenBalance(params) {
1068
+ const { tokenAddress, address } = params;
1069
+ if (!address || !checkAddress(address)) {
1070
+ throw new Error("Invalid address");
1071
+ }
1072
+ if (tokenAddress && !checkAddress(tokenAddress)) {
1073
+ throw new Error("Invalid token address");
1074
+ }
1075
+ const tokenContractPublicKey = tokenAddress ? import_o1js4.PublicKey.fromBase58(tokenAddress) : void 0;
1076
+ const publicKey = import_o1js4.PublicKey.fromBase58(address);
1077
+ const tokenIdDerived = tokenContractPublicKey ? import_o1js4.TokenId.derive(tokenContractPublicKey) : void 0;
1078
+ if (tokenIdDerived && params.tokenId && import_o1js4.TokenId.toBase58(tokenIdDerived) !== params.tokenId) {
1079
+ throw new Error("TokenId does not match tokenAddress");
1080
+ }
1081
+ const tokenId = tokenIdDerived ?? (params.tokenId ? import_o1js4.TokenId.fromBase58(params.tokenId) : void 0);
1082
+ try {
1083
+ await fetchMinaAccount({
1084
+ publicKey,
1085
+ tokenId,
1086
+ force: false
1087
+ });
1088
+ return {
1089
+ tokenAddress,
1090
+ address,
1091
+ tokenId: tokenId ? import_o1js4.TokenId.toBase58(tokenId) : void 0,
1092
+ balance: import_o1js4.Mina.hasAccount(publicKey, tokenId) ? Number(import_o1js4.Mina.getAccount(publicKey, tokenId).balance.toBigInt()) : null
1093
+ };
1094
+ } catch (error) {
1095
+ console.error("Cannot fetch account balance", params, error);
1096
+ return {
1097
+ tokenAddress,
1098
+ address,
1099
+ tokenId: tokenId ? import_o1js4.TokenId.toBase58(tokenId) : void 0,
1100
+ balance: null
1101
+ };
1102
+ }
1103
+ }
1104
+ // Annotate the CommonJS export names for ESM import in node:
1105
+ 0 && (module.exports = {
1106
+ LAUNCH_FEE,
1107
+ TRANSACTION_FEE,
1108
+ buildTokenLaunchTransaction,
1109
+ buildTokenTransaction,
1110
+ checkAddress,
1111
+ devnet,
1112
+ fetchMinaAccount,
1113
+ getContractInfo,
1114
+ getTokenSymbolAndAdmin,
1115
+ mainnet,
1116
+ tokenBalance,
1117
+ tokenContracts,
1118
+ tokenVerificationKeys
1119
+ });