@recoillink/aleo-sdk 0.0.0-stage → 45.0.1

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 (259) hide show
  1. package/LICENSE.md +193 -0
  2. package/README.md +56 -2
  3. package/dist/artifacts.d.ts +14 -0
  4. package/dist/artifacts.d.ts.map +1 -0
  5. package/dist/artifacts.js +23 -0
  6. package/dist/artifacts.js.map +1 -0
  7. package/dist/clients/base.d.ts +27 -0
  8. package/dist/clients/base.d.ts.map +1 -0
  9. package/dist/clients/base.js +105 -0
  10. package/dist/clients/base.js.map +1 -0
  11. package/dist/clients/protocol.d.ts +26 -0
  12. package/dist/clients/protocol.d.ts.map +1 -0
  13. package/dist/clients/protocol.js +104 -0
  14. package/dist/clients/protocol.js.map +1 -0
  15. package/dist/clients/provider.d.ts +42 -0
  16. package/dist/clients/provider.d.ts.map +1 -0
  17. package/dist/clients/provider.js +460 -0
  18. package/dist/clients/provider.js.map +1 -0
  19. package/dist/clients/provider.node.d.ts +7 -0
  20. package/dist/clients/provider.node.d.ts.map +1 -0
  21. package/dist/clients/provider.node.js +20 -0
  22. package/dist/clients/provider.node.js.map +1 -0
  23. package/dist/clients/signer.d.ts +32 -0
  24. package/dist/clients/signer.d.ts.map +1 -0
  25. package/dist/clients/signer.js +137 -0
  26. package/dist/clients/signer.js.map +1 -0
  27. package/dist/constants.d.ts +8 -0
  28. package/dist/constants.d.ts.map +1 -0
  29. package/dist/constants.js +8 -0
  30. package/dist/constants.js.map +1 -0
  31. package/dist/hook/base.d.ts +19 -0
  32. package/dist/hook/base.d.ts.map +1 -0
  33. package/dist/hook/base.js +29 -0
  34. package/dist/hook/base.js.map +1 -0
  35. package/dist/hook/hook-artifact-manager.d.ts +25 -0
  36. package/dist/hook/hook-artifact-manager.d.ts.map +1 -0
  37. package/dist/hook/hook-artifact-manager.js +62 -0
  38. package/dist/hook/hook-artifact-manager.js.map +1 -0
  39. package/dist/hook/hook-query.d.ts +44 -0
  40. package/dist/hook/hook-query.d.ts.map +1 -0
  41. package/dist/hook/hook-query.js +103 -0
  42. package/dist/hook/hook-query.js.map +1 -0
  43. package/dist/hook/hook-tx.d.ts +46 -0
  44. package/dist/hook/hook-tx.d.ts.map +1 -0
  45. package/dist/hook/hook-tx.js +89 -0
  46. package/dist/hook/hook-tx.js.map +1 -0
  47. package/dist/hook/igp-hook.d.ts +21 -0
  48. package/dist/hook/igp-hook.d.ts.map +1 -0
  49. package/dist/hook/igp-hook.js +145 -0
  50. package/dist/hook/igp-hook.js.map +1 -0
  51. package/dist/hook/merkle-tree-hook.d.ts +21 -0
  52. package/dist/hook/merkle-tree-hook.d.ts.map +1 -0
  53. package/dist/hook/merkle-tree-hook.js +58 -0
  54. package/dist/hook/merkle-tree-hook.js.map +1 -0
  55. package/dist/index.d.ts +15 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +14 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/ism/base.d.ts +15 -0
  60. package/dist/ism/base.d.ts.map +1 -0
  61. package/dist/ism/base.js +25 -0
  62. package/dist/ism/base.js.map +1 -0
  63. package/dist/ism/ism-artifact-manager.d.ts +12 -0
  64. package/dist/ism/ism-artifact-manager.d.ts.map +1 -0
  65. package/dist/ism/ism-artifact-manager.js +62 -0
  66. package/dist/ism/ism-artifact-manager.js.map +1 -0
  67. package/dist/ism/ism-query.d.ts +51 -0
  68. package/dist/ism/ism-query.d.ts.map +1 -0
  69. package/dist/ism/ism-query.js +155 -0
  70. package/dist/ism/ism-query.js.map +1 -0
  71. package/dist/ism/ism-tx.d.ts +14 -0
  72. package/dist/ism/ism-tx.d.ts.map +1 -0
  73. package/dist/ism/ism-tx.js +77 -0
  74. package/dist/ism/ism-tx.js.map +1 -0
  75. package/dist/ism/multisig-ism.d.ts +20 -0
  76. package/dist/ism/multisig-ism.d.ts.map +1 -0
  77. package/dist/ism/multisig-ism.js +56 -0
  78. package/dist/ism/multisig-ism.js.map +1 -0
  79. package/dist/ism/routing-ism.d.ts +20 -0
  80. package/dist/ism/routing-ism.d.ts.map +1 -0
  81. package/dist/ism/routing-ism.js +108 -0
  82. package/dist/ism/routing-ism.js.map +1 -0
  83. package/dist/ism/test-ism.d.ts +20 -0
  84. package/dist/ism/test-ism.d.ts.map +1 -0
  85. package/dist/ism/test-ism.js +50 -0
  86. package/dist/ism/test-ism.js.map +1 -0
  87. package/dist/mailbox/mailbox-artifact-manager.d.ts +21 -0
  88. package/dist/mailbox/mailbox-artifact-manager.d.ts.map +1 -0
  89. package/dist/mailbox/mailbox-artifact-manager.js +36 -0
  90. package/dist/mailbox/mailbox-artifact-manager.js.map +1 -0
  91. package/dist/mailbox/mailbox-query.d.ts +12 -0
  92. package/dist/mailbox/mailbox-query.d.ts.map +1 -0
  93. package/dist/mailbox/mailbox-query.js +33 -0
  94. package/dist/mailbox/mailbox-query.js.map +1 -0
  95. package/dist/mailbox/mailbox-tx.d.ts +42 -0
  96. package/dist/mailbox/mailbox-tx.d.ts.map +1 -0
  97. package/dist/mailbox/mailbox-tx.js +94 -0
  98. package/dist/mailbox/mailbox-tx.js.map +1 -0
  99. package/dist/mailbox/mailbox.d.ts +29 -0
  100. package/dist/mailbox/mailbox.d.ts.map +1 -0
  101. package/dist/mailbox/mailbox.js +165 -0
  102. package/dist/mailbox/mailbox.js.map +1 -0
  103. package/dist/programs.d.ts +3 -0
  104. package/dist/programs.d.ts.map +1 -0
  105. package/dist/programs.js +14 -0
  106. package/dist/programs.js.map +1 -0
  107. package/dist/runtime/mainnet.d.ts +3 -0
  108. package/dist/runtime/mainnet.d.ts.map +1 -0
  109. package/dist/runtime/mainnet.js +5 -0
  110. package/dist/runtime/mainnet.js.map +1 -0
  111. package/dist/runtime/provider.d.ts +10 -0
  112. package/dist/runtime/provider.d.ts.map +1 -0
  113. package/dist/runtime/provider.js +18 -0
  114. package/dist/runtime/provider.js.map +1 -0
  115. package/dist/runtime/provider.test.d.ts +2 -0
  116. package/dist/runtime/provider.test.d.ts.map +1 -0
  117. package/dist/runtime/provider.test.js +45 -0
  118. package/dist/runtime/provider.test.js.map +1 -0
  119. package/dist/runtime/testnet.d.ts +3 -0
  120. package/dist/runtime/testnet.d.ts.map +1 -0
  121. package/dist/runtime/testnet.js +8 -0
  122. package/dist/runtime/testnet.js.map +1 -0
  123. package/dist/runtime.d.ts +5 -0
  124. package/dist/runtime.d.ts.map +1 -0
  125. package/dist/runtime.js +4 -0
  126. package/dist/runtime.js.map +1 -0
  127. package/dist/testing/constants.d.ts +58 -0
  128. package/dist/testing/constants.d.ts.map +1 -0
  129. package/dist/testing/constants.js +60 -0
  130. package/dist/testing/constants.js.map +1 -0
  131. package/dist/testing/index.d.ts +4 -0
  132. package/dist/testing/index.d.ts.map +1 -0
  133. package/dist/testing/index.js +7 -0
  134. package/dist/testing/index.js.map +1 -0
  135. package/dist/testing/node.d.ts +10 -0
  136. package/dist/testing/node.d.ts.map +1 -0
  137. package/dist/testing/node.js +39 -0
  138. package/dist/testing/node.js.map +1 -0
  139. package/dist/testing/utils.d.ts +19 -0
  140. package/dist/testing/utils.d.ts.map +1 -0
  141. package/dist/testing/utils.js +23 -0
  142. package/dist/testing/utils.js.map +1 -0
  143. package/dist/tests/5_ism_artifacts.e2e-test.d.ts +2 -0
  144. package/dist/tests/5_ism_artifacts.e2e-test.d.ts.map +1 -0
  145. package/dist/tests/5_ism_artifacts.e2e-test.js +415 -0
  146. package/dist/tests/5_ism_artifacts.e2e-test.js.map +1 -0
  147. package/dist/tests/6_hook_artifacts.e2e-test.d.ts +2 -0
  148. package/dist/tests/6_hook_artifacts.e2e-test.d.ts.map +1 -0
  149. package/dist/tests/6_hook_artifacts.e2e-test.js +306 -0
  150. package/dist/tests/6_hook_artifacts.e2e-test.js.map +1 -0
  151. package/dist/tests/7a_warp_native_artifacts.e2e-test.d.ts +2 -0
  152. package/dist/tests/7a_warp_native_artifacts.e2e-test.d.ts.map +1 -0
  153. package/dist/tests/7a_warp_native_artifacts.e2e-test.js +105 -0
  154. package/dist/tests/7a_warp_native_artifacts.e2e-test.js.map +1 -0
  155. package/dist/tests/7b_warp_collateral_artifacts.e2e-test.d.ts +2 -0
  156. package/dist/tests/7b_warp_collateral_artifacts.e2e-test.d.ts.map +1 -0
  157. package/dist/tests/7b_warp_collateral_artifacts.e2e-test.js +144 -0
  158. package/dist/tests/7b_warp_collateral_artifacts.e2e-test.js.map +1 -0
  159. package/dist/tests/7c_warp_synthetic_artifacts.e2e-test.d.ts +2 -0
  160. package/dist/tests/7c_warp_synthetic_artifacts.e2e-test.d.ts.map +1 -0
  161. package/dist/tests/7c_warp_synthetic_artifacts.e2e-test.js +99 -0
  162. package/dist/tests/7c_warp_synthetic_artifacts.e2e-test.js.map +1 -0
  163. package/dist/tests/8_mailbox_artifacts.e2e-test.d.ts +2 -0
  164. package/dist/tests/8_mailbox_artifacts.e2e-test.d.ts.map +1 -0
  165. package/dist/tests/8_mailbox_artifacts.e2e-test.js +395 -0
  166. package/dist/tests/8_mailbox_artifacts.e2e-test.js.map +1 -0
  167. package/dist/tests/9_validator_announce_artifacts.e2e-test.d.ts +2 -0
  168. package/dist/tests/9_validator_announce_artifacts.e2e-test.d.ts.map +1 -0
  169. package/dist/tests/9_validator_announce_artifacts.e2e-test.js +138 -0
  170. package/dist/tests/9_validator_announce_artifacts.e2e-test.js.map +1 -0
  171. package/dist/tests/e2e-test.setup.d.ts +2 -0
  172. package/dist/tests/e2e-test.setup.d.ts.map +1 -0
  173. package/dist/tests/e2e-test.setup.js +33 -0
  174. package/dist/tests/e2e-test.setup.js.map +1 -0
  175. package/dist/tests/warp-artifact-test-suite.d.ts +34 -0
  176. package/dist/tests/warp-artifact-test-suite.d.ts.map +1 -0
  177. package/dist/tests/warp-artifact-test-suite.js +672 -0
  178. package/dist/tests/warp-artifact-test-suite.js.map +1 -0
  179. package/dist/utils/base-query.d.ts +50 -0
  180. package/dist/utils/base-query.d.ts.map +1 -0
  181. package/dist/utils/base-query.js +72 -0
  182. package/dist/utils/base-query.js.map +1 -0
  183. package/dist/utils/helper.crypto.d.ts +4 -0
  184. package/dist/utils/helper.crypto.d.ts.map +1 -0
  185. package/dist/utils/helper.crypto.js +12 -0
  186. package/dist/utils/helper.crypto.js.map +1 -0
  187. package/dist/utils/helper.d.ts +63 -0
  188. package/dist/utils/helper.d.ts.map +1 -0
  189. package/dist/utils/helper.js +291 -0
  190. package/dist/utils/helper.js.map +1 -0
  191. package/dist/utils/helper.node.d.ts +9 -0
  192. package/dist/utils/helper.node.d.ts.map +1 -0
  193. package/dist/utils/helper.node.js +159 -0
  194. package/dist/utils/helper.node.js.map +1 -0
  195. package/dist/utils/helper.test.d.ts +2 -0
  196. package/dist/utils/helper.test.d.ts.map +1 -0
  197. package/dist/utils/helper.test.js +22 -0
  198. package/dist/utils/helper.test.js.map +1 -0
  199. package/dist/utils/provable.d.ts +4 -0
  200. package/dist/utils/provable.d.ts.map +1 -0
  201. package/dist/utils/provable.js +2 -0
  202. package/dist/utils/provable.js.map +1 -0
  203. package/dist/utils/types.d.ts +104 -0
  204. package/dist/utils/types.d.ts.map +1 -0
  205. package/dist/utils/types.js +64 -0
  206. package/dist/utils/types.js.map +1 -0
  207. package/dist/validator-announce/validator-announce-artifact-manager.d.ts +21 -0
  208. package/dist/validator-announce/validator-announce-artifact-manager.d.ts.map +1 -0
  209. package/dist/validator-announce/validator-announce-artifact-manager.js +27 -0
  210. package/dist/validator-announce/validator-announce-artifact-manager.js.map +1 -0
  211. package/dist/validator-announce/validator-announce-query.d.ts +15 -0
  212. package/dist/validator-announce/validator-announce-query.d.ts.map +1 -0
  213. package/dist/validator-announce/validator-announce-query.js +32 -0
  214. package/dist/validator-announce/validator-announce-query.js.map +1 -0
  215. package/dist/validator-announce/validator-announce-tx.d.ts +11 -0
  216. package/dist/validator-announce/validator-announce-tx.d.ts.map +1 -0
  217. package/dist/validator-announce/validator-announce-tx.js +20 -0
  218. package/dist/validator-announce/validator-announce-tx.js.map +1 -0
  219. package/dist/validator-announce/validator-announce.d.ts +29 -0
  220. package/dist/validator-announce/validator-announce.d.ts.map +1 -0
  221. package/dist/validator-announce/validator-announce.js +71 -0
  222. package/dist/validator-announce/validator-announce.js.map +1 -0
  223. package/dist/warp/collateral-token.d.ts +21 -0
  224. package/dist/warp/collateral-token.d.ts.map +1 -0
  225. package/dist/warp/collateral-token.js +108 -0
  226. package/dist/warp/collateral-token.js.map +1 -0
  227. package/dist/warp/native-token.d.ts +21 -0
  228. package/dist/warp/native-token.d.ts.map +1 -0
  229. package/dist/warp/native-token.js +114 -0
  230. package/dist/warp/native-token.js.map +1 -0
  231. package/dist/warp/provider-query.d.ts +22 -0
  232. package/dist/warp/provider-query.d.ts.map +1 -0
  233. package/dist/warp/provider-query.js +89 -0
  234. package/dist/warp/provider-query.js.map +1 -0
  235. package/dist/warp/synthetic-token.d.ts +21 -0
  236. package/dist/warp/synthetic-token.d.ts.map +1 -0
  237. package/dist/warp/synthetic-token.js +108 -0
  238. package/dist/warp/synthetic-token.js.map +1 -0
  239. package/dist/warp/warp-artifact-manager.d.ts +15 -0
  240. package/dist/warp/warp-artifact-manager.d.ts.map +1 -0
  241. package/dist/warp/warp-artifact-manager.js +48 -0
  242. package/dist/warp/warp-artifact-manager.js.map +1 -0
  243. package/dist/warp/warp-query.d.ts +76 -0
  244. package/dist/warp/warp-query.d.ts.map +1 -0
  245. package/dist/warp/warp-query.js +321 -0
  246. package/dist/warp/warp-query.js.map +1 -0
  247. package/dist/warp/warp-query.test.d.ts +2 -0
  248. package/dist/warp/warp-query.test.d.ts.map +1 -0
  249. package/dist/warp/warp-query.test.js +270 -0
  250. package/dist/warp/warp-query.test.js.map +1 -0
  251. package/dist/warp/warp-tx.d.ts +58 -0
  252. package/dist/warp/warp-tx.d.ts.map +1 -0
  253. package/dist/warp/warp-tx.js +229 -0
  254. package/dist/warp/warp-tx.js.map +1 -0
  255. package/dist/warp/warp-tx.test.d.ts +2 -0
  256. package/dist/warp/warp-tx.test.d.ts.map +1 -0
  257. package/dist/warp/warp-tx.test.js +44 -0
  258. package/dist/warp/warp-tx.test.js.map +1 -0
  259. package/package.json +91 -3
@@ -0,0 +1,71 @@
1
+ import { ArtifactState, } from '@recoillink/provider-sdk/artifact';
2
+ import { assert } from '@recoillink/utils';
3
+ import { getMailboxConfig } from '../mailbox/mailbox-query.js';
4
+ import { toAleoAddress } from '../utils/helper.crypto.js';
5
+ import { getNetworkPrefix, getUnusedSuffix, SUFFIX_LENGTH_SHORT, } from '../utils/helper.js';
6
+ import { getValidatorAnnounceConfig } from './validator-announce-query.js';
7
+ import { getCreateValidatorAnnounceTx } from './validator-announce-tx.js';
8
+ /**
9
+ * Reader for Aleo ValidatorAnnounce.
10
+ * Reads deployed validator announce configuration from the chain.
11
+ */
12
+ export class AleoValidatorAnnounceReader {
13
+ aleoClient;
14
+ constructor(aleoClient) {
15
+ this.aleoClient = aleoClient;
16
+ }
17
+ async read(address) {
18
+ const validatorAnnounceConfig = await getValidatorAnnounceConfig(this.aleoClient, address);
19
+ return {
20
+ artifactState: ArtifactState.DEPLOYED,
21
+ config: {
22
+ mailboxAddress: validatorAnnounceConfig.mailboxAddress,
23
+ },
24
+ deployed: {
25
+ address: validatorAnnounceConfig.address,
26
+ },
27
+ };
28
+ }
29
+ }
30
+ /**
31
+ * Writer for Aleo ValidatorAnnounce.
32
+ * Handles deployment. ValidatorAnnounce is immutable after deployment.
33
+ */
34
+ export class AleoValidatorAnnounceWriter extends AleoValidatorAnnounceReader {
35
+ config;
36
+ signer;
37
+ constructor(config, aleoClient, signer) {
38
+ super(aleoClient);
39
+ this.config = config;
40
+ this.signer = signer;
41
+ }
42
+ async create(artifact) {
43
+ const { config } = artifact;
44
+ const allReceipts = [];
45
+ // 1. Deploy validator_announce program
46
+ const prefix = getNetworkPrefix(this.config.aleoNetworkId);
47
+ const validatorAnnounceSuffix = await getUnusedSuffix(this.aleoClient, prefix, 'validator_announce', SUFFIX_LENGTH_SHORT);
48
+ const programs = await this.signer.deployProgram('validator_announce', validatorAnnounceSuffix);
49
+ const validatorAnnounceProgramId = programs['validator_announce'];
50
+ assert(validatorAnnounceProgramId, 'validator announce program not deployed');
51
+ // 2. Query mailbox for localDomain
52
+ const mailboxConfig = await getMailboxConfig(this.aleoClient, config.mailboxAddress);
53
+ // 3. Initialize validator announce with mailbox address and local domain
54
+ const createTx = getCreateValidatorAnnounceTx(validatorAnnounceProgramId, config.mailboxAddress, mailboxConfig.localDomain);
55
+ const createReceipt = await this.signer.sendAndConfirmTransaction(createTx);
56
+ allReceipts.push(createReceipt);
57
+ const deployedArtifact = {
58
+ artifactState: ArtifactState.DEPLOYED,
59
+ config: artifact.config,
60
+ deployed: {
61
+ address: toAleoAddress(validatorAnnounceProgramId),
62
+ },
63
+ };
64
+ return [deployedArtifact, allReceipts];
65
+ }
66
+ async update(_artifact) {
67
+ // ValidatorAnnounce has no mutable state - mailbox address is set at creation
68
+ return [];
69
+ }
70
+ }
71
+ //# sourceMappingURL=validator-announce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator-announce.js","sourceRoot":"","sources":["../../src/validator-announce/validator-announce.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,GAEd,MAAM,mCAAmC,CAAC;AAK3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAE1E;;;GAGG;AACH,MAAM,OAAO,2BAA2B;IAIP,UAAU;IAAzC,YAA+B,UAAgC;0BAAhC,UAAU;IAAyB,CAAC;IAEnE,KAAK,CAAC,IAAI,CACR,OAAe;QAOf,MAAM,uBAAuB,GAAG,MAAM,0BAA0B,CAC9D,IAAI,CAAC,UAAU,EACf,OAAO,CACR,CAAC;QAEF,OAAO;YACL,aAAa,EAAE,aAAa,CAAC,QAAQ;YACrC,MAAM,EAAE;gBACN,cAAc,EAAE,uBAAuB,CAAC,cAAc;aACvD;YACD,QAAQ,EAAE;gBACR,OAAO,EAAE,uBAAuB,CAAC,OAAO;aACzC;SACF,CAAC;IACJ,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,2BACX,SAAQ,2BAA2B;IAQhB,MAAM;IAEN,MAAM;IAHzB,YACmB,MAAiC,EAClD,UAAgC,EACf,MAAkB;QAEnC,KAAK,CAAC,UAAU,CAAC,CAAC;sBAJD,MAAM;sBAEN,MAAM;IAGzB,CAAC;IAED,KAAK,CAAC,MAAM,CACV,QAAiD;QAUjD,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QAC5B,MAAM,WAAW,GAAkB,EAAE,CAAC;QAEtC,uCAAuC;QACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC3D,MAAM,uBAAuB,GAAG,MAAM,eAAe,CACnD,IAAI,CAAC,UAAU,EACf,MAAM,EACN,oBAAoB,EACpB,mBAAmB,CACpB,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAC9C,oBAAoB,EACpB,uBAAuB,CACxB,CAAC;QAEF,MAAM,0BAA0B,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAClE,MAAM,CACJ,0BAA0B,EAC1B,yCAAyC,CAC1C,CAAC;QAEF,mCAAmC;QACnC,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAC1C,IAAI,CAAC,UAAU,EACf,MAAM,CAAC,cAAc,CACtB,CAAC;QAEF,yEAAyE;QACzE,MAAM,QAAQ,GAAG,4BAA4B,CAC3C,0BAA0B,EAC1B,MAAM,CAAC,cAAc,EACrB,aAAa,CAAC,WAAW,CAC1B,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAC5E,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEhC,MAAM,gBAAgB,GAGlB;YACF,aAAa,EAAE,aAAa,CAAC,QAAQ;YACrC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,QAAQ,EAAE;gBACR,OAAO,EAAE,aAAa,CAAC,0BAA0B,CAAC;aACnD;SACF,CAAC;QAEF,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CACV,SAGC;QAED,8EAA8E;QAC9E,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import { type ArtifactDeployed, type ArtifactNew, type ArtifactReader, type ArtifactWriter } from '@recoillink/provider-sdk/artifact';
2
+ import { type DeployedWarpAddress, type RawCollateralWarpArtifactConfig } from '@recoillink/provider-sdk/warp';
3
+ import type { AnyAleoNetworkClient } from '../clients/base.js';
4
+ import type { AleoSigner } from '../clients/signer.js';
5
+ import { type AleoReceipt, type AnnotatedAleoTransaction, type OnChainArtifactManagers } from '../utils/types.js';
6
+ export declare class AleoCollateralTokenReader implements ArtifactReader<RawCollateralWarpArtifactConfig, DeployedWarpAddress> {
7
+ protected readonly aleoClient: AnyAleoNetworkClient;
8
+ protected readonly onChainArtifactManagers: OnChainArtifactManagers;
9
+ constructor(aleoClient: AnyAleoNetworkClient, onChainArtifactManagers: OnChainArtifactManagers);
10
+ read(address: string): Promise<ArtifactDeployed<RawCollateralWarpArtifactConfig, DeployedWarpAddress>>;
11
+ }
12
+ export declare class AleoCollateralTokenWriter extends AleoCollateralTokenReader implements ArtifactWriter<RawCollateralWarpArtifactConfig, DeployedWarpAddress> {
13
+ private readonly signer;
14
+ constructor(aleoClient: AnyAleoNetworkClient, signer: AleoSigner, onChainArtifactManagers: OnChainArtifactManagers);
15
+ create(artifact: ArtifactNew<RawCollateralWarpArtifactConfig>): Promise<[
16
+ ArtifactDeployed<RawCollateralWarpArtifactConfig, DeployedWarpAddress>,
17
+ AleoReceipt[]
18
+ ]>;
19
+ update(artifact: ArtifactDeployed<RawCollateralWarpArtifactConfig, DeployedWarpAddress>): Promise<AnnotatedAleoTransaction[]>;
20
+ }
21
+ //# sourceMappingURL=collateral-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collateral-token.d.ts","sourceRoot":"","sources":["../../src/warp/collateral-token.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,+BAA+B,EAErC,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAE7B,MAAM,mBAAmB,CAAC;AAc3B,qBAAa,yBAA0B,YAAW,cAAc,CAC9D,+BAA+B,EAC/B,mBAAmB,CACpB;IAEG,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,oBAAoB;IACnD,SAAS,CAAC,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB;IAFrE,YACqB,UAAU,EAAE,oBAAoB,EAChC,uBAAuB,EAAE,uBAAuB,EACjE;IAEE,IAAI,CACR,OAAO,EAAE,MAAM,GACd,OAAO,CACR,gBAAgB,CAAC,+BAA+B,EAAE,mBAAmB,CAAC,CACvE,CAuCA;CACF;AAED,qBAAa,yBACX,SAAQ,yBACR,YACE,cAAc,CAAC,+BAA+B,EAAE,mBAAmB,CAAC;IAIpE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFzB,YACE,UAAU,EAAE,oBAAoB,EACf,MAAM,EAAE,UAAU,EACnC,uBAAuB,EAAE,uBAAuB,EAGjD;IAEK,MAAM,CACV,QAAQ,EAAE,WAAW,CAAC,+BAA+B,CAAC,GACrD,OAAO,CACR;QACE,gBAAgB,CAAC,+BAA+B,EAAE,mBAAmB,CAAC;QACtE,WAAW,EAAE;KACd,CACF,CAyEA;IAEK,MAAM,CACV,QAAQ,EAAE,gBAAgB,CACxB,+BAA+B,EAC/B,mBAAmB,CACpB,GACA,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAMrC;CACF"}
@@ -0,0 +1,108 @@
1
+ import { ArtifactState, } from '@recoillink/provider-sdk/artifact';
2
+ import { TokenType, } from '@recoillink/provider-sdk/warp';
3
+ import { assert } from '@recoillink/utils';
4
+ import { toAleoAddress } from '../utils/helper.crypto.js';
5
+ import { fromAleoAddress, getProgramSuffix } from '../utils/helper.js';
6
+ import { aleoWarpFieldsToArtifactApi, } from '../utils/types.js';
7
+ import { getCollateralWarpTokenConfig } from './warp-query.js';
8
+ import { getCreateCollateralTokenTx, getPostDeploymentUpdateTxs, getWarpTokenUpdateTxs, } from './warp-tx.js';
9
+ function withErrorContext(context, error) {
10
+ const message = error instanceof Error ? error.message : String(error);
11
+ return new Error(`${context}: ${message}`);
12
+ }
13
+ export class AleoCollateralTokenReader {
14
+ aleoClient;
15
+ onChainArtifactManagers;
16
+ constructor(aleoClient, onChainArtifactManagers) {
17
+ this.aleoClient = aleoClient;
18
+ this.onChainArtifactManagers = onChainArtifactManagers;
19
+ }
20
+ async read(address) {
21
+ // Fetch token config using internal Aleo types
22
+ const token = await getCollateralWarpTokenConfig(this.aleoClient, address, this.onChainArtifactManagers.ismManagerAddress, this.onChainArtifactManagers.hookManagerAddress).catch((error) => {
23
+ throw withErrorContext(`Failed to read collateral warp token ${address} (ismManager=${this.onChainArtifactManagers.ismManagerAddress}, hookManager=${this.onChainArtifactManagers.hookManagerAddress})`, error);
24
+ });
25
+ // Convert to provider-sdk artifact format
26
+ const { destinationGas, remoteRouters, interchainSecurityModule, hook } = aleoWarpFieldsToArtifactApi(token);
27
+ const config = {
28
+ type: TokenType.collateral,
29
+ owner: token.owner,
30
+ mailbox: token.mailbox,
31
+ destinationGas,
32
+ remoteRouters,
33
+ interchainSecurityModule,
34
+ hook,
35
+ token: token.token,
36
+ name: token.name,
37
+ symbol: token.symbol,
38
+ decimals: token.decimals,
39
+ scale: token.scale,
40
+ };
41
+ return {
42
+ artifactState: ArtifactState.DEPLOYED,
43
+ config,
44
+ deployed: {
45
+ address,
46
+ },
47
+ };
48
+ }
49
+ }
50
+ export class AleoCollateralTokenWriter extends AleoCollateralTokenReader {
51
+ signer;
52
+ constructor(aleoClient, signer, onChainArtifactManagers) {
53
+ super(aleoClient, onChainArtifactManagers);
54
+ this.signer = signer;
55
+ }
56
+ async create(artifact) {
57
+ const { config } = artifact;
58
+ const allReceipts = [];
59
+ const signerAddress = this.signer.getSignerAddress();
60
+ // Get mailbox suffix for deployment
61
+ const { programId: mailboxProgramId } = fromAleoAddress(config.mailbox);
62
+ const mailboxSuffix = getProgramSuffix(mailboxProgramId);
63
+ // Resolve token suffix from preferred setting or generate a collision-free one
64
+ const tokenSuffix = await this.signer.getWarpTokenSuffix('collateral');
65
+ // Deploy collateral token program
66
+ const programs = await this.signer
67
+ .deployProgram('hyp_collateral', mailboxSuffix, tokenSuffix)
68
+ .catch((error) => {
69
+ throw withErrorContext(`Failed to deployProgram(hyp_collateral) for mailbox ${config.mailbox} (signer=${signerAddress})`, error);
70
+ });
71
+ const tokenProgramId = programs['hyp_collateral'];
72
+ assert(tokenProgramId, 'Expected collateral token program to be deployed but none was found in deployment mapping');
73
+ // Initialize token
74
+ const initTx = await getCreateCollateralTokenTx(this.aleoClient, tokenProgramId, config.token);
75
+ const initReceipt = await this.signer
76
+ .sendAndConfirmTransaction(initTx)
77
+ .catch((error) => {
78
+ throw withErrorContext(`Failed to initialize collateral warp token program ${tokenProgramId} (token=${config.token}, signer=${signerAddress})`, error);
79
+ });
80
+ allReceipts.push(initReceipt);
81
+ const tokenAddress = toAleoAddress(tokenProgramId);
82
+ // Perform post-deployment updates (ISM setup and router enrollment)
83
+ const postDeploymentTxs = getPostDeploymentUpdateTxs(tokenAddress, config);
84
+ for (const tx of postDeploymentTxs) {
85
+ const receipt = await this.signer
86
+ .sendAndConfirmTransaction(tx)
87
+ .catch((error) => {
88
+ throw withErrorContext(`Failed post-deployment step ${tx.programName}.${tx.functionName} for collateral warp token ${tokenAddress} (signer=${signerAddress})`, error);
89
+ });
90
+ allReceipts.push(receipt);
91
+ }
92
+ const deployedArtifact = {
93
+ artifactState: ArtifactState.DEPLOYED,
94
+ config: artifact.config,
95
+ deployed: {
96
+ address: tokenAddress,
97
+ },
98
+ };
99
+ return [deployedArtifact, allReceipts];
100
+ }
101
+ async update(artifact) {
102
+ // Read current state from chain
103
+ const currentArtifact = await this.read(artifact.deployed.address);
104
+ // Generate update transactions
105
+ return getWarpTokenUpdateTxs(artifact, currentArtifact);
106
+ }
107
+ }
108
+ //# sourceMappingURL=collateral-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collateral-token.js","sourceRoot":"","sources":["../../src/warp/collateral-token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type ArtifactDeployed, type ArtifactNew, type ArtifactReader, type ArtifactWriter } from '@recoillink/provider-sdk/artifact';
2
+ import { type DeployedWarpAddress, type RawNativeWarpArtifactConfig } from '@recoillink/provider-sdk/warp';
3
+ import type { AnyAleoNetworkClient } from '../clients/base.js';
4
+ import type { AleoSigner } from '../clients/signer.js';
5
+ import { type AleoReceipt, type AnnotatedAleoTransaction, type OnChainArtifactManagers } from '../utils/types.js';
6
+ export declare class AleoNativeTokenReader implements ArtifactReader<RawNativeWarpArtifactConfig, DeployedWarpAddress> {
7
+ protected readonly aleoClient: AnyAleoNetworkClient;
8
+ protected readonly onChainArtifactManagers: OnChainArtifactManagers;
9
+ constructor(aleoClient: AnyAleoNetworkClient, onChainArtifactManagers: OnChainArtifactManagers);
10
+ read(address: string): Promise<ArtifactDeployed<RawNativeWarpArtifactConfig, DeployedWarpAddress>>;
11
+ }
12
+ export declare class AleoNativeTokenWriter extends AleoNativeTokenReader implements ArtifactWriter<RawNativeWarpArtifactConfig, DeployedWarpAddress> {
13
+ private readonly signer;
14
+ constructor(aleoClient: AnyAleoNetworkClient, signer: AleoSigner, onChainArtifactManagers: OnChainArtifactManagers);
15
+ create(artifact: ArtifactNew<RawNativeWarpArtifactConfig>): Promise<[
16
+ ArtifactDeployed<RawNativeWarpArtifactConfig, DeployedWarpAddress>,
17
+ AleoReceipt[]
18
+ ]>;
19
+ update(artifact: ArtifactDeployed<RawNativeWarpArtifactConfig, DeployedWarpAddress>): Promise<AnnotatedAleoTransaction[]>;
20
+ }
21
+ //# sourceMappingURL=native-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-token.d.ts","sourceRoot":"","sources":["../../src/warp/native-token.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAEjC,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAE7B,MAAM,mBAAmB,CAAC;AAc3B,qBAAa,qBAAsB,YAAW,cAAc,CAC1D,2BAA2B,EAC3B,mBAAmB,CACpB;IAEG,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,oBAAoB;IACnD,SAAS,CAAC,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB;IAFrE,YACqB,UAAU,EAAE,oBAAoB,EAChC,uBAAuB,EAAE,uBAAuB,EACjE;IAEE,IAAI,CACR,OAAO,EAAE,MAAM,GACd,OAAO,CACR,gBAAgB,CAAC,2BAA2B,EAAE,mBAAmB,CAAC,CACnE,CAmCA;CACF;AAED,qBAAa,qBACX,SAAQ,qBACR,YAAW,cAAc,CAAC,2BAA2B,EAAE,mBAAmB,CAAC;IAIzE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFzB,YACE,UAAU,EAAE,oBAAoB,EACf,MAAM,EAAE,UAAU,EACnC,uBAAuB,EAAE,uBAAuB,EAGjD;IAEK,MAAM,CACV,QAAQ,EAAE,WAAW,CAAC,2BAA2B,CAAC,GACjD,OAAO,CACR;QACE,gBAAgB,CAAC,2BAA2B,EAAE,mBAAmB,CAAC;QAClE,WAAW,EAAE;KACd,CACF,CAiFA;IAEK,MAAM,CACV,QAAQ,EAAE,gBAAgB,CACxB,2BAA2B,EAC3B,mBAAmB,CACpB,GACA,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAMrC;CACF"}
@@ -0,0 +1,114 @@
1
+ import { ArtifactState, } from '@recoillink/provider-sdk/artifact';
2
+ import { TokenType, } from '@recoillink/provider-sdk/warp';
3
+ import { assert } from '@recoillink/utils';
4
+ import { toAleoAddress } from '../utils/helper.crypto.js';
5
+ import { fromAleoAddress, getProgramSuffix } from '../utils/helper.js';
6
+ import { aleoWarpFieldsToArtifactApi, } from '../utils/types.js';
7
+ import { getNativeWarpTokenConfig } from './warp-query.js';
8
+ import { getCreateNativeTokenTx, getPostDeploymentUpdateTxs, getWarpTokenUpdateTxs, } from './warp-tx.js';
9
+ function withErrorContext(context, error) {
10
+ const message = error instanceof Error ? error.message : String(error);
11
+ return new Error(`${context}: ${message}`);
12
+ }
13
+ export class AleoNativeTokenReader {
14
+ aleoClient;
15
+ onChainArtifactManagers;
16
+ constructor(aleoClient, onChainArtifactManagers) {
17
+ this.aleoClient = aleoClient;
18
+ this.onChainArtifactManagers = onChainArtifactManagers;
19
+ }
20
+ async read(address) {
21
+ // Fetch token config using internal Aleo types
22
+ const token = await getNativeWarpTokenConfig(this.aleoClient, address, this.onChainArtifactManagers.ismManagerAddress, this.onChainArtifactManagers.hookManagerAddress).catch((error) => {
23
+ throw withErrorContext(`Failed to read native warp token ${address} (ismManager=${this.onChainArtifactManagers.ismManagerAddress}, hookManager=${this.onChainArtifactManagers.hookManagerAddress})`, error);
24
+ });
25
+ // Convert to provider-sdk artifact format
26
+ const { destinationGas, remoteRouters, interchainSecurityModule, hook } = aleoWarpFieldsToArtifactApi(token);
27
+ const config = {
28
+ type: TokenType.native,
29
+ owner: token.owner,
30
+ mailbox: token.mailbox,
31
+ destinationGas,
32
+ remoteRouters,
33
+ interchainSecurityModule,
34
+ hook,
35
+ scale: token.scale,
36
+ };
37
+ return {
38
+ artifactState: ArtifactState.DEPLOYED,
39
+ config,
40
+ deployed: {
41
+ address,
42
+ },
43
+ };
44
+ }
45
+ }
46
+ export class AleoNativeTokenWriter extends AleoNativeTokenReader {
47
+ signer;
48
+ constructor(aleoClient, signer, onChainArtifactManagers) {
49
+ super(aleoClient, onChainArtifactManagers);
50
+ this.signer = signer;
51
+ }
52
+ async create(artifact) {
53
+ const { config } = artifact;
54
+ const allReceipts = [];
55
+ const signerAddress = this.signer.getSignerAddress();
56
+ // Get mailbox suffix for deployment
57
+ const { programId: mailboxProgramId } = fromAleoAddress(config.mailbox);
58
+ const mailboxSuffix = getProgramSuffix(mailboxProgramId);
59
+ // Resolve token suffix from preferred setting or generate a collision-free one.
60
+ // Native tokens always use the fixed 'credits' suffix, so the program may
61
+ // already be deployed and initialized from a previous warp deploy run.
62
+ const tokenSuffix = await this.signer.getWarpTokenSuffix('native');
63
+ // Deploy native token program (idempotent if already on-chain)
64
+ const programs = await this.signer
65
+ .deployProgram('hyp_native', mailboxSuffix, tokenSuffix)
66
+ .catch((error) => {
67
+ throw withErrorContext(`Failed to deployProgram(hyp_native) for mailbox ${config.mailbox} (signer=${signerAddress})`, error);
68
+ });
69
+ const tokenProgramId = programs['hyp_native'];
70
+ assert(tokenProgramId, 'Expected native token program to be deployed but none was found in deployment mapping');
71
+ const tokenAddress = toAleoAddress(tokenProgramId);
72
+ // Native tokens use a fixed program name (no random suffix), so only one
73
+ // native warp token can exist per network. If it's already initialized,
74
+ // fail early with a clear message instead of letting init fail on-chain.
75
+ const existingArtifact = await this.read(tokenAddress).catch(() => null);
76
+ if (existingArtifact) {
77
+ throw new Error(`Native warp token ${tokenProgramId} is already deployed at ${tokenAddress}. ` +
78
+ `Native tokens cannot be redeployed. Use \`hyperlane warp apply\` to update the existing deployment.`);
79
+ }
80
+ // Initialize token
81
+ const initTx = getCreateNativeTokenTx(tokenProgramId);
82
+ const initReceipt = await this.signer
83
+ .sendAndConfirmTransaction(initTx)
84
+ .catch((error) => {
85
+ throw withErrorContext(`Failed to initialize native warp token program ${tokenProgramId} (signer=${signerAddress})`, error);
86
+ });
87
+ allReceipts.push(initReceipt);
88
+ // Perform post-deployment updates (ISM setup and router enrollment)
89
+ const postDeploymentTxs = getPostDeploymentUpdateTxs(tokenAddress, config);
90
+ for (const tx of postDeploymentTxs) {
91
+ const receipt = await this.signer
92
+ .sendAndConfirmTransaction(tx)
93
+ .catch((error) => {
94
+ throw withErrorContext(`Failed post-deployment step ${tx.programName}.${tx.functionName} for native warp token ${tokenAddress} (signer=${signerAddress})`, error);
95
+ });
96
+ allReceipts.push(receipt);
97
+ }
98
+ const deployedArtifact = {
99
+ artifactState: ArtifactState.DEPLOYED,
100
+ config: artifact.config,
101
+ deployed: {
102
+ address: tokenAddress,
103
+ },
104
+ };
105
+ return [deployedArtifact, allReceipts];
106
+ }
107
+ async update(artifact) {
108
+ // Read current state from chain
109
+ const currentArtifact = await this.read(artifact.deployed.address);
110
+ // Generate update transactions
111
+ return getWarpTokenUpdateTxs(artifact, currentArtifact);
112
+ }
113
+ }
114
+ //# sourceMappingURL=native-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-token.js","sourceRoot":"","sources":["../../src/warp/native-token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { AnyAleoNetworkClient } from '../clients/base.js';
2
+ import type { AleoPlaintextRuntime } from '../utils/provable.js';
3
+ /** Returns the ARC-20 or ARC-22 token program imported by a v2 warp token. */
4
+ export declare function getArc20ProgramId(aleoClient: AnyAleoNetworkClient, warpProgramId: string): Promise<string>;
5
+ /** Extracts the first wire-format output from a view function response. */
6
+ export declare function parseViewFunctionOutputs(outputs: unknown, programId: string, viewName: string): string;
7
+ /** Calls an Aleo program view function through the Explorer REST API. */
8
+ export declare function callViewFunction(aleoClient: AnyAleoNetworkClient, programId: string, viewName: string, inputs?: string[]): Promise<string>;
9
+ /** Parses a raw Aleo uint literal such as `1000000u128`. */
10
+ export declare function parseAleoUint(raw: string): bigint;
11
+ /** Queries token metadata from an ARC-20 or ARC-22 program's view functions. */
12
+ export declare function getArc20TokenMetadata(aleoClient: AnyAleoNetworkClient, arc20ProgramId: string): Promise<{
13
+ name: string;
14
+ symbol: string;
15
+ decimals: number;
16
+ }>;
17
+ /** Queries a warp token's remote routers with the selected network runtime. */
18
+ export declare function getRemoteRouters(sdk: AleoPlaintextRuntime, aleoClient: AnyAleoNetworkClient, tokenAddress: string): Promise<Record<number, {
19
+ address: string;
20
+ gas: string;
21
+ }>>;
22
+ //# sourceMappingURL=provider-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-query.d.ts","sourceRoot":"","sources":["../../src/warp/provider-query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAM/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,8EAA8E;AAC9E,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,oBAAoB,EAChC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,2EAA2E;AAC3E,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,MAAM,CAQR;AAED,yEAAyE;AACzE,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,oBAAoB,EAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAM,EAAO,GACpB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMjD;AAMD,gFAAgF;AAChF,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,oBAAoB,EAChC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB7D;AAED,+EAA+E;AAC/E,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,oBAAoB,EAChC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA+C3D"}
@@ -0,0 +1,89 @@
1
+ import { assert, ensure0x, retryAsync } from '@recoillink/utils';
2
+ import { RETRY_ATTEMPTS, RETRY_DELAY_MS, fromAleoAddress, } from '../utils/helper.js';
3
+ /** Returns the ARC-20 or ARC-22 token program imported by a v2 warp token. */
4
+ export async function getArc20ProgramId(aleoClient, warpProgramId) {
5
+ const imports = await aleoClient.getProgramImportNames(warpProgramId);
6
+ const arcTokenProgramIds = imports.filter((i) => (i.includes('arc20') || i.includes('arc22')) &&
7
+ !i.includes('freezelist') &&
8
+ !i.includes('multisig'));
9
+ const [arcTokenProgramId] = arcTokenProgramIds;
10
+ assert(arcTokenProgramIds.length === 1 && arcTokenProgramId, `Expected exactly one ARC-20 or ARC-22 token import in program ${warpProgramId}, found ${arcTokenProgramIds.length}: ${arcTokenProgramIds.join(', ') || 'none'}`);
11
+ return arcTokenProgramId;
12
+ }
13
+ /** Extracts the first wire-format output from a view function response. */
14
+ export function parseViewFunctionOutputs(outputs, programId, viewName) {
15
+ assert(Array.isArray(outputs) &&
16
+ outputs.length > 0 &&
17
+ typeof outputs[0] === 'string', `View function ${programId}/${viewName} returned an unexpected response shape: ${JSON.stringify(outputs)}`);
18
+ return outputs[0];
19
+ }
20
+ /** Calls an Aleo program view function through the Explorer REST API. */
21
+ export async function callViewFunction(aleoClient, programId, viewName, inputs = []) {
22
+ const url = `${aleoClient.host}/program/${programId}/view/${viewName}`;
23
+ const body = inputs.length === 0 ? '{}' : JSON.stringify(inputs);
24
+ return retryAsync(async () => {
25
+ const res = await fetch(url, {
26
+ method: 'POST',
27
+ headers: { 'Content-Type': 'application/json' },
28
+ body,
29
+ });
30
+ assert(res.ok, `View function call failed (${res.status}): ${url}`);
31
+ const outputs = await res.json();
32
+ return parseViewFunctionOutputs(outputs, programId, viewName);
33
+ }, RETRY_ATTEMPTS, RETRY_DELAY_MS);
34
+ }
35
+ /** Parses a raw Aleo uint literal such as `1000000u128`. */
36
+ export function parseAleoUint(raw) {
37
+ const match = raw.match(/^(\d+)/);
38
+ assert(match, `Expected numeric Aleo literal, got: ${raw}`);
39
+ const [, digits] = match;
40
+ assert(digits, `Expected numeric Aleo literal, got: ${raw}`);
41
+ return BigInt(digits);
42
+ }
43
+ function parseAleoIdentifier(raw) {
44
+ return raw.replace(/^'|'$/g, '');
45
+ }
46
+ /** Queries token metadata from an ARC-20 or ARC-22 program's view functions. */
47
+ export async function getArc20TokenMetadata(aleoClient, arc20ProgramId) {
48
+ const [nameRaw, symbolRaw, decimalsRaw] = await Promise.all([
49
+ callViewFunction(aleoClient, arc20ProgramId, 'name'),
50
+ callViewFunction(aleoClient, arc20ProgramId, 'symbol'),
51
+ callViewFunction(aleoClient, arc20ProgramId, 'decimals'),
52
+ ]);
53
+ const decimals = parseInt(decimalsRaw, 10);
54
+ assert(!Number.isNaN(decimals), `Expected numeric decimals from ${arc20ProgramId}, got: ${decimalsRaw}`);
55
+ return {
56
+ name: parseAleoIdentifier(nameRaw),
57
+ symbol: parseAleoIdentifier(symbolRaw),
58
+ decimals,
59
+ };
60
+ }
61
+ /** Queries a warp token's remote routers with the selected network runtime. */
62
+ export async function getRemoteRouters(sdk, aleoClient, tokenAddress) {
63
+ const { programId } = fromAleoAddress(tokenAddress);
64
+ const remoteRouters = {};
65
+ const routerLengthRes = await aleoClient.getProgramMappingValue(programId, 'remote_router_length', 'true');
66
+ if (!routerLengthRes)
67
+ return remoteRouters;
68
+ const routerLength = parseInt(routerLengthRes);
69
+ assert(!isNaN(routerLength) && routerLength >= 0, `Expected remote_router_length to be a non-negative number for token ${tokenAddress} but got ${routerLengthRes}`);
70
+ for (let i = 0; i < routerLength; i++) {
71
+ const routerKey = await aleoClient.getProgramMappingPlaintext(programId, 'remote_router_iter', `${i}u32`);
72
+ if (!routerKey)
73
+ continue;
74
+ const remoteRouterValue = await aleoClient.getProgramMappingValue(programId, 'remote_routers', routerKey);
75
+ if (!remoteRouterValue)
76
+ continue;
77
+ const remoteRouter = sdk.Plaintext.fromString(remoteRouterValue).toObject();
78
+ const domainId = Number(remoteRouter['domain']);
79
+ if (remoteRouters[domainId])
80
+ continue;
81
+ assert(Array.isArray(remoteRouter['recipient']), `Expected recipient to be an array in remote router for domain ${domainId} but got ${typeof remoteRouter['recipient']}`);
82
+ remoteRouters[domainId] = {
83
+ address: ensure0x(Buffer.from(remoteRouter['recipient']).toString('hex')),
84
+ gas: remoteRouter['gas'].toString(),
85
+ };
86
+ }
87
+ return remoteRouters;
88
+ }
89
+ //# sourceMappingURL=provider-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-query.js","sourceRoot":"","sources":["../../src/warp/provider-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGjE,OAAO,EACL,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAG5B,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAgC,EAChC,aAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACtE,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;QACzB,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAC1B,CAAC;IACF,MAAM,CAAC,iBAAiB,CAAC,GAAG,kBAAkB,CAAC;IAC/C,MAAM,CACJ,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,EACpD,iEAAiE,aAAa,WAAW,kBAAkB,CAAC,MAAM,KAAK,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CACjK,CAAC;IACF,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,wBAAwB,CACtC,OAAgB,EAChB,SAAiB,EACjB,QAAgB;IAEhB,MAAM,CACJ,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QACpB,OAAO,CAAC,MAAM,GAAG,CAAC;QAClB,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAChC,iBAAiB,SAAS,IAAI,QAAQ,2CAA2C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAC3G,CAAC;IACF,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAgC,EAChC,SAAiB,EACjB,QAAgB,EAChB,MAAM,GAAa,EAAE;IAErB,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,IAAI,YAAY,SAAS,SAAS,QAAQ,EAAE,CAAC;IACvE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,UAAU,CACf,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI;SACL,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,8BAA8B,GAAG,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC;QACpE,MAAM,OAAO,GAAY,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1C,OAAO,wBAAwB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC,EACD,cAAc,EACd,cAAc,CACf,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,CAAC,KAAK,EAAE,uCAAuC,GAAG,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IACzB,MAAM,CAAC,MAAM,EAAE,uCAAuC,GAAG,EAAE,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAgC,EAChC,cAAsB;IAEtB,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1D,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC;QACpD,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,CAAC;QACtD,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAC;KACzD,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,CACJ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EACvB,kCAAkC,cAAc,UAAU,WAAW,EAAE,CACxE,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC;QAClC,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC;QACtC,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAyB,EACzB,UAAgC,EAChC,YAAoB;IAEpB,MAAM,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,aAAa,GAAqD,EAAE,CAAC;IAC3E,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,sBAAsB,CAC7D,SAAS,EACT,sBAAsB,EACtB,MAAM,CACP,CAAC;IAEF,IAAI,CAAC,eAAe;QAAE,OAAO,aAAa,CAAC;IAE3C,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,CACJ,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC,EACzC,uEAAuE,YAAY,YAAY,eAAe,EAAE,CACjH,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,0BAA0B,CAC3D,SAAS,EACT,oBAAoB,EACpB,GAAG,CAAC,KAAK,CACV,CAAC;QACF,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,sBAAsB,CAC/D,SAAS,EACT,gBAAgB,EAChB,SAAS,CACV,CAAC;QACF,IAAI,CAAC,iBAAiB;YAAE,SAAS;QAEjC,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5E,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChD,IAAI,aAAa,CAAC,QAAQ,CAAC;YAAE,SAAS;QAEtC,MAAM,CACJ,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,EACxC,iEAAiE,QAAQ,YAAY,OAAO,YAAY,CAAC,WAAW,CAAC,EAAE,CACxH,CAAC;QACF,aAAa,CAAC,QAAQ,CAAC,GAAG;YACxB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACzE,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type ArtifactDeployed, type ArtifactNew, type ArtifactReader, type ArtifactWriter } from '@recoillink/provider-sdk/artifact';
2
+ import { type DeployedWarpAddress, type RawSyntheticWarpArtifactConfig } from '@recoillink/provider-sdk/warp';
3
+ import type { AnyAleoNetworkClient } from '../clients/base.js';
4
+ import type { AleoSigner } from '../clients/signer.js';
5
+ import { type AleoReceipt, type AnnotatedAleoTransaction, type OnChainArtifactManagers } from '../utils/types.js';
6
+ export declare class AleoSyntheticTokenReader implements ArtifactReader<RawSyntheticWarpArtifactConfig, DeployedWarpAddress> {
7
+ protected readonly aleoClient: AnyAleoNetworkClient;
8
+ protected readonly onChainArtifactManagers: OnChainArtifactManagers;
9
+ constructor(aleoClient: AnyAleoNetworkClient, onChainArtifactManagers: OnChainArtifactManagers);
10
+ read(address: string): Promise<ArtifactDeployed<RawSyntheticWarpArtifactConfig, DeployedWarpAddress>>;
11
+ }
12
+ export declare class AleoSyntheticTokenWriter extends AleoSyntheticTokenReader implements ArtifactWriter<RawSyntheticWarpArtifactConfig, DeployedWarpAddress> {
13
+ private readonly signer;
14
+ constructor(aleoClient: AnyAleoNetworkClient, signer: AleoSigner, onChainArtifactManagers: OnChainArtifactManagers);
15
+ create(artifact: ArtifactNew<RawSyntheticWarpArtifactConfig>): Promise<[
16
+ ArtifactDeployed<RawSyntheticWarpArtifactConfig, DeployedWarpAddress>,
17
+ AleoReceipt[]
18
+ ]>;
19
+ update(artifact: ArtifactDeployed<RawSyntheticWarpArtifactConfig, DeployedWarpAddress>): Promise<AnnotatedAleoTransaction[]>;
20
+ }
21
+ //# sourceMappingURL=synthetic-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthetic-token.d.ts","sourceRoot":"","sources":["../../src/warp/synthetic-token.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,EAEpC,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAE7B,MAAM,mBAAmB,CAAC;AAe3B,qBAAa,wBAAyB,YAAW,cAAc,CAC7D,8BAA8B,EAC9B,mBAAmB,CACpB;IAEG,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,oBAAoB;IACnD,SAAS,CAAC,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB;IAFrE,YACqB,UAAU,EAAE,oBAAoB,EAChC,uBAAuB,EAAE,uBAAuB,EACjE;IAEE,IAAI,CACR,OAAO,EAAE,MAAM,GACd,OAAO,CACR,gBAAgB,CAAC,8BAA8B,EAAE,mBAAmB,CAAC,CACtE,CAsCA;CACF;AAED,qBAAa,wBACX,SAAQ,wBACR,YACE,cAAc,CAAC,8BAA8B,EAAE,mBAAmB,CAAC;IAInE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFzB,YACE,UAAU,EAAE,oBAAoB,EACf,MAAM,EAAE,UAAU,EACnC,uBAAuB,EAAE,uBAAuB,EAGjD;IAEK,MAAM,CACV,QAAQ,EAAE,WAAW,CAAC,8BAA8B,CAAC,GACpD,OAAO,CACR;QACE,gBAAgB,CAAC,8BAA8B,EAAE,mBAAmB,CAAC;QACrE,WAAW,EAAE;KACd,CACF,CA4EA;IAEK,MAAM,CACV,QAAQ,EAAE,gBAAgB,CACxB,8BAA8B,EAC9B,mBAAmB,CACpB,GACA,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAMrC;CACF"}
@@ -0,0 +1,108 @@
1
+ import { ArtifactState, } from '@recoillink/provider-sdk/artifact';
2
+ import { TokenType, } from '@recoillink/provider-sdk/warp';
3
+ import { assert } from '@recoillink/utils';
4
+ import { toAleoAddress } from '../utils/helper.crypto.js';
5
+ import { fromAleoAddress, getProgramSuffix } from '../utils/helper.js';
6
+ import { aleoWarpFieldsToArtifactApi, } from '../utils/types.js';
7
+ import { getSyntheticWarpTokenConfig } from './warp-query.js';
8
+ import { getCreateSyntheticTokenTx, scaleToRemoteDecimals, getPostDeploymentUpdateTxs, getWarpTokenUpdateTxs, } from './warp-tx.js';
9
+ function withErrorContext(context, error) {
10
+ const message = error instanceof Error ? error.message : String(error);
11
+ return new Error(`${context}: ${message}`);
12
+ }
13
+ export class AleoSyntheticTokenReader {
14
+ aleoClient;
15
+ onChainArtifactManagers;
16
+ constructor(aleoClient, onChainArtifactManagers) {
17
+ this.aleoClient = aleoClient;
18
+ this.onChainArtifactManagers = onChainArtifactManagers;
19
+ }
20
+ async read(address) {
21
+ // Fetch token config using internal Aleo types
22
+ const token = await getSyntheticWarpTokenConfig(this.aleoClient, address, this.onChainArtifactManagers.ismManagerAddress, this.onChainArtifactManagers.hookManagerAddress).catch((error) => {
23
+ throw withErrorContext(`Failed to read synthetic warp token ${address} (ismManager=${this.onChainArtifactManagers.ismManagerAddress}, hookManager=${this.onChainArtifactManagers.hookManagerAddress})`, error);
24
+ });
25
+ // Convert to provider-sdk artifact format
26
+ const { destinationGas, remoteRouters, interchainSecurityModule, hook } = aleoWarpFieldsToArtifactApi(token);
27
+ const config = {
28
+ type: TokenType.synthetic,
29
+ owner: token.owner,
30
+ mailbox: token.mailbox,
31
+ destinationGas,
32
+ remoteRouters,
33
+ interchainSecurityModule,
34
+ hook,
35
+ name: token.name,
36
+ symbol: token.symbol,
37
+ decimals: token.decimals,
38
+ scale: token.scale,
39
+ };
40
+ return {
41
+ artifactState: ArtifactState.DEPLOYED,
42
+ config,
43
+ deployed: {
44
+ address,
45
+ },
46
+ };
47
+ }
48
+ }
49
+ export class AleoSyntheticTokenWriter extends AleoSyntheticTokenReader {
50
+ signer;
51
+ constructor(aleoClient, signer, onChainArtifactManagers) {
52
+ super(aleoClient, onChainArtifactManagers);
53
+ this.signer = signer;
54
+ }
55
+ async create(artifact) {
56
+ const { config } = artifact;
57
+ const remoteDecimals = scaleToRemoteDecimals(config.decimals, config.scale);
58
+ const allReceipts = [];
59
+ const signerAddress = this.signer.getSignerAddress();
60
+ // Get mailbox suffix for deployment
61
+ const { programId: mailboxProgramId } = fromAleoAddress(config.mailbox);
62
+ const mailboxSuffix = getProgramSuffix(mailboxProgramId);
63
+ // Resolve token suffix from preferred setting or generate a collision-free one
64
+ const tokenSuffix = await this.signer.getWarpTokenSuffix('synthetic');
65
+ // Deploy synthetic token program
66
+ const programs = await this.signer
67
+ .deployProgram('hyp_synthetic', mailboxSuffix, tokenSuffix)
68
+ .catch((error) => {
69
+ throw withErrorContext(`Failed to deployProgram(hyp_synthetic) for mailbox ${config.mailbox} (signer=${signerAddress})`, error);
70
+ });
71
+ const tokenProgramId = programs['hyp_synthetic'];
72
+ assert(tokenProgramId, 'Expected synthetic token program to be deployed but none was found in deployment mapping');
73
+ // Initialize token
74
+ const initTx = getCreateSyntheticTokenTx(tokenProgramId, config.name, config.symbol, config.decimals, remoteDecimals);
75
+ const initReceipt = await this.signer
76
+ .sendAndConfirmTransaction(initTx)
77
+ .catch((error) => {
78
+ throw withErrorContext(`Failed to initialize synthetic warp token program ${tokenProgramId} (signer=${signerAddress})`, error);
79
+ });
80
+ allReceipts.push(initReceipt);
81
+ const tokenAddress = toAleoAddress(tokenProgramId);
82
+ // Perform post-deployment updates (ISM setup and router enrollment)
83
+ const postDeploymentTxs = getPostDeploymentUpdateTxs(tokenAddress, config);
84
+ for (const tx of postDeploymentTxs) {
85
+ const receipt = await this.signer
86
+ .sendAndConfirmTransaction(tx)
87
+ .catch((error) => {
88
+ throw withErrorContext(`Failed post-deployment step ${tx.programName}.${tx.functionName} for synthetic warp token ${tokenAddress} (signer=${signerAddress})`, error);
89
+ });
90
+ allReceipts.push(receipt);
91
+ }
92
+ const deployedArtifact = {
93
+ artifactState: ArtifactState.DEPLOYED,
94
+ config: artifact.config,
95
+ deployed: {
96
+ address: tokenAddress,
97
+ },
98
+ };
99
+ return [deployedArtifact, allReceipts];
100
+ }
101
+ async update(artifact) {
102
+ // Read current state from chain
103
+ const currentArtifact = await this.read(artifact.deployed.address);
104
+ // Generate update transactions
105
+ return getWarpTokenUpdateTxs(artifact, currentArtifact);
106
+ }
107
+ }
108
+ //# sourceMappingURL=synthetic-token.js.map